summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChet Ramey <chet.ramey@case.edu>2011-11-23 19:01:09 -0500
committerChet Ramey <chet.ramey@case.edu>2011-11-23 19:01:09 -0500
commitabde3125f6228a63e22de708b9edaef62cab0ac3 (patch)
tree74e2d30a4ac48b1787dfd0621e384a84c3c47e94
parentf8d82ba21c017f4d23a0ee77ecb13d8d3ff1aab7 (diff)
downloadreadline-abde3125f6228a63e22de708b9edaef62cab0ac3.tar.gz
Readline-4.2a import
-rw-r--r--CHANGELOG145
-rw-r--r--CHANGES79
-rw-r--r--INSTALL266
-rw-r--r--MANIFEST1
-rw-r--r--Makefile.in48
-rw-r--r--README10
-rw-r--r--aclocal.m41429
-rw-r--r--ansi_stdlib.h16
-rw-r--r--bind.c66
-rw-r--r--callback.c7
-rw-r--r--chardefs.h79
-rw-r--r--compat.c24
-rw-r--r--complete.c131
-rw-r--r--config.h.in30
-rwxr-xr-xconfigure5666
-rw-r--r--configure.in47
-rw-r--r--display.c44
-rw-r--r--doc/Makefile.in75
-rw-r--r--doc/history.dvibin48832 -> 48812 bytes
-rw-r--r--doc/history.html1680
-rw-r--r--doc/history.info10
-rw-r--r--doc/history.ps23
-rw-r--r--doc/hstech.texinfo2
-rw-r--r--doc/manvers.texinfo10
-rw-r--r--doc/readline.0790
-rw-r--r--doc/readline.325
-rw-r--r--doc/readline.dvibin224620 -> 228484 bytes
-rw-r--r--doc/readline.html5020
-rw-r--r--doc/readline.info146
-rw-r--r--doc/readline.ps4165
-rw-r--r--doc/readline_3.ps1091
-rw-r--r--doc/rltech.texinfo27
-rw-r--r--doc/rluser.texinfo36
-rw-r--r--doc/rluserman.dvibin59516 -> 60460 bytes
-rw-r--r--doc/rluserman.html1727
-rw-r--r--doc/rluserman.info62
-rw-r--r--doc/rluserman.ps753
-rwxr-xr-xdoc/texi2dvi732
-rwxr-xr-xdoc/texi2html4930
-rw-r--r--examples/Makefile.in3
-rw-r--r--examples/fileman.c22
-rw-r--r--examples/readlinebuf.h139
-rw-r--r--funmap.c2
-rw-r--r--histexpand.c55
-rw-r--r--histfile.c8
-rw-r--r--history.c6
-rw-r--r--history.h60
-rw-r--r--histsearch.c2
-rw-r--r--input.c13
-rw-r--r--isearch.c47
-rw-r--r--keymaps.h14
-rw-r--r--kill.c9
-rw-r--r--macro.c4
-rw-r--r--nls.c14
-rw-r--r--parens.c2
-rw-r--r--readline.c99
-rw-r--r--readline.h485
-rw-r--r--rldefs.h13
-rw-r--r--rlprivate.h152
-rw-r--r--rlshell.h10
-rw-r--r--rlstdc.h24
-rw-r--r--rltty.c36
-rw-r--r--rltypedefs.h34
-rw-r--r--savestring.c9
-rw-r--r--search.c11
-rw-r--r--shell.c30
-rw-r--r--shlib/Makefile.in22
-rw-r--r--signals.c2
-rwxr-xr-xsupport/config.guess12
-rwxr-xr-xsupport/mkdist2
-rwxr-xr-xsupport/shlib-install16
-rwxr-xr-xsupport/shobj-conf83
-rw-r--r--terminal.c9
-rw-r--r--tilde.c59
-rw-r--r--tilde.h30
-rw-r--r--undo.c1
-rw-r--r--util.c74
-rw-r--r--vi_mode.c54
-rw-r--r--xmalloc.c16
-rw-r--r--xmalloc.h6
80 files changed, 20071 insertions, 11010 deletions
diff --git a/CHANGELOG b/CHANGELOG
index ab60559..4453936 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -463,3 +463,148 @@ configure.in
4/5
---
[readline-4.2 frozen]
+
+ 4/9
+ ---
+[readline-4.2 released]
+
+ 5/2
+ ---
+Makefile.in,{doc,examples,shlib}/Makefile.in
+ - added support for DESTDIR installation root prefix, to support
+ building packages
+
+doc/Makefile.in
+ - add an info `dir' file entry for rluserman.info on `make install'
+ - change man1ext to `.1' and man3ext to `.3'
+ - install man pages with a $(man3ext) extension in the target directory
+ - add support for installing html documentation if `htmldir' has a
+ value
+
+Makefile.in
+ - on `make install', install from the `shlib' directory, too
+ - on `make uninstall', uninstall in the `doc' and `shlib'
+ subdirectories, too
+
+support/shlib-install
+ - add `freebsdelf*', `freebsdaout*', Hurd, `sysv4*', `sysv5*', `dgux*'
+ targets for symlink creation
+
+ 5/7
+ ---
+configure.in, config.h.in
+ - check for <limits.h>, define HAVE_LIMITS_H if found
+
+ 5/8
+ ---
+aclocal.m4
+ - pick up change to BASH_CHECK_LIB_TERMCAP that adds check for
+ libtinfo (termcap-specific portion of ncurses-5.2)
+
+ 5/9
+ ---
+configure.in
+ - call AC_C_CONST to find out whether or not the compiler supports
+ `const'
+
+config.h.in
+ - placeholder for `const' define, if any
+
+ 5/10
+ ----
+configure.in
+ - fix AC_CHECK_PROG(ar, ...) test to specify right value for the
+ case where ar is not found; should produce a better error message
+
+ 5/14
+ ----
+configure.in,config.h.in
+ - check for vsnprintf, define HAVE_VSNPRINTF if found
+
+ 5/21
+ ----
+configure.in, config.h.in
+ - add checks for size_t, ssize_t
+
+ 5/30
+ ----
+configure.in
+ - update autoconf to version 2.50, use in AC_PREREQ
+ - changed AC_INIT to new flavor
+ - added AC_CONFIG_SRCDIR
+ - AC_CONFIG_HEADER -> AC_CONFIG_HEADERS
+ - call AC_C_PROTOTYPES
+ - AC_RETSIGTYPE -> AC_TYPE_SIGNAL
+
+ 8/22
+ ----
+configure.in
+ - updated the version number to 4.2a
+
+Makefile.in,shlib/Makefile.in
+ - make sure tilde.o is built -DREADLINE_LIBRARY when being built as
+ part of the standalone library, so it picks up the right include
+ files
+
+ 8/23
+ ----
+support/shlib-install
+ - support for Darwin/MacOS X shared library installation
+
+ 9/24
+ ----
+examples/readlinebuf.h
+ - a new file, a C++ streambuf interface that uses readline for I/O.
+ Donated by Dimitris Vyzovitis <vyzo@media.mit.edu>
+
+ 10/9
+ ----
+configure.in
+ - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ
+
+[readline-4.2a-beta1 frozen]
+
+ 10/15
+ -----
+configure.in, config.h.in
+ - check for <memory.h>, define HAVE_MEMORY_H if found
+ - check for <strings.h>, define HAVE_STRINGS_H if found
+
+ 10/18
+ -----
+configure.in, config.h.in
+ - check for isascii, define HAVE_ISASCII if found
+
+configure.in
+ - changed the macro names from bash as appropriate:
+ BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE
+ BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS
+ BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T
+
+ 10/22
+ -----
+configure.in
+ - check for isxdigit with AC_CHECK_FUNCS
+
+config.h.in
+ - new define for HAVE_ISXDIGIT
+
+ 10/29
+ -----
+configure.in, config.h.in
+ - check for strpbrk with AC_CHECK_FUNCS, define HAVE_STRPBRK if found
+
+ 11/1
+ ----
+Makefile.in
+ - make sure DESTDIR is passed to install and uninstall makes in
+ subdirectories
+ - when saving old copies of installed libraries, make sure we use
+ DESTDIR for the old installation tree
+
+[readline-4.2a-rc1 frozen]
+
+ 11/2
+ ----
+Makefile.in, shlib/Makefile.in
+ - don't put -I$(includedir) into CFLAGS
diff --git a/CHANGES b/CHANGES
index 4f02f77..8197ca6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,82 @@
+This document details the changes between this version, readline-4.2a,
+and the previous version, readline-4.2.
+
+1. Changes to Readline
+
+a. More `const' and type casting fixes.
+
+b. Changed rl_message() to use vsnprintf(3) (if available) to fix buffer
+ overflow problems.
+
+c. The completion code no longer appends a `/' or ` ' to a match when
+ completing a symbolic link that resolves to a directory name, unless
+ the match does not add anything to the word being completed. This
+ means that a tab will complete the word up to the full name, but not
+ add anything, and a subsequent tab will add a slash.
+
+d. Fixed a trivial typo that made the vi-mode `dT' command not work.
+
+e. Fixed the tty code so that ^S and ^Q can be inserted with rl_quoted_insert.
+
+f. Fixed the tty code so that ^V works more than once.
+
+g. Changed the use of __P((...)) for function prototypes to PARAMS((...))
+ because the use of __P in typedefs conflicted g++ and glibc.
+
+h. The completion code now attempts to do a better job of preserving the
+ case of the word the user typed if ignoring case in completions.
+
+i. Readline defaults to not echoing the input and lets the terminal
+ initialization code enable echoing if there is a controlling terminal.
+
+j. The key binding code now processes only two hex digits after a `\x'
+ escape sequence, and the documentation was changed to note that the
+ octal and hex escape sequences result in an eight-bit value rather
+ than strict ASCII.
+
+k. Fixed a few places where negative array subscripts could have occurred.
+
+l. Fixed the vi-mode code to use a better method to determine the bounds of
+ the array used to hold the marks, and to avoid out-of-bounds references.
+
+m. Fixed the defines in chardefs.h to work better when chars are signed.
+
+n. Fixed configure.in to use the new names for bash autoconf macros.
+
+o. Readline no longer attempts to define its own versions of some ctype
+ macros if they are implemented as functions in libc but not as macros in
+ <ctype.h>.
+
+p. Fixed a problem where rl_backward could possibly set point to before
+ the beginning of the line.
+
+q. Fixed Makefile to not put -I/usr/include into CFLAGS, since it can cause
+ include file problems.
+
+2. New Features in Readline
+
+a. Added extern declaration for rl_get_termcap to readline.h, making it a
+ public function (it was always there, just not in readline.h).
+
+b. New #defines in readline.h: RL_READLINE_VERSION, currently 0x0402,
+ RL_VERSION_MAJOR, currently 4, and RL_VERSION_MINOR, currently 2.
+
+c. New readline variable: rl_readline_version, mirrors RL_READLINE_VERSION.
+
+d. New bindable boolean readline variable: match-hidden-files. Controls
+ completion of files beginning with a `.' (on Unix). Enabled by default.
+
+e. The history expansion code now allows any character to terminate a
+ `:first-' modifier, like csh.
+
+f. The incremental search code remembers the last search string and uses
+ it if ^R^R is typed without a search string.
+
+h. New bindable variable `history-preserve-point'. If set, the history
+ code attempts to place the user at the same location on each history
+ line retrived with previous-history or next-history.
+
+-------------------------------------------------------------------------------
This document details the changes between this version, readline-4.2,
and the previous version, readline-4.1.
diff --git a/INSTALL b/INSTALL
index 95d84c8..c503ccd 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,73 +1,78 @@
Basic Installation
==================
- These are generic installation instructions.
-
- The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions. Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, a file
-`config.cache' that saves the results of its tests to speed up
-reconfiguring, and a file `config.log' containing compiler output
-(useful mainly for debugging `configure').
-
- If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release. If at some point `config.cache'
-contains results you don't want to keep, you may remove or edit it.
-
- The file `configure.in' is used to create `configure' by a program
-called `autoconf'. You only need `configure.in' if you want to change
-it or regenerate `configure' using a newer version of `autoconf'.
-
-The simplest way to compile this package is:
-
- 1. `cd' to the directory containing the package's source code and type
- `./configure' to configure the package for your system. If you're
+These are installation instructions for Readline 4.2a.
+
+The simplest way to compile readline is:
+
+ 1. `cd' to the directory containing the readline source code and type
+ `./configure' to configure readline for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
- Running `configure' takes awhile. While running, it prints some
+ Running `configure' takes some time. While running, it prints some
messages telling which features it is checking for.
- 2. Type `make' to compile the package.
-
- 3. Optionally, type `make check' to run any self-tests that come with
- the package.
+ 2. Type `make' to compile readline and build the static libreadline
+ and libhistory libraries. See below for instructions on compiling
+ the other parts of the distribution. Typing `make everything' will
+ cause the static and shared libraries (if supported) and the example
+ programs to be built.
- 4. Type `make install' to install the programs and any data files and
- documentation.
+ 3. Type `make install' to install the static libreadline and libhistory
+ libraries, the readline include files, and the documentation.
- 5. You can remove the program binaries and object files from the
- source code directory by typing `make clean'. To also remove the
- files that `configure' created (so you can compile the package for
+ 4. You can remove the created libraries and object files from the
+ build directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile readline for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
+ for the readline developers, and should be used with care.
+
+The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It
+uses those values to create a `Makefile' in the build directory,
+and Makefiles in the `doc', `shlib', and `examples'
+subdirectories. It also creates a `config.h' file containing
+system-dependent definitions. Finally, it creates a shell script
+`config.status' that you can run in the future to recreate the
+current configuration, a file `config.cache' that saves the
+results of its tests to speed up reconfiguring, and a file
+`config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+If you need to do unusual things to compile readline, please try
+to figure out how `configure' could check whether to do them, and
+mail diffs or instructions to <bug-readline@gnu.org> so they can
+be considered for the next release. If at some point
+`config.cache' contains results you don't want to keep, you may
+remove or edit it.
+
+The file `configure.in' is used to create `configure' by a
+program called `autoconf'. You only need `configure.in' if you
+want to change it or regenerate `configure' using a newer version
+of `autoconf'.
Compilers and Options
=====================
- Some systems require unusual options for compilation or linking that
+Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
+
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
+
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
- You can compile the package for more than one kind of computer at the
+You can compile readline for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
@@ -75,80 +80,59 @@ directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
- If you have to use a `make' that does not supports the `VPATH'
-variable, you have to compile the package for one architecture at a time
-in the source code directory. After you have installed the package for
-one architecture, use `make distclean' before reconfiguring for another
-architecture.
+If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile readline for one architecture at a
+time in the source code directory. After you have installed
+readline for one architecture, use `make distclean' before
+reconfiguring for another architecture.
Installation Names
==================
- By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PATH'.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PATH', the package will use
-PATH as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-Optional Features
-=================
-
- Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System). The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
+By default, `make install' will install the readline libraries in
+`/usr/local/lib', the include files in
+`/usr/local/include/readline', the man pages in `/usr/local/man',
+and the info files in `/usr/local/info'. You can specify an
+installation prefix other than `/usr/local' by giving `configure'
+the option `--prefix=PATH' or by supplying a value for the
+DESTDIR variable when running `make install'.
+
+You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.
+If you give `configure' the option `--exec-prefix=PATH', the
+readline Makefiles will use PATH as the prefix for installing the
+libraries. Documentation and other data files will still use the
+regular prefix.
Specifying the System Type
==========================
- There may be some features `configure' can not figure out
-automatically, but needs to determine by the type of host the package
-will run on. Usually `configure' can figure that out, but if it prints
-a message saying it can not guess the host type, give it the
-`--host=TYPE' option. TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name with three fields:
- CPU-COMPANY-SYSTEM
+There may be some features `configure' can not figure out
+automatically, but need to determine by the type of host readline
+will run on. Usually `configure' can figure that out, but if it
+prints a message saying it can not guess the host type, give it
+the `--host=TYPE' option. TYPE can either be a short name for
+the system type, such as `sun4', or a canonical name with three
+fields: CPU-COMPANY-SYSTEM (e.g., i386-unknown-freebsd4.2).
-See the file `config.sub' for the possible values of each field. If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the host type.
-
- If you are building compiler tools for cross-compiling, you can also
-use the `--target=TYPE' option to select the type of system they will
-produce code for and the `--build=TYPE' option to select the type of
-system on which you are compiling the package.
+See the file `config.sub' for the possible values of each field.
Sharing Defaults
================
- If you want to set default values for `configure' scripts to share,
+If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
+A warning: the readline `configure' looks for a site script, but not
+all `configure' scripts do.
Operation Controls
==================
- `configure' recognizes the following options to control how it
+`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
@@ -174,3 +158,99 @@ operates.
`configure' also accepts some other, not widely useful, options.
+Optional Features
+=================
+
+The readline `configure' takes a single `--with-PACKAGE' option:
+
+`--with-curses'
+ This tells readline that it can find the termcap library functions
+ (tgetent, et al.) in the curses library, rather than a separate
+ termcap library. Readline uses the termcap functions, but does not
+ link with the termcap or curses library itself, allowing applications
+ which link with readline the to choose an appropriate library.
+ This option tells readline to link the example programs with the
+ curses library rather than libtermcap.
+
+Shared Libraries
+================
+
+There is support for building shared versions of the readline and
+history libraries. The configure script creates a Makefile in
+the `shlib' subdirectory, and typing `make shared' will cause
+shared versions of the readline and history libraries to be built
+on supported platforms. `make everything' will run `make shared'
+after building the static libraries.
+
+Configure calls the script support/shobj-conf to test whether or
+not shared library creation is supported and to generate the values
+of variables that are substituted into shlib/Makefile. If you
+try to build shared libraries on an unsupported platform, `make'
+will display a message asking you to update support/shobj-conf for
+your platform.
+
+If you need to update support/shobj-conf, you will need to create
+a `stanza' for your operating system and compiler. The script uses
+the value of host_os and ${CC} as determined by configure. For
+instance, FreeBSD 4.2 with any version of gcc is identified as
+`freebsd4.2-gcc*'.
+
+In the stanza for your operating system-compiler pair, you will need to
+define several variables. They are:
+
+SHOBJ_CC The C compiler used to compile source files into shareable
+ object files. This is normally set to the value of ${CC}
+ by configure, and should not need to be changed.
+
+SHOBJ_CFLAGS Flags to pass to the C compiler ($SHOBJ_CC) to create
+ position-independent code. If you are using gcc, this
+ should probably be set to `-fpic'.
+
+SHOBJ_LD The link editor to be used to create the shared library from
+ the object files created by $SHOBJ_CC. If you are using
+ gcc, a value of `gcc' will probably work.
+
+SHOBJ_LDFLAGS Flags to pass to SHOBJ_LD to enable shared object creation.
+ If you are using gcc, `-shared' may be all that is necessary.
+ These should be the flags needed for generic shared object
+ creation.
+
+SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library
+ creation. Many systems use the -R option to the link
+ editor to embed a path within the library for run-time
+ library searches. A reasonable value for such systems would
+ be `-R$(libdir)'.
+
+SHLIB_LIBS Any additional libraries that shared libraries should be
+ linked against when they are created.
+
+SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when
+ generating the filename of the shared library. Many systems
+ use `so'; HP-UX uses `sl'.
+
+SHLIB_LIBVERSION The string to append to the filename to indicate the version
+ of the shared library. It should begin with $(SHLIB_LIBSUFF),
+ and possibly include version information that allows the
+ run-time loader to load the version of the shared library
+ appropriate for a particular program. Systems using shared
+ libraries similar to SunOS 4.x use major and minor library
+ version numbers; for those systems a value of
+ `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' is appropriate.
+ Systems based on System V Release 4 don't use minor version
+ numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems.
+ Other Unix versions use different schemes.
+
+SHLIB_STATUS Set this to `supported' when you have defined the other
+ necessary variables. Make uses this to determine whether
+ or not shared library creation should be attempted.
+
+You should look at the existing stanzas in support/shobj-conf for ideas.
+
+Once you have updated support/shobj-conf, re-run configure and type
+`make shared'. The shared libraries will be created in the shlib
+subdirectory.
+
+Since shared libraries are not created on all platforms, `make install'
+will not automatically install the shared libraries. To install them,
+change the current directory to shlib and type `make install'. Running
+`make install-shared' from the top-level build directory will also work.
diff --git a/MANIFEST b/MANIFEST
index e80aba7..7398d15 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -94,6 +94,7 @@ examples/Makefile.in f
examples/excallback.c f
examples/fileman.c f
examples/manexamp.c f
+examples/readlinebuf.h f
examples/rlfe.c f
examples/rltest.c f
examples/rl.c f
diff --git a/Makefile.in b/Makefile.in
index 4caf6a8..178dddb 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -50,6 +50,9 @@ infodir = @infodir@
man3dir = $(mandir)/man3
+# Support an alternate destination root directory for package building
+DESTDIR =
+
# Programs to make tags files.
ETAGS = etags -tw
CTAGS = ctags -tw
@@ -64,7 +67,7 @@ LOCAL_DEFS = @LOCAL_DEFS@
TERMCAP_LIB = @TERMCAP_LIB@
# For libraries which include headers from other libraries.
-INCLUDES = -I. -I$(srcdir) -I$(includedir)
+INCLUDES = -I. -I$(srcdir)
XCCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES)
CCFLAGS = $(XCCFLAGS) $(LOCAL_CFLAGS) $(CFLAGS)
@@ -72,7 +75,7 @@ CCFLAGS = $(XCCFLAGS) $(LOCAL_CFLAGS) $(CFLAGS)
# could add -Werror here
GCC_LINT_FLAGS = -ansi -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wwrite-strings -Wstrict-prototypes \
- -Wmissing-prototypes -Wno-implicit
+ -Wmissing-prototypes -Wno-implicit -pedantic
GCC_LINT_CFLAGS = $(XCCFLAGS) $(GCC_LINT_FLAGS) @CFLAGS@ @LOCAL_CFLAGS@
.c.o:
@@ -141,6 +144,12 @@ libhistory.a: $(HISTOBJ) xmalloc.o
$(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o
-test -n "$(RANLIB)" && $(RANLIB) $@
+# Since tilde.c is shared between readline and bash, make sure we compile
+# it with the right flags when it's built as part of readline
+tilde.o: tilde.c
+ rm -f $@
+ $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -c $(srcdir)/tilde.c
+
readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a
$(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a ${TERMCAP_LIB}
@@ -184,40 +193,47 @@ force:
install-headers: installdirs ${INSTALLED_HEADERS}
for f in ${INSTALLED_HEADERS}; do \
- $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/readline ; \
+ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/readline ; \
done
uninstall-headers:
- -test -n "$(includedir)" && cd $(includedir)/readline && \
+ -test -n "$(includedir)" && cd $(DESTDIR)$(includedir)/readline && \
${RM} ${INSTALLED_HEADERS}
maybe-uninstall-headers: uninstall-headers
install: installdirs $(STATIC_LIBS) install-headers
- -$(MV) $(libdir)/libreadline.a $(libdir)/libreadline.old
- $(INSTALL_DATA) libreadline.a $(libdir)/libreadline.a
- -test -n "$(RANLIB)" && $(RANLIB) $(libdir)/libreadline.a
- -$(MV) $(libdir)/libhistory.a $(libdir)/libhistory.old
- $(INSTALL_DATA) libhistory.a $(libdir)/libhistory.a
- -test -n "$(RANLIB)" && $(RANLIB) $(libdir)/libhistory.a
+ -$(MV) $(DESTDIR)$(libdir)/libreadline.a $(DESTDIR)$(libdir)/libreadline.old
+ $(INSTALL_DATA) libreadline.a $(DESTDIR)$(libdir)/libreadline.a
+ -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libreadline.a
+ -$(MV) $(DESTDIR)$(libdir)/libhistory.a $(DESTDIR)$(libdir)/libhistory.old
+ $(INSTALL_DATA) libhistory.a $(DESTDIR)$(libdir)/libhistory.a
+ -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libhistory.a
-( if test -d doc ; then \
cd doc && \
- ${MAKE} ${MFLAGS} infodir=$(infodir) $@; \
+ ${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} $@; \
fi )
+ -( cd shlib ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install )
installdirs: $(srcdir)/support/mkdirs
- -$(SHELL) $(srcdir)/support/mkdirs $(includedir) \
- $(includedir)/readline $(libdir) $(infodir) $(man3dir)
+ -$(SHELL) $(srcdir)/support/mkdirs $(DESTDIR)$(includedir) \
+ $(DESTDIR)$(includedir)/readline $(DESTDIR)$(libdir) \
+ $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir)
uninstall: uninstall-headers
- -test -n "$(libdir)" && cd $(libdir) && \
+ -test -n "$(DESTDIR)$(libdir)" && cd $(DESTDIR)$(libdir) && \
${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS)
+ -( if test -d doc ; then \
+ cd doc && \
+ ${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} $@; \
+ fi )
+ -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall )
install-shared: installdirs install-headers shared
- -( cd shlib ; ${MAKE} ${MFLAGS} install )
+ -( cd shlib ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install )
uninstall-shared: maybe-uninstall-headers
- -( cd shlib; ${MAKE} ${MFLAGS} uninstall )
+ -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall )
TAGS: force
$(ETAGS) $(CSOURCES) $(HSOURCES)
diff --git a/README b/README
index 53680c3..4a13747 100644
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
Introduction
============
-This is the Gnu Readline library, version 4.2.
+This is the Gnu Readline library, version 4.2a.
The Readline library provides a set of functions for use by applications
that allow users to edit command lines as they are typed in. Both
@@ -16,8 +16,8 @@ may be used without Readline in applications which desire its
capabilities.
The Readline library is free software, distributed under the terms of
-the GNU Public License, version 2. For more information, see the file
-COPYING.
+the [GNU] General Public License, version 2. For more information, see
+the file COPYING.
To build the library, try typing `./configure', then `make'. The
configuration process is automated, so no further intervention should
@@ -67,8 +67,8 @@ your platform.
If you need to update support/shobj-conf, you will need to create
a `stanza' for your operating system and compiler. The script uses
the value of host_os and ${CC} as determined by configure. For
-instance, FreeBSD 4.2 using the ELF object file format with any
-version of gcc is identified as `freebsdelf4.2-gcc*'.
+instance, FreeBSD 4.2 with any version of gcc is identified as
+`freebsd4.2-gcc*'.
In the stanza for your operating system-compiler pair, you will need to
define several variables. They are:
diff --git a/aclocal.m4 b/aclocal.m4
index 8c977c1..22fe7fe 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -3,153 +3,82 @@ dnl Bash specific tests
dnl
dnl Some derived from PDKSH 5.1.3 autoconf tests
dnl
-dnl
-dnl Check if dup2() does not clear the close on exec flag
-dnl
-AC_DEFUN(BASH_DUP2_CLOEXEC_CHECK,
-[AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag)
-AC_CACHE_VAL(bash_cv_dup2_broken,
-[AC_TRY_RUN([
-#include <sys/types.h>
-#include <fcntl.h>
+
+AC_DEFUN(BASH_C_LONG_LONG,
+[AC_CACHE_CHECK(for long long, ac_cv_c_long_long,
+[if test "$GCC" = yes; then
+ ac_cv_c_long_long=yes
+else
+AC_TRY_RUN([
+int
main()
{
- int fd1, fd2, fl;
- fd1 = open("/dev/null", 2);
- if (fcntl(fd1, 2, 1) < 0)
- exit(1);
- fd2 = dup2(fd1, 1);
- if (fd2 < 0)
- exit(2);
- fl = fcntl(fd2, 1, 0);
- /* fl will be 1 if dup2 did not reset the close-on-exec flag. */
- exit(fl != 1);
+long long foo = 0;
+exit(sizeof(long long) < sizeof(long));
}
-], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no,
- [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no)
- bash_cv_dup2_broken=no])
-])
-AC_MSG_RESULT($bash_cv_dup2_broken)
-if test $bash_cv_dup2_broken = yes; then
-AC_DEFINE(DUP2_BROKEN)
-fi
-])
-
-dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
-AC_DEFUN(BASH_SIGNAL_CHECK,
-[AC_REQUIRE([AC_TYPE_SIGNAL])
-AC_MSG_CHECKING(for type of signal functions)
-AC_CACHE_VAL(bash_cv_signal_vintage,
-[
- AC_TRY_LINK([#include <signal.h>],[
- sigset_t ss;
- struct sigaction sa;
- sigemptyset(&ss); sigsuspend(&ss);
- sigaction(SIGINT, &sa, (struct sigaction *) 0);
- sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
- ], bash_cv_signal_vintage=posix,
- [
- AC_TRY_LINK([#include <signal.h>], [
- int mask = sigmask(SIGINT);
- sigsetmask(mask); sigblock(mask); sigpause(mask);
- ], bash_cv_signal_vintage=4.2bsd,
- [
- AC_TRY_LINK([
- #include <signal.h>
- RETSIGTYPE foo() { }], [
- int mask = sigmask(SIGINT);
- sigset(SIGINT, foo); sigrelse(SIGINT);
- sighold(SIGINT); sigpause(SIGINT);
- ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7
- )]
- )]
-)
-])
-AC_MSG_RESULT($bash_cv_signal_vintage)
-if test "$bash_cv_signal_vintage" = posix; then
-AC_DEFINE(HAVE_POSIX_SIGNALS)
-elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
-AC_DEFINE(HAVE_BSD_SIGNALS)
-elif test "$bash_cv_signal_vintage" = svr3; then
-AC_DEFINE(HAVE_USG_SIGHOLD)
+], ac_cv_c_long_long=yes, ac_cv_c_long_long=no)
+fi])
+if test $ac_cv_c_long_long = yes; then
+ AC_DEFINE(HAVE_LONG_LONG, 1, [Define if the `long long' type works.])
fi
])
-dnl Check if the pgrp of setpgrp() can't be the pid of a zombie process.
-AC_DEFUN(BASH_PGRP_SYNC,
-[AC_REQUIRE([AC_FUNC_GETPGRP])
-AC_MSG_CHECKING(whether pgrps need synchronization)
-AC_CACHE_VAL(bash_cv_pgrp_pipe,
-[AC_TRY_RUN([
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
+dnl
+dnl This is very similar to AC_C_LONG_DOUBLE, with the fix for IRIX
+dnl (< changed to <=) added.
+dnl
+AC_DEFUN(BASH_C_LONG_DOUBLE,
+[AC_CACHE_CHECK(for long double, ac_cv_c_long_double,
+[if test "$GCC" = yes; then
+ ac_cv_c_long_double=yes
+else
+AC_TRY_RUN([
+int
main()
{
-# ifdef GETPGRP_VOID
-# define getpgID() getpgrp()
-# else
-# define getpgID() getpgrp(0)
-# define setpgid(x,y) setpgrp(x,y)
-# endif
- int pid1, pid2, fds[2];
- int status;
- char ok;
-
- switch (pid1 = fork()) {
- case -1:
- exit(1);
- case 0:
- setpgid(0, getpid());
- exit(0);
- }
- setpgid(pid1, pid1);
-
- sleep(2); /* let first child die */
-
- if (pipe(fds) < 0)
- exit(2);
-
- switch (pid2 = fork()) {
- case -1:
- exit(3);
- case 0:
- setpgid(0, pid1);
- ok = getpgID() == pid1;
- write(fds[1], &ok, 1);
- exit(0);
- }
- setpgid(pid2, pid1);
-
- close(fds[1]);
- if (read(fds[0], &ok, 1) != 1)
- exit(4);
- wait(&status);
- wait(&status);
- exit(ok ? 0 : 5);
+ /* The Stardent Vistra knows sizeof(long double), but does not
+ support it. */
+ long double foo = 0.0;
+ /* On Ultrix 4.3 cc, long double is 4 and double is 8. */
+ /* On IRIX 5.3, the compiler converts long double to double with a warning,
+ but compiles this successfully. */
+ exit(sizeof(long double) <= sizeof(double));
}
-], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes,
- [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
- bash_cv_pgrp_pipe=no])
-])
-AC_MSG_RESULT($bash_cv_pgrp_pipe)
-if test $bash_cv_pgrp_pipe = yes; then
-AC_DEFINE(PGRP_PIPE)
+], ac_cv_c_long_double=yes, ac_cv_c_long_double=no)
+fi])
+if test $ac_cv_c_long_double = yes; then
+ AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if the `long double' type works.])
fi
])
dnl
+dnl Check for <inttypes.h>. This is separated out so that it can be
+dnl AC_REQUIREd.
+dnl
+dnl BASH_HEADER_INTTYPES
+AC_DEFUN(BASH_HEADER_INTTYPES,
+[
+ AC_CHECK_HEADERS(inttypes.h)
+])
+
+dnl
dnl check for typedef'd symbols in header files, but allow the caller to
dnl specify the include files to be checked in addition to the default
dnl
dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND])
AC_DEFUN(BASH_CHECK_TYPE,
-[AC_REQUIRE([AC_HEADER_STDC])dnl
+[
+AC_REQUIRE([AC_HEADER_STDC])dnl
+AC_REQUIRE([BASH_HEADER_INTTYPES])
AC_MSG_CHECKING(for $1)
AC_CACHE_VAL(bash_cv_type_$1,
[AC_EGREP_CPP($1, [#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
+#include <stddef.h>
+#endif
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
#endif
$2
], bash_cv_type_$1=yes, bash_cv_type_$1=no)])
@@ -158,43 +87,74 @@ ifelse($#, 4, [if test $bash_cv_type_$1 = yes; then
AC_DEFINE($4)
fi])
if test $bash_cv_type_$1 = no; then
- AC_DEFINE($1, $3)
+ AC_DEFINE_UNQUOTED($1, $3)
fi
])
dnl
-dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0)
-dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use
-dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3). To simplify
-dnl matters, this just checks for rlim_t, quad_t, or long.
+dnl BASH_CHECK_DECL(FUNC)
dnl
-AC_DEFUN(BASH_RLIMIT_TYPE,
-[AC_MSG_CHECKING(for size and type of struct rlimit fields)
-AC_CACHE_VAL(bash_cv_type_rlimit,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/resource.h>],
-[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[
-AC_TRY_RUN([
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
+dnl Check for a declaration of FUNC in stdlib.h and inttypes.h like
+dnl AC_CHECK_DECL
+dnl
+AC_DEFUN(BASH_CHECK_DECL,
+[
+AC_REQUIRE([AC_HEADER_STDC])
+AC_REQUIRE([BASH_HEADER_INTTYPES])
+AC_CACHE_CHECK([for declaration of $1], bash_cv_decl_$1,
+[AC_TRY_LINK(
+[
+#if STDC_HEADERS
+# include <stdlib.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+],
+[return !$1;],
+bash_cv_decl_$1=yes, bash_cv_decl_$1=no)])
+bash_tr_func=HAVE_DECL_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+if test $bash_cv_decl_$1 = yes; then
+ AC_DEFINE_UNQUOTED($bash_tr_func, 1)
+else
+ AC_DEFINE_UNQUOTED($bash_tr_func, 0)
+fi
+])
+
+AC_DEFUN(BASH_DECL_PRINTF,
+[AC_MSG_CHECKING(for declaration of printf in <stdio.h>)
+AC_CACHE_VAL(bash_cv_printf_declared,
+[AC_TRY_RUN([
+#include <stdio.h>
+#ifdef __STDC__
+typedef int (*_bashfunc)(const char *, ...);
+#else
+typedef int (*_bashfunc)();
+#endif
main()
{
-#ifdef HAVE_QUAD_T
- struct rlimit rl;
- if (sizeof(rl.rlim_cur) == sizeof(quad_t))
- exit(0);
-#endif
- exit(1);
-}], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long,
- [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long)
- bash_cv_type_rlimit=long])])
+_bashfunc pf;
+pf = (_bashfunc) printf;
+exit(pf == 0);
+}
+], bash_cv_printf_declared=yes, bash_cv_printf_declared=no,
+ [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes)
+ bash_cv_printf_declared=yes]
+)])
+AC_MSG_RESULT($bash_cv_printf_declared)
+if test $bash_cv_printf_declared = yes; then
+AC_DEFINE(PRINTF_DECLARED)
+fi
])
-AC_MSG_RESULT($bash_cv_type_rlimit)
-if test $bash_cv_type_rlimit = quad_t; then
-AC_DEFINE(RLIMTYPE, quad_t)
-elif test $bash_cv_type_rlimit = rlim_t; then
-AC_DEFINE(RLIMTYPE, rlim_t)
+
+AC_DEFUN(BASH_DECL_SBRK,
+[AC_MSG_CHECKING(for declaration of sbrk in <unistd.h>)
+AC_CACHE_VAL(bash_cv_sbrk_declared,
+[AC_EGREP_HEADER(sbrk, unistd.h,
+ bash_cv_sbrk_declared=yes, bash_cv_sbrk_declared=no)])
+AC_MSG_RESULT($bash_cv_sbrk_declared)
+if test $bash_cv_sbrk_declared = yes; then
+AC_DEFINE(SBRK_DECLARED)
fi
])
@@ -272,6 +232,20 @@ AC_DEFINE(HAVE_SYS_SIGLIST)
fi
])
+dnl Check for the various permutations of sys_siglist and make sure we
+dnl compile in siglist.o if they're not defined
+AC_DEFUN(BASH_CHECK_SYS_SIGLIST, [
+AC_REQUIRE([BASH_SYS_SIGLIST])
+AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST])
+AC_REQUIRE([BASH_FUNC_STRSIGNAL])
+if test "$bash_cv_sys_siglist" = no && test "$bash_cv_under_sys_siglist" = no && test "$bash_cv_have_strsignal" = no; then
+ SIGLIST_O=siglist.o
+else
+ SIGLIST_O=
+fi
+AC_SUBST([SIGLIST_O])
+])
+
dnl Check for sys_errlist[] and sys_nerr, check for declaration
AC_DEFUN(BASH_SYS_ERRLIST,
[AC_MSG_CHECKING([for sys_errlist and sys_nerr])
@@ -287,6 +261,51 @@ AC_DEFINE(HAVE_SYS_ERRLIST)
fi
])
+dnl
+dnl Check if dup2() does not clear the close on exec flag
+dnl
+AC_DEFUN(BASH_FUNC_DUP2_CLOEXEC_CHECK,
+[AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag)
+AC_CACHE_VAL(bash_cv_dup2_broken,
+[AC_TRY_RUN([
+#include <sys/types.h>
+#include <fcntl.h>
+main()
+{
+ int fd1, fd2, fl;
+ fd1 = open("/dev/null", 2);
+ if (fcntl(fd1, 2, 1) < 0)
+ exit(1);
+ fd2 = dup2(fd1, 1);
+ if (fd2 < 0)
+ exit(2);
+ fl = fcntl(fd2, 1, 0);
+ /* fl will be 1 if dup2 did not reset the close-on-exec flag. */
+ exit(fl != 1);
+}
+], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no,
+ [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no)
+ bash_cv_dup2_broken=no])
+])
+AC_MSG_RESULT($bash_cv_dup2_broken)
+if test $bash_cv_dup2_broken = yes; then
+AC_DEFINE(DUP2_BROKEN)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_STRSIGNAL,
+[AC_MSG_CHECKING([for the existence of strsignal])
+AC_CACHE_VAL(bash_cv_have_strsignal,
+[AC_TRY_LINK([#include <sys/types.h>
+#include <signal.h>],
+[char *s = (char *)strsignal(2);],
+ bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)])
+AC_MSG_RESULT($bash_cv_have_strsignal)
+if test $bash_cv_have_strsignal = yes; then
+AC_DEFINE(HAVE_STRSIGNAL)
+fi
+])
+
dnl Check to see if opendir will open non-directories (not a nice thing)
AC_DEFUN(BASH_FUNC_OPENDIR_CHECK,
[AC_REQUIRE([AC_HEADER_DIRENT])dnl
@@ -422,6 +441,8 @@ if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then
AC_CHECK_TYPE(ptrdiff_t, int)
elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then
AC_CHECK_TYPE(ptrdiff_t, long)
+elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_char_p"; then
+ AC_CHECK_TYPE(ptrdiff_t, [long long])
else
AC_CHECK_TYPE(ptrdiff_t, int)
fi
@@ -432,10 +453,12 @@ dnl A signed 64-bit quantity
dnl
AC_DEFUN(BASH_TYPE_BITS64_T,
[
-if test "$ac_sv_sizeof_char_p" = 8; then
+if test "$ac_cv_sizeof_char_p" = 8; then
AC_CHECK_TYPE(bits64_t, char *)
elif test "$ac_cv_sizeof_double" = 8; then
AC_CHECK_TYPE(bits64_t, double)
+elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then
+ AC_CHECK_TYPE(bits64_t, [long long])
elif test "$ac_cv_sizeof_long" = 8; then
AC_CHECK_TYPE(bits64_t, long)
else
@@ -443,16 +466,68 @@ else
fi
])
-AC_DEFUN(BASH_FUNC_STRSIGNAL,
-[AC_MSG_CHECKING([for the existence of strsignal])
-AC_CACHE_VAL(bash_cv_have_strsignal,
-[AC_TRY_LINK([#include <sys/types.h>
-#include <signal.h>],
-[char *s = (char *)strsignal(2);],
- bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)])
-AC_MSG_RESULT($bash_cv_have_strsignal)
-if test $bash_cv_have_strsignal = yes; then
-AC_DEFINE(HAVE_STRSIGNAL)
+AC_DEFUN(BASH_TYPE_LONG_LONG,
+[
+AC_CACHE_CHECK([for long long], bash_cv_type_long_long,
+[AC_TRY_LINK([
+long long ll = 1; int i = 63;],
+[
+long long llm = (long long) -1;
+return ll << i | ll >> i | llm / ll | llm % ll;
+], bash_cv_type_long_long='long long', bash_cv_type_long_long='long')])
+if test "$bash_cv_type_long_long" = 'long long'; then
+ AC_DEFINE(HAVE_LONG_LONG, 1)
+fi
+])
+
+AC_DEFUN(BASH_TYPE_UNSIGNED_LONG_LONG,
+[
+AC_CACHE_CHECK([for unsigned long long], bash_cv_type_unsigned_long_long,
+[AC_TRY_LINK([
+unsigned long long ull = 1; int i = 63;],
+[
+unsigned long long ullmax = (unsigned long long) -1;
+return ull << i | ull >> i | ullmax / ull | ullmax % ull;
+], bash_cv_type_unsigned_long_long='unsigned long long',
+ bash_cv_type_unsigned_long_long='unsigned long')])
+if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then
+ AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1)
+fi
+])
+
+dnl
+dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0)
+dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use
+dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3). To simplify
+dnl matters, this just checks for rlim_t, quad_t, or long.
+dnl
+AC_DEFUN(BASH_TYPE_RLIMIT,
+[AC_MSG_CHECKING(for size and type of struct rlimit fields)
+AC_CACHE_VAL(bash_cv_type_rlimit,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/resource.h>],
+[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[
+AC_TRY_RUN([
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+main()
+{
+#ifdef HAVE_QUAD_T
+ struct rlimit rl;
+ if (sizeof(rl.rlim_cur) == sizeof(quad_t))
+ exit(0);
+#endif
+ exit(1);
+}], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long,
+ [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long)
+ bash_cv_type_rlimit=long])])
+])
+AC_MSG_RESULT($bash_cv_type_rlimit)
+if test $bash_cv_type_rlimit = quad_t; then
+AC_DEFINE(RLIMTYPE, quad_t)
+elif test $bash_cv_type_rlimit = rlim_t; then
+AC_DEFINE(RLIMTYPE, rlim_t)
fi
])
@@ -481,30 +556,8 @@ struct in_addr ap;], [ inet_aton("127.0.0.1", &ap); ],
bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)])
if test $bash_cv_func_inet_aton = yes; then
AC_DEFINE(HAVE_INET_ATON)
-fi
-])
-
-AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC,
-[AC_MSG_CHECKING([for a c_line member of struct termios])
-AC_CACHE_VAL(bash_cv_termios_ldisc,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <termios.h>],[struct termios t; int i; i = t.c_line;],
- bash_cv_termios_ldisc=yes, bash_cv_termios_ldisc=no)])dnl
-AC_MSG_RESULT($bash_cv_termios_ldisc)
-if test $bash_cv_termios_ldisc = yes; then
-AC_DEFINE(TERMIOS_LDISC)
-fi
-])
-
-AC_DEFUN(BASH_STRUCT_TERMIO_LDISC,
-[AC_MSG_CHECKING([for a c_line member of struct termio])
-AC_CACHE_VAL(bash_cv_termio_ldisc,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <termio.h>],[struct termio t; int i; i = t.c_line;],
- bash_cv_termio_ldisc=yes, bash_cv_termio_ldisc=no)])dnl
-AC_MSG_RESULT($bash_cv_termio_ldisc)
-if test $bash_cv_termio_ldisc = yes; then
-AC_DEFINE(TERMIO_LDISC)
+else
+ AC_LIBOBJ(inet_aton)
fi
])
@@ -552,32 +605,6 @@ AC_DEFINE(CAN_REDEFINE_GETENV)
fi
])
-AC_DEFUN(BASH_FUNC_PRINTF,
-[AC_MSG_CHECKING(for declaration of printf in <stdio.h>)
-AC_CACHE_VAL(bash_cv_printf_declared,
-[AC_TRY_RUN([
-#include <stdio.h>
-#ifdef __STDC__
-typedef int (*_bashfunc)(const char *, ...);
-#else
-typedef int (*_bashfunc)();
-#endif
-main()
-{
-_bashfunc pf;
-pf = (_bashfunc) printf;
-exit(pf == 0);
-}
-], bash_cv_printf_declared=yes, bash_cv_printf_declared=no,
- [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes)
- bash_cv_printf_declared=yes]
-)])
-AC_MSG_RESULT($bash_cv_printf_declared)
-if test $bash_cv_printf_declared = yes; then
-AC_DEFINE(PRINTF_DECLARED)
-fi
-])
-
AC_DEFUN(BASH_FUNC_ULIMIT_MAXFDS,
[AC_MSG_CHECKING(whether ulimit can substitute for getdtablesize)
AC_CACHE_VAL(bash_cv_ulimit_maxfds,
@@ -597,39 +624,6 @@ AC_DEFINE(ULIMIT_MAXFDS)
fi
])
-AC_DEFUN(BASH_CHECK_LIB_TERMCAP,
-[
-if test "X$bash_cv_termcap_lib" = "X"; then
-_bash_needmsg=yes
-else
-AC_MSG_CHECKING(which library has the termcap functions)
-_bash_needmsg=
-fi
-AC_CACHE_VAL(bash_cv_termcap_lib,
-[AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap,
- [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses,
- [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses,
- bash_cv_termcap_lib=gnutermcap)])])])
-if test "X$_bash_needmsg" = "Xyes"; then
-AC_MSG_CHECKING(which library has the termcap functions)
-fi
-AC_MSG_RESULT(using $bash_cv_termcap_lib)
-if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
-LDFLAGS="$LDFLAGS -L./lib/termcap"
-TERMCAP_LIB="./lib/termcap/libtermcap.a"
-TERMCAP_DEP="./lib/termcap/libtermcap.a"
-elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then
-TERMCAP_LIB=-ltermcap
-TERMCAP_DEP=
-elif test $bash_cv_termcap_lib = libncurses; then
-TERMCAP_LIB=-lncurses
-TERMCAP_DEP=
-else
-TERMCAP_LIB=-lcurses
-TERMCAP_DEP=
-fi
-])
-
AC_DEFUN(BASH_FUNC_GETCWD,
[AC_MSG_CHECKING([if getcwd() calls popen()])
AC_CACHE_VAL(bash_cv_getcwd_calls_popen,
@@ -691,6 +685,317 @@ main()
AC_MSG_RESULT($bash_cv_getcwd_calls_popen)
if test $bash_cv_getcwd_calls_popen = yes; then
AC_DEFINE(GETCWD_BROKEN)
+AC_LIBOBJ(getcwd)
+fi
+])
+
+dnl
+dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every
+dnl system, we can't use AC_PREREQ
+dnl
+AC_DEFUN(BASH_FUNC_GETHOSTBYNAME,
+[if test "X$bash_cv_have_gethostbyname" = "X"; then
+_bash_needmsg=yes
+else
+AC_MSG_CHECKING(for gethostbyname in socket library)
+_bash_needmsg=
+fi
+AC_CACHE_VAL(bash_cv_have_gethostbyname,
+[AC_TRY_LINK([#include <netdb.h>],
+[ struct hostent *hp;
+ hp = gethostbyname("localhost");
+], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)]
+)
+if test "X$_bash_needmsg" = Xyes; then
+ AC_MSG_CHECKING(for gethostbyname in socket library)
+fi
+AC_MSG_RESULT($bash_cv_have_gethostbyname)
+if test "$bash_cv_have_gethostbyname" = yes; then
+AC_DEFINE(HAVE_GETHOSTBYNAME)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_FNMATCH_EXTMATCH,
+[AC_MSG_CHECKING(if fnmatch does extended pattern matching with FNM_EXTMATCH)
+AC_CACHE_VAL(bash_cv_fnm_extmatch,
+[AC_TRY_RUN([
+#include <fnmatch.h>
+
+main()
+{
+#ifdef FNM_EXTMATCH
+ exit (0);
+#else
+ exit (1);
+#endif
+}
+], bash_cv_fnm_extmatch=yes, bash_cv_fnm_extmatch=no,
+ [AC_MSG_WARN(cannot check FNM_EXTMATCH if cross compiling -- defaulting to no)
+ bash_cv_fnm_extmatch=no])
+])
+AC_MSG_RESULT($bash_cv_fnm_extmatch)
+if test $bash_cv_fnm_extmatch = yes; then
+AC_DEFINE(HAVE_LIBC_FNM_EXTMATCH)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_POSIX_SETJMP,
+[AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
+AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp)
+AC_CACHE_VAL(bash_cv_func_sigsetjmp,
+[AC_TRY_RUN([
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#include <sys/types.h>
+#include <signal.h>
+#include <setjmp.h>
+
+main()
+{
+#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
+exit (1);
+#else
+
+int code;
+sigset_t set, oset;
+sigjmp_buf xx;
+
+/* get the mask */
+sigemptyset(&set);
+sigemptyset(&oset);
+sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
+sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
+
+/* save it */
+code = sigsetjmp(xx, 1);
+if (code)
+ exit(0); /* could get sigmask and compare to oset here. */
+
+/* change it */
+sigaddset(&set, SIGINT);
+sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
+
+/* and siglongjmp */
+siglongjmp(xx, 10);
+exit(1);
+#endif
+}], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing,
+ [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing)
+ bash_cv_func_sigsetjmp=missing]
+)])
+AC_MSG_RESULT($bash_cv_func_sigsetjmp)
+if test $bash_cv_func_sigsetjmp = present; then
+AC_DEFINE(HAVE_POSIX_SIGSETJMP)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_STRCOLL,
+[
+AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
+AC_CACHE_VAL(bash_cv_func_strcoll_broken,
+[AC_TRY_RUN([
+#include <stdio.h>
+#if defined (HAVE_LOCALE_H)
+#include <locale.h>
+#endif
+
+main(c, v)
+int c;
+char *v[];
+{
+ int r1, r2;
+ char *deflocale, *defcoll;
+
+#ifdef HAVE_SETLOCALE
+ deflocale = setlocale(LC_ALL, "");
+ defcoll = setlocale(LC_COLLATE, "");
+#endif
+
+#ifdef HAVE_STRCOLL
+ /* These two values are taken from tests/glob-test. */
+ r1 = strcoll("abd", "aXd");
+#else
+ r1 = 0;
+#endif
+ r2 = strcmp("abd", "aXd");
+
+ /* These two should both be greater than 0. It is permissible for
+ a system to return different values, as long as the sign is the
+ same. */
+
+ /* Exit with 1 (failure) if these two values are both > 0, since
+ this tests whether strcoll(3) is broken with respect to strcmp(3)
+ in the default locale. */
+ exit (r1 > 0 && r2 > 0);
+}
+], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no,
+ [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no)
+ bash_cv_func_strcoll_broken=no]
+)])
+AC_MSG_RESULT($bash_cv_func_strcoll_broken)
+if test $bash_cv_func_strcoll_broken = yes; then
+AC_DEFINE(STRCOLL_BROKEN)
+fi
+])
+
+AC_DEFUN(BASH_FUNC_PRINTF_A_FORMAT,
+[AC_MSG_CHECKING([for printf floating point output in hex notation])
+AC_CACHE_VAL(bash_cv_printf_a_format,
+[AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+
+int
+main()
+{
+ double y = 0.0;
+ char abuf[1024];
+
+ sprintf(abuf, "%A", y);
+ exit(strchr(abuf, 'P') == (char *)0);
+}
+], bash_cv_printf_a_format=yes, bash_cv_printf_a_format=no,
+ [AC_MSG_WARN(cannot check printf if cross compiling -- defaulting to no)
+ bash_cv_printf_a_format=no]
+)])
+AC_MSG_RESULT($bash_cv_printf_a_format)
+if test $bash_cv_printf_a_format = yes; then
+AC_DEFINE(HAVE_PRINTF_A_FORMAT)
+fi
+])
+
+AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC,
+[
+AC_CHECK_MEMBER(struct termios.c_line, AC_DEFINE(TERMIOS_LDISC), ,[
+#include <sys/types.h>
+#include <termios.h>
+])
+])
+
+AC_DEFUN(BASH_STRUCT_TERMIO_LDISC,
+[
+AC_CHECK_MEMBER(struct termio.c_line, AC_DEFINE(TERMIO_LDISC), ,[
+#include <sys/types.h>
+#include <termio.h>
+])
+])
+
+dnl
+dnl Like AC_STRUCT_ST_BLOCKS, but doesn't muck with LIBOBJS
+dnl
+dnl sets bash_cv_struct_stat_st_blocks
+dnl
+dnl unused for now; we'll see how AC_CHECK_MEMBERS works
+dnl
+AC_DEFUN(BASH_STRUCT_ST_BLOCKS,
+[
+AC_MSG_CHECKING([for struct stat.st_blocks])
+AC_CACHE_VAL(bash_cv_struct_stat_st_blocks,
+[AC_TRY_COMPILE(
+[
+#include <sys/types.h>
+#include <sys/stat.h>
+],
+[
+main()
+{
+static struct stat a;
+if (a.st_blocks) return 0;
+return 0;
+}
+], bash_cv_struct_stat_st_blocks=yes, bash_cv_struct_stat_st_blocks=no)
+])
+AC_MSG_RESULT($bash_cv_struct_stat_st_blocks)
+if test "$bash_cv_struct_stat_st_blocks" = "yes"; then
+AC_DEFINE(HAVE_STRUCT_STAT_ST_BLOCKS)
+fi
+])
+
+AC_DEFUN(BASH_CHECK_LIB_TERMCAP,
+[
+if test "X$bash_cv_termcap_lib" = "X"; then
+_bash_needmsg=yes
+else
+AC_MSG_CHECKING(which library has the termcap functions)
+_bash_needmsg=
+fi
+AC_CACHE_VAL(bash_cv_termcap_lib,
+[AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap,
+ [AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcal_lib=libtinfo,
+ [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses,
+ [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses,
+ bash_cv_termcap_lib=gnutermcap)])])])])
+if test "X$_bash_needmsg" = "Xyes"; then
+AC_MSG_CHECKING(which library has the termcap functions)
+fi
+AC_MSG_RESULT(using $bash_cv_termcap_lib)
+if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
+LDFLAGS="$LDFLAGS -L./lib/termcap"
+TERMCAP_LIB="./lib/termcap/libtermcap.a"
+TERMCAP_DEP="./lib/termcap/libtermcap.a"
+elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then
+TERMCAP_LIB=-ltermcap
+TERMCAP_DEP=
+elif test $bash_cv_termcap_lib = libtinfo; then
+TERMCAP_LIB=-ltinfo
+TERMCAP_DEP=
+elif test $bash_cv_termcap_lib = libncurses; then
+TERMCAP_LIB=-lncurses
+TERMCAP_DEP=
+else
+TERMCAP_LIB=-lcurses
+TERMCAP_DEP=
+fi
+])
+
+dnl
+dnl Check for the presence of getpeername in libsocket.
+dnl If libsocket is present, check for libnsl and add it to LIBS if
+dnl it's there, since most systems with libsocket require linking
+dnl with libnsl as well. This should only be called if getpeername
+dnl was not found in libc.
+dnl
+dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT
+dnl AS WELL
+dnl
+AC_DEFUN(BASH_CHECK_LIB_SOCKET,
+[
+if test "X$bash_cv_have_socklib" = "X"; then
+_bash_needmsg=
+else
+AC_MSG_CHECKING(for socket library)
+_bash_needmsg=yes
+fi
+AC_CACHE_VAL(bash_cv_have_socklib,
+[AC_CHECK_LIB(socket, getpeername,
+ bash_cv_have_socklib=yes, bash_cv_have_socklib=no, -lnsl)])
+if test "X$_bash_needmsg" = Xyes; then
+ AC_MSG_RESULT($bash_cv_have_socklib)
+ _bash_needmsg=
+fi
+if test $bash_cv_have_socklib = yes; then
+ # check for libnsl, add it to LIBS if present
+ if test "X$bash_cv_have_libnsl" = "X"; then
+ _bash_needmsg=
+ else
+ AC_MSG_CHECKING(for libnsl)
+ _bash_needmsg=yes
+ fi
+ AC_CACHE_VAL(bash_cv_have_libnsl,
+ [AC_CHECK_LIB(nsl, t_open,
+ bash_cv_have_libnsl=yes, bash_cv_have_libnsl=no)])
+ if test "X$_bash_needmsg" = Xyes; then
+ AC_MSG_RESULT($bash_cv_have_libnsl)
+ _bash_needmsg=
+ fi
+ if test $bash_cv_have_libnsl = yes; then
+ LIBS="-lsocket -lnsl $LIBS"
+ else
+ LIBS="-lsocket $LIBS"
+ fi
+ AC_DEFINE(HAVE_LIBSOCKET)
+ AC_DEFINE(HAVE_GETPEERNAME)
fi
])
@@ -760,9 +1065,149 @@ AC_DEFINE(STRUCT_DIRENT_HAS_D_FILENO)
fi
])
-AC_DEFUN(BASH_REINSTALL_SIGHANDLERS,
+AC_DEFUN(BASH_STRUCT_TIMEVAL,
+[AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h)
+AC_CACHE_VAL(bash_cv_struct_timeval,
+[
+AC_EGREP_HEADER(struct timeval, sys/time.h,
+ bash_cv_struct_timeval=yes,
+ AC_EGREP_HEADER(struct timeval, time.h,
+ bash_cv_struct_timeval=yes,
+ bash_cv_struct_timeval=no))
+])
+AC_MSG_RESULT($bash_cv_struct_timeval)
+if test $bash_cv_struct_timeval = yes; then
+ AC_DEFINE(HAVE_TIMEVAL)
+fi
+])
+
+AC_DEFUN(BASH_STRUCT_WINSIZE,
+[AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h)
+AC_CACHE_VAL(bash_cv_struct_winsize_header,
+[AC_TRY_COMPILE([#include <sys/types.h>
+#include <sys/ioctl.h>], [struct winsize x;],
+ bash_cv_struct_winsize_header=ioctl_h,
+ [AC_TRY_COMPILE([#include <sys/types.h>
+#include <termios.h>], [struct winsize x;],
+ bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other)
+])])
+if test $bash_cv_struct_winsize_header = ioctl_h; then
+ AC_MSG_RESULT(sys/ioctl.h)
+ AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL)
+elif test $bash_cv_struct_winsize_header = termios_h; then
+ AC_MSG_RESULT(termios.h)
+ AC_DEFINE(STRUCT_WINSIZE_IN_TERMIOS)
+else
+ AC_MSG_RESULT(not found)
+fi
+])
+
+dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
+AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE,
+[AC_REQUIRE([AC_TYPE_SIGNAL])
+AC_MSG_CHECKING(for type of signal functions)
+AC_CACHE_VAL(bash_cv_signal_vintage,
+[
+ AC_TRY_LINK([#include <signal.h>],[
+ sigset_t ss;
+ struct sigaction sa;
+ sigemptyset(&ss); sigsuspend(&ss);
+ sigaction(SIGINT, &sa, (struct sigaction *) 0);
+ sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
+ ], bash_cv_signal_vintage=posix,
+ [
+ AC_TRY_LINK([#include <signal.h>], [
+ int mask = sigmask(SIGINT);
+ sigsetmask(mask); sigblock(mask); sigpause(mask);
+ ], bash_cv_signal_vintage=4.2bsd,
+ [
+ AC_TRY_LINK([
+ #include <signal.h>
+ RETSIGTYPE foo() { }], [
+ int mask = sigmask(SIGINT);
+ sigset(SIGINT, foo); sigrelse(SIGINT);
+ sighold(SIGINT); sigpause(SIGINT);
+ ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7
+ )]
+ )]
+)
+])
+AC_MSG_RESULT($bash_cv_signal_vintage)
+if test "$bash_cv_signal_vintage" = posix; then
+AC_DEFINE(HAVE_POSIX_SIGNALS)
+elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
+AC_DEFINE(HAVE_BSD_SIGNALS)
+elif test "$bash_cv_signal_vintage" = svr3; then
+AC_DEFINE(HAVE_USG_SIGHOLD)
+fi
+])
+
+dnl Check if the pgrp of setpgrp() can't be the pid of a zombie process.
+AC_DEFUN(BASH_SYS_PGRP_SYNC,
+[AC_REQUIRE([AC_FUNC_GETPGRP])
+AC_MSG_CHECKING(whether pgrps need synchronization)
+AC_CACHE_VAL(bash_cv_pgrp_pipe,
+[AC_TRY_RUN([
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+main()
+{
+# ifdef GETPGRP_VOID
+# define getpgID() getpgrp()
+# else
+# define getpgID() getpgrp(0)
+# define setpgid(x,y) setpgrp(x,y)
+# endif
+ int pid1, pid2, fds[2];
+ int status;
+ char ok;
+
+ switch (pid1 = fork()) {
+ case -1:
+ exit(1);
+ case 0:
+ setpgid(0, getpid());
+ exit(0);
+ }
+ setpgid(pid1, pid1);
+
+ sleep(2); /* let first child die */
+
+ if (pipe(fds) < 0)
+ exit(2);
+
+ switch (pid2 = fork()) {
+ case -1:
+ exit(3);
+ case 0:
+ setpgid(0, pid1);
+ ok = getpgID() == pid1;
+ write(fds[1], &ok, 1);
+ exit(0);
+ }
+ setpgid(pid2, pid1);
+
+ close(fds[1]);
+ if (read(fds[0], &ok, 1) != 1)
+ exit(4);
+ wait(&status);
+ wait(&status);
+ exit(ok ? 0 : 5);
+}
+], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes,
+ [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
+ bash_cv_pgrp_pipe=no])
+])
+AC_MSG_RESULT($bash_cv_pgrp_pipe)
+if test $bash_cv_pgrp_pipe = yes; then
+AC_DEFINE(PGRP_PIPE)
+fi
+])
+
+AC_DEFUN(BASH_SYS_REINSTALL_SIGHANDLERS,
[AC_REQUIRE([AC_TYPE_SIGNAL])
-AC_REQUIRE([BASH_SIGNAL_CHECK])
+AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
AC_MSG_CHECKING([if signal handlers must be reinstalled when invoked])
AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers,
[AC_TRY_RUN([
@@ -818,20 +1263,9 @@ AC_DEFINE(MUST_REINSTALL_SIGHANDLERS)
fi
])
-AC_DEFUN(BASH_FUNC_SBRK_DECLARED,
-[AC_MSG_CHECKING(for declaration of sbrk in <unistd.h>)
-AC_CACHE_VAL(bash_cv_sbrk_declared,
-[AC_EGREP_HEADER(sbrk, unistd.h,
- bash_cv_sbrk_declared=yes, bash_cv_sbrk_declared=no)])
-AC_MSG_RESULT($bash_cv_sbrk_declared)
-if test $bash_cv_sbrk_declared = yes; then
-AC_DEFINE(SBRK_DECLARED)
-fi
-])
-
dnl check that some necessary job control definitions are present
-AC_DEFUN(BASH_JOB_CONTROL_MISSING,
-[AC_REQUIRE([BASH_SIGNAL_CHECK])
+AC_DEFUN(BASH_SYS_JOB_CONTROL_MISSING,
+[AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
AC_MSG_CHECKING(for presence of necessary job control definitions)
AC_CACHE_VAL(bash_cv_job_control_missing,
[AC_TRY_RUN([
@@ -939,54 +1373,32 @@ AC_DEFINE(NAMED_PIPES_MISSING)
fi
])
-AC_DEFUN(BASH_FUNC_POSIX_SETJMP,
-[AC_REQUIRE([BASH_SIGNAL_CHECK])
-AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp)
-AC_CACHE_VAL(bash_cv_func_sigsetjmp,
-[AC_TRY_RUN([
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <signal.h>
-#include <setjmp.h>
-
-main()
-{
-#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
-exit (1);
-#else
-
-int code;
-sigset_t set, oset;
-sigjmp_buf xx;
-
-/* get the mask */
-sigemptyset(&set);
-sigemptyset(&oset);
-sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
-sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
-
-/* save it */
-code = sigsetjmp(xx, 1);
-if (code)
- exit(0); /* could get sigmask and compare to oset here. */
-
-/* change it */
-sigaddset(&set, SIGINT);
-sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
-
-/* and siglongjmp */
-siglongjmp(xx, 10);
-exit(1);
-#endif
-}], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing,
- [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing)
- bash_cv_func_sigsetjmp=missing]
-)])
-AC_MSG_RESULT($bash_cv_func_sigsetjmp)
-if test $bash_cv_func_sigsetjmp = present; then
-AC_DEFINE(HAVE_POSIX_SIGSETJMP)
+AC_DEFUN(BASH_SYS_DEFAULT_MAIL_DIR,
+[AC_MSG_CHECKING(for default mail directory)
+AC_CACHE_VAL(bash_cv_mail_dir,
+[if test -d /var/mail; then
+ bash_cv_mail_dir=/var/mail
+ elif test -d /usr/mail; then
+ bash_cv_mail_dir=/usr/mail
+ elif test -d /var/spool/mail; then
+ bash_cv_mail_dir=/var/spool/mail
+ elif test -d /usr/spool/mail; then
+ bash_cv_mail_dir=/usr/spool/mail
+ else
+ bash_cv_mail_dir=unknown
+ fi
+])
+AC_MSG_RESULT($bash_cv_mail_dir)
+if test $bash_cv_mail_dir = "/var/mail"; then
+ AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/mail")
+elif test $bash_cv_mail_dir = "/usr/mail"; then
+ AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/mail")
+elif test $bash_cv_mail_dir = "/var/spool/mail"; then
+ AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/spool/mail")
+elif test $bash_cv_mail_dir = "/usr/spool/mail"; then
+ AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/spool/mail")
+else
+ AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "unknown")
fi
])
@@ -1002,27 +1414,6 @@ AC_DEFINE(GWINSZ_IN_SYS_IOCTL)
fi
])
-AC_DEFUN(BASH_STRUCT_WINSIZE,
-[AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h)
-AC_CACHE_VAL(bash_cv_struct_winsize_header,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ioctl.h>], [struct winsize x;],
- bash_cv_struct_winsize_header=ioctl_h,
- [AC_TRY_COMPILE([#include <sys/types.h>
-#include <termios.h>], [struct winsize x;],
- bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other)
-])])
-if test $bash_cv_struct_winsize_header = ioctl_h; then
- AC_MSG_RESULT(sys/ioctl.h)
- AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL)
-elif test $bash_cv_struct_winsize_header = termios_h; then
- AC_MSG_RESULT(termios.h)
- AC_DEFINE(STRUCT_WINSIZE_IN_TERMIOS)
-else
- AC_MSG_RESULT(not found)
-fi
-])
-
AC_DEFUN(BASH_HAVE_TIOCSTAT,
[AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h)
AC_CACHE_VAL(bash_cv_tiocstat_in_ioctl,
@@ -1053,7 +1444,7 @@ dnl require a definition of speed_t each time <termcap.h> is included,
dnl but you can only get speed_t if you include <termios.h> (on some
dnl versions) or <sys/types.h> (on others).
dnl
-AC_DEFUN(BASH_MISC_SPEED_T,
+AC_DEFUN(BASH_CHECK_SPEED_T,
[AC_MSG_CHECKING(for speed_t in sys/types.h)
AC_CACHE_VAL(bash_cv_speed_t_in_sys_types,
[AC_TRY_COMPILE([#include <sys/types.h>], [speed_t x;],
@@ -1121,114 +1512,9 @@ fi
])
dnl
-dnl Check for the presence of getpeername in libsocket.
-dnl If libsocket is present, check for libnsl and add it to LIBS if
-dnl it's there, since most systems with libsocket require linking
-dnl with libnsl as well. This should only be called if getpeername
-dnl was not found in libc.
-dnl
-dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT
-dnl AS WELL
-dnl
-AC_DEFUN(BASH_CHECK_SOCKLIB,
-[
-if test "X$bash_cv_have_socklib" = "X"; then
-_bash_needmsg=
-else
-AC_MSG_CHECKING(for socket library)
-_bash_needmsg=yes
-fi
-AC_CACHE_VAL(bash_cv_have_socklib,
-[AC_CHECK_LIB(socket, getpeername,
- bash_cv_have_socklib=yes, bash_cv_have_socklib=no, -lnsl)])
-if test "X$_bash_needmsg" = Xyes; then
- AC_MSG_RESULT($bash_cv_have_socklib)
- _bash_needmsg=
-fi
-if test $bash_cv_have_socklib = yes; then
- # check for libnsl, add it to LIBS if present
- if test "X$bash_cv_have_libnsl" = "X"; then
- _bash_needmsg=
- else
- AC_MSG_CHECKING(for libnsl)
- _bash_needmsg=yes
- fi
- AC_CACHE_VAL(bash_cv_have_libnsl,
- [AC_CHECK_LIB(nsl, t_open,
- bash_cv_have_libnsl=yes, bash_cv_have_libnsl=no)])
- if test "X$_bash_needmsg" = Xyes; then
- AC_MSG_RESULT($bash_cv_have_libnsl)
- _bash_needmsg=
- fi
- if test $bash_cv_have_libnsl = yes; then
- LIBS="-lsocket -lnsl $LIBS"
- else
- LIBS="-lsocket $LIBS"
- fi
- AC_DEFINE(HAVE_LIBSOCKET)
- AC_DEFINE(HAVE_GETPEERNAME)
-fi
-])
-
-dnl
-dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every
-dnl system, we can't use AC_PREREQ
-dnl
-AC_DEFUN(BASH_FUNC_GETHOSTBYNAME,
-[if test "X$bash_cv_have_gethostbyname" = "X"; then
-_bash_needmsg=yes
-else
-AC_MSG_CHECKING(for gethostbyname in socket library)
-_bash_needmsg=
-fi
-AC_CACHE_VAL(bash_cv_have_gethostbyname,
-[AC_TRY_LINK([#include <netdb.h>],
-[ struct hostent *hp;
- hp = gethostbyname("localhost");
-], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)]
-)
-if test "X$_bash_needmsg" = Xyes; then
- AC_MSG_CHECKING(for gethostbyname in socket library)
-fi
-AC_MSG_RESULT($bash_cv_have_gethostbyname)
-if test "$bash_cv_have_gethostbyname" = yes; then
-AC_DEFINE(HAVE_GETHOSTBYNAME)
-fi
-])
-
-AC_DEFUN(BASH_DEFAULT_MAIL_DIR,
-[AC_MSG_CHECKING(for default mail directory)
-AC_CACHE_VAL(bash_cv_mail_dir,
-[if test -d /var/mail; then
- bash_cv_mail_dir=/var/mail
- elif test -d /usr/mail; then
- bash_cv_mail_dir=/usr/mail
- elif test -d /var/spool/mail; then
- bash_cv_mail_dir=/var/spool/mail
- elif test -d /usr/spool/mail; then
- bash_cv_mail_dir=/usr/spool/mail
- else
- bash_cv_mail_dir=unknown
- fi
-])
-AC_MSG_RESULT($bash_cv_mail_dir)
-if test $bash_cv_mail_dir = "/var/mail"; then
- AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/mail")
-elif test $bash_cv_mail_dir = "/usr/mail"; then
- AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/mail")
-elif test $bash_cv_mail_dir = "/var/spool/mail"; then
- AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/var/spool/mail")
-elif test $bash_cv_mail_dir = "/usr/spool/mail"; then
- AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "/usr/spool/mail")
-else
- AC_DEFINE(DEFAULT_MAIL_DIRECTORY, "unknown")
-fi
-])
-
-dnl
dnl Check if HPUX needs _KERNEL defined for RLIMIT_* definitions
dnl
-AC_DEFUN(BASH_KERNEL_RLIMIT_CHECK,
+AC_DEFUN(BASH_CHECK_KERNEL_RLIMIT,
[AC_MSG_CHECKING([whether $host_os needs _KERNEL for RLIMIT defines])
AC_CACHE_VAL(bash_cv_kernel_rlimit,
[AC_TRY_COMPILE([
@@ -1256,145 +1542,6 @@ AC_DEFINE(RLIMIT_NEEDS_KERNEL)
fi
])
-AC_DEFUN(BASH_FUNC_STRCOLL,
-[
-AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
-AC_CACHE_VAL(bash_cv_func_strcoll_broken,
-[AC_TRY_RUN([
-#include <stdio.h>
-#if defined (HAVE_LOCALE_H)
-#include <locale.h>
-#endif
-
-main(c, v)
-int c;
-char *v[];
-{
- int r1, r2;
- char *deflocale, *defcoll;
-
-#ifdef HAVE_SETLOCALE
- deflocale = setlocale(LC_ALL, "");
- defcoll = setlocale(LC_COLLATE, "");
-#endif
-
-#ifdef HAVE_STRCOLL
- /* These two values are taken from tests/glob-test. */
- r1 = strcoll("abd", "aXd");
-#else
- r1 = 0;
-#endif
- r2 = strcmp("abd", "aXd");
-
- /* These two should both be greater than 0. It is permissible for
- a system to return different values, as long as the sign is the
- same. */
-
- /* Exit with 1 (failure) if these two values are both > 0, since
- this tests whether strcoll(3) is broken with respect to strcmp(3)
- in the default locale. */
- exit (r1 > 0 && r2 > 0);
-}
-], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no,
- [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no)
- bash_cv_func_strcoll_broken=no]
-)])
-AC_MSG_RESULT($bash_cv_func_strcoll_broken)
-if test $bash_cv_func_strcoll_broken = yes; then
-AC_DEFINE(STRCOLL_BROKEN)
-fi
-])
-
-dnl
-dnl If available, use support for large files unless the user specified
-dnl one of the CPPFLAGS, LDFLAGS, or LIBS variables (<eggert@twinsun.com>
-dnl via GNU patch 2.5)
-dnl
-AC_DEFUN(BASH_LARGE_FILE_SUPPORT,
-[AC_MSG_CHECKING(whether large file support needs explicit enabling)
-ac_getconfs=''
-ac_result=yes
-ac_set=''
-ac_shellvars='CPPFLAGS LDFLAGS LIBS'
-for ac_shellvar in $ac_shellvars; do
- case $ac_shellvar in
- CPPFLAGS) ac_lfsvar=LFS_CFLAGS ac_lfs64var=LFS64_CFLAGS ;;
- *) ac_lfsvar=LFS_$ac_shellvar ac_lfs64var=LFS64_$ac_shellvar ;;
- esac
- eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar
- (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; }
- ac_getconf=`getconf $ac_lfsvar`
- ac_getconf64=`getconf $ac_lfs64var`
- ac_getconfs=$ac_getconfs$ac_getconf\ $ac_getconf64
- eval ac_test_$ac_shellvar="\$ac_getconf\ \$ac_getconf64"
-done
-case "$ac_result$ac_getconfs" in
-yes) ac_result=no ;;
-esac
-case "$ac_result$ac_set" in
-yes?*) ac_result="yes, but $ac_set is already set, so use its settings"
-esac
-AC_MSG_RESULT($ac_result)
-case $ac_result in
-yes)
- for ac_shellvar in $ac_shellvars; do
- eval $ac_shellvar=\$ac_test_$ac_shellvar
- done ;;
-esac
-])
-
-dnl
-dnl AC_SYS_RESTARTABLE_SYSCALLS tests only for restarted system calls
-dnl after a signal handler has been installed with signal(). Since
-dnl Bash uses sigaction() if it is available, we need to check whether
-dnl or not a signal handler installed with sigaction and SA_RESTART
-dnl causes system calls to be restarted after the signal is caught
-dnl
-AC_DEFUN(BASH_SYS_RESTARTABLE_SYSCALLS,
-[AC_REQUIRE([BASH_SIGNAL_CHECK])
-AC_CACHE_CHECK(whether posix sigaction restarts system calls by default,
-bash_cv_sys_restartable_syscalls,
-[AC_TRY_RUN(
-[/* Exit 0 (true) if wait returns something other than -1,
- i.e. the pid of the child, which means that wait was restarted
- after getting the signal. */
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <sys/types.h>
-#include <signal.h>
-static int caught = 0;
-void ucatch (isig) int isig; { caught = 1; }
-main ()
-{
-#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
- exit (1);
-#else
- struct sigaction act, oact;
- int i, status;
-
- act.sa_handler = ucatch;
- /* Might want to add SA_RESTART here, but bash's set_signal_handler
- does not. */
- act.sa_flags = 0;
- sigemptyset(&act.sa_mask);
- sigemptyset(&oact.sa_mask);
- i = fork ();
- /* A possible race condition here, but in practice it never happens. */
- if (i == 0) { sleep (3); kill (getppid (), SIGINT); sleep (3); exit (0); }
- sigaction(SIGINT, &act, &oact);
- status = wait(&i);
- if (status == -1) wait(&i);
- exit (status == -1);
-#endif
-}
-], bash_cv_sys_restartable_syscalls=yes, bash_cv_sys_restartable_syscalls=no,
- AC_MSG_WARN(cannot check restartable syscalls if cross compiling))
-])
-if test $bash_cv_sys_restartable_syscalls = yes; then
- AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS)
-fi
-])
dnl
dnl Check for 64-bit off_t -- used for malloc alignment
dnl
@@ -1415,22 +1562,6 @@ if test $bash_cv_off_t_64 = yes; then
AC_DEFINE(HAVE_OFF_T_64)
fi])
-AC_DEFUN(BASH_STRUCT_TIMEVAL,
-[AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h)
-AC_CACHE_VAL(bash_cv_struct_timeval,
-[
-AC_EGREP_HEADER(struct timeval, sys/time.h,
- bash_cv_struct_timeval=yes,
- AC_EGREP_HEADER(struct timeval, time.h,
- bash_cv_struct_timeval=yes,
- bash_cv_struct_timeval=no))
-])
-AC_MSG_RESULT($bash_cv_struct_timeval)
-if test $bash_cv_struct_timeval = yes; then
- AC_DEFINE(HAVE_TIMEVAL)
-fi
-])
-
AC_DEFUN(BASH_CHECK_RTSIGS,
[AC_MSG_CHECKING(for unusable real-time signals due to large values)
AC_CACHE_VAL(bash_cv_unusable_rtsigs,
@@ -1461,3 +1592,115 @@ if test $bash_cv_unusable_rtsigs = yes; then
AC_DEFINE(UNUSABLE_RT_SIGNALS)
fi
])
+
+dnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB
+dnl require:
+dnl AC_PROG_CC
+dnl BASH_CHECK_LIB_TERMCAP
+
+AC_DEFUN(RL_LIB_READLINE_VERSION,
+[
+AC_REQUIRE([BASH_CHECK_LIB_TERMCAP])
+
+AC_MSG_CHECKING([version of installed readline library])
+
+# What a pain in the ass this is.
+
+# save cpp and ld options
+_save_CFLAGS="$CFLAGS"
+_save_LDFLAGS="$LDFLAGS"
+_save_LIBS="$LIBS"
+
+# Don't set ac_cv_rl_prefix if the caller has already assigned a value. This
+# allows the caller to do something like $_rl_prefix=$withval if the user
+# specifies --with-installed-readline=PREFIX as an argument to configure
+
+if test -z "$ac_cv_rl_prefix"; then
+test "x$prefix" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix}
+fi
+
+eval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include
+eval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib
+
+LIBS="$LIBS -lreadline ${TERMCAP_LIB}"
+CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}"
+LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}"
+
+AC_TRY_RUN([
+#include <stdio.h>
+#include <readline/readline.h>
+
+main()
+{
+ FILE *fp;
+ fp = fopen("conftest.rlv", "w");
+ if (fp == 0) exit(1);
+ fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0");
+ fclose(fp);
+ exit(0);
+}
+],
+ac_cv_rl_version=`cat conftest.rlv`,
+ac_cv_rl_version='0.0',
+ac_cv_rl_version='4.2')
+
+CFLAGS="$_save_CFLAGS"
+LDFLAGS="$_save_LDFLAGS"
+LIBS="$_save_LIBS"
+
+RL_MAJOR=0
+RL_MINOR=0
+
+# (
+case "$ac_cv_rl_version" in
+2*|3*|4*|5*|6*|7*|8*|9*)
+ RL_MAJOR=`echo $ac_cv_rl_version | sed 's:\..*$::'`
+ RL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\.::' -e 's:[a-zA-Z]*$::'`
+ ;;
+esac
+
+# (((
+case $RL_MAJOR in
+[[0-9][0-9]]) _RL_MAJOR=$RL_MAJOR ;;
+[[0-9]]) _RL_MAJOR=0$RL_MAJOR ;;
+*) _RL_MAJOR=00 ;;
+esac
+
+# (((
+case $RL_MINOR in
+[[0-9][0-9]]) _RL_MINOR=$RL_MINOR ;;
+[[0-9]]) _RL_MINOR=0$RL_MINOR ;;
+*) _RL_MINOR=00 ;;
+esac
+
+RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}"
+
+# Readline versions greater than 4.2 have these defines in readline.h
+
+if test $ac_cv_rl_version = '0.0' ; then
+ AC_MSG_WARN([Could not test version of installed readline library.])
+elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then
+ # set these for use by the caller
+ RL_PREFIX=$ac_cv_rl_prefix
+ RL_LIBDIR=$ac_cv_rl_libdir
+ RL_INCLUDEDIR=$ac_cv_rl_includedir
+ AC_MSG_RESULT($ac_cv_rl_version)
+else
+
+AC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library])
+AC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library])
+AC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library])
+
+AC_SUBST(RL_VERSION)
+AC_SUBST(RL_MAJOR)
+AC_SUBST(RL_MINOR)
+
+# set these for use by the caller
+RL_PREFIX=$ac_cv_rl_prefix
+RL_LIBDIR=$ac_cv_rl_libdir
+RL_INCLUDEDIR=$ac_cv_rl_includedir
+
+AC_MSG_RESULT($ac_cv_rl_version)
+
+fi
+])
diff --git a/ansi_stdlib.h b/ansi_stdlib.h
index 3a354f2..db13cd2 100644
--- a/ansi_stdlib.h
+++ b/ansi_stdlib.h
@@ -25,14 +25,24 @@
/* String conversion functions. */
extern int atoi ();
-extern long int atol ();
extern double atof ();
extern double strtod ();
/* Memory allocation functions. */
-extern char *malloc ();
-extern char *realloc ();
+/* Generic pointer type. */
+#ifndef PTR_T
+
+#if defined (__STDC__)
+# define PTR_T void *
+#else
+# define PTR_T char *
+#endif
+
+#endif /* PTR_T */
+
+extern PTR_T malloc ();
+extern PTR_T realloc ();
extern void free ();
/* Other miscellaneous functions. */
diff --git a/bind.c b/bind.c
index 74fa6f2..d429177 100644
--- a/bind.c
+++ b/bind.c
@@ -68,9 +68,9 @@ extern char *strchr (), *strrchr ();
/* Variables exported by this file. */
Keymap rl_binding_keymap;
-static int _rl_read_init_file __P((const char *, int));
-static int glean_key_from_name __P((char *));
-static int substring_member_of_array __P((char *, const char **));
+static int _rl_read_init_file PARAMS((const char *, int));
+static int glean_key_from_name PARAMS((char *));
+static int substring_member_of_array PARAMS((char *, const char **));
static int currently_reading_init_file;
@@ -255,7 +255,7 @@ rl_generic_bind (type, keyseq, data, map)
return -1;
}
- keys = xmalloc (1 + (2 * strlen (keyseq)));
+ keys = (char *)xmalloc (1 + (2 * strlen (keyseq)));
/* Translate the ASCII representation of KEYSEQ into an array of
characters. Stuff the characters into KEYS, and the length of
@@ -269,7 +269,7 @@ rl_generic_bind (type, keyseq, data, map)
/* Bind keys, making new keymaps as necessary. */
for (i = 0; i < keys_len; i++)
{
- int ic = (int) ((unsigned char)keys[i]);
+ unsigned char ic = keys[i];
if (_rl_convert_meta_chars_to_ascii && META_CHAR (ic))
{
@@ -393,16 +393,16 @@ rl_translate_keyseq (seq, array, len)
for (temp = 2, c -= '0'; ISOCTAL (seq[i]) && temp--; i++)
c = (c * 8) + OCTVALUE (seq[i]);
i--; /* auto-increment in for loop */
- array[l++] = c % (largest_char + 1);
+ array[l++] = c & largest_char;
break;
case 'x':
i++;
- for (temp = 3, c = 0; isxdigit (seq[i]) && temp--; i++)
+ for (temp = 2, c = 0; ISXDIGIT ((unsigned char)seq[i]) && temp--; i++)
c = (c * 16) + HEXVALUE (seq[i]);
- if (temp == 3)
+ if (temp == 2)
c = 'x';
i--; /* auto-increment in for loop */
- array[l++] = c % (largest_char + 1);
+ array[l++] = c & largest_char;
break;
default: /* backslashes before non-special chars just add the char */
array[l++] = c;
@@ -472,7 +472,7 @@ _rl_untranslate_macro_value (seq)
char *ret, *r, *s;
int c;
- r = ret = xmalloc (7 * strlen (seq) + 1);
+ r = ret = (char *)xmalloc (7 * strlen (seq) + 1);
for (s = seq; *s; s++)
{
c = *s;
@@ -547,7 +547,7 @@ rl_function_of_keyseq (keyseq, map, type)
for (i = 0; keyseq && keyseq[i]; i++)
{
- int ic = keyseq[i];
+ unsigned char ic = keyseq[i];
if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
{
@@ -782,7 +782,7 @@ _rl_init_file_error (msg)
/* */
/* **************************************************************** */
-typedef int _rl_parser_func_t __P((char *));
+typedef int _rl_parser_func_t PARAMS((char *));
/* Things that mean `Control'. */
const char *_rl_possible_control_prefixes[] = {
@@ -1145,7 +1145,7 @@ rl_parse_and_bind (string)
char *seq;
register int j, k, passc;
- seq = xmalloc (1 + strlen (string));
+ seq = (char *)xmalloc (1 + strlen (string));
for (j = 1, k = passc = 0; string[j]; j++)
{
/* Allow backslash to quote characters, but leave them in place.
@@ -1203,7 +1203,7 @@ rl_parse_and_bind (string)
/* Temporary. Handle old-style keyname with macro-binding. */
if (*funname == '\'' || *funname == '"')
{
- unsigned char useq[2];
+ char useq[2];
int fl = strlen (funname);
useq[0] = key; useq[1] = '\0';
@@ -1245,10 +1245,12 @@ static struct {
{ "disable-completion", &rl_inhibit_completion, 0 },
{ "enable-keypad", &_rl_enable_keypad, 0 },
{ "expand-tilde", &rl_complete_with_tilde_expansion, 0 },
+ { "history-preserve-point", &_rl_history_preserve_point, 0 },
{ "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 },
{ "input-meta", &_rl_meta_flag, 0 },
{ "mark-directories", &_rl_complete_mark_directories, 0 },
{ "mark-modified-lines", &_rl_mark_modified_lines, 0 },
+ { "match-hidden-files", &_rl_match_hidden_files, 0 },
{ "meta-flag", &_rl_meta_flag, 0 },
{ "output-meta", &_rl_output_meta_chars, 0 },
{ "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL },
@@ -1294,7 +1296,7 @@ hack_special_boolean_var (i)
}
}
-typedef int _rl_sv_func_t __P((const char *));
+typedef int _rl_sv_func_t PARAMS((const char *));
/* These *must* correspond to the array indices for the appropriate
string variable. (Though they're not used right now.) */
@@ -1308,12 +1310,12 @@ typedef int _rl_sv_func_t __P((const char *));
#define V_INT 2
/* Forward declarations */
-static int sv_bell_style __P((const char *));
-static int sv_combegin __P((const char *));
-static int sv_compquery __P((const char *));
-static int sv_editmode __P((const char *));
-static int sv_isrchterm __P((const char *));
-static int sv_keymap __P((const char *));
+static int sv_bell_style PARAMS((const char *));
+static int sv_combegin PARAMS((const char *));
+static int sv_compquery PARAMS((const char *));
+static int sv_editmode PARAMS((const char *));
+static int sv_isrchterm PARAMS((const char *));
+static int sv_keymap PARAMS((const char *));
static struct {
const char *name;
@@ -1446,24 +1448,22 @@ sv_keymap (value)
return 1;
}
-#define _SET_BELL(v) do { _rl_bell_preference = v; return 0; } while (0)
-
static int
sv_bell_style (value)
const char *value;
{
if (value == 0 || *value == '\0')
- _SET_BELL (AUDIBLE_BELL);
+ _rl_bell_preference = AUDIBLE_BELL;
else if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0)
- _SET_BELL (NO_BELL);
+ _rl_bell_preference = NO_BELL;
else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0)
- _SET_BELL (AUDIBLE_BELL);
+ _rl_bell_preference = AUDIBLE_BELL;
else if (_rl_stricmp (value, "visible") == 0)
- _SET_BELL (VISIBLE_BELL);
+ _rl_bell_preference = VISIBLE_BELL;
else
return 1;
+ return 0;
}
-#undef _SET_BELL
static int
sv_isrchterm (value)
@@ -1493,7 +1493,7 @@ sv_isrchterm (value)
v[end] = '\0';
/* The value starts at v + beg. Translate it into a character string. */
- _rl_isearch_terminators = (unsigned char *)xmalloc (2 * strlen (v) + 1);
+ _rl_isearch_terminators = (char *)xmalloc (2 * strlen (v) + 1);
rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end);
_rl_isearch_terminators[end] = '\0';
@@ -1751,7 +1751,7 @@ rl_invoking_keyseqs_in_map (function, map)
if (result_index + 2 > result_size)
{
result_size += 10;
- result = (char **) xrealloc (result, result_size * sizeof (char *));
+ result = (char **)xrealloc (result, result_size * sizeof (char *));
}
result[result_index++] = keyname;
@@ -1803,7 +1803,7 @@ rl_invoking_keyseqs_in_map (function, map)
if (result_index + 2 > result_size)
{
result_size += 10;
- result = (char **) xrealloc (result, result_size * sizeof (char *));
+ result = (char **)xrealloc (result, result_size * sizeof (char *));
}
result[result_index++] = keyname;
@@ -1951,7 +1951,7 @@ _rl_macro_dumper_internal (print_readably, map, prefix)
prefix_len = prefix ? strlen (prefix) : 0;
if (key == ESC)
{
- keyname = xmalloc (3 + prefix_len);
+ keyname = (char *)xmalloc (3 + prefix_len);
if (prefix)
strcpy (keyname, prefix);
keyname[prefix_len] = '\\';
@@ -1963,7 +1963,7 @@ _rl_macro_dumper_internal (print_readably, map, prefix)
keyname = _rl_get_keyname (key);
if (prefix)
{
- out = xmalloc (strlen (keyname) + prefix_len + 1);
+ out = (char *)xmalloc (strlen (keyname) + prefix_len + 1);
strcpy (out, prefix);
strcpy (out + prefix_len, keyname);
free (keyname);
diff --git a/callback.c b/callback.c
index 9ddf9f1..a8f4323 100644
--- a/callback.c
+++ b/callback.c
@@ -30,6 +30,13 @@
#if defined (READLINE_CALLBACKS)
#include <sys/types.h>
+
+#ifdef HAVE_STDLIB_H
+# include <stdlib.h>
+#else
+# include "ansi_stdlib.h"
+#endif
+
#include <stdio.h>
/* System-specific feature definitions and include files. */
diff --git a/chardefs.h b/chardefs.h
index aec704d..33ee512 100644
--- a/chardefs.h
+++ b/chardefs.h
@@ -27,10 +27,14 @@
#if defined (HAVE_CONFIG_H)
# if defined (HAVE_STRING_H)
+# if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H)
+# include <memory.h>
+# endif
# include <string.h>
-# else
-# include <strings.h>
# endif /* HAVE_STRING_H */
+# if defined (HAVE_STRINGS_H)
+# include <strings.h>
+# endif /* HAVE_STRINGS_H */
#else
# include <string.h>
#endif /* !HAVE_CONFIG_H */
@@ -60,33 +64,56 @@
#define UNMETA(c) ((c) & (~meta_character_bit))
#define UNCTRL(c) _rl_to_upper(((c)|control_character_bit))
-/* Old versions
-#define _rl_lowercase_p(c) (((c) > ('a' - 1) && (c) < ('z' + 1)))
-#define _rl_uppercase_p(c) (((c) > ('A' - 1) && (c) < ('Z' + 1)))
-#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
-*/
+#if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII))
+# define IN_CTYPE_DOMAIN(c) 1
+#else
+# define IN_CTYPE_DOMAIN(c) isascii(c)
+#endif
+
+#if !defined (isxdigit) && !defined (HAVE_ISXDIGIT)
+# define isxdigit(c) (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
+#endif
+
+#define NON_NEGATIVE(c) ((unsigned char)(c) == (c))
-#define _rl_lowercase_p(c) (islower(c))
-#define _rl_uppercase_p(c) (isupper(c))
-#define _rl_digit_p(x) (isdigit (x))
+#define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum (c))
+#define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha (c))
+#define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit (c))
+#define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower (c))
+#define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint (c))
+#define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper (c))
+#define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit (c))
-#define _rl_pure_alphabetic(c) (_rl_lowercase_p(c) || _rl_uppercase_p(c))
-#define ALPHABETIC(c) (_rl_lowercase_p(c) || _rl_uppercase_p(c) || _rl_digit_p(c))
+#define _rl_lowercase_p(c) (NON_NEGATIVE(c) && ISLOWER(c))
+#define _rl_uppercase_p(c) (NON_NEGATIVE(c) && ISUPPER(c))
+#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
-/* Old versions
-# define _rl_to_upper(c) (_rl_lowercase_p(c) ? ((c) - 32) : (c))
-# define _rl_to_lower(c) (_rl_uppercase_p(c) ? ((c) + 32) : (c))
-*/
+#define _rl_pure_alphabetic(c) (NON_NEGATIVE(c) && ISALPHA(c))
+#define ALPHABETIC(c) (NON_NEGATIVE(c) && ISALNUM(c))
#ifndef _rl_to_upper
-# define _rl_to_upper(c) (islower(c) ? toupper(c) : (c))
-# define _rl_to_lower(c) (isupper(c) ? tolower(c) : (c))
+# define _rl_to_upper(c) (_rl_lowercase_p(c) ? toupper((unsigned char)c) : (c))
+# define _rl_to_lower(c) (_rl_uppercase_p(c) ? tolower((unsigned char)c) : (c))
#endif
#ifndef _rl_digit_value
-#define _rl_digit_value(x) ((x) - '0')
+# define _rl_digit_value(x) ((x) - '0')
#endif
+#ifndef _rl_isident
+# define _rl_isident(c) (ISALNUM(c) || (c) == '_')
+#endif
+
+#ifndef ISOCTAL
+# define ISOCTAL(c) ((c) >= '0' && (c) <= '7')
+#endif
+#define OCTVALUE(c) ((c) - '0')
+
+#define HEXVALUE(c) \
+ (((c) >= 'a' && (c) <= 'f') \
+ ? (c)-'a'+10 \
+ : (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0')
+
#ifndef NEWLINE
#define NEWLINE '\n'
#endif
@@ -123,18 +150,4 @@
#endif
#define ESC CTRL('[')
-#ifndef ISOCTAL
-#define ISOCTAL(c) ((c) >= '0' && (c) <= '7')
-#endif
-#define OCTVALUE(c) ((c) - '0')
-
-#ifndef isxdigit
-# define isxdigit(c) (isdigit((c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
-#endif
-
-#define HEXVALUE(c) \
- (((c) >= 'a' && (c) <= 'f') \
- ? (c)-'a'+10 \
- : (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0')
-
#endif /* _CHARDEFS_H_ */
diff --git a/compat.c b/compat.c
index 1f41559..a66d210 100644
--- a/compat.c
+++ b/compat.c
@@ -30,18 +30,18 @@
#include "rlstdc.h"
#include "rltypedefs.h"
-extern void rl_free_undo_list __P((void));
-extern int rl_maybe_save_line __P((void));
-extern int rl_maybe_unsave_line __P((void));
-extern int rl_maybe_replace_line __P((void));
-
-extern int rl_crlf __P((void));
-extern int rl_ding __P((void));
-extern int rl_alphabetic __P((int));
-
-extern char **rl_completion_matches __P((const char *, rl_compentry_func_t *));
-extern char *rl_username_completion_function __P((const char *, int));
-extern char *rl_filename_completion_function __P((const char *, int));
+extern void rl_free_undo_list PARAMS((void));
+extern int rl_maybe_save_line PARAMS((void));
+extern int rl_maybe_unsave_line PARAMS((void));
+extern int rl_maybe_replace_line PARAMS((void));
+
+extern int rl_crlf PARAMS((void));
+extern int rl_ding PARAMS((void));
+extern int rl_alphabetic PARAMS((int));
+
+extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *));
+extern char *rl_username_completion_function PARAMS((const char *, int));
+extern char *rl_filename_completion_function PARAMS((const char *, int));
/* Provide backwards-compatible entry points for old function names. */
diff --git a/complete.c b/complete.c
index 927bd52..cbcee28 100644
--- a/complete.c
+++ b/complete.c
@@ -67,10 +67,19 @@ typedef int QSFUNC (const void *, const void *);
typedef int QSFUNC ();
#endif
+#ifdef HAVE_LSTAT
+# define LSTAT lstat
+#else
+# define LSTAT stat
+#endif
+
+/* Unix version of a hidden file. Could be different on other systems. */
+#define HIDDEN_FILE(fname) ((fname)[0] == '.')
+
/* Most systems don't declare getpwent in <pwd.h> if _POSIX_SOURCE is
defined. */
#if !defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE)
-extern struct passwd *getpwent __P((void));
+extern struct passwd *getpwent PARAMS((void));
#endif /* !HAVE_GETPW_DECLS || _POSIX_SOURCE */
/* If non-zero, then this is the address of a function to call when
@@ -86,17 +95,28 @@ rl_compdisp_func_t *rl_completion_display_matches_hook = (rl_compdisp_func_t *)N
# if !defined (X_OK)
# define X_OK 1
# endif
-static int stat_char __P((char *));
+static int stat_char PARAMS((char *));
#endif
-static char *rl_quote_filename __P((char *, int, char *));
+static char *rl_quote_filename PARAMS((char *, int, char *));
+
+static int get_y_or_n PARAMS((void));
+static char *printable_part PARAMS((char *));
+static int print_filename PARAMS((char *, char *));
+static char find_completion_word PARAMS((int *, int *));
+
+static char **gen_completion_matches PARAMS((char *, int, int, rl_compentry_func_t *, int, int));
-static char **remove_duplicate_matches __P((char **));
-static void insert_match __P((char *, int, int, char *));
-static int append_to_match __P((char *, int, int));
-static void insert_all_matches __P((char **, int, char *));
-static void display_matches __P((char **));
-static int compute_lcd_of_matches __P((char **, int, const char *));
+static char **remove_duplicate_matches PARAMS((char **));
+static void insert_match PARAMS((char *, int, int, char *));
+static int append_to_match PARAMS((char *, int, int, int));
+static void insert_all_matches PARAMS((char **, int, char *));
+static void display_matches PARAMS((char **));
+static int compute_lcd_of_matches PARAMS((char **, int, const char *));
+static int postprocess_matches PARAMS((char ***, int));
+
+static char *make_quoted_replacement PARAMS((char *, int, char *));
+static void free_match_list PARAMS((char **));
/* **************************************************************** */
/* */
@@ -123,6 +143,10 @@ int _rl_completion_case_fold = 1;
int _rl_completion_case_fold;
#endif
+/* If non-zero, don't match hidden files (filenames beginning with a `.' on
+ Unix) when doing filename completion. */
+int _rl_match_hidden_files = 1;
+
/* Global variables available to applications using readline. */
#if defined (VISIBLE_STATS)
@@ -387,7 +411,7 @@ printable_part (pathname)
temp = rl_filename_completion_desired ? strrchr (pathname, '/') : (char *)NULL;
#if defined (__MSDOS__)
- if (rl_filename_completion_desired && temp == 0 && isalpha (pathname[0]) && pathname[1] == ':')
+ if (rl_filename_completion_desired && temp == 0 && ISALPHA ((unsigned char)pathname[0]) && pathname[1] == ':')
temp = pathname + 1;
#endif
return (temp ? ++temp : pathname);
@@ -461,7 +485,7 @@ print_filename (to_print, full_pathname)
slen = strlen (s);
tlen = strlen (to_print);
- new_full_pathname = xmalloc (slen + tlen + 2);
+ new_full_pathname = (char *)xmalloc (slen + tlen + 2);
strcpy (new_full_pathname, s);
new_full_pathname[slen] = '/';
strcpy (new_full_pathname + slen + 1, to_print);
@@ -496,7 +520,7 @@ rl_quote_filename (s, rtype, qcp)
{
char *r;
- r = xmalloc (strlen (s) + 2);
+ r = (char *)xmalloc (strlen (s) + 2);
*r = *rl_completer_quote_characters;
strcpy (r + 1, s);
if (qcp)
@@ -507,7 +531,7 @@ rl_quote_filename (s, rtype, qcp)
/* Find the bounds of the current word for completion purposes, and leave
rl_point set to the end of the word. This function skips quoted
substrings (characters between matched pairs of characters in
- rl_completer_quote_characters. First we try to find an unclosed
+ rl_completer_quote_characters). First we try to find an unclosed
quoted substring on which to do matching. If one is not found, we use
the word break characters to find the boundaries of the current word.
We call an application-specific function to decide whether or not a
@@ -797,13 +821,40 @@ compute_lcd_of_matches (match_list, matches, text)
value of matches[0]. */
if (low == 0 && text && *text)
{
- match_list[0] = xmalloc (strlen (text) + 1);
+ match_list[0] = (char *)xmalloc (strlen (text) + 1);
strcpy (match_list[0], text);
}
else
{
- match_list[0] = xmalloc (low + 1);
- strncpy (match_list[0], match_list[1], low);
+ match_list[0] = (char *)xmalloc (low + 1);
+
+ /* If we are ignoring case, try to preserve the case of the string
+ the user typed in the face of multiple matches differing in case. */
+ if (_rl_completion_case_fold)
+ {
+ /* sort the list to get consistent answers. */
+ qsort (match_list+1, matches, sizeof(char *), (QSFUNC *)_rl_qsort_string_compare);
+
+ si = strlen (text);
+ if (si <= low)
+ {
+ for (i = 1; i <= matches; i++)
+ if (strncmp (match_list[i], text, si) == 0)
+ {
+ strncpy (match_list[0], match_list[i], low);
+ break;
+ }
+ /* no casematch, use first entry */
+ if (i > matches)
+ strncpy (match_list[0], match_list[1], low);
+ }
+ else
+ /* otherwise, just use the text the user typed. */
+ strncpy (match_list[0], text, low);
+ }
+ else
+ strncpy (match_list[0], match_list[1], low);
+
match_list[0][low] = '\0';
}
@@ -1102,14 +1153,16 @@ insert_match (match, start, mtype, qc)
just-inserted match. If the user has specified that directories
should be marked by a trailing `/', append one of those instead. The
default trailing character is a space. Returns the number of characters
- appended. */
+ appended. If NONTRIVIAL_MATCH is set, we test for a symlink (if the OS
+ has them) and don't add a suffix for a symlink to a directory. A
+ nontrivial match is one that actually adds to the word being completed. */
static int
-append_to_match (text, delimiter, quote_char)
+append_to_match (text, delimiter, quote_char, nontrivial_match)
char *text;
- int delimiter, quote_char;
+ int delimiter, quote_char, nontrivial_match;
{
char temp_string[4], *filename;
- int temp_string_index;
+ int temp_string_index, s;
struct stat finfo;
temp_string_index = 0;
@@ -1126,11 +1179,19 @@ append_to_match (text, delimiter, quote_char)
if (rl_filename_completion_desired)
{
filename = tilde_expand (text);
- if (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode))
+ s = nontrivial_match ? LSTAT (filename, &finfo) : stat (filename, &finfo);
+ if (s == 0 && S_ISDIR (finfo.st_mode))
{
if (_rl_complete_mark_directories && rl_line_buffer[rl_point] != '/')
rl_insert_text ("/");
}
+#ifdef S_ISLNK
+ /* Don't add anything if the filename is a symlink and resolves to a
+ directory. */
+ else if (s == 0 && S_ISLNK (finfo.st_mode) &&
+ stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode))
+ ;
+#endif
else
{
if (rl_point == rl_end)
@@ -1210,7 +1271,7 @@ rl_complete_internal (what_to_do)
{
char **matches;
rl_compentry_func_t *our_func;
- int start, end, delimiter, found_quote, i;
+ int start, end, delimiter, found_quote, i, nontrivial_lcd;
char *text, *saved_line_buffer;
char quote_char;
@@ -1240,6 +1301,9 @@ rl_complete_internal (what_to_do)
text = rl_copy_text (start, end);
matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char);
+ /* nontrivial_lcd is set if the common prefix adds something to the word
+ being completed. */
+ nontrivial_lcd = matches && strcmp (text, matches[0]) != 0;
free (text);
if (matches == 0)
@@ -1291,7 +1355,7 @@ rl_complete_internal (what_to_do)
rl_ding (); /* There are other matches remaining. */
}
else
- append_to_match (matches[0], delimiter, quote_char);
+ append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd);
break;
@@ -1428,7 +1492,7 @@ rl_username_completion_function (text, state)
}
else
{
- value = xmalloc (2 + strlen (entry->pw_name));
+ value = (char *)xmalloc (2 + strlen (entry->pw_name));
*value = *text;
@@ -1483,7 +1547,7 @@ rl_filename_completion_function (text, state)
#if defined (__MSDOS__)
/* special hack for //X/... */
- if (dirname[0] == '/' && dirname[1] == '/' && isalpha (dirname[2]) && dirname[3] == '/')
+ if (dirname[0] == '/' && dirname[1] == '/' && ISALPHA ((unsigned char)dirname[2]) && dirname[3] == '/')
temp = strrchr (dirname + 3, '/');
#endif
@@ -1494,7 +1558,7 @@ rl_filename_completion_function (text, state)
}
#if defined (__MSDOS__)
/* searches from current directory on the drive */
- else if (isalpha (dirname[0]) && dirname[1] == ':')
+ else if (ISALPHA ((unsigned char)dirname[0]) && dirname[1] == ':')
{
strcpy (filename, dirname + 2);
dirname[2] = '\0';
@@ -1544,10 +1608,14 @@ rl_filename_completion_function (text, state)
entry = (struct dirent *)NULL;
while (directory && (entry = readdir (directory)))
{
- /* Special case for no filename.
- All entries except "." and ".." match. */
+ /* Special case for no filename. If the user has disabled the
+ `match-hidden-files' variable, skip filenames beginning with `.'.
+ All other entries except "." and ".." match. */
if (filename_len == 0)
{
+ if (_rl_match_hidden_files == 0 && HIDDEN_FILE (entry->d_name))
+ continue;
+
if (entry->d_name[0] != '.' ||
(entry->d_name[1] &&
(entry->d_name[1] != '.' || entry->d_name[2])))
@@ -1607,7 +1675,7 @@ rl_filename_completion_function (text, state)
if (rl_complete_with_tilde_expansion && *users_dirname == '~')
{
dirlen = strlen (dirname);
- temp = xmalloc (2 + dirlen + D_NAMLEN (entry));
+ temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry));
strcpy (temp, dirname);
/* Canonicalization cuts off any final slash present. We
may need to add it back. */
@@ -1620,7 +1688,7 @@ rl_filename_completion_function (text, state)
else
{
dirlen = strlen (users_dirname);
- temp = xmalloc (2 + dirlen + D_NAMLEN (entry));
+ temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry));
strcpy (temp, users_dirname);
/* Make sure that temp has a trailing slash here. */
if (users_dirname[dirlen - 1] != '/')
@@ -1745,7 +1813,8 @@ rl_menu_complete (count, ignore)
else
{
insert_match (matches[match_list_index], orig_start, SINGLE_MATCH, &quote_char);
- append_to_match (matches[match_list_index], delimiter, quote_char);
+ append_to_match (matches[match_list_index], delimiter, quote_char,
+ strcmp (orig_text, matches[match_list_index]));
}
completion_changed_buffer = 1;
diff --git a/config.h.in b/config.h.in
index ca7bd90..cd15211 100644
--- a/config.h.in
+++ b/config.h.in
@@ -6,11 +6,24 @@
/* Define as the return type of signal handlers (int or void). */
#undef RETSIGTYPE
+/* Characteristics of the compiler. */
+#undef const
+
+#undef size_t
+
+#undef ssize_t
+
/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */
#undef STAT_MACROS_BROKEN
#undef VOID_SIGHANDLER
+/* Define if you have the isascii function. */
+#undef HAVE_ISASCII
+
+/* Define if you have the isxdigit function. */
+#undef HAVE_ISXDIGIT
+
/* Define if you have the lstat function. */
#undef HAVE_LSTAT
@@ -26,15 +39,21 @@
/* Define if you have the setenv function. */
#undef HAVE_SETENV
+/* Define if you have the setlocale function. */
+#undef HAVE_SETLOCALE
+
/* Define if you have the strcasecmp function. */
#undef HAVE_STRCASECMP
-/* Define if you have the setlocale function. */
-#undef HAVE_SETLOCALE
+/* Define if you have the strpbrk function. */
+#undef HAVE_STRPBRK
/* Define if you have the tcgetattr function. */
#undef HAVE_TCGETATTR
+/* Define if you have the vsnprintf function. */
+#undef HAVE_VSNPRINTF
+
/* Define if you have the strcoll function. */
#undef HAVE_STRCOLL
@@ -52,6 +71,9 @@
/* Define if you have the <string.h> header file. */
#undef HAVE_STRING_H
+/* Define if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
/* Define if you have the <sys/dir.h> header file. */
#undef HAVE_SYS_DIR_H
@@ -93,6 +115,10 @@
#undef HAVE_LOCALE_H
+#undef HAVE_LIMITS_H
+
+#undef HAVE_MEMORY_H
+
/* Definitions pulled in from aclocal.m4. */
#undef VOID_SIGHANDLER
diff --git a/configure b/configure
index 0765d4e..e548b21 100755
--- a/configure
+++ b/configure
@@ -1,133 +1,158 @@
#! /bin/sh
+# From configure.in for Readline 4.2a, version 2.40, from autoconf version 2.52.
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by Autoconf 2.52 for readline 4.2a.
+#
+# Report bugs to <bug-readline@gnu.org>.
+#
+# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
-# From configure.in for Readline 4.2, version 2.26, from autoconf version 2.13
-LIBVERSION=4.2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g"
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g"
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+as_executable_p="test -f"
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
-# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13
-# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-
-# Defaults:
-ac_help=
+# Initializations.
+#
ac_default_prefix=/usr/local
-# Any additions from configure.in:
-ac_help="$ac_help
---with-curses use the curses library instead of the termcap library"
+cross_compiling=no
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete. It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+ac_unique_file="readline.h"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+# include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+# include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+# include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
# The variables have the same names as the options, with
# dashes changed to underlines.
-build=NONE
-cache_file=./config.cache
+cache_file=/dev/null
exec_prefix=NONE
-host=NONE
no_create=
-nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
@@ -136,10 +161,15 @@ program_transform_name=s,x,x,
silent=
site=
srcdir=
-target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
@@ -153,17 +183,16 @@ oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
-# Initialize some other variables.
-subdirs=
-MFLAGS= MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-# Maximum number of lines to put in a shell here document.
-ac_max_here_lines=12
+# Identity of this package.
+PACKAGE_NAME='readline'
+PACKAGE_TARNAME='readline'
+PACKAGE_VERSION='4.2a'
+PACKAGE_STRING='readline 4.2a'
+PACKAGE_BUGREPORT='bug-readline@gnu.org'
ac_prev=
for ac_option
do
-
# If the previous option needs an argument, assign it.
if test -n "$ac_prev"; then
eval "$ac_prev=\$ac_option"
@@ -171,59 +200,59 @@ do
continue
fi
- case "$ac_option" in
- -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
- *) ac_optarg= ;;
- esac
+ ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
# Accept the important Cygnus configure options, so we can diagnose typos.
- case "$ac_option" in
+ case $ac_option in
-bindir | --bindir | --bindi | --bind | --bin | --bi)
ac_prev=bindir ;;
-bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir="$ac_optarg" ;;
+ bindir=$ac_optarg ;;
-build | --build | --buil | --bui | --bu)
- ac_prev=build ;;
+ ac_prev=build_alias ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build="$ac_optarg" ;;
+ build_alias=$ac_optarg ;;
-cache-file | --cache-file | --cache-fil | --cache-fi \
| --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
ac_prev=cache_file ;;
-cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
| --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file="$ac_optarg" ;;
+ cache_file=$ac_optarg ;;
+
+ --config-cache | -C)
+ cache_file=config.cache ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
- datadir="$ac_optarg" ;;
+ datadir=$ac_optarg ;;
-disable-* | --disable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- eval "enable_${ac_feature}=no" ;;
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ eval "enable_$ac_feature=no" ;;
-enable-* | --enable-*)
- ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
- fi
- ac_feature=`echo $ac_feature| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+ { (exit 1); exit 1; }; }
+ ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "enable_${ac_feature}='$ac_optarg'" ;;
+ eval "enable_$ac_feature='$ac_optarg'" ;;
-exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
| --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
@@ -232,95 +261,47 @@ do
-exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
| --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
| --exec=* | --exe=* | --ex=*)
- exec_prefix="$ac_optarg" ;;
+ exec_prefix=$ac_optarg ;;
-gas | --gas | --ga | --g)
# Obsolete; use --with-gas.
with_gas=yes ;;
- -help | --help | --hel | --he)
- # 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 << EOF
-Usage: configure [options] [host]
-Options: [defaults in brackets after descriptions]
-Configuration:
- --cache-file=FILE cache test results in FILE
- --help print this message
- --no-create do not create output files
- --quiet, --silent do not print \`checking...' messages
- --version print the version of autoconf that created configure
-Directory and file names:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [same as prefix]
- --bindir=DIR user executables in DIR [EPREFIX/bin]
- --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
- --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
- --datadir=DIR read-only architecture-independent data in DIR
- [PREFIX/share]
- --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data in DIR
- [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
- --libdir=DIR object code libraries in DIR [EPREFIX/lib]
- --includedir=DIR C header files in DIR [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
- --infodir=DIR info documentation in DIR [PREFIX/info]
- --mandir=DIR man documentation in DIR [PREFIX/man]
- --srcdir=DIR find the sources in DIR [configure dir or ..]
- --program-prefix=PREFIX prepend PREFIX to installed program names
- --program-suffix=SUFFIX append SUFFIX to installed program names
- --program-transform-name=PROGRAM
- run sed PROGRAM on installed program names
-EOF
- cat << EOF
-Host type:
- --build=BUILD configure for building on BUILD [BUILD=HOST]
- --host=HOST configure for HOST [guessed]
- --target=TARGET configure for TARGET [TARGET=HOST]
-Features and packages:
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --x-includes=DIR X include files are in DIR
- --x-libraries=DIR X library files are in DIR
-EOF
- if test -n "$ac_help"; then
- echo "--enable and --with options recognized:$ac_help"
- fi
- exit 0 ;;
+ -help | --help | --hel | --he | -h)
+ ac_init_help=long ;;
+ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+ ac_init_help=recursive ;;
+ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+ ac_init_help=short ;;
-host | --host | --hos | --ho)
- ac_prev=host ;;
+ ac_prev=host_alias ;;
-host=* | --host=* | --hos=* | --ho=*)
- host="$ac_optarg" ;;
+ host_alias=$ac_optarg ;;
-includedir | --includedir | --includedi | --included | --include \
| --includ | --inclu | --incl | --inc)
ac_prev=includedir ;;
-includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
| --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir="$ac_optarg" ;;
+ includedir=$ac_optarg ;;
-infodir | --infodir | --infodi | --infod | --info | --inf)
ac_prev=infodir ;;
-infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir="$ac_optarg" ;;
+ infodir=$ac_optarg ;;
-libdir | --libdir | --libdi | --libd)
ac_prev=libdir ;;
-libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir="$ac_optarg" ;;
+ libdir=$ac_optarg ;;
-libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
| --libexe | --libex | --libe)
ac_prev=libexecdir ;;
-libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
| --libexe=* | --libex=* | --libe=*)
- libexecdir="$ac_optarg" ;;
+ libexecdir=$ac_optarg ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
@@ -329,12 +310,12 @@ EOF
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
- localstatedir="$ac_optarg" ;;
+ localstatedir=$ac_optarg ;;
-mandir | --mandir | --mandi | --mand | --man | --ma | --m)
ac_prev=mandir ;;
-mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir="$ac_optarg" ;;
+ mandir=$ac_optarg ;;
-nfp | --nfp | --nf)
# Obsolete; use --without-fp.
@@ -355,26 +336,26 @@ EOF
-oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
| --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
| --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir="$ac_optarg" ;;
+ oldincludedir=$ac_optarg ;;
-prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
ac_prev=prefix ;;
-prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix="$ac_optarg" ;;
+ prefix=$ac_optarg ;;
-program-prefix | --program-prefix | --program-prefi | --program-pref \
| --program-pre | --program-pr | --program-p)
ac_prev=program_prefix ;;
-program-prefix=* | --program-prefix=* | --program-prefi=* \
| --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix="$ac_optarg" ;;
+ program_prefix=$ac_optarg ;;
-program-suffix | --program-suffix | --program-suffi | --program-suff \
| --program-suf | --program-su | --program-s)
ac_prev=program_suffix ;;
-program-suffix=* | --program-suffix=* | --program-suffi=* \
| --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix="$ac_optarg" ;;
+ program_suffix=$ac_optarg ;;
-program-transform-name | --program-transform-name \
| --program-transform-nam | --program-transform-na \
@@ -391,7 +372,7 @@ EOF
| --program-transfo=* | --program-transf=* \
| --program-trans=* | --program-tran=* \
| --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name="$ac_optarg" ;;
+ program_transform_name=$ac_optarg ;;
-q | -quiet | --quiet | --quie | --qui | --qu | --q \
| -silent | --silent | --silen | --sile | --sil)
@@ -401,7 +382,7 @@ EOF
ac_prev=sbindir ;;
-sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
| --sbi=* | --sb=*)
- sbindir="$ac_optarg" ;;
+ sbindir=$ac_optarg ;;
-sharedstatedir | --sharedstatedir | --sharedstatedi \
| --sharedstated | --sharedstate | --sharedstat | --sharedsta \
@@ -412,58 +393,57 @@ EOF
| --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
| --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
| --sha=* | --sh=*)
- sharedstatedir="$ac_optarg" ;;
+ sharedstatedir=$ac_optarg ;;
-site | --site | --sit)
ac_prev=site ;;
-site=* | --site=* | --sit=*)
- site="$ac_optarg" ;;
+ site=$ac_optarg ;;
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir="$ac_optarg" ;;
+ srcdir=$ac_optarg ;;
-sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
| --syscon | --sysco | --sysc | --sys | --sy)
ac_prev=sysconfdir ;;
-sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
| --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir="$ac_optarg" ;;
+ sysconfdir=$ac_optarg ;;
-target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target ;;
+ ac_prev=target_alias ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target="$ac_optarg" ;;
+ target_alias=$ac_optarg ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
- -version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.13"
- exit 0 ;;
+ -version | --version | --versio | --versi | --vers | -V)
+ ac_init_version=: ;;
-with-* | --with-*)
- ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
ac_package=`echo $ac_package| sed 's/-/_/g'`
- case "$ac_option" in
- *=*) ;;
+ case $ac_option in
+ *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
*) ac_optarg=yes ;;
esac
- eval "with_${ac_package}='$ac_optarg'" ;;
+ eval "with_$ac_package='$ac_optarg'" ;;
-without-* | --without-*)
- ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
# Reject names that are not valid shell variable names.
- if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
- { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
- fi
- ac_package=`echo $ac_package| sed 's/-/_/g'`
- eval "with_${ac_package}=no" ;;
+ expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid package name: $ac_package" >&2
+ { (exit 1); exit 1; }; }
+ ac_package=`echo $ac_package | sed 's/-/_/g'`
+ eval "with_$ac_package=no" ;;
--x)
# Obsolete; use --with-x.
@@ -474,98 +454,98 @@ EOF
ac_prev=x_includes ;;
-x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
| --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes="$ac_optarg" ;;
+ x_includes=$ac_optarg ;;
-x-libraries | --x-libraries | --x-librarie | --x-librari \
| --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
ac_prev=x_libraries ;;
-x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
| --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries="$ac_optarg" ;;
+ x_libraries=$ac_optarg ;;
- -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+ { (exit 1); exit 1; }; }
;;
+ *=*)
+ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+ # Reject names that are not valid shell variable names.
+ expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+ { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+ { (exit 1); exit 1; }; }
+ ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+ eval "$ac_envvar='$ac_optarg'"
+ export $ac_envvar ;;
+
*)
- if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
- echo "configure: warning: $ac_option: invalid host type" 1>&2
- fi
- if test "x$nonopt" != xNONE; then
- { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
- fi
- nonopt="$ac_option"
+ # FIXME: should be removed in autoconf 3.0.
+ echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+ echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
;;
esac
done
if test -n "$ac_prev"; then
- { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+ { echo "$as_me: error: missing argument to $ac_option" >&2
+ { (exit 1); exit 1; }; }
fi
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
-# File descriptor usage:
-# 0 standard input
-# 1 file creation
-# 2 errors and warnings
-# 3 some systems may open it to /dev/tty
-# 4 used on the Kubota Titan
-# 6 checking for... messages and results
-# 5 compiler messages saved in config.log
-if test "$silent" = yes; then
- exec 6>/dev/null
-else
- exec 6>&1
-fi
-exec 5>./config.log
-
-echo "\
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-" 1>&5
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+ *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
+ esac
+done
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Also quote any args containing shell metacharacters.
-ac_configure_args=
-for ac_arg
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+ localstatedir libdir includedir oldincludedir infodir mandir
do
- case "$ac_arg" in
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c) ;;
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
- *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
- ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ eval ac_val=$`echo $ac_var`
+ case $ac_val in
+ [\\/$]* | ?:[\\/]* ) ;;
+ *) { echo "$as_me: error: expected an absolute path for --$ac_var: $ac_val" >&2
+ { (exit 1); exit 1; }; };;
esac
done
-# NLS nuisances.
-# Only set these to C if already set. These must not be set unconditionally
-# because not all systems understand e.g. LANG=C (notably SCO).
-# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
-# Non-C LC_CTYPE values break the ctype check.
-if test "${LANG+set}" = set; then LANG=C; export LANG; fi
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
-if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
-if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: should be removed in autoconf 3.0.
+if test "x$host_alias" != x; then
+ if test "x$build_alias" = x; then
+ cross_compiling=maybe
+ echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+ If a cross compiler is detected then cross compile mode will be used." >&2
+ elif test "x$build_alias" != "x$host_alias"; then
+ cross_compiling=yes
+ fi
+fi
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -rf conftest* confdefs.h
-# AIX cpp loses on an empty file, so make sure it contains at least a newline.
-echo > confdefs.h
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
-# A filename unique to this package, relative to the directory that
-# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=readline.h
+test "$silent" = yes && exec 6>/dev/null
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
ac_srcdir_defaulted=yes
# Try the directory containing this script, then its parent.
ac_prog=$0
- ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ ac_confdir=`echo "$ac_prog" | sed 's%[\\/][^\\/][^\\/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
srcdir=$ac_confdir
if test ! -r $srcdir/$ac_unique_file; then
@@ -576,13 +556,309 @@ else
fi
if test ! -r $srcdir/$ac_unique_file; then
if test "$ac_srcdir_defaulted" = yes; then
- { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources in $ac_confdir or .." >&2
+ { (exit 1); exit 1; }; }
else
- { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ { echo "$as_me: error: cannot find sources in $srcdir" >&2
+ { (exit 1); exit 1; }; }
fi
fi
-srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+#
+# Report the --help message.
+#
+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 <<EOF
+\`configure' configures readline 4.2a to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE. See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+ -h, --help display this help and exit
+ --help=short display options specific to this package
+ --help=recursive display the short help of all the included packages
+ -V, --version display version information and exit
+ -q, --quiet, --silent do not print \`checking...' messages
+ --cache-file=FILE cache test results in FILE [disabled]
+ -C, --config-cache alias for \`--cache-file=config.cache'
+ -n, --no-create do not create output files
+ --srcdir=DIR find the sources in DIR [configure dir or \`..']
+
+EOF
+
+ cat <<EOF
+Installation directories:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+ --bindir=DIR user executables [EPREFIX/bin]
+ --sbindir=DIR system admin executables [EPREFIX/sbin]
+ --libexecdir=DIR program executables [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
+ --libdir=DIR object code libraries [EPREFIX/lib]
+ --includedir=DIR C header files [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc [/usr/include]
+ --infodir=DIR info documentation [PREFIX/info]
+ --mandir=DIR man documentation [PREFIX/man]
+EOF
+
+ cat <<\EOF
+
+System types:
+ --build=BUILD configure for building on BUILD [guessed]
+ --host=HOST build programs to run on HOST [BUILD]
+EOF
+fi
+
+if test -n "$ac_init_help"; then
+ case $ac_init_help in
+ short | recursive ) echo "Configuration of readline 4.2a:";;
+ esac
+ cat <<\EOF
+
+Optional Packages:
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+--with-curses use the curses library instead of the termcap library
+
+Some influential environment variables:
+ CC C compiler command
+ CFLAGS C compiler flags
+ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
+ nonstandard directory <lib dir>
+ CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
+ headers in a nonstandard directory <include dir>
+ CPP C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <bug-readline@gnu.org>.
+EOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+ # If there are subdirs, report their specific --help.
+ ac_popdir=`pwd`
+ for ac_subdir in : $ac_subdirs_all; do test "x$ac_subdir" = x: && continue
+ cd $ac_subdir
+ # A "../" for each directory in /$ac_subdir.
+ ac_dots=`echo $ac_subdir |
+ sed 's,^\./,,;s,[^/]$,&/,;s,[^/]*/,../,g'`
+
+ case $srcdir in
+ .) # No --srcdir option. We are building in place.
+ ac_sub_srcdir=$srcdir ;;
+ [\\/]* | ?:[\\/]* ) # Absolute path.
+ ac_sub_srcdir=$srcdir/$ac_subdir ;;
+ *) # Relative path.
+ ac_sub_srcdir=$ac_dots$srcdir/$ac_subdir ;;
+ esac
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_sub_srcdir/configure.gnu; then
+ echo
+ $SHELL $ac_sub_srcdir/configure.gnu --help=recursive
+ elif test -f $ac_sub_srcdir/configure; then
+ echo
+ $SHELL $ac_sub_srcdir/configure --help=recursive
+ elif test -f $ac_sub_srcdir/configure.ac ||
+ test -f $ac_sub_srcdir/configure.in; then
+ echo
+ $ac_configure --help
+ else
+ echo "$as_me: WARNING: no configuration information is in $ac_subdir" >&2
+ fi
+ cd $ac_popdir
+ done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+ cat <<\EOF
+readline configure 4.2a
+generated by GNU Autoconf 2.52
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+EOF
+ exit 0
+fi
+exec 5>config.log
+cat >&5 <<EOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by readline $as_me 4.2a, which was
+generated by GNU Autoconf 2.52. Invocation command line was
+
+ $ $0 $@
+
+EOF
+{
+cat <<_ASUNAME
+## ---------- ##
+## Platform. ##
+## ---------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
+
+/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
+/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo = `(hostinfo) 2>/dev/null || echo unknown`
+/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
+/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
+/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
+
+PATH = $PATH
+
+_ASUNAME
+} >&5
+
+cat >&5 <<EOF
+## ------------ ##
+## Core tests. ##
+## ------------ ##
+
+EOF
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell meta-characters.
+ac_configure_args=
+ac_sep=
+for ac_arg
+do
+ case $ac_arg in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"`
+ ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+ ac_sep=" " ;;
+ *) ac_configure_args="$ac_configure_args$ac_sep$ac_arg"
+ ac_sep=" " ;;
+ esac
+ # Get rid of the leading space.
+done
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log. We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+trap 'exit_status=$?
+ # Save into config.log some information that might help in debugging.
+ echo >&5
+ echo "## ----------------- ##" >&5
+ echo "## Cache variables. ##" >&5
+ echo "## ----------------- ##" >&5
+ echo >&5
+ # The following way of writing the cache mishandles newlines in values,
+{
+ (set) 2>&1 |
+ case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ sed -n \
+ "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+ ;;
+ *)
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} >&5
+ sed "/^$/d" confdefs.h >conftest.log
+ if test -s conftest.log; then
+ echo >&5
+ echo "## ------------ ##" >&5
+ echo "## confdefs.h. ##" >&5
+ echo "## ------------ ##" >&5
+ echo >&5
+ cat conftest.log >&5
+ fi
+ (echo; echo) >&5
+ test "$ac_signal" != 0 &&
+ echo "$as_me: caught signal $ac_signal" >&5
+ echo "$as_me: exit $exit_status" >&5
+ rm -rf conftest* confdefs* core core.* *.core conf$$* $ac_clean_files &&
+ exit $exit_status
+ ' 0
+for ac_signal in 1 2 13 15; do
+ trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Let the site file select an alternate cache file if it wants to.
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
@@ -593,44 +869,107 @@ if test -z "$CONFIG_SITE"; then
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
- echo "loading site script $ac_site_file"
+ { echo "$as_me:872: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+ cat "$ac_site_file" >&5
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
- echo "loading cache $cache_file"
- . $cache_file
+ # Some versions of bash will fail to source /dev/null (special
+ # files actually), so we avoid doing that.
+ if test -f "$cache_file"; then
+ { echo "$as_me:883: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+ case $cache_file in
+ [\\/]* | ?:[\\/]* ) . $cache_file;;
+ *) . ./$cache_file;;
+ esac
+ fi
else
- echo "creating cache $cache_file"
- > $cache_file
+ { echo "$as_me:891: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+ >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+ sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+ eval ac_old_set=\$ac_cv_env_${ac_var}_set
+ eval ac_new_set=\$ac_env_${ac_var}_set
+ eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+ eval ac_new_val="\$ac_env_${ac_var}_value"
+ case $ac_old_set,$ac_new_set in
+ set,)
+ { echo "$as_me:907: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,set)
+ { echo "$as_me:911: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+ ac_cache_corrupted=: ;;
+ ,);;
+ *)
+ if test "x$ac_old_val" != "x$ac_new_val"; then
+ { echo "$as_me:917: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+ { echo "$as_me:919: former value: $ac_old_val" >&5
+echo "$as_me: former value: $ac_old_val" >&2;}
+ { echo "$as_me:921: current value: $ac_new_val" >&5
+echo "$as_me: current value: $ac_new_val" >&2;}
+ ac_cache_corrupted=:
+ fi;;
+ esac
+ # Pass precious variables to config.status. It doesn't matter if
+ # we pass some twice (in addition to the command line arguments).
+ if test "$ac_new_set" = set; then
+ case $ac_new_val in
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+ ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"`
+ ac_configure_args="$ac_configure_args '$ac_arg'"
+ ;;
+ *) ac_configure_args="$ac_configure_args $ac_var=$ac_new_val"
+ ;;
+ esac
+ fi
+done
+if $ac_cache_corrupted; then
+ { echo "$as_me:940: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+ { { echo "$as_me:942: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+ { (exit 1); exit 1; }; }
fi
ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-ac_exeext=
-ac_objext=o
-if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
- # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
- if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
- ac_n= ac_c='
-' ac_t=' '
- else
- ac_n=-n ac_c= ac_t=
- fi
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+ *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T=' ' ;;
+ *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+ *) ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+echo "#! $SHELL" >conftest.sh
+echo "exit 0" >>conftest.sh
+chmod +x conftest.sh
+if { (echo "$as_me:962: PATH=\".;.\"; conftest.sh") >&5
+ (PATH=".;."; conftest.sh) 2>&5
+ ac_status=$?
+ echo "$as_me:965: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ ac_path_separator=';'
else
- ac_n= ac_c='\c' ac_t=
+ ac_path_separator=:
fi
-
-
-
-
-
+PATH_SEPARATOR="$ac_path_separator"
+rm -f conftest.sh
ac_aux_dir=
for ac_dir in ./support $srcdir/./support; do
@@ -642,43 +981,76 @@ for ac_dir in ./support $srcdir/./support; do
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
+ elif test -f $ac_dir/shtool; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/shtool install -c"
+ break
fi
done
if test -z "$ac_aux_dir"; then
- { echo "configure: error: can not find install-sh or install.sh in ./support $srcdir/./support" 1>&2; exit 1; }
+ { { echo "$as_me:991: error: cannot find install-sh or install.sh in ./support $srcdir/./support" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ./support $srcdir/./support" >&2;}
+ { (exit 1); exit 1; }; }
fi
-ac_config_guess=$ac_aux_dir/config.guess
-ac_config_sub=$ac_aux_dir/config.sub
-ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+ac_config_headers="$ac_config_headers config.h"
+LIBVERSION=4.2a
# Make sure we can run config.sub.
-if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
-else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
-fi
-
-echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:663: checking host system type" >&5
-
-host_alias=$host
-case "$host_alias" in
-NONE)
- case $nonopt in
- NONE)
- if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
- else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
- fi ;;
- *) host_alias=$nonopt ;;
- esac ;;
-esac
-
-host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
-host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-echo "$ac_t""$host" 1>&6
-
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+ { { echo "$as_me:1005: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+ { (exit 1); exit 1; }; }
+
+echo "$as_me:1009: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+ ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+ { { echo "$as_me:1018: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+ { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+ { { echo "$as_me:1022: error: $ac_config_sub $ac_cv_build_alias failed." >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed." >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:1027: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+echo "$as_me:1034: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+ ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+ { { echo "$as_me:1043: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+ { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:1048: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
opt_curses=no
opt_shared=no
@@ -687,251 +1059,620 @@ opt_shared=no
if test "${with_curses+set}" = set; then
withval="$with_curses"
opt_curses=$withval
-fi
-
+fi;
if test "$opt_curses" = "yes"; then
prefer_curses=yes
fi
+echo ""
+echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}"
+echo ""
+
# We want these before the checks, so the checks can modify their values.
test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1
-echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:702: checking whether ${MAKE-make} sets \${MAKE}" >&5
-set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:1075: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \${MAKE}... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftestmake <<\EOF
+ cat >conftest.make <<\EOF
all:
@echo 'ac_maketemp="${MAKE}"'
EOF
# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
if test -n "$ac_maketemp"; then
eval ac_cv_prog_make_${ac_make}_set=yes
else
eval ac_cv_prog_make_${ac_make}_set=no
fi
-rm -f conftestmake
+rm -f conftest.make
fi
if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+ echo "$as_me:1095: result: yes" >&5
+echo "${ECHO_T}yes" >&6
SET_MAKE=
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:1099: result: no" >&5
+echo "${ECHO_T}no" >&6
SET_MAKE="MAKE=${MAKE-make}"
fi
-# Extract the first word of "gcc", so it can be a program name with args.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:1112: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}gcc"
+echo "$as_me:1127: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+ echo "$as_me:1135: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+ echo "$as_me:1138: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:731: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:1147: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="gcc"
+echo "$as_me:1162: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:1170: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1173: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:1186: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="gcc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="${ac_tool_prefix}cc"
+echo "$as_me:1201: found $ac_dir/$ac_word" >&5
+break
+done
+
fi
fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:1209: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:1212: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+fi
+if test -z "$ac_cv_prog_CC"; then
+ ac_ct_CC=$CC
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:1221: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="cc"
+echo "$as_me:1236: found $ac_dir/$ac_word" >&5
+break
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:1244: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1247: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ CC=$ac_ct_CC
+else
+ CC="$ac_cv_prog_CC"
+fi
+
+fi
if test -z "$CC"; then
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:761: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:1260: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+fi
+ac_cv_prog_CC="cc"
+echo "$as_me:1280: found $ac_dir/$ac_word" >&5
+break
+done
+
if test $ac_prog_rejected = yes; then
# We found a bogon in the path, so make sure we never use it.
set dummy $ac_cv_prog_CC
shift
- if test $# -gt 0; then
+ if test $# != 0; then
# We chose a different compiler from the bogus one.
# However, it has the same basename, so the bogon will be chosen
# first if we set CC to just the basename; use the full file name.
shift
- set dummy "$ac_dir/$ac_word" "$@"
+ set dummy "$ac_dir/$ac_word" ${1+"$@"}
shift
ac_cv_prog_CC="$@"
fi
fi
fi
fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:1302: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:1305: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
- if test -z "$CC"; then
- case "`uname -s`" in
- *win32* | *WIN32*)
- # Extract the first word of "cl", so it can be a program name with args.
-set dummy cl; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:812: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+fi
+if test -z "$CC"; then
+ if test -n "$ac_tool_prefix"; then
+ for ac_prog in cl
+ do
+ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:1316: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CC="cl"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+echo "$as_me:1331: found $ac_dir/$ac_word" >&5
+break
+done
+
fi
fi
-CC="$ac_cv_prog_CC"
+CC=$ac_cv_prog_CC
if test -n "$CC"; then
- echo "$ac_t""$CC" 1>&6
+ echo "$as_me:1339: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
else
- echo "$ac_t""no" 1>&6
-fi
- ;;
- esac
- fi
- test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+ echo "$as_me:1342: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:844: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+ test -n "$CC" && break
+ done
+fi
+if test -z "$CC"; then
+ ac_ct_CC=$CC
+ for ac_prog in cl
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:1355: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ if test -n "$ac_ct_CC"; then
+ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_CC="$ac_prog"
+echo "$as_me:1370: found $ac_dir/$ac_word" >&5
+break
+done
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+ echo "$as_me:1378: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+ echo "$as_me:1381: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
-cat > conftest.$ac_ext << EOF
+ test -n "$ac_ct_CC" && break
+done
-#line 855 "configure"
+ CC=$ac_ct_CC
+fi
+
+fi
+
+test -z "$CC" && { { echo "$as_me:1393: error: no acceptable cc found in \$PATH" >&5
+echo "$as_me: error: no acceptable cc found in \$PATH" >&2;}
+ { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:1398:" \
+ "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:1401: \"$ac_compiler --version </dev/null >&5\"") >&5
+ (eval $ac_compiler --version </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1404: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:1406: \"$ac_compiler -v </dev/null >&5\"") >&5
+ (eval $ac_compiler -v </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1409: \$? = $ac_status" >&5
+ (exit $ac_status); }
+{ (eval echo "$as_me:1411: \"$ac_compiler -V </dev/null >&5\"") >&5
+ (eval $ac_compiler -V </dev/null >&5) 2>&5
+ ac_status=$?
+ echo "$as_me:1414: \$? = $ac_status" >&5
+ (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+#line 1418 "configure"
#include "confdefs.h"
-main(){return(0);}
-EOF
-if { (eval echo configure:860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- ac_cv_prog_cc_works=yes
- # If we can't run a trivial program, we are probably using a cross compiler.
- if (./conftest; exit) 2>/dev/null; then
- ac_cv_prog_cc_cross=no
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:1434: checking for C compiler default output" >&5
+echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:1437: \"$ac_link_default\"") >&5
+ (eval $ac_link_default) 2>&5
+ ac_status=$?
+ echo "$as_me:1440: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # Find the output, starting from the most likely. This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+for ac_file in `ls a.exe conftest.exe 2>/dev/null;
+ ls a.out conftest 2>/dev/null;
+ ls a.* conftest.* 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ a.out ) # We found the default executable, but exeext='' is most
+ # certainly right.
+ break;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ # FIXME: I believe we export ac_cv_exeext for Libtool --akim.
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1463: error: C compiler cannot create executables" >&5
+echo "$as_me: error: C compiler cannot create executables" >&2;}
+ { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:1469: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1474: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+ if { ac_try='./$ac_file'
+ { (eval echo "$as_me:1480: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1483: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cross_compiling=no
else
- ac_cv_prog_cc_cross=yes
+ if test "$cross_compiling" = maybe; then
+ cross_compiling=yes
+ else
+ { { echo "$as_me:1490: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'." >&2;}
+ { (exit 1); exit 1; }; }
+ fi
fi
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ac_cv_prog_cc_works=no
fi
-rm -fr conftest*
-ac_ext=c
-# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
-if test $ac_cv_prog_cc_works = no; then
- { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
-fi
-echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:886: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
-echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
-cross_compiling=$ac_cv_prog_cc_cross
-
-echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:891: checking whether we are using GNU C" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.c <<EOF
-#ifdef __GNUC__
- yes;
-#endif
-EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:900: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
- ac_cv_prog_gcc=yes
+echo "$as_me:1498: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run. If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:1505: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:1507: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:1510: checking for executable suffix" >&5
+echo $ECHO_N "checking for executable suffix... $ECHO_C" >&6
+if { (eval echo "$as_me:1512: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:1515: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in `(ls conftest.exe; ls conftest; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.o | *.obj | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+ export ac_cv_exeext
+ break;;
+ * ) break;;
+ esac
+done
else
- ac_cv_prog_gcc=no
-fi
-fi
+ { { echo "$as_me:1531: error: cannot compute EXEEXT: cannot compile and link" >&5
+echo "$as_me: error: cannot compute EXEEXT: cannot compile and link" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:1537: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:1543: checking for object suffix" >&5
+echo $ECHO_N "checking for object suffix... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1549 "configure"
+#include "confdefs.h"
-echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+int
+main ()
+{
-if test $ac_cv_prog_gcc = yes; then
- GCC=yes
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:1561: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1564: \$? = $ac_status" >&5
+ (exit $ac_status); }; then
+ for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+ case $ac_file in
+ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb ) ;;
+ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+ break;;
+ esac
+done
else
- GCC=
-fi
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+{ { echo "$as_me:1576: error: cannot compute OBJEXT: cannot compile" >&5
+echo "$as_me: error: cannot compute OBJEXT: cannot compile" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:1583: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:1587: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1593 "configure"
+#include "confdefs.h"
-ac_test_CFLAGS="${CFLAGS+set}"
-ac_save_CFLAGS="$CFLAGS"
-CFLAGS=
-echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:919: checking whether ${CC-cc} accepts -g" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+int
+main ()
+{
+#ifndef __GNUC__
+ choke me
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1608: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1611: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1614: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1617: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_compiler_gnu=yes
else
- echo 'void f(){}' > conftest.c
-if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_compiler_gnu=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:1629: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:1635: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1641 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1653: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1656: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1659: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1662: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_prog_cc_g=yes
else
- ac_cv_prog_cc_g=no
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_prog_cc_g=no
fi
-rm -f conftest*
-
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-
-echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+echo "$as_me:1672: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
+ CFLAGS=$ac_save_CFLAGS
elif test $ac_cv_prog_cc_g = yes; then
if test "$GCC" = yes; then
CFLAGS="-g -O2"
@@ -945,182 +1686,417 @@ else
CFLAGS=
fi
fi
+# Some people use a C++ compiler to compile C. Since we use `exit',
+# in C++ we need to declare it. In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+ choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1699: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1702: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1705: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1708: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ for ac_declaration in \
+ ''\
+ '#include <stdlib.h>' \
+ 'extern "C" void std::exit (int) throw (); using std::exit;' \
+ 'extern "C" void std::exit (int); using std::exit;' \
+ 'extern "C" void exit (int) throw ();' \
+ 'extern "C" void exit (int);' \
+ 'void exit (int);'
+do
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1720 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1733: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1736: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1739: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1742: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+continue
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1752 "configure"
+#include "confdefs.h"
+$ac_declaration
+int
+main ()
+{
+exit (42);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:1764: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:1767: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:1770: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:1773: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+ echo '#ifdef __cplusplus' >>confdefs.h
+ echo $ac_declaration >>confdefs.h
+ echo '#endif' >>confdefs.h
+fi
+
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
-echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:951: checking how to run the C preprocessor" >&5
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+echo "$as_me:1805: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
-if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ if test "${ac_cv_prog_CPP+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- # This must be in double quotes, not single quotes, because CPP may get
- # substituted into the Makefile and "${CC-cc}" will confuse make.
- CPP="${CC-cc} -E"
+ # Double quotes because CPP needs to be expanded
+ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+ do
+ ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
# On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp.
- cat > conftest.$ac_ext <<EOF
-#line 966 "configure"
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1826 "configure"
#include "confdefs.h"
#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:972: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:1831: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:1837: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -E -traditional-cpp"
- cat > conftest.$ac_ext <<EOF
-#line 983 "configure"
+ # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1860 "configure"
#include "confdefs.h"
-#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:989: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- :
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:1864: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:1870: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP="${CC-cc} -nologo -E"
- cat > conftest.$ac_ext <<EOF
-#line 1000 "configure"
+ # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ break
+fi
+
+ done
+ ac_cv_prog_CPP=$CPP
+
+fi
+ CPP=$ac_cv_prog_CPP
+else
+ ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:1907: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+ # Use a header file that comes with gcc, so configuring glibc
+ # with a fresh cross-compiler works.
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp. "Syntax error" is here to catch this case.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1917 "configure"
#include "confdefs.h"
#include <assert.h>
-Syntax Error
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1006: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
+ Syntax error
+_ACEOF
+if { (eval echo "$as_me:1922: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:1928: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
:
else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- rm -rf conftest*
- CPP=/lib/cpp
-fi
-rm -f conftest*
+ # Broken: fails on valid input.
+continue
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_ext
+
+ # OK, works on sane cases. Now check whether non-existent headers
+ # can be detected and how.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 1951 "configure"
+#include "confdefs.h"
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:1955: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:1961: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
fi
-rm -f conftest*
- ac_cv_prog_CPP="$CPP"
+if test -z "$ac_cpp_err"; then
+ # Broken: success on invalid input.
+continue
+else
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ # Passes both tests.
+ac_preproc_ok=:
+break
fi
- CPP="$ac_cv_prog_CPP"
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+ :
else
- ac_cv_prog_CPP="$CPP"
+ { { echo "$as_me:1989: error: C preprocessor \"$CPP\" fails sanity check" >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check" >&2;}
+ { (exit 1); exit 1; }; }
fi
-echo "$ac_t""$CPP" 1>&6
-ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
-echo "configure:1032: checking for minix/config.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+echo "$as_me:2000: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1037 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2006 "configure"
#include "confdefs.h"
#include <minix/config.h>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1042: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
+_ACEOF
+if { (eval echo "$as_me:2010: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:2016: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_minix_config_h=yes
+else
+ echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
+ ac_cv_header_minix_config_h=no
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_ext
fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+echo "$as_me:2035: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6
+if test $ac_cv_header_minix_config_h = yes; then
MINIX=yes
else
- echo "$ac_t""no" 1>&6
-MINIX=
+ MINIX=
fi
if test "$MINIX" = yes; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\EOF
#define _POSIX_SOURCE 1
EOF
- cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define _POSIX_1_SOURCE 2
EOF
- cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define _MINIX 1
EOF
fi
-
# If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS.
test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O"
-if test $ac_cv_prog_gcc = yes; then
- echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:1085: checking whether ${CC-cc} needs -traditional" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test $ac_cv_c_compiler_gnu = yes; then
+ echo "$as_me:2063: checking whether $CC needs -traditional" >&5
+echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6
+if test "${ac_cv_prog_gcc_traditional+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
ac_pattern="Autoconf.*'x'"
- cat > conftest.$ac_ext <<EOF
-#line 1091 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2070 "configure"
#include "confdefs.h"
#include <sgtty.h>
Autoconf TIOCGETP
-EOF
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "$ac_pattern" >/dev/null 2>&1; then
- rm -rf conftest*
ac_cv_prog_gcc_traditional=yes
else
- rm -rf conftest*
ac_cv_prog_gcc_traditional=no
fi
rm -f conftest*
-
if test $ac_cv_prog_gcc_traditional = no; then
- cat > conftest.$ac_ext <<EOF
-#line 1109 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2085 "configure"
#include "confdefs.h"
#include <termio.h>
Autoconf TCGETA
-EOF
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "$ac_pattern" >/dev/null 2>&1; then
- rm -rf conftest*
ac_cv_prog_gcc_traditional=yes
fi
rm -f conftest*
fi
fi
-
-echo "$ac_t""$ac_cv_prog_gcc_traditional" 1>&6
+echo "$as_me:2098: result: $ac_cv_prog_gcc_traditional" >&5
+echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6
if test $ac_cv_prog_gcc_traditional = yes; then
CC="$CC -traditional"
fi
@@ -1133,31 +2109,39 @@ fi
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
-echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1142: checking for a BSD compatible install" >&5
+echo "$as_me:2117: checking for a BSD compatible install" >&5
+echo $ECHO_N "checking for a BSD compatible install... $ECHO_C" >&6
if test -z "$INSTALL"; then
-if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test "${ac_cv_path_install+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
for ac_dir in $PATH; do
+ IFS=$ac_save_IFS
# Account for people who put trailing slashes in PATH elements.
- case "$ac_dir/" in
- /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ case $ac_dir/ in
+ / | ./ | .// | /cC/* \
+ | /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* \
+ | /usr/ucb/* ) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
# Don't use installbsd from OSF since it installs stuff as root
# by default.
for ac_prog in ginstall scoinst install; do
- if test -f $ac_dir/$ac_prog; then
+ if $as_executable_p "$ac_dir/$ac_prog"; then
if test $ac_prog = install &&
- grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ grep dspmsg "$ac_dir/$ac_prog" >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
+ elif test $ac_prog = install &&
+ grep pwplus "$ac_dir/$ac_prog" >/dev/null 2>&1; then
+ # program-specific install script used by HP pwplus--don't use.
+ :
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
break 2
@@ -1167,105 +2151,350 @@ else
;;
esac
done
- IFS="$ac_save_IFS"
fi
if test "${ac_cv_path_install+set}" = set; then
- INSTALL="$ac_cv_path_install"
+ INSTALL=$ac_cv_path_install
else
# As a last resort, use the slow shell script. We don't cache a
# path for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the path is relative.
- INSTALL="$ac_install_sh"
+ INSTALL=$ac_install_sh
fi
fi
-echo "$ac_t""$INSTALL" 1>&6
+echo "$as_me:2166: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
# Extract the first word of "ar", so it can be a program name with args.
set dummy ar; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1197: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:2179: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_AR="ar"
- break
- fi
- done
- IFS="$ac_save_ifs"
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_AR=""
+echo "$as_me:2194: found $ac_dir/$ac_word" >&5
+break
+done
+
+ test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
fi
fi
-AR="$ac_cv_prog_AR"
+AR=$ac_cv_prog_AR
if test -n "$AR"; then
- echo "$ac_t""$AR" 1>&6
+ echo "$as_me:2203: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
else
- echo "$ac_t""no" 1>&6
+ echo "$as_me:2206: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
test -n "$ARFLAGS" || ARFLAGS="cr"
-# Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1227: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:2214: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
- ac_dummy="$PATH"
- for ac_dir in $ac_dummy; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_RANLIB="ranlib"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+echo "$as_me:2229: found $ac_dir/$ac_word" >&5
+break
+done
+
fi
fi
-RANLIB="$ac_cv_prog_RANLIB"
+RANLIB=$ac_cv_prog_RANLIB
if test -n "$RANLIB"; then
- echo "$ac_t""$RANLIB" 1>&6
+ echo "$as_me:2237: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+ echo "$as_me:2240: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+ ac_ct_RANLIB=$RANLIB
+ # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:2249: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo "$ac_t""no" 1>&6
+ if test -n "$ac_ct_RANLIB"; then
+ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+ ac_save_IFS=$IFS; IFS=$ac_path_separator
+ac_dummy="$PATH"
+for ac_dir in $ac_dummy; do
+ IFS=$ac_save_IFS
+ test -z "$ac_dir" && ac_dir=.
+ $as_executable_p "$ac_dir/$ac_word" || continue
+ac_cv_prog_ac_ct_RANLIB="ranlib"
+echo "$as_me:2264: found $ac_dir/$ac_word" >&5
+break
+done
+
+ test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+ echo "$as_me:2273: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+ echo "$as_me:2276: result: no" >&5
+echo "${ECHO_T}no" >&6
fi
+ RANLIB=$ac_ct_RANLIB
+else
+ RANLIB="$ac_cv_prog_RANLIB"
+fi
MAKE_SHELL=/bin/sh
+echo "$as_me:2287: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+#line 2295 "configure"
+#include "confdefs.h"
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+ char **p;
+ int i;
+{
+ return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+ char *s;
+ va_list v;
+ va_start (v,p);
+ s = g (p, va_arg (v,int));
+ va_end (v);
+ return s;
+}
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
+ ;
+ return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX 10.20 and later -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+ CC="$ac_save_CC $ac_arg"
+ rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2344: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2347: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2350: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2353: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+fi
+rm -f conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+ x|xno)
+ echo "$as_me:2370: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+ *)
+ echo "$as_me:2373: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+ CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+echo "$as_me:2378: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2384 "configure"
+#include "confdefs.h"
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+ /* Ultrix mips cc rejects this. */
+ typedef int charset[2];
+ const charset x;
+ /* SunOS 4.1.1 cc rejects this. */
+ char const *const *ccp;
+ char **p;
+ /* NEC SVR4.0.2 mips cc rejects this. */
+ struct point {int x, y;};
+ static struct point const zero = {0,0};
+ /* AIX XL C 1.02.0.0 rejects this.
+ It does not let you subtract one const X* pointer from another in
+ an arm of an if-expression whose if-part is not a constant
+ expression */
+ const char *g = "string";
+ ccp = &g + (g ? g-g : 0);
+ /* HPUX 7.0 cc rejects these. */
+ ++ccp;
+ p = (char**) ccp;
+ ccp = (char const *const *) p;
+ { /* SCO 3.2v4 cc rejects this. */
+ char *t;
+ char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+ *t++ = 0;
+ }
+ { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
+ int x[] = {25, 17};
+ const int *foo = &x[0];
+ ++foo;
+ }
+ { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+ typedef const int *iptr;
+ iptr p = 0;
+ ++p;
+ }
+ { /* AIX XL C 1.02.0.0 rejects this saying
+ "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+ struct s { int j; const int *ap[3]; };
+ struct s *b; b->j = 5;
+ }
+ { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+ const int foo = 10;
+ }
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2442: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2445: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2448: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2451: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_c_const=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_c_const=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2461: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\EOF
+#define const
+EOF
+
+fi
+
+echo "$as_me:2471: checking for function prototypes" >&5
+echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6
+if test "$ac_cv_prog_cc_stdc" != no; then
+ echo "$as_me:2474: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\EOF
+#define PROTOTYPES 1
+EOF
-echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:1259: checking return type of signal handlers" >&5
-if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1264 "configure"
+ echo "$as_me:2482: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+echo "$as_me:2486: checking return type of signal handlers" >&5
+echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6
+if test "${ac_cv_type_signal+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2492 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
#ifdef signal
-#undef signal
+# undef signal
#endif
#ifdef __cplusplus
extern "C" void (*signal (int, void (*)(int)))(int);
@@ -1273,36 +2502,337 @@ extern "C" void (*signal (int, void (*)(int)))(int);
void (*signal ()) ();
#endif
-int main() {
+int
+main ()
+{
int i;
-; return 0; }
-EOF
-if { (eval echo configure:1281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2514: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2517: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2520: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2523: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_type_signal=void
else
- echo "configure: failed program was:" >&5
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_signal=int
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2533: result: $ac_cv_type_signal" >&5
+echo "${ECHO_T}$ac_cv_type_signal" >&6
+
+cat >>confdefs.h <<EOF
+#define RETSIGTYPE $ac_cv_type_signal
+EOF
+
+echo "$as_me:2540: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2546 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+_ACEOF
+if { (eval echo "$as_me:2554: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:2560: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ ac_cv_header_stdc=yes
+else
+ echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- rm -rf conftest*
- ac_cv_type_signal=int
+ ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2582 "configure"
+#include "confdefs.h"
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
fi
rm -f conftest*
+
fi
-echo "$ac_t""$ac_cv_type_signal" 1>&6
-cat >> confdefs.h <<EOF
-#define RETSIGTYPE $ac_cv_type_signal
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2600 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+ if test "$cross_compiling" = yes; then
+ :
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2621 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) (('a' <= (c) && (c) <= 'i') \
+ || ('j' <= (c) && (c) <= 'r') \
+ || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+ int i;
+ for (i = 0; i < 256; i++)
+ if (XOR (islower (i), ISLOWER (i))
+ || toupper (i) != TOUPPER (i))
+ exit(2);
+ exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:2647: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:2650: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:2652: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2655: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ :
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_header_stdc=no
+fi
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:2668: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\EOF
+#define STDC_HEADERS 1
EOF
+fi
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
-echo "configure:1301: checking whether stat file-mode macros are broken" >&5
-if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+ inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:2684: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1306 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2690 "configure"
+#include "confdefs.h"
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2696: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2699: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2702: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2705: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2715: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+EOF
+
+fi
+done
+
+echo "$as_me:2725: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2731 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+ return 0;
+if (sizeof (size_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2746: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2749: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2752: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2755: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_size_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_size_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2765: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<EOF
+#define size_t unsigned
+EOF
+
+fi
+
+echo "$as_me:2777: checking for ssize_t" >&5
+echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
+if test "${ac_cv_type_ssize_t+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2783 "configure"
+#include "confdefs.h"
+$ac_includes_default
+int
+main ()
+{
+if ((ssize_t *) 0)
+ return 0;
+if (sizeof (ssize_t))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2798: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2801: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2804: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2807: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_type_ssize_t=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_type_ssize_t=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:2817: result: $ac_cv_type_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
+if test $ac_cv_type_ssize_t = yes; then
+ :
+else
+
+cat >>confdefs.h <<EOF
+#define ssize_t int
+EOF
+
+fi
+
+echo "$as_me:2829: checking whether stat file-mode macros are broken" >&5
+echo $ECHO_N "checking whether stat file-mode macros are broken... $ECHO_C" >&6
+if test "${ac_cv_header_stat_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2835 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
@@ -1331,409 +2861,516 @@ You lose.
# endif
#endif
-EOF
+_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "You lose" >/dev/null 2>&1; then
- rm -rf conftest*
ac_cv_header_stat_broken=yes
else
- rm -rf conftest*
ac_cv_header_stat_broken=no
fi
rm -f conftest*
fi
-
-echo "$ac_t""$ac_cv_header_stat_broken" 1>&6
+echo "$as_me:2874: result: $ac_cv_header_stat_broken" >&5
+echo "${ECHO_T}$ac_cv_header_stat_broken" >&6
if test $ac_cv_header_stat_broken = yes; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\EOF
#define STAT_MACROS_BROKEN 1
EOF
fi
ac_header_dirent=no
-for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:1361: checking for $ac_hdr that defines DIR" >&5
-if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1366 "configure"
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
+ as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+echo "$as_me:2887: checking for $ac_hdr that defines DIR" >&5
+echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 2893 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
-int main() {
-DIR *dirp = 0;
-; return 0; }
-EOF
-if { (eval echo configure:1374: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=yes"
+
+int
+main ()
+{
+if ((DIR *) 0)
+return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:2908: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:2911: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:2914: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2917: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_Header=yes"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_dirent_$ac_safe=no"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_Header=no"
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
+echo "$as_me:2927: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
EOF
- ac_header_dirent=$ac_hdr; break
-else
- echo "$ac_t""no" 1>&6
+
+ac_header_dirent=$ac_hdr; break
fi
+
done
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
-echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:1399: checking for opendir in -ldir" >&5
-ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:2940: checking for opendir in -ldir" >&5
+echo $ECHO_N "checking for opendir in -ldir... $ECHO_C" >&6
+if test "${ac_cv_lib_dir_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_LIBS="$LIBS"
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-ldir $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1407 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 2948 "configure"
#include "confdefs.h"
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1418: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:2967: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:2970: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:2973: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:2976: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_dir_opendir=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_dir_opendir=no
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+echo "$as_me:2987: result: $ac_cv_lib_dir_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_dir_opendir" >&6
+if test $ac_cv_lib_dir_opendir = yes; then
LIBS="$LIBS -ldir"
-else
- echo "$ac_t""no" 1>&6
fi
else
-echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:1440: checking for opendir in -lx" >&5
-ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:2994: checking for opendir in -lx" >&5
+echo $ECHO_N "checking for opendir in -lx... $ECHO_C" >&6
+if test "${ac_cv_lib_x_opendir+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_LIBS="$LIBS"
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-lx $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 1448 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 3002 "configure"
#include "confdefs.h"
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char opendir();
-
-int main() {
-opendir()
-; return 0; }
-EOF
-if { (eval echo configure:1459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ builtin and then its argument prototype would still apply. */
+char opendir ();
+int
+main ()
+{
+opendir ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3021: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3024: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:3027: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3030: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_x_opendir=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_x_opendir=no
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+echo "$as_me:3041: result: $ac_cv_lib_x_opendir" >&5
+echo "${ECHO_T}$ac_cv_lib_x_opendir" >&6
+if test $ac_cv_lib_x_opendir = yes; then
LIBS="$LIBS -lx"
-else
- echo "$ac_t""no" 1>&6
fi
fi
-
for ac_func in lstat memmove putenv select setenv setlocale \
- strcasecmp tcgetattr
+ strcasecmp strpbrk tcgetattr vsnprintf isascii isxdigit
do
-echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:1486: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:3053: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1491 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3059 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func(); below. */
+ which can conflict with char $ac_func (); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char $ac_func();
-
-int main() {
+ builtin and then its argument prototype would still apply. */
+char $ac_func ();
+char (*f) ();
+int
+main ()
+{
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
-$ac_func();
+f = $ac_func;
#endif
-; return 0; }
-EOF
-if { (eval echo configure:1514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=yes"
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3090: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3093: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:3096: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3099: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ eval "$as_ac_var=yes"
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_func_$ac_func=no"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+eval "$as_ac_var=no"
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_func 1
+echo "$as_me:3109: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
EOF
-
-else
- echo "$ac_t""no" 1>&6
+
fi
done
-
-echo $ac_n "checking for working strcoll""... $ac_c" 1>&6
-echo "configure:1540: checking for working strcoll" >&5
-if eval "test \"`echo '$''{'ac_cv_func_strcoll_works'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3119: checking for working strcoll" >&5
+echo $ECHO_N "checking for working strcoll... $ECHO_C" >&6
+if test "${ac_cv_func_strcoll_works+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then
ac_cv_func_strcoll_works=no
else
- cat > conftest.$ac_ext <<EOF
-#line 1548 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3128 "configure"
#include "confdefs.h"
-#include <string.h>
+$ac_includes_default
+int
main ()
{
- exit (strcoll ("abc", "def") >= 0 ||
- strcoll ("ABC", "DEF") >= 0 ||
- strcoll ("123", "456") >= 0);
+exit (strcoll ("abc", "def") >= 0 ||
+ strcoll ("ABC", "DEF") >= 0 ||
+ strcoll ("123", "456") >= 0)
+ ;
+ return 0;
}
-EOF
-if { (eval echo configure:1558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3142: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3145: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:3147: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3150: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
ac_cv_func_strcoll_works=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- ac_cv_func_strcoll_works=no
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_func_strcoll_works=no
fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
fi
-
-echo "$ac_t""$ac_cv_func_strcoll_works" 1>&6
+echo "$as_me:3162: result: $ac_cv_func_strcoll_works" >&5
+echo "${ECHO_T}$ac_cv_func_strcoll_works" >&6
if test $ac_cv_func_strcoll_works = yes; then
- cat >> confdefs.h <<\EOF
+
+cat >>confdefs.h <<\EOF
#define HAVE_STRCOLL 1
EOF
fi
-
-for ac_hdr in unistd.h stdlib.h varargs.h stdarg.h string.h \
- sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
- termcap.h termios.h termio.h sys/file.h locale.h
+for ac_header in unistd.h stdlib.h varargs.h stdarg.h string.h strings.h \
+ limits.h sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
+ termcap.h termios.h termio.h sys/file.h locale.h memory.h
do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:1587: checking for $ac_hdr" >&5
-if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1592 "configure"
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:3177: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3183 "configure"
#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1597: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=yes"
-else
- echo "$ac_err" >&5
- echo "configure: failed program was:" >&5
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:3187: \"$ac_cpp conftest.$ac_ext\"") >&5
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+ ac_status=$?
+ egrep -v '^ *\+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:3193: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null; then
+ if test -s conftest.err; then
+ ac_cpp_err=$ac_c_preproc_warn_flag
+ else
+ ac_cpp_err=
+ fi
+else
+ ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+ eval "$as_ac_Header=yes"
+else
+ echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_header_$ac_safe=no"
+ eval "$as_ac_Header=no"
fi
-rm -f conftest*
+rm -f conftest.err conftest.$ac_ext
fi
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
- echo "$ac_t""yes" 1>&6
- ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
- cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
+echo "$as_me:3212: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+ cat >>confdefs.h <<EOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
EOF
-
-else
- echo "$ac_t""no" 1>&6
+
fi
done
-
-
-echo $ac_n "checking for type of signal functions""... $ac_c" 1>&6
-echo "configure:1626: checking for type of signal functions" >&5
-if eval "test \"`echo '$''{'bash_cv_signal_vintage'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3222: checking for type of signal functions" >&5
+echo $ECHO_N "checking for type of signal functions... $ECHO_C" >&6
+if test "${bash_cv_signal_vintage+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
-
- cat > conftest.$ac_ext <<EOF
-#line 1632 "configure"
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3229 "configure"
#include "confdefs.h"
#include <signal.h>
-int main() {
+int
+main ()
+{
sigset_t ss;
struct sigaction sa;
sigemptyset(&ss); sigsuspend(&ss);
sigaction(SIGINT, &sa, (struct sigaction *) 0);
sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
-
-; return 0; }
-EOF
-if { (eval echo configure:1645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3247: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3250: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:3253: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3256: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_signal_vintage=posix
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
-
- cat > conftest.$ac_ext <<EOF
-#line 1654 "configure"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3264 "configure"
#include "confdefs.h"
#include <signal.h>
-int main() {
+int
+main ()
+{
int mask = sigmask(SIGINT);
sigsetmask(mask); sigblock(mask); sigpause(mask);
-
-; return 0; }
-EOF
-if { (eval echo configure:1664: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3279: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3282: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:3285: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3288: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_signal_vintage=4.2bsd
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
-
- cat > conftest.$ac_ext <<EOF
-#line 1673 "configure"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3296 "configure"
#include "confdefs.h"
#include <signal.h>
RETSIGTYPE foo() { }
-int main() {
+int
+main ()
+{
int mask = sigmask(SIGINT);
sigset(SIGINT, foo); sigrelse(SIGINT);
sighold(SIGINT); sigpause(SIGINT);
-
-; return 0; }
-EOF
-if { (eval echo configure:1686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3314: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3317: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:3320: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3323: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_signal_vintage=svr3
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_signal_vintage=v7
-
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_signal_vintage=v7
+
fi
-rm -f conftest*
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-echo "$ac_t""$bash_cv_signal_vintage" 1>&6
+echo "$as_me:3342: result: $bash_cv_signal_vintage" >&5
+echo "${ECHO_T}$bash_cv_signal_vintage" >&6
if test "$bash_cv_signal_vintage" = posix; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define HAVE_POSIX_SIGNALS 1
EOF
elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define HAVE_BSD_SIGNALS 1
EOF
elif test "$bash_cv_signal_vintage" = svr3; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define HAVE_USG_SIGHOLD 1
EOF
fi
-
-
-echo $ac_n "checking if signal handlers must be reinstalled when invoked""... $ac_c" 1>&6
-echo "configure:1727: checking if signal handlers must be reinstalled when invoked" >&5
-if eval "test \"`echo '$''{'bash_cv_must_reinstall_sighandlers'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3361: checking if signal handlers must be reinstalled when invoked" >&5
+echo $ECHO_N "checking if signal handlers must be reinstalled when invoked... $ECHO_C" >&6
+if test "${bash_cv_must_reinstall_sighandlers+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then
- echo "configure: warning: cannot check signal handling if cross compiling -- defaulting to no" 1>&2
+ { echo "$as_me:3367: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5
+echo "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;}
bash_cv_must_reinstall_sighandlers=no
else
- cat > conftest.$ac_ext <<EOF
-#line 1737 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3373 "configure"
#include "confdefs.h"
#include <signal.h>
@@ -1779,43 +3416,51 @@ main()
exit(nsigint != 2);
}
-EOF
-if { (eval echo configure:1784: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3421: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3424: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:3426: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3429: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_must_reinstall_sighandlers=no
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- bash_cv_must_reinstall_sighandlers=yes
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_must_reinstall_sighandlers=yes
fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
fi
-echo "$ac_t""$bash_cv_must_reinstall_sighandlers" 1>&6
+echo "$as_me:3442: result: $bash_cv_must_reinstall_sighandlers" >&5
+echo "${ECHO_T}$bash_cv_must_reinstall_sighandlers" >&6
if test $bash_cv_must_reinstall_sighandlers = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define MUST_REINSTALL_SIGHANDLERS 1
EOF
fi
-
-
-echo $ac_n "checking for presence of POSIX-style sigsetjmp/siglongjmp""... $ac_c" 1>&6
-echo "configure:1809: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5
-if eval "test \"`echo '$''{'bash_cv_func_sigsetjmp'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3451: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5
+echo $ECHO_N "checking for presence of POSIX-style sigsetjmp/siglongjmp... $ECHO_C" >&6
+if test "${bash_cv_func_sigsetjmp+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then
- echo "configure: warning: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" 1>&2
+ { echo "$as_me:3457: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&5
+echo "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&2;}
bash_cv_func_sigsetjmp=missing
else
- cat > conftest.$ac_ext <<EOF
-#line 1819 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3463 "configure"
#include "confdefs.h"
#ifdef HAVE_UNISTD_H
@@ -1855,114 +3500,100 @@ siglongjmp(xx, 10);
exit(1);
#endif
}
-EOF
-if { (eval echo configure:1860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3505: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3508: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:3510: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3513: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_func_sigsetjmp=present
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- bash_cv_func_sigsetjmp=missing
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_func_sigsetjmp=missing
fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
fi
-echo "$ac_t""$bash_cv_func_sigsetjmp" 1>&6
+echo "$as_me:3526: result: $bash_cv_func_sigsetjmp" >&5
+echo "${ECHO_T}$bash_cv_func_sigsetjmp" >&6
if test $bash_cv_func_sigsetjmp = present; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define HAVE_POSIX_SIGSETJMP 1
EOF
fi
-echo $ac_n "checking for lstat""... $ac_c" 1>&6
-echo "configure:1883: checking for lstat" >&5
-if eval "test \"`echo '$''{'bash_cv_func_lstat'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3535: checking for lstat" >&5
+echo $ECHO_N "checking for lstat... $ECHO_C" >&6
+if test "${bash_cv_func_lstat+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 1888 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3541 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/stat.h>
-int main() {
- lstat(".",(struct stat *)0);
-; return 0; }
-EOF
-if { (eval echo configure:1898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
+int
+main ()
+{
+ lstat(".",(struct stat *)0);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3556: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3559: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:3562: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3565: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_func_lstat=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_func_lstat=no
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_func_lstat=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
fi
-
-echo "$ac_t""$bash_cv_func_lstat" 1>&6
+echo "$as_me:3575: result: $bash_cv_func_lstat" >&5
+echo "${ECHO_T}$bash_cv_func_lstat" >&6
if test $bash_cv_func_lstat = yes; then
- cat >> confdefs.h <<\EOF
+ cat >>confdefs.h <<\EOF
#define HAVE_LSTAT 1
EOF
fi
-echo $ac_n "checking whether getpw functions are declared in pwd.h""... $ac_c" 1>&6
-echo "configure:1919: checking whether getpw functions are declared in pwd.h" >&5
-if eval "test \"`echo '$''{'bash_cv_getpw_declared'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cat > conftest.$ac_ext <<EOF
-#line 1924 "configure"
-#include "confdefs.h"
-
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-#include <pwd.h>
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- egrep "getpwuid" >/dev/null 2>&1; then
- rm -rf conftest*
- bash_cv_getpw_declared=yes
-else
- rm -rf conftest*
- bash_cv_getpw_declared=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$bash_cv_getpw_declared" 1>&6
-if test $bash_cv_getpw_declared = yes; then
-cat >> confdefs.h <<\EOF
-#define HAVE_GETPW_DECLS 1
-EOF
-
-fi
-
-
-echo $ac_n "checking whether or not strcoll and strcmp differ""... $ac_c" 1>&6
-echo "configure:1956: checking whether or not strcoll and strcmp differ" >&5
-if eval "test \"`echo '$''{'bash_cv_func_strcoll_broken'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3584: checking whether or not strcoll and strcmp differ" >&5
+echo $ECHO_N "checking whether or not strcoll and strcmp differ... $ECHO_C" >&6
+if test "${bash_cv_func_strcoll_broken+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
if test "$cross_compiling" = yes; then
- echo "configure: warning: cannot check strcoll if cross compiling -- defaulting to no" 1>&2
+ { echo "$as_me:3590: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5
+echo "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;}
bash_cv_func_strcoll_broken=no
else
- cat > conftest.$ac_ext <<EOF
-#line 1966 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3596 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2000,274 +3631,476 @@ char *v[];
exit (r1 > 0 && r2 > 0);
}
-EOF
-if { (eval echo configure:2005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:3636: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3639: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:3641: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3644: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_func_strcoll_broken=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -fr conftest*
- bash_cv_func_strcoll_broken=no
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_func_strcoll_broken=no
fi
-rm -fr conftest*
+rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
-
fi
-echo "$ac_t""$bash_cv_func_strcoll_broken" 1>&6
+echo "$as_me:3657: result: $bash_cv_func_strcoll_broken" >&5
+echo "${ECHO_T}$bash_cv_func_strcoll_broken" >&6
if test $bash_cv_func_strcoll_broken = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define STRCOLL_BROKEN 1
EOF
fi
-
-echo $ac_n "checking whether signal handlers are of type void""... $ac_c" 1>&6
-echo "configure:2029: checking whether signal handlers are of type void" >&5
-if eval "test \"`echo '$''{'bash_cv_void_sighandler'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3666: checking whether getpw functions are declared in pwd.h" >&5
+echo $ECHO_N "checking whether getpw functions are declared in pwd.h... $ECHO_C" >&6
+if test "${bash_cv_getpw_declared+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2034 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3672 "configure"
#include "confdefs.h"
+
#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-#undef signal
-#endif
-#ifdef __cplusplus
-extern "C"
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
#endif
-void (*signal ()) ();
-int main() {
-int i;
-; return 0; }
-EOF
-if { (eval echo configure:2049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- bash_cv_void_sighandler=yes
+#include <pwd.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "getpwuid" >/dev/null 2>&1; then
+ bash_cv_getpw_declared=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_void_sighandler=no
+ bash_cv_getpw_declared=no
fi
rm -f conftest*
+
fi
-echo "$ac_t""$bash_cv_void_sighandler" 1>&6
-if test $bash_cv_void_sighandler = yes; then
-cat >> confdefs.h <<\EOF
-#define VOID_SIGHANDLER 1
+
+echo "$as_me:3692: result: $bash_cv_getpw_declared" >&5
+echo "${ECHO_T}$bash_cv_getpw_declared" >&6
+if test $bash_cv_getpw_declared = yes; then
+cat >>confdefs.h <<\EOF
+#define HAVE_GETPW_DECLS 1
EOF
fi
-echo $ac_n "checking for TIOCGWINSZ in sys/ioctl.h""... $ac_c" 1>&6
-echo "configure:2069: checking for TIOCGWINSZ in sys/ioctl.h" >&5
-if eval "test \"`echo '$''{'bash_cv_tiocgwinsz_in_ioctl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3701: checking POSIX termios" >&5
+echo $ECHO_N "checking POSIX termios... $ECHO_C" >&6
+if test "${ac_cv_sys_posix_termios+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3707 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <unistd.h>
+#include <termios.h>
+int
+main ()
+{
+/* SunOS 4.0.3 has termios.h but not the library calls. */
+ tcgetattr(0, 0);
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:3722: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:3725: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:3728: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3731: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_sys_posix_termios=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_sys_posix_termios=no
+fi
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:3741: result: $ac_cv_sys_posix_termios" >&5
+echo "${ECHO_T}$ac_cv_sys_posix_termios" >&6
+
+if test $ac_cv_sys_posix_termios = yes; then
+ echo "$as_me:3745: checking whether termios.h defines TIOCGWINSZ" >&5
+echo $ECHO_N "checking whether termios.h defines TIOCGWINSZ... $ECHO_C" >&6
+if test "${ac_cv_sys_tiocgwinsz_in_termios_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3751 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <termios.h>
+#ifdef TIOCGWINSZ
+ yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ ac_cv_sys_tiocgwinsz_in_termios_h=yes
+else
+ ac_cv_sys_tiocgwinsz_in_termios_h=no
+fi
+rm -f conftest*
+
+fi
+echo "$as_me:3769: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5
+echo "${ECHO_T}$ac_cv_sys_tiocgwinsz_in_termios_h" >&6
+
+fi
+if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then
+ echo "$as_me:3774: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5
+echo $ECHO_N "checking whether sys/ioctl.h defines TIOCGWINSZ... $ECHO_C" >&6
+if test "${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2074 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3780 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/ioctl.h>
-int main() {
-int x = TIOCGWINSZ;
-; return 0; }
-EOF
-if { (eval echo configure:2082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- bash_cv_tiocgwinsz_in_ioctl=yes
+#ifdef TIOCGWINSZ
+ yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "yes" >/dev/null 2>&1; then
+ ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_tiocgwinsz_in_ioctl=no
+ ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no
fi
rm -f conftest*
+
fi
+echo "$as_me:3798: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5
+echo "${ECHO_T}$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6
+
+ if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then
-echo "$ac_t""$bash_cv_tiocgwinsz_in_ioctl" 1>&6
-if test $bash_cv_tiocgwinsz_in_ioctl = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define GWINSZ_IN_SYS_IOCTL 1
EOF
+ fi
+fi
+
+echo "$as_me:3810: checking whether signal handlers are of type void" >&5
+echo $ECHO_N "checking whether signal handlers are of type void... $ECHO_C" >&6
+if test "${bash_cv_void_sighandler+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3816 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+#undef signal
+#endif
+#ifdef __cplusplus
+extern "C"
+#endif
+void (*signal ()) ();
+int
+main ()
+{
+int i;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3836: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3839: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3842: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3845: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ bash_cv_void_sighandler=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_void_sighandler=no
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:3855: result: $bash_cv_void_sighandler" >&5
+echo "${ECHO_T}$bash_cv_void_sighandler" >&6
+if test $bash_cv_void_sighandler = yes; then
+cat >>confdefs.h <<\EOF
+#define VOID_SIGHANDLER 1
+EOF
+
fi
-echo $ac_n "checking for TIOCSTAT in sys/ioctl.h""... $ac_c" 1>&6
-echo "configure:2103: checking for TIOCSTAT in sys/ioctl.h" >&5
-if eval "test \"`echo '$''{'bash_cv_tiocstat_in_ioctl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3864: checking for TIOCSTAT in sys/ioctl.h" >&5
+echo $ECHO_N "checking for TIOCSTAT in sys/ioctl.h... $ECHO_C" >&6
+if test "${bash_cv_tiocstat_in_ioctl+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2108 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3870 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/ioctl.h>
-int main() {
+int
+main ()
+{
int x = TIOCSTAT;
-; return 0; }
-EOF
-if { (eval echo configure:2116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3883: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3886: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3889: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3892: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_tiocstat_in_ioctl=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_tiocstat_in_ioctl=no
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_tiocstat_in_ioctl=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$ac_t""$bash_cv_tiocstat_in_ioctl" 1>&6
-if test $bash_cv_tiocstat_in_ioctl = yes; then
-cat >> confdefs.h <<\EOF
+echo "$as_me:3903: result: $bash_cv_tiocstat_in_ioctl" >&5
+echo "${ECHO_T}$bash_cv_tiocstat_in_ioctl" >&6
+if test $bash_cv_tiocstat_in_ioctl = yes; then
+cat >>confdefs.h <<\EOF
#define TIOCSTAT_IN_SYS_IOCTL 1
EOF
fi
-echo $ac_n "checking for FIONREAD in sys/ioctl.h""... $ac_c" 1>&6
-echo "configure:2137: checking for FIONREAD in sys/ioctl.h" >&5
-if eval "test \"`echo '$''{'bash_cv_fionread_in_ioctl'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3912: checking for FIONREAD in sys/ioctl.h" >&5
+echo $ECHO_N "checking for FIONREAD in sys/ioctl.h... $ECHO_C" >&6
+if test "${bash_cv_fionread_in_ioctl+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2142 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3918 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/ioctl.h>
-int main() {
+int
+main ()
+{
int x = FIONREAD;
-; return 0; }
-EOF
-if { (eval echo configure:2150: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3931: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3934: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3937: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3940: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_fionread_in_ioctl=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_fionread_in_ioctl=no
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_fionread_in_ioctl=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$ac_t""$bash_cv_fionread_in_ioctl" 1>&6
-if test $bash_cv_fionread_in_ioctl = yes; then
-cat >> confdefs.h <<\EOF
+echo "$as_me:3951: result: $bash_cv_fionread_in_ioctl" >&5
+echo "${ECHO_T}$bash_cv_fionread_in_ioctl" >&6
+if test $bash_cv_fionread_in_ioctl = yes; then
+cat >>confdefs.h <<\EOF
#define FIONREAD_IN_SYS_IOCTL 1
EOF
fi
-echo $ac_n "checking for speed_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:2171: checking for speed_t in sys/types.h" >&5
-if eval "test \"`echo '$''{'bash_cv_speed_t_in_sys_types'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:3960: checking for speed_t in sys/types.h" >&5
+echo $ECHO_N "checking for speed_t in sys/types.h... $ECHO_C" >&6
+if test "${bash_cv_speed_t_in_sys_types+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2176 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 3966 "configure"
#include "confdefs.h"
#include <sys/types.h>
-int main() {
+int
+main ()
+{
speed_t x;
-; return 0; }
-EOF
-if { (eval echo configure:2183: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:3978: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:3981: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:3984: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:3987: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_speed_t_in_sys_types=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_speed_t_in_sys_types=no
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_speed_t_in_sys_types=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$ac_t""$bash_cv_speed_t_in_sys_types" 1>&6
-if test $bash_cv_speed_t_in_sys_types = yes; then
-cat >> confdefs.h <<\EOF
+echo "$as_me:3998: result: $bash_cv_speed_t_in_sys_types" >&5
+echo "${ECHO_T}$bash_cv_speed_t_in_sys_types" >&6
+if test $bash_cv_speed_t_in_sys_types = yes; then
+cat >>confdefs.h <<\EOF
#define SPEED_T_IN_SYS_TYPES 1
EOF
fi
-echo $ac_n "checking for struct winsize in sys/ioctl.h and termios.h""... $ac_c" 1>&6
-echo "configure:2204: checking for struct winsize in sys/ioctl.h and termios.h" >&5
-if eval "test \"`echo '$''{'bash_cv_struct_winsize_header'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:4007: checking for struct winsize in sys/ioctl.h and termios.h" >&5
+echo $ECHO_N "checking for struct winsize in sys/ioctl.h and termios.h... $ECHO_C" >&6
+if test "${bash_cv_struct_winsize_header+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2209 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4013 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/ioctl.h>
-int main() {
+int
+main ()
+{
struct winsize x;
-; return 0; }
-EOF
-if { (eval echo configure:2217: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4026: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4029: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4032: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4035: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_struct_winsize_header=ioctl_h
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- cat > conftest.$ac_ext <<EOF
-#line 2225 "configure"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+cat >conftest.$ac_ext <<_ACEOF
+#line 4042 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <termios.h>
-int main() {
+int
+main ()
+{
struct winsize x;
-; return 0; }
-EOF
-if { (eval echo configure:2233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4055: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4058: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4061: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4064: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_struct_winsize_header=termios_h
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_struct_winsize_header=other
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_struct_winsize_header=other
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
if test $bash_cv_struct_winsize_header = ioctl_h; then
- echo "$ac_t""sys/ioctl.h" 1>&6
- cat >> confdefs.h <<\EOF
+ echo "$as_me:4079: result: sys/ioctl.h" >&5
+echo "${ECHO_T}sys/ioctl.h" >&6
+ cat >>confdefs.h <<\EOF
#define STRUCT_WINSIZE_IN_SYS_IOCTL 1
EOF
elif test $bash_cv_struct_winsize_header = termios_h; then
- echo "$ac_t""termios.h" 1>&6
- cat >> confdefs.h <<\EOF
+ echo "$as_me:4086: result: termios.h" >&5
+echo "${ECHO_T}termios.h" >&6
+ cat >>confdefs.h <<\EOF
#define STRUCT_WINSIZE_IN_TERMIOS 1
EOF
else
- echo "$ac_t""not found" 1>&6
+ echo "$as_me:4093: result: not found" >&5
+echo "${ECHO_T}not found" >&6
fi
-
-echo $ac_n "checking if struct dirent has a d_ino member""... $ac_c" 1>&6
-echo "configure:2266: checking if struct dirent has a d_ino member" >&5
-if eval "test \"`echo '$''{'bash_cv_dirent_has_dino'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:4097: checking if struct dirent has a d_ino member" >&5
+echo $ECHO_N "checking if struct dirent has a d_ino member... $ECHO_C" >&6
+if test "${bash_cv_dirent_has_dino+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2271 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4103 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2290,40 +4123,53 @@ else
# endif
#endif /* HAVE_DIRENT_H */
-int main() {
+int
+main ()
+{
struct dirent d; int z; z = d.d_ino;
-; return 0; }
-EOF
-if { (eval echo configure:2300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4137: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4140: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4143: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4146: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_dirent_has_dino=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_dirent_has_dino=no
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_dirent_has_dino=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$ac_t""$bash_cv_dirent_has_dino" 1>&6
+echo "$as_me:4157: result: $bash_cv_dirent_has_dino" >&5
+echo "${ECHO_T}$bash_cv_dirent_has_dino" >&6
if test $bash_cv_dirent_has_dino = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define STRUCT_DIRENT_HAS_D_INO 1
EOF
fi
-
-echo $ac_n "checking if struct dirent has a d_fileno member""... $ac_c" 1>&6
-echo "configure:2322: checking if struct dirent has a d_fileno member" >&5
-if eval "test \"`echo '$''{'bash_cv_dirent_has_d_fileno'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+echo "$as_me:4166: checking if struct dirent has a d_fileno member" >&5
+echo $ECHO_N "checking if struct dirent has a d_fileno member... $ECHO_C" >&6
+if test "${bash_cv_dirent_has_d_fileno+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- cat > conftest.$ac_ext <<EOF
-#line 2327 "configure"
+ cat >conftest.$ac_ext <<_ACEOF
+#line 4172 "configure"
#include "confdefs.h"
#include <stdio.h>
@@ -2346,33 +4192,46 @@ else
# endif
#endif /* HAVE_DIRENT_H */
-int main() {
+int
+main ()
+{
struct dirent d; int z; z = d.d_fileno;
-; return 0; }
-EOF
-if { (eval echo configure:2356: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:4206: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>&5
+ ac_status=$?
+ echo "$as_me:4209: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:4212: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4215: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
bash_cv_dirent_has_d_fileno=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- bash_cv_dirent_has_d_fileno=no
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+bash_cv_dirent_has_d_fileno=no
fi
-rm -f conftest*
+rm -f conftest.$ac_objext conftest.$ac_ext
fi
-echo "$ac_t""$bash_cv_dirent_has_d_fileno" 1>&6
+echo "$as_me:4226: result: $bash_cv_dirent_has_d_fileno" >&5
+echo "${ECHO_T}$bash_cv_dirent_has_d_fileno" >&6
if test $bash_cv_dirent_has_d_fileno = yes; then
-cat >> confdefs.h <<\EOF
+cat >>confdefs.h <<\EOF
#define STRUCT_DIRENT_HAS_D_FILENO 1
EOF
fi
-
case "$host_os" in
aix*) prefer_curses=yes ;;
esac
@@ -2380,128 +4239,224 @@ esac
if test "X$bash_cv_termcap_lib" = "X"; then
_bash_needmsg=yes
else
-echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6
-echo "configure:2385: checking which library has the termcap functions" >&5
+echo "$as_me:4242: checking which library has the termcap functions" >&5
+echo $ECHO_N "checking which library has the termcap functions... $ECHO_C" >&6
_bash_needmsg=
fi
-if eval "test \"`echo '$''{'bash_cv_termcap_lib'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+if test "${bash_cv_termcap_lib+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
-echo "configure:2392: checking for tgetent in -ltermcap" >&5
-ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:4249: checking for tgetent in -ltermcap" >&5
+echo $ECHO_N "checking for tgetent in -ltermcap... $ECHO_C" >&6
+if test "${ac_cv_lib_termcap_tgetent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_LIBS="$LIBS"
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-ltermcap $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2400 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4257 "configure"
#include "confdefs.h"
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char tgetent();
-
-int main() {
-tgetent()
-; return 0; }
-EOF
-if { (eval echo configure:2411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4276: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4279: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4282: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4285: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_termcap_tgetent=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_termcap_tgetent=no
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+echo "$as_me:4296: result: $ac_cv_lib_termcap_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_termcap_tgetent" >&6
+if test $ac_cv_lib_termcap_tgetent = yes; then
bash_cv_termcap_lib=libtermcap
else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
-echo "configure:2430: checking for tgetent in -lcurses" >&5
-ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:4301: checking for tgetent in -ltinfo" >&5
+echo $ECHO_N "checking for tgetent in -ltinfo... $ECHO_C" >&6
+if test "${ac_cv_lib_tinfo_tgetent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_LIBS="$LIBS"
-LIBS="-lcurses $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2438 "configure"
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-ltinfo $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4309 "configure"
#include "confdefs.h"
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char tgetent();
-
-int main() {
-tgetent()
-; return 0; }
-EOF
-if { (eval echo configure:2449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4328: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4331: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4334: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4337: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_tinfo_tgetent=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_tinfo_tgetent=no
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:4348: result: $ac_cv_lib_tinfo_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_tinfo_tgetent" >&6
+if test $ac_cv_lib_tinfo_tgetent = yes; then
+ bash_cv_termcal_lib=libtinfo
+else
+ echo "$as_me:4353: checking for tgetent in -lcurses" >&5
+echo $ECHO_N "checking for tgetent in -lcurses... $ECHO_C" >&6
+if test "${ac_cv_lib_curses_tgetent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcurses $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4361 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4380: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4383: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4386: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4389: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_curses_tgetent=yes
+else
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_curses_tgetent=no
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:4400: result: $ac_cv_lib_curses_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_curses_tgetent" >&6
+if test $ac_cv_lib_curses_tgetent = yes; then
bash_cv_termcap_lib=libcurses
else
- echo "$ac_t""no" 1>&6
-echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
-echo "configure:2468: checking for tgetent in -lncurses" >&5
-ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
+ echo "$as_me:4405: checking for tgetent in -lncurses" >&5
+echo $ECHO_N "checking for tgetent in -lncurses... $ECHO_C" >&6
+if test "${ac_cv_lib_ncurses_tgetent+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
else
- ac_save_LIBS="$LIBS"
+ ac_check_lib_save_LIBS=$LIBS
LIBS="-lncurses $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 2476 "configure"
+cat >conftest.$ac_ext <<_ACEOF
+#line 4413 "configure"
#include "confdefs.h"
+
/* Override any gcc2 internal prototype to avoid an error. */
+#ifdef __cplusplus
+extern "C"
+#endif
/* We use char because int might match the return type of a gcc2
- builtin and then its argument prototype would still apply. */
-char tgetent();
-
-int main() {
-tgetent()
-; return 0; }
-EOF
-if { (eval echo configure:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=yes"
+ builtin and then its argument prototype would still apply. */
+char tgetent ();
+int
+main ()
+{
+tgetent ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:4432: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:4435: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -s conftest$ac_exeext'
+ { (eval echo "$as_me:4438: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:4441: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_lib_ncurses_tgetent=yes
else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- eval "ac_cv_lib_$ac_lib_var=no"
+ echo "$as_me: failed program was:" >&5
+cat conftest.$ac_ext >&5
+ac_cv_lib_ncurses_tgetent=no
fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
- echo "$ac_t""yes" 1>&6
+echo "$as_me:4452: result: $ac_cv_lib_ncurses_tgetent" >&5
+echo "${ECHO_T}$ac_cv_lib_ncurses_tgetent" >&6
+if test $ac_cv_lib_ncurses_tgetent = yes; then
bash_cv_termcap_lib=libncurses
else
- echo "$ac_t""no" 1>&6
-bash_cv_termcap_lib=gnutermcap
+ bash_cv_termcap_lib=gnutermcap
+fi
+
fi
fi
@@ -2511,10 +4466,11 @@ fi
fi
if test "X$_bash_needmsg" = "Xyes"; then
-echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6
-echo "configure:2516: checking which library has the termcap functions" >&5
+echo "$as_me:4469: checking which library has the termcap functions" >&5
+echo $ECHO_N "checking which library has the termcap functions... $ECHO_C" >&6
fi
-echo "$ac_t""using $bash_cv_termcap_lib" 1>&6
+echo "$as_me:4472: result: using $bash_cv_termcap_lib" >&5
+echo "${ECHO_T}using $bash_cv_termcap_lib" >&6
if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
LDFLAGS="$LDFLAGS -L./lib/termcap"
TERMCAP_LIB="./lib/termcap/libtermcap.a"
@@ -2522,6 +4478,9 @@ TERMCAP_DEP="./lib/termcap/libtermcap.a"
elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then
TERMCAP_LIB=-ltermcap
TERMCAP_DEP=
+elif test $bash_cv_termcap_lib = libtinfo; then
+TERMCAP_LIB=-ltinfo
+TERMCAP_DEP=
elif test $bash_cv_termcap_lib = libncurses; then
TERMCAP_LIB=-lncurses
TERMCAP_DEP=
@@ -2549,29 +4508,18 @@ esac
# ${srcdir}/support/shobj-conf
#
if test -f ${srcdir}/support/shobj-conf; then
- echo $ac_n "checking configuration for building shared libraries""... $ac_c" 1>&6
-echo "configure:2554: checking configuration for building shared libraries" >&5
+ echo "$as_me:4511: checking configuration for building shared libraries" >&5
+echo $ECHO_N "checking configuration for building shared libraries... $ECHO_C" >&6
eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}`
-
-
-
-
-
-
-
-
-
-
-
-
- echo "$ac_t""$SHLIB_STATUS" 1>&6
+
+ echo "$as_me:4515: result: $SHLIB_STATUS" >&5
+echo "${ECHO_T}$SHLIB_STATUS" >&6
# shared library versioning
# quoted for m4 so I can use character classes
SHLIB_MAJOR=`expr "$LIBVERSION" : '\([0-9]\)\..*'`
SHLIB_MINOR=`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'`
-
-
+
fi
case "$host_os" in
@@ -2579,410 +4527,878 @@ msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file
*) BUILD_DIR=`pwd` ;;
esac
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-trap '' 1 2 15
-cat > confcache <<\EOF
+ac_config_files="$ac_config_files Makefile doc/Makefile examples/Makefile shlib/Makefile"
+ac_config_commands="$ac_config_commands default"
+cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
-# scripts and configure runs. It is not useful on other systems.
-# If it contains results you don't want to keep, you may remove or edit it.
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems. If it contains results you don't
+# want to keep, you may remove or edit it.
#
-# By default, configure uses ./config.cache as the cache file,
-# creating it if it does not exist already. You can give configure
-# the --cache-file=FILE option to use a different cache file; that is
-# what configure does when it calls configure scripts in
-# subdirectories, so they share the cache.
-# Giving --cache-file=/dev/null disables caching, for debugging configure.
-# config.status only pays attention to the cache file if you give it the
-# --recheck option to rerun configure.
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
#
-EOF
+# `ac_cv_env_foo' variables (set or unset) will be overriden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
-(set) 2>&1 |
- case `(ac_space=' '; set | grep ac_space) 2>&1` in
- *ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote substitution
- # turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- -e "s/'/'\\\\''/g" \
- -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
- ;;
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
- ;;
- esac >> confcache
-if cmp -s $cache_file confcache; then
- :
-else
+{
+ (set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote
+ # substitution turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ "s/'/'\\\\''/g;
+ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n \
+ "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+ ;;
+ esac;
+} |
+ sed '
+ t clear
+ : clear
+ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+ t end
+ /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+ : end' >>confcache
+if cmp -s $cache_file confcache; then :; else
if test -w $cache_file; then
- echo "updating cache $cache_file"
- cat confcache > $cache_file
+ test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+ cat confcache >$cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
-trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
-
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-# Any assignment to VPATH causes Sun make to only execute
-# the first set of double-colon rules, so remove it if not needed.
-# If there is a colon in the path, we need to keep it.
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+ ac_vpsub='/^[ ]*VPATH[ ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[ ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[ ]*$//;
+}'
fi
-trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
-
DEFS=-DHAVE_CONFIG_H
-# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
-
-echo creating $CONFIG_STATUS
-rm -f $CONFIG_STATUS
-cat > $CONFIG_STATUS <<EOF
-#! /bin/sh
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:4611: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
# Generated automatically by configure.
# Run this file to recreate the current configuration.
-# This directory was configured as follows,
-# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-#
-# $0 $ac_configure_args
-#
# Compiler output produced by configure, useful for debugging
-# configure, is in ./config.log if it exists.
+# configure, is in config.log if it exists.
-ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
-for ac_option
+debug=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+ac_cs_invocation="\$0 \$@"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+ set -o posix
+fi
+
+# Name of the executable.
+as_me=`echo "$0" |sed 's,.*[\\/],,'`
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+ as_expr=expr
+else
+ as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+ # We could just check for DJGPP; but this test a) works b) is more generic
+ # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+ if test -f conf$$.exe; then
+ # Don't use ln at all; we don't have any links
+ as_ln_s='cp -p'
+ else
+ as_ln_s='ln -s'
+ fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+ as_ln_s=ln
+else
+ as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+as_executable_p="test -f"
+
+# Support unset when possible.
+if (FOO=FOO; unset FOO) >/dev/null 2>&1; then
+ as_unset=unset
+else
+ as_unset=false
+fi
+
+# NLS nuisances.
+$as_unset LANG || test "${LANG+set}" != set || { LANG=C; export LANG; }
+$as_unset LC_ALL || test "${LC_ALL+set}" != set || { LC_ALL=C; export LC_ALL; }
+$as_unset LC_TIME || test "${LC_TIME+set}" != set || { LC_TIME=C; export LC_TIME; }
+$as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set || { LC_CTYPE=C; export LC_CTYPE; }
+$as_unset LANGUAGE || test "${LANGUAGE+set}" != set || { LANGUAGE=C; export LANGUAGE; }
+$as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set || { LC_COLLATE=C; export LC_COLLATE; }
+$as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set || { LC_NUMERIC=C; export LC_NUMERIC; }
+$as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set || { LC_MESSAGES=C; export LC_MESSAGES; }
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" $as_nl"
+
+# CDPATH.
+$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=:; export CDPATH; }
+
+exec 6>&1
+
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+ echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+ echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+ echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+ echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\EOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+ -h, --help print this help, then exit
+ -V, --version print version number, then exit
+ -d, --debug don't remove temporary files
+ --recheck update $as_me by reconfiguring in the same conditions
+ --file=FILE[:TEMPLATE]
+ instantiate the configuration file FILE
+ --header=FILE[:TEMPLATE]
+ instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+ac_cs_version="\\
+readline config.status 4.2a
+configured by $0, generated by GNU Autoconf 2.52,
+ with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+EOF
+
+cat >>$CONFIG_STATUS <<\EOF
+# If no file are specified by the user, then we need to provide default
+# value. By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
do
- case "\$ac_option" in
+ case $1 in
+ --*=*)
+ ac_option=`expr "x$1" : 'x\([^=]*\)='`
+ ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+ shift
+ set dummy "$ac_option" "$ac_optarg" ${1+"$@"}
+ shift
+ ;;
+ -*);;
+ *) # This is not an option, so the user has probably given explicit
+ # arguments.
+ ac_need_defaults=false;;
+ esac
+
+ case $1 in
+ # Handling of the options.
+EOF
+cat >>$CONFIG_STATUS <<EOF
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
- exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
- -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.13"
- exit 0 ;;
- -help | --help | --hel | --he | --h)
- echo "\$ac_cs_usage"; exit 0 ;;
- *) echo "\$ac_cs_usage"; exit 1 ;;
+ echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion"
+ exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;;
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+ --version | --vers* | -V )
+ echo "$ac_cs_version"; exit 0 ;;
+ --he | --h)
+ # Conflict between --help and --header
+ { { echo "$as_me:4787: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; };;
+ --help | --hel | -h )
+ echo "$ac_cs_usage"; exit 0 ;;
+ --debug | --d* | -d )
+ debug=: ;;
+ --file | --fil | --fi | --f )
+ shift
+ CONFIG_FILES="$CONFIG_FILES $1"
+ ac_need_defaults=false;;
+ --header | --heade | --head | --hea )
+ shift
+ CONFIG_HEADERS="$CONFIG_HEADERS $1"
+ ac_need_defaults=false;;
+
+ # This is an error.
+ -*) { { echo "$as_me:4806: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+ { (exit 1); exit 1; }; } ;;
+
+ *) ac_config_targets="$ac_config_targets $1" ;;
+
esac
+ shift
done
-ac_given_srcdir=$srcdir
-ac_given_INSTALL="$INSTALL"
+exec 5>>config.log
+cat >&5 << _ACEOF
+
+## ----------------------- ##
+## Running config.status. ##
+## ----------------------- ##
-trap 'rm -fr `echo "Makefile doc/Makefile examples/Makefile shlib/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+This file was extended by $as_me (readline 4.2a) 2.52, executed with
+ CONFIG_FILES = $CONFIG_FILES
+ CONFIG_HEADERS = $CONFIG_HEADERS
+ CONFIG_LINKS = $CONFIG_LINKS
+ CONFIG_COMMANDS = $CONFIG_COMMANDS
+ > $ac_cs_invocation
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+
+_ACEOF
EOF
-cat >> $CONFIG_STATUS <<EOF
-# Protect against being on the right side of a sed subst in config.status.
-sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
- s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
-$ac_vpsub
-$extrasub
-s%@SHELL@%$SHELL%g
-s%@CFLAGS@%$CFLAGS%g
-s%@CPPFLAGS@%$CPPFLAGS%g
-s%@CXXFLAGS@%$CXXFLAGS%g
-s%@FFLAGS@%$FFLAGS%g
-s%@DEFS@%$DEFS%g
-s%@LDFLAGS@%$LDFLAGS%g
-s%@LIBS@%$LIBS%g
-s%@exec_prefix@%$exec_prefix%g
-s%@prefix@%$prefix%g
-s%@program_transform_name@%$program_transform_name%g
-s%@bindir@%$bindir%g
-s%@sbindir@%$sbindir%g
-s%@libexecdir@%$libexecdir%g
-s%@datadir@%$datadir%g
-s%@sysconfdir@%$sysconfdir%g
-s%@sharedstatedir@%$sharedstatedir%g
-s%@localstatedir@%$localstatedir%g
-s%@libdir@%$libdir%g
-s%@includedir@%$includedir%g
-s%@oldincludedir@%$oldincludedir%g
-s%@infodir@%$infodir%g
-s%@mandir@%$mandir%g
-s%@host@%$host%g
-s%@host_alias@%$host_alias%g
-s%@host_cpu@%$host_cpu%g
-s%@host_vendor@%$host_vendor%g
-s%@host_os@%$host_os%g
-s%@SET_MAKE@%$SET_MAKE%g
-s%@CC@%$CC%g
-s%@CPP@%$CPP%g
-s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
-s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
-s%@INSTALL_DATA@%$INSTALL_DATA%g
-s%@AR@%$AR%g
-s%@RANLIB@%$RANLIB%g
-s%@MAKE_SHELL@%$MAKE_SHELL%g
-s%@SHOBJ_CC@%$SHOBJ_CC%g
-s%@SHOBJ_CFLAGS@%$SHOBJ_CFLAGS%g
-s%@SHOBJ_LD@%$SHOBJ_LD%g
-s%@SHOBJ_LDFLAGS@%$SHOBJ_LDFLAGS%g
-s%@SHOBJ_XLDFLAGS@%$SHOBJ_XLDFLAGS%g
-s%@SHOBJ_LIBS@%$SHOBJ_LIBS%g
-s%@SHOBJ_STATUS@%$SHOBJ_STATUS%g
-s%@SHLIB_STATUS@%$SHLIB_STATUS%g
-s%@SHLIB_XLDFLAGS@%$SHLIB_XLDFLAGS%g
-s%@SHLIB_LIBSUFF@%$SHLIB_LIBSUFF%g
-s%@SHLIB_LIBVERSION@%$SHLIB_LIBVERSION%g
-s%@SHLIB_LIBS@%$SHLIB_LIBS%g
-s%@SHLIB_MAJOR@%$SHLIB_MAJOR%g
-s%@SHLIB_MINOR@%$SHLIB_MINOR%g
-s%@BUILD_DIR@%$BUILD_DIR%g
-s%@LOCAL_CFLAGS@%$LOCAL_CFLAGS%g
-s%@LOCAL_LDFLAGS@%$LOCAL_LDFLAGS%g
-s%@LOCAL_DEFS@%$LOCAL_DEFS%g
-s%@ARFLAGS@%$ARFLAGS%g
-s%@LIBVERSION@%$LIBVERSION%g
-s%@TERMCAP_LIB@%$TERMCAP_LIB%g
+cat >>$CONFIG_STATUS <<\EOF
+for ac_config_target in $ac_config_targets
+do
+ case "$ac_config_target" in
+ # Handling of arguments.
+ "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+ "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+ "shlib/Makefile" ) CONFIG_FILES="$CONFIG_FILES shlib/Makefile" ;;
+ "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+ "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+ *) { { echo "$as_me:4847: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+ { (exit 1); exit 1; }; };;
+ esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used. Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+ trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+: ${TMPDIR=/tmp}
+{
+ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` &&
+ test -n "$tmp" && test -d "$tmp"
+} ||
+{
+ tmp=$TMPDIR/cs$$-$RANDOM
+ (umask 077 && mkdir $tmp)
+} ||
+{
+ echo "$me: cannot create a temporary directory in $TMPDIR" >&2
+ { (exit 1); exit 1; }
+}
+
+EOF
+
+cat >>$CONFIG_STATUS <<EOF
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+ # Protect against being on the right side of a sed subst in config.status.
+ sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+ s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@DEFS@,$DEFS,;t t
+s,@LIBS@,$LIBS,;t t
+s,@build@,$build,;t t
+s,@build_cpu@,$build_cpu,;t t
+s,@build_vendor@,$build_vendor,;t t
+s,@build_os@,$build_os,;t t
+s,@host@,$host,;t t
+s,@host_cpu@,$host_cpu,;t t
+s,@host_vendor@,$host_vendor,;t t
+s,@host_os@,$host_os,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@CPP@,$CPP,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@AR@,$AR,;t t
+s,@RANLIB@,$RANLIB,;t t
+s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s,@MAKE_SHELL@,$MAKE_SHELL,;t t
+s,@SHOBJ_CC@,$SHOBJ_CC,;t t
+s,@SHOBJ_CFLAGS@,$SHOBJ_CFLAGS,;t t
+s,@SHOBJ_LD@,$SHOBJ_LD,;t t
+s,@SHOBJ_LDFLAGS@,$SHOBJ_LDFLAGS,;t t
+s,@SHOBJ_XLDFLAGS@,$SHOBJ_XLDFLAGS,;t t
+s,@SHOBJ_LIBS@,$SHOBJ_LIBS,;t t
+s,@SHOBJ_STATUS@,$SHOBJ_STATUS,;t t
+s,@SHLIB_STATUS@,$SHLIB_STATUS,;t t
+s,@SHLIB_XLDFLAGS@,$SHLIB_XLDFLAGS,;t t
+s,@SHLIB_LIBSUFF@,$SHLIB_LIBSUFF,;t t
+s,@SHLIB_LIBVERSION@,$SHLIB_LIBVERSION,;t t
+s,@SHLIB_LIBS@,$SHLIB_LIBS,;t t
+s,@SHLIB_MAJOR@,$SHLIB_MAJOR,;t t
+s,@SHLIB_MINOR@,$SHLIB_MINOR,;t t
+s,@BUILD_DIR@,$BUILD_DIR,;t t
+s,@LOCAL_CFLAGS@,$LOCAL_CFLAGS,;t t
+s,@LOCAL_LDFLAGS@,$LOCAL_LDFLAGS,;t t
+s,@LOCAL_DEFS@,$LOCAL_DEFS,;t t
+s,@ARFLAGS@,$ARFLAGS,;t t
+s,@LIBVERSION@,$LIBVERSION,;t t
+s,@TERMCAP_LIB@,$TERMCAP_LIB,;t t
CEOF
+
EOF
-cat >> $CONFIG_STATUS <<\EOF
-
-# Split the substitutions into bite-sized pieces for seds with
-# small command number limits, like on Digital OSF/1 and HP-UX.
-ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
-ac_file=1 # Number of current file.
-ac_beg=1 # First line for current file.
-ac_end=$ac_max_sed_cmds # Line after last line for current file.
-ac_more_lines=:
-ac_sed_cmds=""
-while $ac_more_lines; do
- if test $ac_beg -gt 1; then
- sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
- else
- sed "${ac_end}q" conftest.subs > conftest.s$ac_file
- fi
- if test ! -s conftest.s$ac_file; then
- ac_more_lines=false
- rm -f conftest.s$ac_file
- else
- if test -z "$ac_sed_cmds"; then
- ac_sed_cmds="sed -f conftest.s$ac_file"
+ cat >>$CONFIG_STATUS <<\EOF
+ # Split the substitutions into bite-sized pieces for seds with
+ # small command number limits, like on Digital OSF/1 and HP-UX.
+ ac_max_sed_lines=48
+ ac_sed_frag=1 # Number of current file.
+ ac_beg=1 # First line for current file.
+ ac_end=$ac_max_sed_lines # Line after last line for current file.
+ ac_more_lines=:
+ ac_sed_cmds=
+ while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ else
+ sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+ fi
+ if test ! -s $tmp/subs.frag; then
+ ac_more_lines=false
else
- ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ # The purpose of the label and of the branching condition is to
+ # speed up the sed processing (if there are no `@' at all, there
+ # is no need to browse any of the substitutions).
+ # These are the two extra sed commands mentioned above.
+ (echo ':t
+ /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+ fi
+ ac_sed_frag=`expr $ac_sed_frag + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_lines`
fi
- ac_file=`expr $ac_file + 1`
- ac_beg=$ac_end
- ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ done
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
fi
-done
-if test -z "$ac_sed_cmds"; then
- ac_sed_cmds=cat
-fi
-EOF
+fi # test -n "$CONFIG_FILES"
-cat >> $CONFIG_STATUS <<EOF
-
-CONFIG_FILES=\${CONFIG_FILES-"Makefile doc/Makefile examples/Makefile shlib/Makefile"}
EOF
-cat >> $CONFIG_STATUS <<\EOF
-for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+cat >>$CONFIG_STATUS <<\EOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
esac
- # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
-
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+ ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
- ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+ ;;
+ esac
+done; }
+
+ ac_dir_suffix="/`echo $ac_dir|sed 's,^\./,,'`"
# A "../" for each directory in $ac_dir_suffix.
- ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ ac_dots=`echo "$ac_dir_suffix" | sed 's,/[^/]*,../,g'`
else
ac_dir_suffix= ac_dots=
fi
- case "$ac_given_srcdir" in
- .) srcdir=.
- if test -z "$ac_dots"; then top_srcdir=.
- else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
- /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ case $srcdir in
+ .) ac_srcdir=.
+ if test -z "$ac_dots"; then
+ ac_top_srcdir=.
+ else
+ ac_top_srcdir=`echo $ac_dots | sed 's,/$,,'`
+ fi ;;
+ [\\/]* | ?:[\\/]* )
+ ac_srcdir=$srcdir$ac_dir_suffix;
+ ac_top_srcdir=$srcdir ;;
*) # Relative path.
- srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
- top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ ac_srcdir=$ac_dots$srcdir$ac_dir_suffix
+ ac_top_srcdir=$ac_dots$srcdir ;;
esac
- case "$ac_given_INSTALL" in
- [/$]*) INSTALL="$ac_given_INSTALL" ;;
- *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ case $INSTALL in
+ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+ *) ac_INSTALL=$ac_dots$INSTALL ;;
esac
- echo creating "$ac_file"
- rm -f "$ac_file"
- configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
- case "$ac_file" in
- *Makefile*) ac_comsub="1i\\
-# $configure_input" ;;
- *) ac_comsub= ;;
- esac
+ if test x"$ac_file" != x-; then
+ { echo "$as_me:5088: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+ rm -f "$ac_file"
+ fi
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated automatically by config.status. */
+ configure_input="Generated automatically from `echo $ac_file_in |
+ sed 's,.*/,,'` by configure."
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:5106: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:5119: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+EOF
+cat >>$CONFIG_STATUS <<EOF
+ sed "$ac_vpsub
+$extrasub
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+ rm -f $tmp/stdin
+ if test x"$ac_file" != x-; then
+ mv $tmp/out $ac_file
+ else
+ cat $tmp/out
+ rm -f $tmp/out
+ fi
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- sed -e "$ac_comsub
-s%@configure_input@%$configure_input%g
-s%@srcdir@%$srcdir%g
-s%@top_srcdir@%$top_srcdir%g
-s%@INSTALL@%$INSTALL%g
-" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
-fi; done
-rm -f conftest.s*
+done
+EOF
+cat >>$CONFIG_STATUS <<\EOF
+
+#
+# CONFIG_HEADER section.
+#
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
#
# ac_d sets the value in "#define NAME VALUE" lines.
-ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
-ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
-ac_dC='\3'
-ac_dD='%g'
-# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
-ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_uB='\([ ]\)%\1#\2define\3'
+ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='[ ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='$,\1#\2define\3'
ac_uC=' '
-ac_uD='\4%g'
-# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
-ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
-ac_eB='$%\1#\2define\3'
-ac_eC=' '
-ac_eD='%g'
-
-if test "${CONFIG_HEADERS+set}" != set; then
-EOF
-cat >> $CONFIG_STATUS <<EOF
- CONFIG_HEADERS="config.h"
-EOF
-cat >> $CONFIG_STATUS <<\EOF
-fi
-for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
- case "$ac_file" in
- *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
- ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- *) ac_file_in="${ac_file}.in" ;;
+ case $ac_file in
+ - | *:- | *:-:* ) # input from stdin
+ cat >$tmp/stdin
+ ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+ * ) ac_file_in=$ac_file.in ;;
esac
- echo creating $ac_file
-
- rm -f conftest.frag conftest.in conftest.out
- ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
- cat $ac_file_inputs > conftest.in
+ test x"$ac_file" != x- && { echo "$as_me:5180: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+ # First look for the input files in the build tree, otherwise in the
+ # src tree.
+ ac_file_inputs=`IFS=:
+ for f in $ac_file_in; do
+ case $f in
+ -) echo $tmp/stdin ;;
+ [\\/$]*)
+ # Absolute (can't be DOS-style, as IFS=:)
+ test -f "$f" || { { echo "$as_me:5191: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ echo $f;;
+ *) # Relative
+ if test -f "$f"; then
+ # Build tree
+ echo $f
+ elif test -f "$srcdir/$f"; then
+ # Source tree
+ echo $srcdir/$f
+ else
+ # /dev/null tree
+ { { echo "$as_me:5204: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+ { (exit 1); exit 1; }; }
+ fi;;
+ esac
+ done` || { (exit 1); exit 1; }
+ # Remove the trailing spaces.
+ sed 's/[ ]*$//' $ac_file_inputs >$tmp/in
EOF
-# Transform confdefs.h into a sed script conftest.vals that substitutes
-# the proper values into config.h.in to produce config.h. And first:
-# Protect against being on the right side of a sed subst in config.status.
-# Protect against being in an unquoted here document in config.status.
-rm -f conftest.vals
-cat > conftest.hdr <<\EOF
-s/[\\&%]/\\&/g
-s%[\\$`]%\\&%g
-s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
-s%ac_d%ac_u%gp
-s%ac_u%ac_e%gp
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h. The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status. Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\EOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[ ]*#[ ]*define[ ][ ]*\(\([^ (][^ (]*\)([^)]*)\)[ ]*\(.*\)$,${ac_dA}\2${ac_dB}\1${ac_dC}\3${ac_dD},gp
+t end
+s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
EOF
-sed -n -f conftest.hdr confdefs.h > conftest.vals
-rm -f conftest.hdr
+# If some macros were called several times there might be several times
+# the same #defines, which is useless. Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
# This sed command replaces #undef with comments. This is necessary, for
# example, in the case of _POSIX_SOURCE, which is predefined and required
# on some systems where configure will not decide to define it.
-cat >> conftest.vals <<\EOF
-s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+cat >>conftest.undefs <<\EOF
+s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
EOF
-# Break up conftest.vals because some shells have a limit on
-# the size of here documents, and old seds have small limits too.
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo ' if egrep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo ' :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+ # Write a limited-size here document to $tmp/defines.sed.
+ echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#define' lines.
+ echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+ echo 'CEOF
+ sed -f $tmp/defines.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+ rm -f conftest.defines
+ mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo ' fi # egrep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo ' # Handle all the #undef templates' >>$CONFIG_STATUS
rm -f conftest.tail
-while :
+while grep . conftest.undefs >/dev/null
do
- ac_lines=`grep -c . conftest.vals`
- # grep -c gives empty output for an empty file on some AIX systems.
- if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
- # Write a limited-size here document to conftest.frag.
- echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
- sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ # Write a limited-size here document to $tmp/undefs.sed.
+ echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+ # Speed up: don't consider the non `#undef'
+ echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS
+ # Work around the forget-to-reset-the-flag bug.
+ echo 't clr' >>$CONFIG_STATUS
+ echo ': clr' >>$CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
echo 'CEOF
- sed -f conftest.frag conftest.in > conftest.out
- rm -f conftest.in
- mv conftest.out conftest.in
-' >> $CONFIG_STATUS
- sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
- rm -f conftest.vals
- mv conftest.tail conftest.vals
+ sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+ rm -f $tmp/in
+ mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+ rm -f conftest.undefs
+ mv conftest.tail conftest.undefs
done
-rm -f conftest.vals
-
-cat >> $CONFIG_STATUS <<\EOF
- rm -f conftest.frag conftest.h
- echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
- cat conftest.in >> conftest.h
- rm -f conftest.in
- if cmp -s $ac_file conftest.h 2>/dev/null; then
- echo "$ac_file is unchanged"
- rm -f conftest.h
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\EOF
+ # Let's still pretend it is `configure' which instantiates (i.e., don't
+ # use $as_me), people would be surprised to read:
+ # /* config.h. Generated automatically by config.status. */
+ if test x"$ac_file" = x-; then
+ echo "/* Generated automatically by configure. */" >$tmp/config.h
else
- # Remove last slash and all that follows it. Not all systems have dirname.
- ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ echo "/* $ac_file. Generated automatically by configure. */" >$tmp/config.h
+ fi
+ cat $tmp/in >>$tmp/config.h
+ rm -f $tmp/in
+ if test x"$ac_file" != x-; then
+ if cmp -s $ac_file $tmp/config.h 2>/dev/null; then
+ { echo "$as_me:5321: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+ else
+ ac_dir=`$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+ X"$ac_file" : 'X\(//\)[^/]' \| \
+ X"$ac_file" : 'X\(//\)$' \| \
+ X"$ac_file" : 'X\(/\)' \| \
+ . : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+ /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+ /^X\(\/\/\)$/{ s//\1/; q; }
+ /^X\(\/\).*/{ s//\1/; q; }
+ s/.*/./; q'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
- # The file is in a subdirectory.
- test ! -d "$ac_dir" && mkdir "$ac_dir"
+ { case "$ac_dir" in
+ [\\/]* | ?:[\\/]* ) as_incr_dir=;;
+ *) as_incr_dir=.;;
+esac
+as_dummy="$ac_dir"
+for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do
+ case $as_mkdir_dir in
+ # Skip DOS drivespec
+ ?:) as_incr_dir=$as_mkdir_dir ;;
+ *)
+ as_incr_dir=$as_incr_dir/$as_mkdir_dir
+ test -d "$as_incr_dir" || mkdir "$as_incr_dir"
+ ;;
+ esac
+done; }
+
+ fi
+ rm -f $ac_file
+ mv $tmp/config.h $ac_file
fi
- rm -f $ac_file
- mv conftest.h $ac_file
+ else
+ cat $tmp/config.h
+ rm -f $tmp/config.h
fi
-fi; done
-
+done
EOF
-cat >> $CONFIG_STATUS <<EOF
+cat >>$CONFIG_STATUS <<\EOF
-EOF
-cat >> $CONFIG_STATUS <<\EOF
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+ ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+ ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+ case $ac_dest in
+ default )
# Makefile uses this timestamp file to record whether config.h is up to date.
echo > stamp-h
+ ;;
+ esac
+done
+EOF
-exit 0
+cat >>$CONFIG_STATUS <<\EOF
+
+{ (exit 0); exit 0; }
EOF
chmod +x $CONFIG_STATUS
-rm -fr confdefs* $ac_clean_files
-test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+ac_clean_files=$ac_clean_files_save
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded. So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status. When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+ ac_cs_success=:
+ exec 5>/dev/null
+ $SHELL $CONFIG_STATUS || ac_cs_success=false
+ exec 5>>config.log
+ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+ # would make configure fail if this is the last instruction.
+ $ac_cs_success || { (exit 1); exit 1; }
+fi
diff --git a/configure.in b/configure.in
index 0cc5383..8885a52 100644
--- a/configure.in
+++ b/configure.in
@@ -4,16 +4,19 @@ dnl
dnl report bugs to chet@po.cwru.edu
dnl
dnl Process this file with autoconf to produce a configure script.
-AC_REVISION([for Readline 4.2, version 2.26, from autoconf version] AC_ACVERSION)
-LIBVERSION=4.2
+AC_REVISION([for Readline 4.2a, version 2.40, from autoconf version] AC_ACVERSION)
-AC_INIT(readline.h)
-AC_CONFIG_HEADER(config.h)
+AC_INIT(readline, 4.2a, bug-readline@gnu.org)
dnl make sure we are using a recent autoconf version
-AC_PREREQ(2.10)
+AC_PREREQ(2.50)
+AC_CONFIG_SRCDIR(readline.h)
AC_CONFIG_AUX_DIR(./support)
+AC_CONFIG_HEADERS(config.h)
+
+dnl update the value of RL_READLINE_VERSION in readline.h when this changes
+LIBVERSION=4.2a
AC_CANONICAL_HOST
@@ -28,6 +31,10 @@ if test "$opt_curses" = "yes"; then
prefer_curses=yes
fi
+echo ""
+echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}"
+echo ""
+
# We want these before the checks, so the checks can modify their values.
test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1
@@ -41,7 +48,7 @@ test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O"
AC_PROG_GCC_TRADITIONAL
AC_PROG_INSTALL
-AC_CHECK_PROG(AR, ar, ar)
+AC_CHECK_PROG(AR, ar, , ar)
dnl Set default for ARFLAGS, since autoconf does not have a macro for it.
dnl This allows people to set it when running configure or make
test -n "$ARFLAGS" || ARFLAGS="cr"
@@ -50,33 +57,41 @@ AC_PROG_RANLIB
MAKE_SHELL=/bin/sh
AC_SUBST(MAKE_SHELL)
-AC_RETSIGTYPE
+AC_C_CONST
+AC_C_PROTOTYPES
+
+AC_TYPE_SIGNAL
+
+AC_TYPE_SIZE_T
+AC_CHECK_TYPE(ssize_t, int)
AC_HEADER_STAT
AC_HEADER_DIRENT
AC_CHECK_FUNCS(lstat memmove putenv select setenv setlocale \
- strcasecmp tcgetattr)
+ strcasecmp strpbrk tcgetattr vsnprintf isascii isxdigit)
AC_FUNC_STRCOLL
-AC_CHECK_HEADERS(unistd.h stdlib.h varargs.h stdarg.h string.h \
- sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
- termcap.h termios.h termio.h sys/file.h locale.h)
+AC_CHECK_HEADERS(unistd.h stdlib.h varargs.h stdarg.h string.h strings.h \
+ limits.h sys/ptem.h sys/pte.h sys/stream.h sys/select.h \
+ termcap.h termios.h termio.h sys/file.h locale.h memory.h )
-BASH_SIGNAL_CHECK
-BASH_REINSTALL_SIGHANDLERS
+BASH_SYS_SIGNAL_VINTAGE
+BASH_SYS_REINSTALL_SIGHANDLERS
BASH_FUNC_POSIX_SETJMP
BASH_FUNC_LSTAT
-BASH_CHECK_GETPW_FUNCS
BASH_FUNC_STRCOLL
+BASH_CHECK_GETPW_FUNCS
+
+AC_HEADER_TIOCGWINSZ
+
BASH_TYPE_SIGHANDLER
-BASH_HAVE_TIOCGWINSZ
BASH_HAVE_TIOCSTAT
BASH_HAVE_FIONREAD
-BASH_MISC_SPEED_T
+BASH_CHECK_SPEED_T
BASH_STRUCT_WINSIZE
BASH_STRUCT_DIRENT_D_INO
BASH_STRUCT_DIRENT_D_FILENO
diff --git a/display.c b/display.c
index cb1c500..4ce7d6b 100644
--- a/display.c
+++ b/display.c
@@ -62,11 +62,11 @@ extern char *strchr (), *strrchr ();
extern char *_rl_term_forward_char;
#endif
-static void update_line __P((char *, char *, int, int, int, int));
-static void space_to_eol __P((int));
-static void delete_chars __P((int));
-static void insert_some_chars __P((char *, int));
-static void cr __P((void));
+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));
+static void cr PARAMS((void));
static int *inv_lbreaks, *vis_lbreaks;
static int inv_lbsize, vis_lbsize;
@@ -202,7 +202,7 @@ expand_prompt (pmt, lp, lip, niflp)
}
l = strlen (pmt);
- r = ret = xmalloc (l + 1);
+ r = ret = (char *)xmalloc (l + 1);
invfl = 0; /* invisible chars in first line of prompt */
@@ -335,16 +335,16 @@ init_line_structures (minsize)
{
if (line_size < minsize)
line_size = minsize;
- visible_line = xmalloc (line_size);
- invisible_line = xmalloc (line_size);
+ 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 = xrealloc (visible_line, line_size);
- invisible_line = xrealloc (invisible_line, line_size);
+ visible_line = (char *)xrealloc (visible_line, line_size);
+ invisible_line = (char *)xrealloc (invisible_line, line_size);
}
for (n = minsize; n < line_size; n++)
@@ -421,8 +421,8 @@ rl_redisplay ()
if (temp >= line_size)
{
line_size = (temp + 1024) - (temp % 1024);
- visible_line = xrealloc (visible_line, line_size);
- line = invisible_line = xrealloc (invisible_line, line_size);
+ 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;
@@ -455,8 +455,8 @@ rl_redisplay ()
if (temp >= line_size)
{
line_size = (temp + 1024) - (temp % 1024);
- visible_line = xrealloc (visible_line, line_size);
- line = invisible_line = xrealloc (invisible_line, line_size);
+ 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;
@@ -530,8 +530,8 @@ rl_redisplay ()
if (out + 8 >= line_size) /* XXX - 8 for \t */
{
line_size *= 2;
- visible_line = xrealloc (visible_line, line_size);
- invisible_line = xrealloc (invisible_line, line_size);
+ visible_line = (char *)xrealloc (visible_line, line_size);
+ invisible_line = (char *)xrealloc (invisible_line, line_size);
line = invisible_line;
}
@@ -1330,7 +1330,7 @@ rl_character_len (c, pos)
if (CTRL_CHAR (c) || c == RUBOUT)
return (2);
- return ((isprint (uc)) ? 1 : 2);
+ return ((ISPRINT (uc)) ? 1 : 2);
}
/* How to print things in the "echo-area". The prompt is treated as a
@@ -1357,7 +1357,12 @@ rl_message (va_alist)
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);
rl_display_prompt = msg_buf;
@@ -1370,6 +1375,7 @@ 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;
(*rl_redisplay_function) ();
return 0;
@@ -1436,7 +1442,7 @@ _rl_make_prompt_for_search (pchar)
if (saved_local_prompt == 0)
{
len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0;
- pmt = xmalloc (len + 2);
+ pmt = (char *)xmalloc (len + 2);
if (len)
strcpy (pmt, rl_prompt);
pmt[len] = pchar;
@@ -1445,7 +1451,7 @@ _rl_make_prompt_for_search (pchar)
else
{
len = *saved_local_prompt ? strlen (saved_local_prompt) : 0;
- pmt = xmalloc (len + 2);
+ pmt = (char *)xmalloc (len + 2);
if (len)
strcpy (pmt, saved_local_prompt);
pmt[len] = pchar;
diff --git a/doc/Makefile.in b/doc/Makefile.in
index bf3a5a3..78a83de 100644
--- a/doc/Makefile.in
+++ b/doc/Makefile.in
@@ -27,10 +27,16 @@ infodir = @infodir@
mandir = @mandir@
manpfx = man
-man1ext = 1
-man1dir = $(mandir)/$(manpfx)$(man1ext)
-man3ext = 3
-man3dir = $(mandir)/$(manpfx)$(man3ext)
+man1ext = .1
+man1dir = $(mandir)/$(manpfx)1
+man3ext = .3
+man3dir = $(mandir)/$(manpfx)3
+
+# set this to a value to have the HTML documentation installed
+htmldir =
+
+# Support an alternate destination root directory for package building
+DESTDIR =
SHELL = @MAKE_SHELL@
RM = rm -f
@@ -159,34 +165,63 @@ maintainer-clean: clean
$(RM) Makefile
installdirs: $(topdir)/support/mkdirs
- -$(SHELL) $(topdir)/support/mkdirs $(infodir) $(man3dir)
+ -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir)
+ -if test -n "${htmldir}" ; then \
+ $(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(htmldir) ; \
+ fi
install: installdirs
if test -f readline.info; then \
- ${INSTALL_DATA} readline.info $(infodir)/readline.info; \
+ ${INSTALL_DATA} readline.info $(DESTDIR)$(infodir)/readline.info; \
else \
- ${INSTALL_DATA} $(srcdir)/readline.info $(infodir)/readline.info; \
+ ${INSTALL_DATA} $(srcdir)/readline.info $(DESTDIR)$(infodir)/readline.info; \
fi
if test -f rluserman.info; then \
- ${INSTALL_DATA} rluserman.info $(infodir)/rluserman.info; \
+ ${INSTALL_DATA} rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \
else \
- ${INSTALL_DATA} $(srcdir)/rluserman.info $(infodir)/rluserman.info; \
+ ${INSTALL_DATA} $(srcdir)/rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \
fi
if test -f history.info; then \
- ${INSTALL_DATA} history.info $(infodir)/history.info; \
+ ${INSTALL_DATA} history.info $(DESTDIR)$(infodir)/history.info; \
else \
- ${INSTALL_DATA} $(srcdir)/history.info $(infodir)/history.info; \
+ ${INSTALL_DATA} $(srcdir)/history.info $(DESTDIR)$(infodir)/history.info; \
fi
-if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
- install-info --dir-file=$(infodir)/dir $(infodir)/readline.info ; \
- install-info --dir-file=$(infodir)/dir $(infodir)/history.info ; \
+ install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+ $(DESTDIR)$(infodir)/readline.info ; \
+ install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+ $(DESTDIR)$(infodir)/history.info ; \
+ install-info --dir-file=$(DESTDIR)$(infodir)/dir \
+ $(DESTDIR)$(infodir)/rluserman.info ; \
else true; fi
- -${INSTALL_DATA} $(srcdir)/readline.3 $(man3dir)/readline.3
- -${INSTALL_DATA} $(srcdir)/history.3 $(man3dir)/history.3
+ -${INSTALL_DATA} $(srcdir)/readline.3 $(DESTDIR)$(man3dir)/readline$(man3ext)
+ -${INSTALL_DATA} $(srcdir)/history.3 $(DESTDIR)$(man3dir)/history$(man3ext)
+ -if test -n "${htmldir}" ; then \
+ if test -f readline.html; then \
+ ${INSTALL_DATA} readline.html $(DESTDIR)$(htmldir)/readline.html; \
+ else \
+ ${INSTALL_DATA} $(srcdir)/readline.html $(DESTDIR)$(htmldir)/readline.html; \
+ fi ; \
+ if test -f history.html; then \
+ ${INSTALL_DATA} history.html $(DESTDIR)$(htmldir)/history.html; \
+ else \
+ ${INSTALL_DATA} $(srcdir)/history.html $(DESTDIR)$(htmldir)/history.html; \
+ fi ; \
+ if test -f rluserman.html; then \
+ ${INSTALL_DATA} rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \
+ else \
+ ${INSTALL_DATA} $(srcdir)/rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \
+ fi ; \
+ fi
uninstall:
- $(RM) $(infodir)/readline.info
- $(RM) $(infodir)/rluserman.info
- $(RM) $(infodir)/history.info
- $(RM) $(man3dir)/readline.3
- $(RM) $(man3dir)/history.3
+ $(RM) $(DESTDIR)$(infodir)/readline.info
+ $(RM) $(DESTDIR)$(infodir)/rluserman.info
+ $(RM) $(DESTDIR)$(infodir)/history.info
+ $(RM) $(DESTDIR)$(man3dir)/readline$(man3ext)
+ $(RM) $(DESTDIR)$(man3dir)/history$(man3ext)
+ -if test -n "${htmldir}" ; then \
+ $(RM) $(DESTDIR)$(htmldir)/readline.html ; \
+ $(RM) $(DESTDIR)$(htmldir)/rluserman.html ; \
+ $(RM) $(DESTDIR)$(htmldir)/history.html ; \
+ fi
diff --git a/doc/history.dvi b/doc/history.dvi
index 0b6a726..93fc211 100644
--- a/doc/history.dvi
+++ b/doc/history.dvi
Binary files differ
diff --git a/doc/history.html b/doc/history.html
index 9cf15fd..9155c16 100644
--- a/doc/history.html
+++ b/doc/history.html
@@ -1,125 +1,109 @@
<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on October, 9 2001 by texi2html 1.64 -->
+<!--
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+
+-->
<HEAD>
-<!-- This HTML file has been created by texi2html 1.52
- from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 16 April 2001 -->
+<TITLE>GNU History Library: </TITLE>
+
+<META NAME="description" CONTENT="GNU History Library: ">
+<META NAME="keywords" CONTENT="GNU History Library: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
-<TITLE>GNU History Library</TITLE>
</HEAD>
-<BODY>
-<H1>GNU History Library</H1>
-<H2>Edition 4.2, for <CODE>History Library</CODE> Version 4.2.</H2>
-<H2>Apr 2001</H2>
-<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
-<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
-<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="history.html#SEC1">Using History Interactively</A>
-<UL>
-<LI><A NAME="TOC2" HREF="history.html#SEC2">History Expansion</A>
-<UL>
-<LI><A NAME="TOC3" HREF="history.html#SEC3">Event Designators</A>
-<LI><A NAME="TOC4" HREF="history.html#SEC4">Word Designators</A>
-<LI><A NAME="TOC5" HREF="history.html#SEC5">Modifiers</A>
-</UL>
-</UL>
-<LI><A NAME="TOC6" HREF="history.html#SEC6">Programming with GNU History</A>
-<UL>
-<LI><A NAME="TOC7" HREF="history.html#SEC7">Introduction to History</A>
-<LI><A NAME="TOC8" HREF="history.html#SEC8">History Storage</A>
-<LI><A NAME="TOC9" HREF="history.html#SEC9">History Functions</A>
-<UL>
-<LI><A NAME="TOC10" HREF="history.html#SEC10">Initializing History and State Management</A>
-<LI><A NAME="TOC11" HREF="history.html#SEC11">History List Management</A>
-<LI><A NAME="TOC12" HREF="history.html#SEC12">Information About the History List</A>
-<LI><A NAME="TOC13" HREF="history.html#SEC13">Moving Around the History List</A>
-<LI><A NAME="TOC14" HREF="history.html#SEC14">Searching the History List</A>
-<LI><A NAME="TOC15" HREF="history.html#SEC15">Managing the History File</A>
-<LI><A NAME="TOC16" HREF="history.html#SEC16">History Expansion</A>
-</UL>
-<LI><A NAME="TOC17" HREF="history.html#SEC17">History Variables</A>
-<LI><A NAME="TOC18" HREF="history.html#SEC18">History Programming Example</A>
-</UL>
-<LI><A NAME="TOC19" HREF="history.html#SEC19">Concept Index</A>
-<LI><A NAME="TOC20" HREF="history.html#SEC20">Function and Variable Index</A>
-</UL>
-<P><HR><P>
-<P>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>GNU History Library</H1></P><P>
+
This document describes the GNU History library, a programming tool that
provides a consistent user interface for recalling lines of previously
typed input.
-
-</P>
-<P>
-Published by the Free Software Foundation <BR>
-59 Temple Place, Suite 330, <BR>
-Boston, MA 02111 USA
-
-</P>
-<P>
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-</P>
-<P>
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-</P>
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC1">1. Using History Interactively</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU History User's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC6">2. Programming with GNU History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU History Programmer's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC19">A. Concept Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC20">B. Function and Variable Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions
+ and variables.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<A NAME="Using History Interactively"></A>
+<H1> 1. Using History Interactively </H1>
+<!--docid::SEC1::-->
<P>
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-</P>
-<P>
-Copyright (C) 1988-2001 Free Software Foundation, Inc.
-
-</P>
-
-
-
-<H1><A NAME="SEC1" HREF="history.html#TOC1">Using History Interactively</A></H1>
-
-<P>
This chapter describes how to use the GNU History Library interactively,
from a user's standpoint. It should be considered a user's guide. For
information on using the GNU History Library in your own programs,
-see section <A HREF="history.html#SEC6">Programming with GNU History</A>.
-
-</P>
-
-<UL>
-<LI><A HREF="history.html#SEC2">History Interaction</A>: What it feels like using History as a user.
-</UL>
-
-
-
-<H2><A NAME="SEC2" HREF="history.html#TOC2">History Expansion</A></H2>
+see section <A HREF="history.html#SEC6">2. Programming with GNU History</A>.
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC2">1.1 History Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What it feels like using History as a user.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="History Interaction"></A>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 History Expansion </H2>
+<!--docid::SEC2::-->
<P>
-<A NAME="IDX1"></A>
-</P>
-<P>
The History library provides a history expansion feature that is similar
to the history expansion provided by <CODE>csh</CODE>. This section
describes the syntax used to manipulate the history information.
+</P><P>
-</P>
-<P>
History expansions introduce words from the history list into
the input stream, making it easy to repeat commands, insert the
arguments to a previous command into the current input line, or
fix errors in previous commands quickly.
+</P><P>
-</P>
-<P>
History expansion takes place in two parts. The first is to determine
which line from the history list should be used during substitution.
The second is to select portions of that line for inclusion into the
@@ -131,241 +115,300 @@ that Bash does, so that several words
surrounded by quotes are considered one word.
History expansions are introduced by the appearance of the
history expansion character, which is <SAMP>`!'</SAMP> by default.
-
-</P>
-
-
-<UL>
-<LI><A HREF="history.html#SEC3">Event Designators</A>: How to specify which history line to use.
-<LI><A HREF="history.html#SEC4">Word Designators</A>: Specifying which words are of interest.
-<LI><A HREF="history.html#SEC5">Modifiers</A>: Modifying the results of substitution.
-</UL>
-
-
-
-<H3><A NAME="SEC3" HREF="history.html#TOC3">Event Designators</A></H3>
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to specify which history line to use.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC4">1.1.2 Word Designators</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying which words are of interest.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC5">1.1.3 Modifiers</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Modifying the results of substitution.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Event Designators"></A>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.1 Event Designators </H3>
+<!--docid::SEC3::-->
<P>
-<A NAME="IDX2"></A>
-</P>
-<P>
An event designator is a reference to a command line entry in the
history list.
-<A NAME="IDX3"></A>
+<A NAME="IDX1"></A>
+</P><P>
-</P>
<DL COMPACT>
<DT><CODE>!</CODE>
-<DD>
-Start a history substitution, except when followed by a space, tab,
+<DD>Start a history substitution, except when followed by a space, tab,
the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP>.
+<P>
<DT><CODE>!<VAR>n</VAR></CODE>
-<DD>
-Refer to command line <VAR>n</VAR>.
+<DD>Refer to command line <VAR>n</VAR>.
+<P>
<DT><CODE>!-<VAR>n</VAR></CODE>
-<DD>
-Refer to the command <VAR>n</VAR> lines back.
+<DD>Refer to the command <VAR>n</VAR> lines back.
+<P>
<DT><CODE>!!</CODE>
-<DD>
-Refer to the previous command. This is a synonym for <SAMP>`!-1'</SAMP>.
+<DD>Refer to the previous command. This is a synonym for <SAMP>`!-1'</SAMP>.
+<P>
<DT><CODE>!<VAR>string</VAR></CODE>
-<DD>
-Refer to the most recent command starting with <VAR>string</VAR>.
+<DD>Refer to the most recent command starting with <VAR>string</VAR>.
+<P>
<DT><CODE>!?<VAR>string</VAR>[?]</CODE>
-<DD>
-Refer to the most recent command containing <VAR>string</VAR>. The trailing
+<DD>Refer to the most recent command containing <VAR>string</VAR>. The trailing
<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by
a newline.
+<P>
<DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE>
-<DD>
-Quick Substitution. Repeat the last command, replacing <VAR>string1</VAR>
+<DD>Quick Substitution. Repeat the last command, replacing <VAR>string1</VAR>
with <VAR>string2</VAR>. Equivalent to
<CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>.
+<P>
<DT><CODE>!#</CODE>
-<DD>
-The entire command line typed so far.
+<DD>The entire command line typed so far.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC4" HREF="history.html#TOC4">Word Designators</A></H3>
-
+<A NAME="Word Designators"></A>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.2 Word Designators </H3>
+<!--docid::SEC4::-->
<P>
+
Word designators are used to select desired words from the event.
A <SAMP>`:'</SAMP> separates the event specification from the word designator. It
may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, <SAMP>`$'</SAMP>,
<SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>. Words are numbered from the beginning
of the line, with the first word being denoted by 0 (zero). Words are
inserted into the current line separated by single spaces.
+</P><P>
-</P>
-<P>
For example,
+</P><P>
-</P>
<DL COMPACT>
-
<DT><CODE>!!</CODE>
-<DD>
-designates the preceding command. When you type this, the preceding
+<DD>designates the preceding command. When you type this, the preceding
command is repeated in toto.
+<P>
<DT><CODE>!!:$</CODE>
-<DD>
-designates the last argument of the preceding command. This may be
+<DD>designates the last argument of the preceding command. This may be
shortened to <CODE>!$</CODE>.
+<P>
<DT><CODE>!fi:2</CODE>
-<DD>
-designates the second argument of the most recent command starting with
+<DD>designates the second argument of the most recent command starting with
the letters <CODE>fi</CODE>.
</DL>
-
<P>
+
Here are the word designators:
<DL COMPACT>
<DT><CODE>0 (zero)</CODE>
-<DD>
-The <CODE>0</CODE>th word. For many applications, this is the command word.
+<DD>The <CODE>0</CODE>th word. For many applications, this is the command word.
+<P>
<DT><CODE><VAR>n</VAR></CODE>
-<DD>
-The <VAR>n</VAR>th word.
+<DD>The <VAR>n</VAR>th word.
+<P>
<DT><CODE>^</CODE>
-<DD>
-The first argument; that is, word 1.
+<DD>The first argument; that is, word 1.
+<P>
<DT><CODE>$</CODE>
-<DD>
-The last argument.
+<DD>The last argument.
+<P>
<DT><CODE>%</CODE>
-<DD>
-The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.
+<DD>The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search.
+<P>
<DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE>
-<DD>
-A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>.
+<DD>A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>.
+<P>
<DT><CODE>*</CODE>
-<DD>
-All of the words, except the <CODE>0</CODE>th. This is a synonym for <SAMP>`1-$'</SAMP>.
+<DD>All of the words, except the <CODE>0</CODE>th. This is a synonym for <SAMP>`1-$'</SAMP>.
It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the event;
the empty string is returned in that case.
+<P>
<DT><CODE><VAR>x</VAR>*</CODE>
-<DD>
-Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>
+<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP>
+<P>
<DT><CODE><VAR>x</VAR>-</CODE>
-<DD>
-Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word.
+<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word.
+<P>
</DL>
-
<P>
+
If a word designator is supplied without an event specification, the
previous command is used as the event.
-
-</P>
-
-
-<H3><A NAME="SEC5" HREF="history.html#TOC5">Modifiers</A></H3>
-
+</P><P>
+
+<A NAME="Modifiers"></A>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.1.3 Modifiers </H3>
+<!--docid::SEC5::-->
<P>
+
After the optional word designator, you can add a sequence of one or more
of the following modifiers, each preceded by a <SAMP>`:'</SAMP>.
+</P><P>
-</P>
<DL COMPACT>
<DT><CODE>h</CODE>
-<DD>
-Remove a trailing pathname component, leaving only the head.
+<DD>Remove a trailing pathname component, leaving only the head.
+<P>
<DT><CODE>t</CODE>
-<DD>
-Remove all leading pathname components, leaving the tail.
+<DD>Remove all leading pathname components, leaving the tail.
+<P>
<DT><CODE>r</CODE>
-<DD>
-Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
+<DD>Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving
the basename.
+<P>
<DT><CODE>e</CODE>
-<DD>
-Remove all but the trailing suffix.
+<DD>Remove all but the trailing suffix.
+<P>
<DT><CODE>p</CODE>
-<DD>
-Print the new command but do not execute it.
+<DD>Print the new command but do not execute it.
+<P>
<DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>
-<DD>
-Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
+<DD>Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the
event line. Any delimiter may be used in place of <SAMP>`/'</SAMP>.
The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR>
with a single backslash. If <SAMP>`&#38;'</SAMP> appears in <VAR>new</VAR>,
it is replaced by <VAR>old</VAR>. A single backslash will quote
the <SAMP>`&#38;'</SAMP>. The final delimiter is optional if it is the last
character on the input line.
+<P>
<DT><CODE>&#38;</CODE>
-<DD>
-Repeat the previous substitution.
+<DD>Repeat the previous substitution.
+<P>
<DT><CODE>g</CODE>
-<DD>
-Cause changes to be applied over the entire event line. Used in
+<DD>Cause changes to be applied over the entire event line. Used in
conjunction with <SAMP>`s'</SAMP>, as in <CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>,
or with <SAMP>`&#38;'</SAMP>.
+<P>
</DL>
+<P>
-
-
-<H1><A NAME="SEC6" HREF="history.html#TOC6">Programming with GNU History</A></H1>
-
+<A NAME="Programming with GNU History"></A>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. Programming with GNU History </H1>
+<!--docid::SEC6::-->
<P>
+
This chapter describes how to interface programs that you write
with the GNU History Library.
It should be considered a technical guide.
-For information on the interactive use of GNU History, see section <A HREF="history.html#SEC1">Using History Interactively</A>.
-
-</P>
-
-<UL>
-<LI><A HREF="history.html#SEC7">Introduction to History</A>: What is the GNU History library for?
-<LI><A HREF="history.html#SEC8">History Storage</A>: How information is stored.
-<LI><A HREF="history.html#SEC9">History Functions</A>: Functions that you can use.
-<LI><A HREF="history.html#SEC17">History Variables</A>: Variables that control behaviour.
-<LI><A HREF="history.html#SEC18">History Programming Example</A>: Example of using the GNU History Library.
-</UL>
-
-
-
-<H2><A NAME="SEC7" HREF="history.html#TOC7">Introduction to History</A></H2>
-
+For information on the interactive use of GNU History, see section <A HREF="history.html#SEC1">1. Using History Interactively</A>.
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC7">2.1 Introduction to History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">What is the GNU History library for?</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC8">2.2 History Storage</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How information is stored.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC9">2.3 History Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions that you can use.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC17">2.4 History Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables that control behaviour.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC18">2.5 History Programming Example</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Example of using the GNU History Library.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Introduction to History"></A>
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 Introduction to History </H2>
+<!--docid::SEC7::-->
<P>
+
Many programs read input from the user a line at a time. The GNU
History library is able to keep track of those lines, associate arbitrary
data with each line, and utilize information from previous lines in
composing new ones.
+</P><P>
-</P>
-<P>
The programmer using the History library has available functions
for remembering lines on a history list, associating arbitrary data
with a line, removing lines from the list, searching through the list
@@ -373,66 +416,68 @@ for a line containing an arbitrary text string, and referencing any line
in the list directly. In addition, a history <EM>expansion</EM> function
is available which provides for a consistent user interface across
different programs.
+</P><P>
-</P>
-<P>
The user using programs written with the History library has the
benefit of a consistent user interface with a set of well-known
commands for manipulating the text of previous lines and using that text
in new commands. The basic history manipulation commands are similar to
the history substitution provided by <CODE>csh</CODE>.
+</P><P>
-</P>
-<P>
If the programmer desires, he can use the Readline library, which
includes some history manipulation by default, and has the added
advantage of command line editing.
+</P><P>
-</P>
-<P>
Before declaring any functions using any functionality the History
library provides in other code, an application writer should include
the file <CODE>&#60;readline/history.h&#62;</CODE> in any file that uses the
History library's features. It supplies extern declarations for all
of the library's public functions and variables, and declares all of
the public data structures.
-
-</P>
-
-
-<H2><A NAME="SEC8" HREF="history.html#TOC8">History Storage</A></H2>
-
+</P><P>
+
+<A NAME="History Storage"></A>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 History Storage </H2>
+<!--docid::SEC8::-->
<P>
+
The history list is an array of history entries. A history entry is
declared as follows:
+</P><P>
-</P>
-
-<PRE>
-typedef void *histdata_t;
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>typedef void *histdata_t;
typedef struct _hist_entry {
char *line;
histdata_t data;
} HIST_ENTRY;
-</PRE>
+</pre></td></tr></table></P><P>
-<P>
The history list itself might therefore be declared as
+</P><P>
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>HIST_ENTRY **the_history_list;
+</pre></td></tr></table></P><P>
-<PRE>
-HIST_ENTRY **the_history_list;
-</PRE>
-
-<P>
The state of the History library is encapsulated into a single structure:
+</P><P>
-</P>
-
-<PRE>
-/*
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>/*
* A structure used to pass around the current state of the history.
*/
typedef struct _hist_state {
@@ -442,266 +487,321 @@ typedef struct _hist_state {
int size; /* Number of slots allocated to this array. */
int flags;
} HISTORY_STATE;
-</PRE>
+</pre></td></tr></table></P><P>
-<P>
If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been
stifled.
-
-</P>
-
-
-<H2><A NAME="SEC9" HREF="history.html#TOC9">History Functions</A></H2>
-
+</P><P>
+
+<A NAME="History Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.3 History Functions </H2>
+<!--docid::SEC9::-->
<P>
+
This section describes the calling sequence for the various functions
exported by the GNU History library.
+</P><P>
-</P>
-
-<UL>
-<LI><A HREF="history.html#SEC10">Initializing History and State Management</A>: Functions to call when you
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to call when you
want to use history in a
- program.
-<LI><A HREF="history.html#SEC11">History List Management</A>: Functions used to manage the list
- of history entries.
-<LI><A HREF="history.html#SEC12">Information About the History List</A>: Functions returning information about
- the history list.
-<LI><A HREF="history.html#SEC13">Moving Around the History List</A>: Functions used to change the position
- in the history list.
-<LI><A HREF="history.html#SEC14">Searching the History List</A>: Functions to search the history list
- for entries containing a string.
-<LI><A HREF="history.html#SEC15">Managing the History File</A>: Functions that read and write a file
- containing the history list.
-<LI><A HREF="history.html#SEC16">History Expansion</A>: Functions to perform csh-like history
- expansion.
-</UL>
-
-
-
-<H3><A NAME="SEC10" HREF="history.html#TOC10">Initializing History and State Management</A></H3>
-
+ program.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions used to manage the list
+ of history entries.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions returning information about
+ the history list.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions used to change the position
+ in the history list.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to search the history list
+ for entries containing a string.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions that read and write a file
+ containing the history list.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to perform csh-like history
+ expansion.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Initializing History and State Management"></A>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.1 Initializing History and State Management </H3>
+<!--docid::SEC10::-->
<P>
+
This section describes functions used to initialize and manage
the state of the History library when you want to use the history
functions in your program.
+</P><P>
-</P>
-<P>
+<A NAME="IDX2"></A>
<DL>
<DT><U>Function:</U> void <B>using_history</B> <I>(void)</I>
-<DD><A NAME="IDX4"></A>
-Begin a session in which the history functions might be used. This
+<DD>Begin a session in which the history functions might be used. This
initializes the interactive variables.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX3"></A>
<DL>
<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>(void)</I>
-<DD><A NAME="IDX5"></A>
-Return a structure describing the current state of the input history.
+<DD>Return a structure describing the current state of the input history.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX4"></A>
<DL>
<DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I>
-<DD><A NAME="IDX6"></A>
-Set the state of the history list according to <VAR>state</VAR>.
+<DD>Set the state of the history list according to <VAR>state</VAR>.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC11" HREF="history.html#TOC11">History List Management</A></H3>
-
+</P><P>
+
+<A NAME="History List Management"></A>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.2 History List Management </H3>
+<!--docid::SEC11::-->
<P>
+
These functions manage individual entries on the history list, or set
parameters managing the list itself.
+</P><P>
-</P>
-<P>
+<A NAME="IDX5"></A>
<DL>
<DT><U>Function:</U> void <B>add_history</B> <I>(const char *string)</I>
-<DD><A NAME="IDX7"></A>
-Place <VAR>string</VAR> at the end of the history list. The associated data
+<DD>Place <VAR>string</VAR> at the end of the history list. The associated data
field (if any) is set to <CODE>NULL</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX6"></A>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I>
-<DD><A NAME="IDX8"></A>
-Remove history entry at offset <VAR>which</VAR> from the history. The
+<DD>Remove history entry at offset <VAR>which</VAR> from the history. The
removed element is returned so you can free the line, data,
and containing structure.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX7"></A>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, const char *line, histdata_t data)</I>
-<DD><A NAME="IDX9"></A>
-Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>.
+<DD>Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>.
This returns the old entry so you can dispose of the data. In the case
of an invalid <VAR>which</VAR>, a <CODE>NULL</CODE> pointer is returned.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX8"></A>
<DL>
<DT><U>Function:</U> void <B>clear_history</B> <I>(void)</I>
-<DD><A NAME="IDX10"></A>
-Clear the history list by deleting all the entries.
+<DD>Clear the history list by deleting all the entries.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX9"></A>
<DL>
<DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I>
-<DD><A NAME="IDX11"></A>
-Stifle the history list, remembering only the last <VAR>max</VAR> entries.
+<DD>Stifle the history list, remembering only the last <VAR>max</VAR> entries.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX10"></A>
<DL>
<DT><U>Function:</U> int <B>unstifle_history</B> <I>(void)</I>
-<DD><A NAME="IDX12"></A>
-Stop stifling the history. This returns the previous amount the
+<DD>Stop stifling the history. This returns the previous amount the
history was stifled. The value is positive if the history was
stifled, negative if it wasn't.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX11"></A>
<DL>
<DT><U>Function:</U> int <B>history_is_stifled</B> <I>(void)</I>
-<DD><A NAME="IDX13"></A>
-Returns non-zero if the history is stifled, zero if it is not.
+<DD>Returns non-zero if the history is stifled, zero if it is not.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC12" HREF="history.html#TOC12">Information About the History List</A></H3>
-
+</P><P>
+
+<A NAME="Information About the History List"></A>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.3 Information About the History List </H3>
+<!--docid::SEC12::-->
<P>
+
These functions return information about the entire history list or
individual list entries.
+</P><P>
-</P>
-<P>
+<A NAME="IDX12"></A>
<DL>
<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>(void)</I>
-<DD><A NAME="IDX14"></A>
-Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY *</CODE> which is the
+<DD>Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY *</CODE> which is the
current input history. Element 0 of this list is the beginning of time.
If there is no history, return <CODE>NULL</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX13"></A>
<DL>
<DT><U>Function:</U> int <B>where_history</B> <I>(void)</I>
-<DD><A NAME="IDX15"></A>
-Returns the offset of the current history element.
+<DD>Returns the offset of the current history element.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX14"></A>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>(void)</I>
-<DD><A NAME="IDX16"></A>
-Return the history entry at the current position, as determined by
+<DD>Return the history entry at the current position, as determined by
<CODE>where_history()</CODE>. If there is no entry there, return a <CODE>NULL</CODE>
pointer.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX15"></A>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I>
-<DD><A NAME="IDX17"></A>
-Return the history entry at position <VAR>offset</VAR>, starting from
-<CODE>history_base</CODE> (see section <A HREF="history.html#SEC17">History Variables</A>).
+<DD>Return the history entry at position <VAR>offset</VAR>, starting from
+<CODE>history_base</CODE> (see section <A HREF="history.html#SEC17">2.4 History Variables</A>).
If there is no entry there, or if <VAR>offset</VAR>
is greater than the history length, return a <CODE>NULL</CODE> pointer.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX16"></A>
<DL>
<DT><U>Function:</U> int <B>history_total_bytes</B> <I>(void)</I>
-<DD><A NAME="IDX18"></A>
-Return the number of bytes that the primary history entries are using.
+<DD>Return the number of bytes that the primary history entries are using.
This function returns the sum of the lengths of all the lines in the
history.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC13" HREF="history.html#TOC13">Moving Around the History List</A></H3>
-
+</P><P>
+
+<A NAME="Moving Around the History List"></A>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.4 Moving Around the History List </H3>
+<!--docid::SEC13::-->
<P>
+
These functions allow the current index into the history list to be
set or changed.
+</P><P>
-</P>
-<P>
+<A NAME="IDX17"></A>
<DL>
<DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I>
-<DD><A NAME="IDX19"></A>
-Set the current history offset to <VAR>pos</VAR>, an absolute index
+<DD>Set the current history offset to <VAR>pos</VAR>, an absolute index
into the list.
Returns 1 on success, 0 if <VAR>pos</VAR> is less than zero or greater
than the number of history entries.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX18"></A>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>(void)</I>
-<DD><A NAME="IDX20"></A>
-Back up the current history offset to the previous history entry, and
+<DD>Back up the current history offset to the previous history entry, and
return a pointer to that entry. If there is no previous entry, return
a <CODE>NULL</CODE> pointer.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX19"></A>
<DL>
<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>(void)</I>
-<DD><A NAME="IDX21"></A>
-Move the current history offset forward to the next history entry, and
+<DD>Move the current history offset forward to the next history entry, and
return the a pointer to that entry. If there is no next entry, return
a <CODE>NULL</CODE> pointer.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC14" HREF="history.html#TOC14">Searching the History List</A></H3>
+</P><P>
+
+<A NAME="Searching the History List"></A>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.5 Searching the History List </H3>
+<!--docid::SEC14::-->
<P>
-<A NAME="IDX22"></A>
-</P>
-<P>
These functions allow searching of the history list for entries containing
a specific string. Searching may be performed both forward and backward
from the current history position. The search may be <EM>anchored</EM>,
meaning that the string must match at the beginning of the history entry.
-<A NAME="IDX23"></A>
+<A NAME="IDX20"></A>
+</P><P>
-</P>
-<P>
+<A NAME="IDX21"></A>
<DL>
<DT><U>Function:</U> int <B>history_search</B> <I>(const char *string, int direction)</I>
-<DD><A NAME="IDX24"></A>
-Search the history for <VAR>string</VAR>, starting at the current history offset.
+<DD>Search the history for <VAR>string</VAR>, starting at the current history offset.
If <VAR>direction</VAR> is less than 0, then the search is through
previous entries, otherwise through subsequent entries.
If <VAR>string</VAR> is found, then
@@ -710,13 +810,12 @@ returned is the offset in the line of the entry where
<VAR>string</VAR> was found. Otherwise, nothing is changed, and a -1 is
returned.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX22"></A>
<DL>
<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(const char *string, int direction)</I>
-<DD><A NAME="IDX25"></A>
-Search the history for <VAR>string</VAR>, starting at the current history
+<DD>Search the history for <VAR>string</VAR>, starting at the current history
offset. The search is anchored: matching lines must begin with
<VAR>string</VAR>. If <VAR>direction</VAR> is less than 0, then the search is
through previous entries, otherwise through subsequent entries.
@@ -724,263 +823,276 @@ If <VAR>string</VAR> is found, then the
current history index is set to that entry, and the return value is 0.
Otherwise, nothing is changed, and a -1 is returned.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX23"></A>
<DL>
<DT><U>Function:</U> int <B>history_search_pos</B> <I>(const char *string, int direction, int pos)</I>
-<DD><A NAME="IDX26"></A>
-Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an
+<DD>Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an
absolute index into the list. If <VAR>direction</VAR> is negative, the search
proceeds backward from <VAR>pos</VAR>, otherwise forward. Returns the absolute
index of the history element where <VAR>string</VAR> was found, or -1 otherwise.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC15" HREF="history.html#TOC15">Managing the History File</A></H3>
-
+</P><P>
+
+<A NAME="Managing the History File"></A>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.6 Managing the History File </H3>
+<!--docid::SEC15::-->
<P>
+
The History library can read the history from and write it to a file.
This section documents the functions for managing a history file.
+</P><P>
-</P>
-<P>
+<A NAME="IDX24"></A>
<DL>
<DT><U>Function:</U> int <B>read_history</B> <I>(const char *filename)</I>
-<DD><A NAME="IDX27"></A>
-Add the contents of <VAR>filename</VAR> to the history list, a line at a time.
+<DD>Add the contents of <VAR>filename</VAR> to the history list, a line at a time.
If <VAR>filename</VAR> is <CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>.
Returns 0 if successful, or <CODE>errno</CODE> if not.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX25"></A>
<DL>
<DT><U>Function:</U> int <B>read_history_range</B> <I>(const char *filename, int from, int to)</I>
-<DD><A NAME="IDX28"></A>
-Read a range of lines from <VAR>filename</VAR>, adding them to the history list.
+<DD>Read a range of lines from <VAR>filename</VAR>, adding them to the history list.
Start reading at line <VAR>from</VAR> and end at <VAR>to</VAR>.
If <VAR>from</VAR> is zero, start at the beginning. If <VAR>to</VAR> is less than
<VAR>from</VAR>, then read until the end of the file. If <VAR>filename</VAR> is
<CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>. Returns 0 if successful,
or <CODE>errno</CODE> if not.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX26"></A>
<DL>
<DT><U>Function:</U> int <B>write_history</B> <I>(const char *filename)</I>
-<DD><A NAME="IDX29"></A>
-Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR>
+<DD>Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR>
if necessary.
If <VAR>filename</VAR> is <CODE>NULL</CODE>, then write the history list to
<TT>`~/.history'</TT>.
Returns 0 on success, or <CODE>errno</CODE> on a read or write error.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX27"></A>
<DL>
<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, const char *filename)</I>
-<DD><A NAME="IDX30"></A>
-Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>.
+<DD>Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>.
If <VAR>filename</VAR> is <CODE>NULL</CODE>, then append to <TT>`~/.history'</TT>.
Returns 0 on success, or <CODE>errno</CODE> on a read or write error.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX28"></A>
<DL>
<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(const char *filename, int nlines)</I>
-<DD><A NAME="IDX31"></A>
-Truncate the history file <VAR>filename</VAR>, leaving only the last
+<DD>Truncate the history file <VAR>filename</VAR>, leaving only the last
<VAR>nlines</VAR> lines.
If <VAR>filename</VAR> is <CODE>NULL</CODE>, then <TT>`~/.history'</TT> is truncated.
Returns 0 on success, or <CODE>errno</CODE> on failure.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC16" HREF="history.html#TOC16">History Expansion</A></H3>
-
+</P><P>
+
+<A NAME="History Expansion"></A>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.3.7 History Expansion </H3>
+<!--docid::SEC16::-->
<P>
+
These functions implement history expansion.
+</P><P>
-</P>
-<P>
+<A NAME="IDX29"></A>
<DL>
<DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I>
-<DD><A NAME="IDX32"></A>
-Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer
-to a string (see section <A HREF="history.html#SEC2">History Expansion</A>). Returns:
+<DD>Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer
+to a string (see section <A HREF="history.html#SEC2">1.1 History Expansion</A>). Returns:
<DL COMPACT>
-
<DT><CODE>0</CODE>
-<DD>
-If no expansions took place (or, if the only change in
+<DD>If no expansions took place (or, if the only change in
the text was the removal of escape characters preceding the history expansion
character);
<DT><CODE>1</CODE>
-<DD>
-if expansions did take place;
+<DD>if expansions did take place;
<DT><CODE>-1</CODE>
-<DD>
-if there was an error in expansion;
+<DD>if there was an error in expansion;
<DT><CODE>2</CODE>
-<DD>
-if the returned line should be displayed, but not executed,
-as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">Modifiers</A>).
+<DD>if the returned line should be displayed, but not executed,
+as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">1.1.3 Modifiers</A>).
</DL>
-
<P>
+
If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive
error message.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX30"></A>
<DL>
<DT><U>Function:</U> char * <B>get_history_event</B> <I>(const char *string, int *cindex, int qchar)</I>
-<DD><A NAME="IDX33"></A>
-Returns the text of the history event beginning at <VAR>string</VAR> +
+<DD>Returns the text of the history event beginning at <VAR>string</VAR> +
<VAR>*cindex</VAR>. <VAR>*cindex</VAR> is modified to point to after the event
specifier. At function entry, <VAR>cindex</VAR> points to the index into
<VAR>string</VAR> where the history event specification begins. <VAR>qchar</VAR>
is a character that is allowed to end the event specification in addition
to the "normal" terminating characters.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX31"></A>
<DL>
<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(const char *string)</I>
-<DD><A NAME="IDX34"></A>
-Return an array of tokens parsed out of <VAR>string</VAR>, much as the
+<DD>Return an array of tokens parsed out of <VAR>string</VAR>, much as the
shell might. The tokens are split on the characters in the
<VAR>history_word_delimiters</VAR> variable,
and shell quoting conventions are obeyed.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX32"></A>
<DL>
<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, const char *string)</I>
-<DD><A NAME="IDX35"></A>
-Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR>
+<DD>Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR>
arguments present in <VAR>string</VAR>. Arguments are split using
<CODE>history_tokenize</CODE>.
</DL>
-
-</P>
-
-
-<H2><A NAME="SEC17" HREF="history.html#TOC17">History Variables</A></H2>
-
+</P><P>
+
+<A NAME="History Variables"></A>
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.4 History Variables </H2>
+<!--docid::SEC17::-->
<P>
+
This section describes the externally-visible variables exported by
the GNU History Library.
+</P><P>
-</P>
-<P>
+<A NAME="IDX33"></A>
<DL>
<DT><U>Variable:</U> int <B>history_base</B>
-<DD><A NAME="IDX36"></A>
-The logical offset of the first entry in the history list.
+<DD>The logical offset of the first entry in the history list.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX34"></A>
<DL>
<DT><U>Variable:</U> int <B>history_length</B>
-<DD><A NAME="IDX37"></A>
-The number of entries currently stored in the history list.
+<DD>The number of entries currently stored in the history list.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX35"></A>
<DL>
<DT><U>Variable:</U> int <B>history_max_entries</B>
-<DD><A NAME="IDX38"></A>
-The maximum number of history entries. This must be changed using
+<DD>The maximum number of history entries. This must be changed using
<CODE>stifle_history()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX36"></A>
<DL>
<DT><U>Variable:</U> char <B>history_expansion_char</B>
-<DD><A NAME="IDX39"></A>
-The character that introduces a history event. The default is <SAMP>`!'</SAMP>.
+<DD>The character that introduces a history event. The default is <SAMP>`!'</SAMP>.
Setting this to 0 inhibits history expansion.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX37"></A>
<DL>
<DT><U>Variable:</U> char <B>history_subst_char</B>
-<DD><A NAME="IDX40"></A>
-The character that invokes word substitution if found at the start of
+<DD>The character that invokes word substitution if found at the start of
a line. The default is <SAMP>`^'</SAMP>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX38"></A>
<DL>
<DT><U>Variable:</U> char <B>history_comment_char</B>
-<DD><A NAME="IDX41"></A>
-During tokenization, if this character is seen as the first character
+<DD>During tokenization, if this character is seen as the first character
of a word, then it and all subsequent characters up to a newline are
ignored, suppressing history expansion for the remainder of the line.
This is disabled by default.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX39"></A>
<DL>
<DT><U>Variable:</U> char * <B>history_word_delimiters</B>
-<DD><A NAME="IDX42"></A>
-The characters that separate tokens for \fBhistory_tokenize()\fP.
-The default value is <CODE>" \t\n()&#60;&#62;;&#38;|"</CODE>.
+<DD>The characters that separate tokens for <CODE>history_tokenize()</CODE>.
+The default value is <CODE>" \t\n()<>;&|"</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX40"></A>
<DL>
<DT><U>Variable:</U> char * <B>history_no_expand_chars</B>
-<DD><A NAME="IDX43"></A>
-The list of characters which inhibit history expansion if found immediately
+<DD>The list of characters which inhibit history expansion if found immediately
following <VAR>history_expansion_char</VAR>. The default is space, tab, newline,
carriage return, and <SAMP>`='</SAMP>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX41"></A>
<DL>
<DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B>
-<DD><A NAME="IDX44"></A>
-The list of additional characters which can delimit a history search
+<DD>The list of additional characters which can delimit a history search
string, in addition to space, TAB, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of
a substring search. The default is empty.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX42"></A>
<DL>
<DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B>
-<DD><A NAME="IDX45"></A>
-If non-zero, single-quoted words are not scanned for the history expansion
+<DD>If non-zero, single-quoted words are not scanned for the history expansion
character. The default value is 0.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX43"></A>
<DL>
<DT><U>Variable:</U> rl_linebuf_func_t * <B>history_inhibit_expansion_function</B>
-<DD><A NAME="IDX46"></A>
-This should be set to the address of a function that takes two arguments:
+<DD>This should be set to the address of a function that takes two arguments:
a <CODE>char *</CODE> (<VAR>string</VAR>)
and an <CODE>int</CODE> index into that string (<VAR>i</VAR>).
It should return a non-zero value if the history expansion starting at
@@ -990,19 +1102,30 @@ It is intended for use by applications like Bash that use the history
expansion character for additional purposes.
By default, this variable is set to <CODE>NULL</CODE>.
</DL>
-
-</P>
-
-
-<H2><A NAME="SEC18" HREF="history.html#TOC18">History Programming Example</A></H2>
-
+</P><P>
+
+<A NAME="History Programming Example"></A>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.5 History Programming Example </H2>
+<!--docid::SEC18::-->
<P>
-The following program demonstrates simple use of the GNU History Library.
-</P>
+The following program demonstrates simple use of the GNU History Library.
+</P><P>
-<PRE>
-#include &#60;stdio.h&#62;
+<TABLE><tr><td>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>#include &#60;stdio.h&#62;
#include &#60;readline/history.h&#62;
main (argc, argv)
@@ -1087,136 +1210,429 @@ main (argc, argv)
}
}
}
-</PRE>
-
+</FONT></pre></td></tr></table></P><P>
+
+<A NAME="Concept Index"></A>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC20"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> A. Concept Index </H1>
+<!--docid::SEC19::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp;
+<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp;
+<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp;
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<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="cp_A"></A>A</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX20">anchored search</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#SEC3">event designators</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_H"></A>H</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX1">history events</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#SEC2">history expansion</A></TD><TD valign=top><A HREF="history.html#SEC2">1.1 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#SEC14">History Searching</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp;
+<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp;
+<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp;
+</td></tr></table><br><P>
+
+<A NAME="Function and Variable Index"></A>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> B. Function and Variable Index </H1>
+<!--docid::SEC20::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp;
+<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp;
+<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A>
+ &nbsp;
+<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp;
+<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp;
+<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp;
+<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp;
+<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp;
+<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp;
+<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A>
+ &nbsp;
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<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="vr_A"></A>A</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX5"><CODE>add_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX27"><CODE>append_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_C"></A>C</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX8"><CODE>clear_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX14"><CODE>current_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_G"></A>G</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX30"><CODE>get_history_event</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_H"></A>H</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX32"><CODE>history_arg_extract</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX33"><CODE>history_base</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX38"><CODE>history_comment_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX29"><CODE>history_expand</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX36"><CODE>history_expansion_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX15"><CODE>history_get</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX3"><CODE>history_get_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX43"><CODE>history_inhibit_expansion_function</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX11"><CODE>history_is_stifled</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX34"><CODE>history_length</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX12"><CODE>history_list</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX35"><CODE>history_max_entries</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX40"><CODE>history_no_expand_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX42"><CODE>history_quotes_inhibit_expansion</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX21"><CODE>history_search</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX41"><CODE>history_search_delimiter_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX23"><CODE>history_search_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX22"><CODE>history_search_prefix</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX4"><CODE>history_set_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX17"><CODE>history_set_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX37"><CODE>history_subst_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX31"><CODE>history_tokenize</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX16"><CODE>history_total_bytes</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX28"><CODE>history_truncate_file</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX39"><CODE>history_word_delimiters</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_N"></A>N</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX19"><CODE>next_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_P"></A>P</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX18"><CODE>previous_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_R"></A>R</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX24"><CODE>read_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX25"><CODE>read_history_range</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX6"><CODE>remove_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX7"><CODE>replace_history_entry</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_S"></A>S</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX9"><CODE>stifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_U"></A>U</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX10"><CODE>unstifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX2"><CODE>using_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="vr_W"></A>W</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX13"><CODE>where_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="history.html#IDX26"><CODE>write_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp;
+<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp;
+<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A>
+ &nbsp;
+<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp;
+<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp;
+<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp;
+<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp;
+<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp;
+<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp;
+<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A>
+ &nbsp;
+</td></tr></table><br><P>
+
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="history.html#SEC2">1.1 History Expansion</A>
+<BR>
+<UL>
+<A NAME="TOC3" HREF="history.html#SEC3">1.1.1 Event Designators</A>
+<BR>
+<A NAME="TOC4" HREF="history.html#SEC4">1.1.2 Word Designators</A>
+<BR>
+<A NAME="TOC5" HREF="history.html#SEC5">1.1.3 Modifiers</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A>
+<BR>
+<UL>
+<A NAME="TOC7" HREF="history.html#SEC7">2.1 Introduction to History</A>
+<BR>
+<A NAME="TOC8" HREF="history.html#SEC8">2.2 History Storage</A>
+<BR>
+<A NAME="TOC9" HREF="history.html#SEC9">2.3 History Functions</A>
+<BR>
+<UL>
+<A NAME="TOC10" HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A>
+<BR>
+<A NAME="TOC11" HREF="history.html#SEC11">2.3.2 History List Management</A>
+<BR>
+<A NAME="TOC12" HREF="history.html#SEC12">2.3.3 Information About the History List</A>
+<BR>
+<A NAME="TOC13" HREF="history.html#SEC13">2.3.4 Moving Around the History List</A>
+<BR>
+<A NAME="TOC14" HREF="history.html#SEC14">2.3.5 Searching the History List</A>
+<BR>
+<A NAME="TOC15" HREF="history.html#SEC15">2.3.6 Managing the History File</A>
+<BR>
+<A NAME="TOC16" HREF="history.html#SEC16">2.3.7 History Expansion</A>
+<BR>
+</UL>
+<A NAME="TOC17" HREF="history.html#SEC17">2.4 History Variables</A>
+<BR>
+<A NAME="TOC18" HREF="history.html#SEC18">2.5 History Programming Example</A>
+<BR>
+</UL>
+<A NAME="TOC19" HREF="history.html#SEC19">A. Concept Index</A>
+<BR>
+<A NAME="TOC20" HREF="history.html#SEC20">B. Function and Variable Index</A>
+<BR>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A>
+<BR>
+<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A>
+<BR>
+<A NAME="TOC19" HREF="history.html#SEC19">A. Concept Index</A>
+<BR>
+<A NAME="TOC20" HREF="history.html#SEC20">B. Function and Variable Index</A>
+<BR>
+
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD>
+<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, 9 2001</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt; ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated
+by <I>Chet Ramey</I> on <I>October, 9 2001</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
-<H1><A NAME="SEC19" HREF="history.html#TOC19">Concept Index</A></H1>
-<P>
-Jump to:
-<A HREF="#cindex_a">a</A>
--
-<A HREF="#cindex_e">e</A>
--
-<A HREF="#cindex_h">h</A>
-<P>
-<H2><A NAME="cindex_a">a</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX23">anchored search</A>
-</DIR>
-<H2><A NAME="cindex_e">e</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX2">event designators</A>
-</DIR>
-<H2><A NAME="cindex_h">h</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX3">history events</A>
-<LI><A HREF="history.html#IDX1">history expansion</A>
-<LI><A HREF="history.html#IDX22">History Searching</A>
-</DIR>
-
-</P>
-
-
-<H1><A NAME="SEC20" HREF="history.html#TOC20">Function and Variable Index</A></H1>
-<P>
-Jump to:
-<A HREF="#vindex_a">a</A>
--
-<A HREF="#vindex_c">c</A>
--
-<A HREF="#vindex_g">g</A>
--
-<A HREF="#vindex_h">h</A>
--
-<A HREF="#vindex_n">n</A>
--
-<A HREF="#vindex_p">p</A>
--
-<A HREF="#vindex_r">r</A>
--
-<A HREF="#vindex_s">s</A>
--
-<A HREF="#vindex_u">u</A>
--
-<A HREF="#vindex_w">w</A>
-<P>
-<H2><A NAME="vindex_a">a</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX7">add_history</A>
-<LI><A HREF="history.html#IDX30">append_history</A>
-</DIR>
-<H2><A NAME="vindex_c">c</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX10">clear_history</A>
-<LI><A HREF="history.html#IDX16">current_history</A>
-</DIR>
-<H2><A NAME="vindex_g">g</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX33">get_history_event</A>
-</DIR>
-<H2><A NAME="vindex_h">h</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX35">history_arg_extract</A>
-<LI><A HREF="history.html#IDX36">history_base</A>
-<LI><A HREF="history.html#IDX41">history_comment_char</A>
-<LI><A HREF="history.html#IDX32">history_expand</A>
-<LI><A HREF="history.html#IDX39">history_expansion_char</A>
-<LI><A HREF="history.html#IDX17">history_get</A>
-<LI><A HREF="history.html#IDX5">history_get_history_state</A>
-<LI><A HREF="history.html#IDX46">history_inhibit_expansion_function</A>
-<LI><A HREF="history.html#IDX13">history_is_stifled</A>
-<LI><A HREF="history.html#IDX37">history_length</A>
-<LI><A HREF="history.html#IDX14">history_list</A>
-<LI><A HREF="history.html#IDX38">history_max_entries</A>
-<LI><A HREF="history.html#IDX43">history_no_expand_chars</A>
-<LI><A HREF="history.html#IDX45">history_quotes_inhibit_expansion</A>
-<LI><A HREF="history.html#IDX24">history_search</A>
-<LI><A HREF="history.html#IDX44">history_search_delimiter_chars</A>
-<LI><A HREF="history.html#IDX26">history_search_pos</A>
-<LI><A HREF="history.html#IDX25">history_search_prefix</A>
-<LI><A HREF="history.html#IDX6">history_set_history_state</A>
-<LI><A HREF="history.html#IDX19">history_set_pos</A>
-<LI><A HREF="history.html#IDX40">history_subst_char</A>
-<LI><A HREF="history.html#IDX34">history_tokenize</A>
-<LI><A HREF="history.html#IDX18">history_total_bytes</A>
-<LI><A HREF="history.html#IDX31">history_truncate_file</A>
-<LI><A HREF="history.html#IDX42">history_word_delimiters</A>
-</DIR>
-<H2><A NAME="vindex_n">n</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX21">next_history</A>
-</DIR>
-<H2><A NAME="vindex_p">p</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX20">previous_history</A>
-</DIR>
-<H2><A NAME="vindex_r">r</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX27">read_history</A>
-<LI><A HREF="history.html#IDX28">read_history_range</A>
-<LI><A HREF="history.html#IDX8">remove_history</A>
-<LI><A HREF="history.html#IDX9">replace_history_entry</A>
-</DIR>
-<H2><A NAME="vindex_s">s</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX11">stifle_history</A>
-</DIR>
-<H2><A NAME="vindex_u">u</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX12">unstifle_history</A>
-<LI><A HREF="history.html#IDX4">using_history</A>
-</DIR>
-<H2><A NAME="vindex_w">w</A></H2>
-<DIR>
-<LI><A HREF="history.html#IDX15">where_history</A>
-<LI><A HREF="history.html#IDX29">write_history</A>
-</DIR>
-
-</P>
-<P><HR><P>
-This document was generated on 16 April 2001 using the
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
-translator version 1.52.</P>
</BODY>
</HTML>
diff --git a/doc/history.info b/doc/history.info
index 5db15f6..143fba4 100644
--- a/doc/history.info
+++ b/doc/history.info
@@ -626,8 +626,8 @@ the GNU History Library.
remainder of the line. This is disabled by default.
- Variable: char * history_word_delimiters
- The characters that separate tokens for \fBhistory_tokenize()\fP.
- The default value is `" \t\n()<>;&|"'.
+ The characters that separate tokens for `history_tokenize()'. The
+ default value is `" \t\n()<>;&|"'.
- Variable: char * history_no_expand_chars
The list of characters which inhibit history expansion if found
@@ -832,8 +832,8 @@ Node: Searching the History List16536
Node: Managing the History File18454
Node: History Expansion20260
Node: History Variables22155
-Node: History Programming Example24725
-Node: Concept Index27447
-Node: Function and Variable Index27933
+Node: History Programming Example24722
+Node: Concept Index27444
+Node: Function and Variable Index27930

End Tag Table
diff --git a/doc/history.ps b/doc/history.ps
index 4532736..df01396 100644
--- a/doc/history.ps
+++ b/doc/history.ps
@@ -8,7 +8,7 @@
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 300 -t letter -o history.ps history.dvi
%DVIPSParameters: dpi=300, compressed
-%DVIPSSource: TeX output 2001.04.16:1105
+%DVIPSSource: TeX output 2001.10.09:1508
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -820,12 +820,12 @@ letter
%%EndSetup
%%Page: 1 1
1 0 bop 75 659 a Fq(GNU)33 b(History)f(Library)p 75 709
-1800 17 v 960 757 a Fp(Edition)16 b(4.2,)e(for)h Fo(History)f(Library)g
-Fp(V)l(ersion)i(4.2.)1692 811 y(Apr)f(2001)75 2467 y
-Fn(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6
-b(oundation)75 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6
-b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570
-1800 9 v eop
+1800 17 v 915 757 a Fp(Edition)16 b(4.2a,)e(for)g Fo(History)g(Library)
+h Fp(V)l(ersion)h(4.2a.)1608 811 y(Octob)q(er)g(2001)75
+2467 y Fn(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23
+b(Soft)n(w)n(are)f(F)-6 b(oundation)75 2534 y(Chet)22
+b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n
+(ersit)n(y)p 75 2570 1800 9 v eop
%%Page: 2 2
2 1 bop 75 217 a Fp(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f
(GNU)f(History)g(library)l(,)j(a)d(programming)g(to)q(ol)g(that)g(pro)o
@@ -1372,11 +1372,10 @@ o(haracter)e(is)h(seen)h(as)e(the)h(\014rst)g(c)o(haracter)f(of)g(a)h
(line.)21 b(This)16 b(is)g(disabled)h(b)o(y)e(default.)1773
1835 y(V)l(ariable)-1861 b Fh(char)20 b(*)f Fg(history)p
422 1835 V 21 w(w)n(ord)p 567 1835 V 20 w(delimiters)195
-1889 y Fp(The)e(c)o(haracters)g(that)f(separate)h(tok)o(ens)g(for)f
-Fo(\\)p Fp(fBhistory)p 1217 1889 14 2 v 17 w(tok)o(enize\(\))p
-Fo(\\)p Fp(fP)l(.)g(The)i(default)g(v)m(alue)195 1944
-y(is)e Fo(")f(\\t\\n\(\)<>;&|")p Fp(.)1773 2077 y(V)l(ariable)-1861
-b Fh(char)20 b(*)f Fg(history)p 422 2077 18 3 v 21 w(no)p
+1889 y Fp(The)14 b(c)o(haracters)f(that)g(separate)g(tok)o(ens)h(for)f
+Fo(history_tokenize\(\))p Fp(.)k(The)d(default)g(v)m(alue)h(is)f
+Fo(")195 1944 y(\\t\\n\(\)<>;&|")p Fp(.)1773 2077 y(V)l(ariable)-1861
+b Fh(char)20 b(*)f Fg(history)p 422 2077 V 21 w(no)p
504 2077 V 20 w(expand)p 704 2077 V 20 w(c)n(hars)195
2131 y Fp(The)c(list)h(of)e(c)o(haracters)g(whic)o(h)i(inhibit)h
(history)e(expansion)h(if)f(found)h(immediately)g(follo)o(wing)195
diff --git a/doc/hstech.texinfo b/doc/hstech.texinfo
index e4ac50c..003721a 100644
--- a/doc/hstech.texinfo
+++ b/doc/hstech.texinfo
@@ -422,7 +422,7 @@ This is disabled by default.
@end deftypevar
@deftypevar {char *} history_word_delimiters
-The characters that separate tokens for \fBhistory_tokenize()\fP.
+The characters that separate tokens for @code{history_tokenize()}.
The default value is @code{" \t\n()<>;&|"}.
@end deftypevar
diff --git a/doc/manvers.texinfo b/doc/manvers.texinfo
index 07fb02a..859afc1 100644
--- a/doc/manvers.texinfo
+++ b/doc/manvers.texinfo
@@ -1,6 +1,6 @@
-@set EDITION 4.2
-@set VERSION 4.2
-@set UPDATED 2001 Apr 16
-@set UPDATE-MONTH Apr 2001
+@set EDITION 4.2a
+@set VERSION 4.2a
+@set UPDATED 2001 October 9
+@set UPDATE-MONTH October 2001
-@set LASTCHANGE Mon Apr 16 10:53:58 EDT 2001
+@set LASTCHANGE Tue Oct 9 15:03:34 EDT 2001
diff --git a/doc/readline.0 b/doc/readline.0
index 398132d..af2efae 100644
--- a/doc/readline.0
+++ b/doc/readline.0
@@ -61,7 +61,7 @@ NNOOTTAATTIIOONN
-GNU Readline 4.2 2001 Mar 5 1
+GNU Readline 4.2a 2001 October 9 1
@@ -127,7 +127,7 @@ IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE
-GNU Readline 4.2 2001 Mar 5 2
+GNU Readline 4.2a 2001 October 9 2
@@ -181,19 +181,19 @@ READLINE(3) READLINE(3)
\\rr carriage return
\\tt horizontal tab
\\vv vertical tab
- \\_n_n_n the character whose ASCII code is the octal
- value _n_n_n (one to three digits)
- \\xx_n_n_n the character whose ASCII code is the hex-
- adecimal value _n_n_n (one to three digits)
+ \\_n_n_n the eight-bit character whose value is the
+ octal value _n_n_n (one to three digits)
+ \\xx_H_H the eight-bit character whose value is the
+ hexadecimal value _H_H (one or two hex digits)
When entering the text of a macro, single or double quotes
- should be used to indicate a macro definition. Unquoted
+ should be used to indicate a macro definition. Unquoted
text is assumed to be a function name. In the macro body,
- the backslash escapes described above are expanded.
+ the backslash escapes described above are expanded.
-GNU Readline 4.2 2001 Mar 5 3
+GNU Readline 4.2a 2001 October 9 3
@@ -202,64 +202,64 @@ GNU Readline 4.2 2001 Mar 5 3
READLINE(3) READLINE(3)
- Backslash will quote any other character in the macro
+ Backslash will quote any other character in the macro
text, including " and '.
- BBaasshh allows the current readline key bindings to be dis-
- played or modified with the bbiinndd builtin command. The
- editing mode may be switched during interactive use by
- using the --oo option to the sseett builtin command. Other
- programs using this library provide similar mechanisms.
- The _i_n_p_u_t_r_c file may be edited and re-read if a program
- does not provide any other means to incorporate new bind-
+ BBaasshh allows the current readline key bindings to be dis-
+ played or modified with the bbiinndd builtin command. The
+ editing mode may be switched during interactive use by
+ using the --oo option to the sseett builtin command. Other
+ programs using this library provide similar mechanisms.
+ The _i_n_p_u_t_r_c file may be edited and re-read if a program
+ does not provide any other means to incorporate new bind-
ings.
VVaarriiaabblleess
- Readline has variables that can be used to further cus-
+ Readline has variables that can be used to further cus-
tomize its behavior. A variable may be set in the _i_n_p_u_t_r_c
file with a statement of the form
sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e
Except where noted, readline variables can take the values
- OOnn or OOffff (without regard to case). The variables and
+ OOnn or OOffff (without regard to case). The variables and
their default values are:
bbeellll--ssttyyllee ((aauuddiibbllee))
- Controls what happens when readline wants to ring
- the terminal bell. If set to nnoonnee, readline never
+ Controls what happens when readline wants to ring
+ the terminal bell. If set to nnoonnee, readline never
rings the bell. If set to vviissiibbllee, readline uses a
- visible bell if one is available. If set to aauuddii--
+ visible bell if one is available. If set to aauuddii--
bbllee, readline attempts to ring the terminal's bell.
ccoommmmeenntt--bbeeggiinn ((````##''''))
- The string that is inserted in vvii mode when the
- iinnsseerrtt--ccoommmmeenntt command is executed. This command
- is bound to MM--## in emacs mode and to ## in vi com-
+ The string that is inserted in vvii mode when the
+ iinnsseerrtt--ccoommmmeenntt command is executed. This command
+ is bound to MM--## in emacs mode and to ## in vi com-
mand mode.
ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff))
- If set to OOnn, readline performs filename matching
+ If set to OOnn, readline performs filename matching
and completion in a case-insensitive fashion.
ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000))
- This determines when the user is queried about
- viewing the number of possible completions gener-
- ated by the ppoossssiibbllee--ccoommpplleettiioonnss command. It may
- be set to any integer value greater than or equal
- to zero. If the number of possible completions is
- greater than or equal to the value of this vari-
+ This determines when the user is queried about
+ viewing the number of possible completions gener-
+ ated by the ppoossssiibbllee--ccoommpplleettiioonnss command. It may
+ be set to any integer value greater than or equal
+ to zero. If the number of possible completions is
+ greater than or equal to the value of this vari-
able, the user is asked whether or not he wishes to
- view them; otherwise they are simply listed on the
+ view them; otherwise they are simply listed on the
terminal.
ccoonnvveerrtt--mmeettaa ((OOnn))
If set to OOnn, readline will convert characters with
- the eighth bit set to an ASCII key sequence by
- stripping the eighth bit and prefixing it with an
- escape character (in effect, using escape as the
+ the eighth bit set to an ASCII key sequence by
+ stripping the eighth bit and prefixing it with an
+ escape character (in effect, using escape as the
_m_e_t_a _p_r_e_f_i_x).
-GNU Readline 4.2 2001 Mar 5 4
+GNU Readline 4.2a 2001 October 9 4
@@ -269,63 +269,63 @@ READLINE(3) READLINE(3)
ddiissaabbllee--ccoommpplleettiioonn ((OOffff))
- If set to OOnn, readline will inhibit word comple-
- tion. Completion characters will be inserted into
+ If set to OOnn, readline will inhibit word comple-
+ tion. Completion characters will be inserted into
the line as if they had been mapped to sseellff--iinnsseerrtt.
eeddiittiinngg--mmooddee ((eemmaaccss))
- Controls whether readline begins with a set of key
- bindings similar to emacs or vi. eeddiittiinngg--mmooddee can
+ Controls whether readline begins with a set of key
+ bindings similar to emacs or vi. eeddiittiinngg--mmooddee can
be set to either eemmaaccss or vvii.
eennaabbllee--kkeeyyppaadd ((OOffff))
- When set to OOnn, readline will try to enable the
+ When set to OOnn, readline will try to enable the
application keypad when it is called. Some systems
need this to enable the arrow keys.
eexxppaanndd--ttiillddee ((OOffff))
- If set to oonn, tilde expansion is performed when
+ If set to oonn, tilde expansion is performed when
readline attempts word completion.
+ hhiissttoorryy--pprreesseerrvvee--ppooiinntt
+ If set to oonn, the history code attempts to place
+ point at the same location on each history line
+ retrived with pprreevviioouuss--hhiissttoorryy or nneexxtt--hhiissttoorryy.
hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff))
- When set to OOnn, makes readline use a single line
- for display, scrolling the input horizontally on a
- single screen line when it becomes longer than the
+ When set to OOnn, makes readline use a single line
+ for display, scrolling the input horizontally on a
+ single screen line when it becomes longer than the
screen width rather than wrapping to a new line.
iinnppuutt--mmeettaa ((OOffff))
- If set to OOnn, readline will enable eight-bit input
- (that is, it will not clear the eighth bit in the
+ If set to OOnn, readline will enable eight-bit input
+ (that is, it will not clear the eighth bit in the
characters it reads), regardless of what the termi-
nal claims it can support. The name mmeettaa--ffllaagg is a
synonym for this variable.
iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[ CC--JJ''''))
- The string of characters that should terminate an
- incremental search without subsequently executing
- the character as a command. If this variable has
- not been given a value, the characters _E_S_C and _C_-_J
+ The string of characters that should terminate an
+ incremental search without subsequently executing
+ the character as a command. If this variable has
+ not been given a value, the characters _E_S_C and _C_-_J
will terminate an incremental search.
kkeeyymmaapp ((eemmaaccss))
- Set the current readline keymap. The set of legal
- keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_,
+ Set the current readline keymap. The set of legal
+ keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_,
_e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t.
_v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent
- to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s.
- The value of eeddiittiinngg--mmooddee also affects the default
+ to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s.
+ The value of eeddiittiinngg--mmooddee also affects the default
keymap.
mmaarrkk--ddiirreeccttoorriieess ((OOnn))
- If set to OOnn, completed directory names have a
+ If set to OOnn, completed directory names have a
slash appended.
mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff))
If set to OOnn, history lines that have been modified
are displayed with a preceding asterisk (**).
- oouuttppuutt--mmeettaa ((OOffff))
- If set to OOnn, readline will display characters with
- the eighth bit set directly rather than as a meta-
- prefixed escape sequence.
- pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff))
- If set to OOnn, readline will display completions
- with matches sorted horizontally in alphabetical
- order, rather than down the screen.
+ mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn))
+ This variable, when set to OOnn, causes readline to
+ match files whose names begin with a `.' (hidden
+ files) when performing filename completion, unless
-GNU Readline 4.2 2001 Mar 5 5
+GNU Readline 4.2a 2001 October 9 5
@@ -334,42 +334,52 @@ GNU Readline 4.2 2001 Mar 5 5
READLINE(3) READLINE(3)
+ the leading `.' is supplied by the user in the
+ filename to be completed.
+ oouuttppuutt--mmeettaa ((OOffff))
+ If set to OOnn, readline will display characters with
+ the eighth bit set directly rather than as a meta-
+ prefixed escape sequence.
+ pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff))
+ If set to OOnn, readline will display completions
+ with matches sorted horizontally in alphabetical
+ order, rather than down the screen.
sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff))
- This alters the default behavior of the completion
- functions. If set to oonn, words which have more
- than one possible completion cause the matches to
- be listed immediately instead of ringing the bell.
+ This alters the default behavior of the completion
+ functions. If set to oonn, words which have more
+ than one possible completion cause the matches to
+ be listed immediately instead of ringing the bell.
vviissiibbllee--ssttaattss ((OOffff))
If set to OOnn, a character denoting a file's type as
- reported by _s_t_a_t(2) is appended to the filename
+ reported by _s_t_a_t(2) is appended to the filename
when listing possible completions.
CCoonnddiittiioonnaall CCoonnssttrruuccttss
- Readline implements a facility similar in spirit to the
- conditional compilation features of the C preprocessor
+ Readline implements a facility similar in spirit to the
+ conditional compilation features of the C preprocessor
which allows key bindings and variable settings to be per-
- formed as the result of tests. There are four parser
+ formed as the result of tests. There are four parser
directives used.
- $$iiff The $$iiff construct allows bindings to be made based
- on the editing mode, the terminal being used, or
- the application using readline. The text of the
- test extends to the end of the line; no characters
+ $$iiff The $$iiff construct allows bindings to be made based
+ on the editing mode, the terminal being used, or
+ the application using readline. The text of the
+ test extends to the end of the line; no characters
are required to isolate it.
- mmooddee The mmooddee== form of the $$iiff directive is used
- to test whether readline is in emacs or vi
- mode. This may be used in conjunction with
+ mmooddee The mmooddee== form of the $$iiff directive is used
+ to test whether readline is in emacs or vi
+ mode. This may be used in conjunction with
the sseett kkeeyymmaapp command, for instance, to set
- bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_-
- _c_t_l_x keymaps only if readline is starting
+ bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_-
+ _c_t_l_x keymaps only if readline is starting
out in emacs mode.
tteerrmm The tteerrmm== form may be used to include termi-
- nal-specific key bindings, perhaps to bind
- the key sequences output by the terminal's
- function keys. The word on the right side
- of the == is tested against the full name of
+ nal-specific key bindings, perhaps to bind
+ the key sequences output by the terminal's
+ function keys. The word on the right side
+ of the == is tested against the full name of
the terminal and the portion of the terminal
name before the first --. This allows _s_u_n to
match both _s_u_n and _s_u_n_-_c_m_d, for instance.
@@ -377,21 +387,11 @@ READLINE(3) READLINE(3)
aapppplliiccaattiioonn
The aapppplliiccaattiioonn construct is used to include
application-specific settings. Each program
- using the readline library sets the _a_p_p_l_i_c_a_-
- _t_i_o_n _n_a_m_e, and an initialization file can
- test for a particular value. This could be
- used to bind key sequences to functions use-
- ful for a specific program. For instance,
- the following command adds a key sequence
- that quotes the current or previous word in
- Bash:
+ using the readline library sets the
- $$iiff Bash
- # Quote the current or previous word
-
-GNU Readline 4.2 2001 Mar 5 6
+GNU Readline 4.2a 2001 October 9 6
@@ -400,64 +400,64 @@ GNU Readline 4.2 2001 Mar 5 6
READLINE(3) READLINE(3)
+ _a_p_p_l_i_c_a_t_i_o_n _n_a_m_e, and an initialization file
+ can test for a particular value. This could
+ be used to bind key sequences to functions
+ useful for a specific program. For
+ instance, the following command adds a key
+ sequence that quotes the current or previous
+ word in Bash:
+
+ $$iiff Bash
+ # Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$$eennddiiff
$$eennddiiff This command, as seen in the previous example, ter-
minates an $$iiff command.
- $$eellssee Commands in this branch of the $$iiff directive are
+ $$eellssee Commands in this branch of the $$iiff directive are
executed if the test fails.
$$iinncclluuddee
- This directive takes a single filename as an argu-
- ment and reads commands and bindings from that
- file. For example, the following directive would
+ This directive takes a single filename as an argu-
+ ment and reads commands and bindings from that
+ file. For example, the following directive would
read _/_e_t_c_/_i_n_p_u_t_r_c:
$$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c
SSEEAARRCCHHIINNGG
- Readline provides commands for searching through the com-
- mand history for lines containing a specified string.
- There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_-
+ Readline provides commands for searching through the com-
+ mand history for lines containing a specified string.
+ There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_-
_t_a_l.
- Incremental searches begin before the user has finished
+ Incremental searches begin before the user has finished
typing the search string. As each character of the search
string is typed, readline displays the next entry from the
- history matching the string typed so far. An incremental
- search requires only as many characters as needed to find
+ history matching the string typed so far. An incremental
+ search requires only as many characters as needed to find
the desired history entry. To search backward in the his-
- tory for a particular string, type CC--rr. Typing CC--ss
+ tory for a particular string, type CC--rr. Typing CC--ss
searches forward through the history. The characters pre-
- sent in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are
+ sent in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are
used to terminate an incremental search. If that variable
- has not been assigned a value the _E_s_c_a_p_e and CC--JJ charac-
+ has not been assigned a value the _E_s_c_a_p_e and CC--JJ charac-
ters will terminate an incremental search. CC--GG will abort
an incremental search and restore the original line. When
the search is terminated, the history entry containing the
search string becomes the current line.
- To find other matching entries in the history list, type
- CC--ss or CC--rr as appropriate. This will search backward or
- forward in the history for the next line matching the
- search string typed so far. Any other key sequence bound
- to a readline command will terminate the search and exe-
- cute that command. For instance, a newline will terminate
- the search and accept the line, thereby executing the com-
- mand from the history list. A movement command will ter-
- minate the search, make the last line found the current
- line, and begin editing.
+ To find other matching entries in the history list, type
+ CC--ss or CC--rr as appropriate. This will search backward or
+ forward in the history for the next line matching the
+ search string typed so far. Any other key sequence bound
+ to a readline command will terminate the search and
- Non-incremental searches read the entire search string
- before starting to search for matching history lines. The
- search string may be typed by the user or be part of the
- contents of the current line.
-
-GNU Readline 4.2 2001 Mar 5 7
+GNU Readline 4.2a 2001 October 9 7
@@ -466,14 +466,25 @@ GNU Readline 4.2 2001 Mar 5 7
READLINE(3) READLINE(3)
+ execute that command. For instance, a newline will termi-
+ nate the search and accept the line, thereby executing the
+ command from the history list. A movement command will
+ terminate the search, make the last line found the current
+ line, and begin editing.
+
+ Non-incremental searches read the entire search string
+ before starting to search for matching history lines. The
+ search string may be typed by the user or be part of the
+ contents of the current line.
+
EEDDIITTIINNGG CCOOMMMMAANNDDSS
- The following is a list of the names of the commands and
- the default key sequences to which they are bound. Com-
+ The following is a list of the names of the commands and
+ the default key sequences to which they are bound. Com-
mand names without an accompanying key sequence are
unbound by default.
In the following descriptions, _p_o_i_n_t refers to the current
- cursor position, and _m_a_r_k refers to a cursor position
+ cursor position, and _m_a_r_k refers to a cursor position
saved by the sseett--mmaarrkk command. The text between the point
and mark is referred to as the _r_e_g_i_o_n.
@@ -487,43 +498,32 @@ EEDDIITTIINNGG CCOOMMMMAANNDDSS
bbaacckkwwaarrdd--cchhaarr ((CC--bb))
Move back a character.
ffoorrwwaarrdd--wwoorrdd ((MM--ff))
- Move forward to the end of the next word. Words
- are composed of alphanumeric characters (letters
+ Move forward to the end of the next word. Words
+ are composed of alphanumeric characters (letters
and digits).
bbaacckkwwaarrdd--wwoorrdd ((MM--bb))
- Move back to the start of the current or previous
- word. Words are composed of alphanumeric charac-
+ Move back to the start of the current or previous
+ word. Words are composed of alphanumeric charac-
ters (letters and digits).
cclleeaarr--ssccrreeeenn ((CC--ll))
- Clear the screen leaving the current line at the
- top of the screen. With an argument, refresh the
+ Clear the screen leaving the current line at the
+ top of the screen. With an argument, refresh the
current line without clearing the screen.
rreeddrraaww--ccuurrrreenntt--lliinnee
Refresh the current line.
CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy
aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn))
- Accept the line regardless of where the cursor is.
- If this line is non-empty, it may be added to the
- history list for future recall with aadddd__hhiissttoorryy(()).
+ Accept the line regardless of where the cursor is.
+ If this line is non-empty, it may be added to the
+ history list for future recall with aadddd__hhiissttoorryy(()).
If the line is a modified history line, the history
line is restored to its original state.
- pprreevviioouuss--hhiissttoorryy ((CC--pp))
- Fetch the previous command from the history list,
- moving back in the list.
- nneexxtt--hhiissttoorryy ((CC--nn))
- Fetch the next command from the history list, mov-
- ing forward in the list.
- bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<))
- Move to the first line in the history.
- eenndd--ooff--hhiissttoorryy ((MM-->>))
- Move to the end of the input history, i.e., the
- line currently being entered.
-GNU Readline 4.2 2001 Mar 5 8
+GNU Readline 4.2a 2001 October 9 8
@@ -532,64 +532,64 @@ GNU Readline 4.2 2001 Mar 5 8
READLINE(3) READLINE(3)
+ pprreevviioouuss--hhiissttoorryy ((CC--pp))
+ Fetch the previous command from the history list,
+ moving back in the list.
+ nneexxtt--hhiissttoorryy ((CC--nn))
+ Fetch the next command from the history list, mov-
+ ing forward in the list.
+ bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<))
+ Move to the first line in the history.
+ eenndd--ooff--hhiissttoorryy ((MM-->>))
+ Move to the end of the input history, i.e., the
+ line currently being entered.
rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr))
- Search backward starting at the current line and
+ Search backward starting at the current line and
moving `up' through the history as necessary. This
is an incremental search.
ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss))
- Search forward starting at the current line and
- moving `down' through the history as necessary.
+ Search forward starting at the current line and
+ moving `down' through the history as necessary.
This is an incremental search.
nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp))
Search backward through the history starting at the
- current line using a non-incremental search for a
+ current line using a non-incremental search for a
string supplied by the user.
nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn))
- Search forward through the history using a non-
- incremental search for a string supplied by the
+ Search forward through the history using a non-
+ incremental search for a string supplied by the
user.
hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd
- Search forward through the history for the string
+ Search forward through the history for the string
of characters between the start of the current line
- and the current cursor position (the _p_o_i_n_t). This
+ and the current cursor position (the _p_o_i_n_t). This
is a non-incremental search.
hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd
- Search backward through the history for the string
+ Search backward through the history for the string
of characters between the start of the current line
and the point. This is a non-incremental search.
yyaannkk--nntthh--aarrgg ((MM--CC--yy))
- Insert the first argument to the previous command
- (usually the second word on the previous line) at
- point. With an argument _n, insert the _nth word
- from the previous command (the words in the previ-
- ous command begin with word 0). A negative argu-
- ment inserts the _nth word from the end of the pre-
+ Insert the first argument to the previous command
+ (usually the second word on the previous line) at
+ point. With an argument _n, insert the _nth word
+ from the previous command (the words in the previ-
+ ous command begin with word 0). A negative argu-
+ ment inserts the _nth word from the end of the pre-
vious command.
yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__))
- Insert the last argument to the previous command
- (the last word of the previous history entry).
+ Insert the last argument to the previous command
+ (the last word of the previous history entry).
With an argument, behave exactly like yyaannkk--nntthh--aarrgg.
Successive calls to yyaannkk--llaasstt--aarrgg move back through
- the history list, inserting the last argument of
+ the history list, inserting the last argument of
each line in turn.
CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt
- ddeelleettee--cchhaarr ((CC--dd))
- Delete the character at point. If point is at the
- beginning of the line, there are no characters in
- the line, and the last character typed was not
- bound to ddeelleettee--cchhaarr, then return EEOOFF.
- bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt))
- Delete the character behind the cursor. When given
- a numeric argument, save the deleted text on the
- kill ring.
- ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr
- Delete the character under the cursor, unless the
- cursor is at the end of the line, in which case the
-GNU Readline 4.2 2001 Mar 5 9
+
+GNU Readline 4.2a 2001 October 9 9
@@ -598,35 +598,49 @@ GNU Readline 4.2 2001 Mar 5 9
READLINE(3) READLINE(3)
+ ddeelleettee--cchhaarr ((CC--dd))
+ Delete the character at point. If point is at the
+ beginning of the line, there are no characters in
+ the line, and the last character typed was not
+ bound to ddeelleettee--cchhaarr, then return EEOOFF.
+ bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt))
+ Delete the character behind the cursor. When given
+ a numeric argument, save the deleted text on the
+ kill ring.
+ ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr
+ Delete the character under the cursor, unless the
+ cursor is at the end of the line, in which case the
character behind the cursor is deleted.
qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv))
- Add the next character that you type to the line
- verbatim. This is how to insert characters like
+ Add the next character that you type to the line
+ verbatim. This is how to insert characters like
CC--qq, for example.
ttaabb--iinnsseerrtt ((MM--TTAABB))
Insert a tab character.
sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......))
Insert the character typed.
ttrraannssppoossee--cchhaarrss ((CC--tt))
- Drag the character before point forward over the
- character at point, moving point forward as well.
- If point is at the end of the line, then this
- transposes the two characters before point. Nega-
+ Drag the character before point forward over the
+ character at point, moving point forward as well.
+ If point is at the end of the line, then this
+ transposes the two characters before point. Nega-
tive arguments have no effect.
ttrraannssppoossee--wwoorrddss ((MM--tt))
- Drag the word before point past the word after
- point, moving point over that word as well.
+ Drag the word before point past the word after
+ point, moving point over that word as well. If
+ point is at the end of the line, this transposes
+ the last two words on the line.
uuppccaassee--wwoorrdd ((MM--uu))
- Uppercase the current (or following) word. With a
+ Uppercase the current (or following) word. With a
negative argument, uppercase the previous word, but
do not move point.
ddoowwnnccaassee--wwoorrdd ((MM--ll))
- Lowercase the current (or following) word. With a
+ Lowercase the current (or following) word. With a
negative argument, lowercase the previous word, but
do not move point.
ccaappiittaalliizzee--wwoorrdd ((MM--cc))
Capitalize the current (or following) word. With a
- negative argument, capitalize the previous word,
+ negative argument, capitalize the previous word,
but do not move point.
KKiilllliinngg aanndd YYaannkkiinngg
@@ -635,27 +649,13 @@ READLINE(3) READLINE(3)
bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt))
Kill backward to the beginning of the line.
uunniixx--lliinnee--ddiissccaarrdd ((CC--uu))
- Kill backward from point to the beginning of the
+ Kill backward from point to the beginning of the
line. The killed text is saved on the kill-ring.
- kkiillll--wwhhoollee--lliinnee
- Kill all characters on the current line, no matter
- where point is.
- kkiillll--wwoorrdd ((MM--dd))
- Kill from point the end of the current word, or if
- between words, to the end of the next word. Word
- boundaries are the same as those used by ffoorr--
- wwaarrdd--wwoorrdd.
- bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt))
- Kill the word behind point. Word boundaries are
- the same as those used by bbaacckkwwaarrdd--wwoorrdd.
- uunniixx--wwoorrdd--rruubboouutt ((CC--ww))
- Kill the word behind point, using white space as a
- word boundary. The killed text is saved on the
- kill-ring.
-GNU Readline 4.2 2001 Mar 5 10
+
+GNU Readline 4.2a 2001 October 9 10
@@ -664,11 +664,26 @@ GNU Readline 4.2 2001 Mar 5 10
READLINE(3) READLINE(3)
+ kkiillll--wwhhoollee--lliinnee
+ Kill all characters on the current line, no matter
+ where point is.
+ kkiillll--wwoorrdd ((MM--dd))
+ Kill from point the end of the current word, or if
+ between words, to the end of the next word. Word
+ boundaries are the same as those used by ffoorr--
+ wwaarrdd--wwoorrdd.
+ bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt))
+ Kill the word behind point. Word boundaries are
+ the same as those used by bbaacckkwwaarrdd--wwoorrdd.
+ uunniixx--wwoorrdd--rruubboouutt ((CC--ww))
+ Kill the word behind point, using white space as a
+ word boundary. The killed text is saved on the
+ kill-ring.
ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\))
Delete all spaces and tabs around point.
kkiillll--rreeggiioonn
- Kill the text between the point and _m_a_r_k (saved
- cursor position). This text is referred to as the
+ Kill the text between the point and _m_a_r_k (saved
+ cursor position). This text is referred to as the
_r_e_g_i_o_n.
ccooppyy--rreeggiioonn--aass--kkiillll
Copy the text in the region to the kill buffer.
@@ -676,52 +691,37 @@ READLINE(3) READLINE(3)
Copy the word before point to the kill buffer. The
word boundaries are the same as bbaacckkwwaarrdd--wwoorrdd.
ccooppyy--ffoorrwwaarrdd--wwoorrdd
- Copy the word following point to the kill buffer.
+ Copy the word following point to the kill buffer.
The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd.
yyaannkk ((CC--yy))
- Yank the top of the kill ring into the buffer at
+ Yank the top of the kill ring into the buffer at
point.
yyaannkk--ppoopp ((MM--yy))
- Rotate the kill ring, and yank the new top. Only
+ Rotate the kill ring, and yank the new top. Only
works following yyaannkk or yyaannkk--ppoopp.
NNuummeerriicc AArrgguummeennttss
ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----))
- Add this digit to the argument already accumulat-
- ing, or start a new argument. M-- starts a nega-
+ Add this digit to the argument already accumulat-
+ ing, or start a new argument. M-- starts a nega-
tive argument.
uunniivveerrssaall--aarrgguummeenntt
- This is another way to specify an argument. If
- this command is followed by one or more digits,
- optionally with a leading minus sign, those digits
+ This is another way to specify an argument. If
+ this command is followed by one or more digits,
+ optionally with a leading minus sign, those digits
define the argument. If the command is followed by
digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the
- numeric argument, but is otherwise ignored. As a
- special case, if this command is immediately fol-
- lowed by a character that is neither a digit or
+ numeric argument, but is otherwise ignored. As a
+ special case, if this command is immediately fol-
+ lowed by a character that is neither a digit or
minus sign, the argument count for the next command
- is multiplied by four. The argument count is ini-
- tially one, so executing this function the first
- time makes the argument count four, a second time
- makes the argument count sixteen, and so on.
-
- CCoommpplleettiinngg
- ccoommpplleettee ((TTAABB))
- Attempt to perform completion on the text before
- point. The actual completion performed is applica-
- tion-specific. BBaasshh, for instance, attempts com-
- pletion treating the text as a variable (if the
- text begins with $$), username (if the text begins
- with ~~), hostname (if the text begins with @@), or
- command (including aliases and functions) in turn.
- If none of these produces a match, filename comple-
- tion is attempted. GGddbb, on the other hand, allows
- completion of program functions and variables, and
- only attempts filename completion under certain
+ is multiplied by four. The argument count is ini-
+ tially one, so executing this function the first
+ time makes the argument count four, a second time
-GNU Readline 4.2 2001 Mar 5 11
+GNU Readline 4.2a 2001 October 9 11
@@ -730,64 +730,64 @@ GNU Readline 4.2 2001 Mar 5 11
READLINE(3) READLINE(3)
+ makes the argument count sixteen, and so on.
+
+ CCoommpplleettiinngg
+ ccoommpplleettee ((TTAABB))
+ Attempt to perform completion on the text before
+ point. The actual completion performed is applica-
+ tion-specific. BBaasshh, for instance, attempts com-
+ pletion treating the text as a variable (if the
+ text begins with $$), username (if the text begins
+ with ~~), hostname (if the text begins with @@), or
+ command (including aliases and functions) in turn.
+ If none of these produces a match, filename comple-
+ tion is attempted. GGddbb, on the other hand, allows
+ completion of program functions and variables, and
+ only attempts filename completion under certain
circumstances.
ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??))
- List the possible completions of the text before
+ List the possible completions of the text before
point.
iinnsseerrtt--ccoommpplleettiioonnss ((MM--**))
- Insert all completions of the text before point
- that would have been generated by ppoossssiibbllee--ccoommppllee--
+ Insert all completions of the text before point
+ that would have been generated by ppoossssiibbllee--ccoommppllee--
ttiioonnss.
mmeennuu--ccoommpplleettee
- Similar to ccoommpplleettee, but replaces the word to be
+ Similar to ccoommpplleettee, but replaces the word to be
completed with a single match from the list of pos-
sible completions. Repeated execution of mmeennuu--ccoomm--
- pplleettee steps through the list of possible comple-
+ pplleettee steps through the list of possible comple-
tions, inserting each match in turn. At the end of
- the list of completions, the bell is rung (subject
- to the setting of Bbell-style)) aanndd tthhee oorriiggiinnaall
- tteexxtt iiss rreessttoorreedd.. AAnn aarrgguummeenntt ooff _n mmoovveess _n ppoossii--
- ttiioonnss ffoorrwwaarrdd iinn tthhee lliisstt ooff mmaattcchheess;; aa nneeggaattiivvee
- aarrgguummeenntt mmaayy bbee uusseedd ttoo mmoovvee bbaacckkwwaarrdd tthhrroouugghh tthhee
+ the list of completions, the bell is rung (subject
+ to the setting of Bbell-style)) aanndd tthhee oorriiggiinnaall
+ tteexxtt iiss rreessttoorreedd.. AAnn aarrgguummeenntt ooff _n mmoovveess _n ppoossii--
+ ttiioonnss ffoorrwwaarrdd iinn tthhee lliisstt ooff mmaattcchheess;; aa nneeggaattiivvee
+ aarrgguummeenntt mmaayy bbee uusseedd ttoo mmoovvee bbaacckkwwaarrdd tthhrroouugghh tthhee
lliisstt.. TThhiiss ccoommmmaanndd iiss iinntteennddeedd ttoo bbee bboouunndd ttoo TTAABB,,
bbuutt iiss uunnbboouunndd bbyy ddeeffaauulltt..
ddeelleettee--cchhaarr--oorr--lliisstt
- Deletes the character under the cursor if not at
- the beginning or end of the line (like ddeelleettee--
- cchhaarr). If at the end of the line, behaves identi-
+ Deletes the character under the cursor if not at
+ the beginning or end of the line (like ddeelleettee--
+ cchhaarr). If at the end of the line, behaves identi-
cally to ppoossssiibbllee--ccoommpplleettiioonnss.
KKeeyybbooaarrdd MMaaccrrooss
ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (())
- Begin saving the characters typed into the current
+ Begin saving the characters typed into the current
keyboard macro.
eenndd--kkbbdd--mmaaccrroo ((CC--xx ))))
- Stop saving the characters typed into the current
+ Stop saving the characters typed into the current
keyboard macro and store the definition.
ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee))
Re-execute the last keyboard macro defined, by mak-
- ing the characters in the macro appear as if typed
+ ing the characters in the macro appear as if typed
at the keyboard.
- MMiisscceellllaanneeoouuss
- rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr))
- Read in the contents of the _i_n_p_u_t_r_c file, and
- incorporate any bindings or variable assignments
- found there.
- aabboorrtt ((CC--gg))
- Abort the current editing command and ring the ter-
- minal's bell (subject to the setting of
- bbeellll--ssttyyllee).
- ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......))
- If the metafied character _x is lowercase, run the
- command that is bound to the corresponding upper-
- case character.
- pprreeffiixx--mmeettaa ((EESSCC))
- Metafy the next character typed. EESSCC ff is
-GNU Readline 4.2 2001 Mar 5 12
+GNU Readline 4.2a 2001 October 9 12
@@ -796,64 +796,64 @@ GNU Readline 4.2 2001 Mar 5 12
READLINE(3) READLINE(3)
- equivalent to MMeettaa--ff.
+ MMiisscceellllaanneeoouuss
+ rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr))
+ Read in the contents of the _i_n_p_u_t_r_c file, and
+ incorporate any bindings or variable assignments
+ found there.
+ aabboorrtt ((CC--gg))
+ Abort the current editing command and ring the ter-
+ minal's bell (subject to the setting of
+ bbeellll--ssttyyllee).
+ ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......))
+ If the metafied character _x is lowercase, run the
+ command that is bound to the corresponding upper-
+ case character.
+ pprreeffiixx--mmeettaa ((EESSCC))
+ Metafy the next character typed. EESSCC ff is equiva-
+ lent to MMeettaa--ff.
uunnddoo ((CC--__,, CC--xx CC--uu))
- Incremental undo, separately remembered for each
+ Incremental undo, separately remembered for each
line.
rreevveerrtt--lliinnee ((MM--rr))
- Undo all changes made to this line. This is like
- executing the uunnddoo command enough times to return
+ Undo all changes made to this line. This is like
+ executing the uunnddoo command enough times to return
the line to its initial state.
ttiillddee--eexxppaanndd ((MM--&&))
Perform tilde expansion on the current word.
sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>))
- Set the mark to the point. If a numeric argument
+ Set the mark to the point. If a numeric argument
is supplied, the mark is set to that position.
eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx))
- Swap the point with the mark. The current cursor
- position is set to the saved position, and the old
+ Swap the point with the mark. The current cursor
+ position is set to the saved position, and the old
cursor position is saved as the mark.
cchhaarraacctteerr--sseeaarrcchh ((CC--]]))
- A character is read and point is moved to the next
- occurrence of that character. A negative count
+ A character is read and point is moved to the next
+ occurrence of that character. A negative count
searches for previous occurrences.
cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]]))
- A character is read and point is moved to the pre-
- vious occurrence of that character. A negative
+ A character is read and point is moved to the pre-
+ vious occurrence of that character. A negative
count searches for subsequent occurrences.
iinnsseerrtt--ccoommmmeenntt ((MM--##))
The value of the readline ccoommmmeenntt--bbeeggiinn variable is
- inserted at the beginning of the current line, and
- the line is accepted as if a newline had been
- typed. The default value of ccoommmmeenntt--bbeeggiinn makes
+ inserted at the beginning of the current line, and
+ the line is accepted as if a newline had been
+ typed. The default value of ccoommmmeenntt--bbeeggiinn makes
the current line a shell comment.
dduummpp--ffuunnccttiioonnss
- Print all of the functions and their key bindings
- to the readline output stream. If a numeric argu-
+ Print all of the functions and their key bindings
+ to the readline output stream. If a numeric argu-
ment is supplied, the output is formatted in such a
way that it can be made part of an _i_n_p_u_t_r_c file.
dduummpp--vvaarriiaabblleess
- Print all of the settable variables and their val-
- ues to the readline output stream. If a numeric
- argument is supplied, the output is formatted in
- such a way that it can be made part of an _i_n_p_u_t_r_c
- file.
- dduummpp--mmaaccrrooss
- Print all of the readline key sequences bound to
- macros and the strings they ouput. If a numeric
- argument is supplied, the output is formatted in
- such a way that it can be made part of an _i_n_p_u_t_r_c
- file.
- eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee))
- When in vvii editing mode, this causes a switch to
- eemmaaccss editing mode.
- vvii--eeddiittiinngg--mmooddee ((MM--CC--jj))
- When in eemmaaccss editing mode, this causes a switch to
- vvii editing mode.
+ Print all of the settable variables and their val-
+ ues to the readline output stream. If a numeric
-GNU Readline 4.2 2001 Mar 5 13
+GNU Readline 4.2a 2001 October 9 13
@@ -862,21 +862,37 @@ GNU Readline 4.2 2001 Mar 5 13
READLINE(3) READLINE(3)
+ argument is supplied, the output is formatted in
+ such a way that it can be made part of an _i_n_p_u_t_r_c
+ file.
+ dduummpp--mmaaccrrooss
+ Print all of the readline key sequences bound to
+ macros and the strings they ouput. If a numeric
+ argument is supplied, the output is formatted in
+ such a way that it can be made part of an _i_n_p_u_t_r_c
+ file.
+ eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee))
+ When in vvii editing mode, this causes a switch to
+ eemmaaccss editing mode.
+ vvii--eeddiittiinngg--mmooddee ((MM--CC--jj))
+ When in eemmaaccss editing mode, this causes a switch to
+ vvii editing mode.
+
DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS
- The following is a list of the default emacs and vi bind-
- ings. Characters with the eighth bit set are written as
+ The following is a list of the default emacs and vi bind-
+ ings. Characters with the eighth bit set are written as
M-<character>, and are referred to as _m_e_t_a_f_i_e_d characters.
- The printable ASCII characters not mentioned in the list
- of emacs standard bindings are bound to the sseellff--iinnsseerrtt
- function, which just inserts the given character into the
- input line. In vi insertion mode, all characters not
- specifically mentioned are bound to sseellff--iinnsseerrtt. Charac-
- ters assigned to signal generation by _s_t_t_y(1) or the ter-
- minal driver, such as C-Z or C-C, retain that function.
- Upper and lower case metafied characters are bound to the
- same function in the emacs mode meta keymap. The remain-
- ing characters are unbound, which causes readline to ring
- the bell (subject to the setting of the bbeellll--ssttyyllee vari-
+ The printable ASCII characters not mentioned in the list
+ of emacs standard bindings are bound to the sseellff--iinnsseerrtt
+ function, which just inserts the given character into the
+ input line. In vi insertion mode, all characters not
+ specifically mentioned are bound to sseellff--iinnsseerrtt. Charac-
+ ters assigned to signal generation by _s_t_t_y(1) or the ter-
+ minal driver, such as C-Z or C-C, retain that function.
+ Upper and lower case metafied characters are bound to the
+ same function in the emacs mode meta keymap. The remain-
+ ing characters are unbound, which causes readline to ring
+ the bell (subject to the setting of the bbeellll--ssttyyllee vari-
able).
EEmmaaccss MMooddee
@@ -900,6 +916,18 @@ DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS
"C-Q" quoted-insert
"C-R" reverse-search-history
"C-S" forward-search-history
+
+
+
+GNU Readline 4.2a 2001 October 9 14
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
"C-T" transpose-chars
"C-U" unix-line-discard
"C-V" quoted-insert
@@ -916,18 +944,6 @@ DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS
"M-C-G" abort
"M-C-H" backward-kill-word
-
-
-
-GNU Readline 4.2 2001 Mar 5 14
-
-
-
-
-
-READLINE(3) READLINE(3)
-
-
"M-C-I" tab-insert
"M-C-J" vi-editing-mode
"M-C-M" vi-editing-mode
@@ -966,6 +982,18 @@ READLINE(3) READLINE(3)
"M-T" transpose-words
"M-U" upcase-word
"M-Y" yank-pop
+
+
+
+GNU Readline 4.2a 2001 October 9 15
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
"M-\" delete-horizontal-space
"M-~" tilde-expand
"M-C-?" backward-kill-word
@@ -983,17 +1011,6 @@ READLINE(3) READLINE(3)
"C-XC-?" backward-kill-line
-
-
-GNU Readline 4.2 2001 Mar 5 15
-
-
-
-
-
-READLINE(3) READLINE(3)
-
-
VVII MMooddee bbiinnddiinnggss
VI Insert Mode functions
@@ -1031,6 +1048,18 @@ READLINE(3) READLINE(3)
"C-S" forward-search-history
"C-T" transpose-chars
"C-U" unix-line-discard
+
+
+
+GNU Readline 4.2a 2001 October 9 16
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
"C-V" quoted-insert
"C-W" unix-word-rubout
"C-Y" yank
@@ -1048,18 +1077,6 @@ READLINE(3) READLINE(3)
"/" vi-search
"0" beginning-of-line
"1" to "9" vi-arg-digit
-
-
-
-GNU Readline 4.2 2001 Mar 5 16
-
-
-
-
-
-READLINE(3) READLINE(3)
-
-
";" vi-char-search
"=" vi-complete
"?" vi-search
@@ -1097,6 +1114,18 @@ READLINE(3) READLINE(3)
"l" forward-char
"m" vi-set-mark
"n" vi-search-again
+
+
+
+GNU Readline 4.2a 2001 October 9 17
+
+
+
+
+
+READLINE(3) READLINE(3)
+
+
"p" vi-put
"r" vi-change-char
"s" vi-subst
@@ -1113,19 +1142,6 @@ SSEEEE AALLSSOO
_T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
_b_a_s_h(1)
-
-
-
-
-GNU Readline 4.2 2001 Mar 5 17
-
-
-
-
-
-READLINE(3) READLINE(3)
-
-
FFIILLEESS
_~_/_._i_n_p_u_t_r_c
Individual rreeaaddlliinnee initialization file
@@ -1138,19 +1154,19 @@ AAUUTTHHOORRSS
chet@ins.CWRU.Edu
BBUUGG RREEPPOORRTTSS
- If you find a bug in rreeaaddlliinnee,, you should report it. But
- first, you should make sure that it really is a bug, and
- that it appears in the latest version of the rreeaaddlliinnee
+ If you find a bug in rreeaaddlliinnee,, you should report it. But
+ first, you should make sure that it really is a bug, and
+ that it appears in the latest version of the rreeaaddlliinnee
library that you have.
- Once you have determined that a bug actually exists, mail
- a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix,
- you are welcome to mail that as well! Suggestions and
- `philosophical' bug reports may be mailed to _b_u_g_-_r_e_a_d_-
+ Once you have determined that a bug actually exists, mail
+ a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix,
+ you are welcome to mail that as well! Suggestions and
+ `philosophical' bug reports may be mailed to _b_u_g_-_r_e_a_d_-
_l_i_n_e@_g_n_u_._o_r_g or posted to the Usenet newsgroup
ggnnuu..bbaasshh..bbuugg.
- Comments and bug reports concerning this manual page
+ Comments and bug reports concerning this manual page
should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u.
BBUUGGSS
@@ -1167,22 +1183,6 @@ BBUUGGSS
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-GNU Readline 4.2 2001 Mar 5 18
+GNU Readline 4.2a 2001 October 9 18
diff --git a/doc/readline.3 b/doc/readline.3
index 037b1bb..41cc20c 100644
--- a/doc/readline.3
+++ b/doc/readline.3
@@ -6,9 +6,9 @@
.\" Case Western Reserve University
.\" chet@ins.CWRU.Edu
.\"
-.\" Last Change: Mon Mar 5 09:58:38 EST 2001
+.\" Last Change: Tue Oct 9 15:06:03 EDT 2001
.\"
-.TH READLINE 3 "2001 Mar 5" "GNU Readline 4.2"
+.TH READLINE 3 "2001 October 9" "GNU Readline 4.2a"
.\"
.\" File Name macro. This used to be `.PN', for Path Name,
.\" but Sun doesn't seem to like that very much.
@@ -282,12 +282,12 @@ horizontal tab
vertical tab
.TP
.B \e\fInnn\fP
-the character whose ASCII code is the octal value \fInnn\fP
+the eight-bit character whose value is the octal value \fInnn\fP
(one to three digits)
.TP
-.B \ex\fInnn\fP
-the character whose ASCII code is the hexadecimal value \fInnn\fP
-(one to three digits)
+.B \ex\fIHH\fP
+the eight-bit character whose value is the hexadecimal value \fIHH\fP
+(one or two hex digits)
.RE
.PD
.PP
@@ -391,6 +391,11 @@ arrow keys.
If set to \fBon\fP, tilde expansion is performed when readline
attempts word completion.
.TP
+.B history-preserve-point
+If set to \fBon\fP, the history code attempts to place point at the
+same location on each history line retrived with \fBprevious-history\fP
+or \fBnext-history\fP.
+.TP
.B horizontal\-scroll\-mode (Off)
When set to \fBOn\fP, makes readline use a single line for display,
scrolling the input horizontally on a single screen line when it
@@ -429,6 +434,12 @@ appended.
If set to \fBOn\fP, history lines that have been modified are displayed
with a preceding asterisk (\fB*\fP).
.TP
+.B match\-hidden\-files (On)
+This variable, when set to \fBOn\fP, causes readline to match files whose
+names begin with a `.' (hidden files) when performing filename
+completion, unless the leading `.' is
+supplied by the user in the filename to be completed.
+.TP
.B output\-meta (Off)
If set to \fBOn\fP, readline will display characters with the
eighth bit set directly rather than as a meta-prefixed escape
@@ -710,6 +721,8 @@ Negative arguments have no effect.
.B transpose\-words (M\-t)
Drag the word before point past the word after point,
moving point over that word as well.
+If point is at the end of the line, this transposes
+the last two words on the line.
.TP
.B upcase\-word (M\-u)
Uppercase the current (or following) word. With a negative argument,
diff --git a/doc/readline.dvi b/doc/readline.dvi
index 516c43c..6c4cb4f 100644
--- a/doc/readline.dvi
+++ b/doc/readline.dvi
Binary files differ
diff --git a/doc/readline.html b/doc/readline.html
index 8822671..82a5a7c 100644
--- a/doc/readline.html
+++ b/doc/readline.html
@@ -1,162 +1,111 @@
<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on October, 9 2001 by texi2html 1.64 -->
+<!--
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+
+-->
<HEAD>
-<!-- This HTML file has been created by texi2html 1.52
- from /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo on 16 April 2001 -->
+<TITLE>GNU Readline Library: </TITLE>
+
+<META NAME="description" CONTENT="GNU Readline Library: ">
+<META NAME="keywords" CONTENT="GNU Readline Library: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
-<TITLE>GNU Readline Library</TITLE>
</HEAD>
-<BODY>
-<H1>GNU Readline Library</H1>
-<H2>Edition 4.2, for <CODE>Readline Library</CODE> Version 4.2.</H2>
-<H2>Apr 2001</H2>
-<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
-<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
-<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="readline.html#SEC1">Command Line Editing</A>
-<UL>
-<LI><A NAME="TOC2" HREF="readline.html#SEC2">Introduction to Line Editing</A>
-<LI><A NAME="TOC3" HREF="readline.html#SEC3">Readline Interaction</A>
-<UL>
-<LI><A NAME="TOC4" HREF="readline.html#SEC4">Readline Bare Essentials</A>
-<LI><A NAME="TOC5" HREF="readline.html#SEC5">Readline Movement Commands</A>
-<LI><A NAME="TOC6" HREF="readline.html#SEC6">Readline Killing Commands</A>
-<LI><A NAME="TOC7" HREF="readline.html#SEC7">Readline Arguments</A>
-<LI><A NAME="TOC8" HREF="readline.html#SEC8">Searching for Commands in the History</A>
-</UL>
-<LI><A NAME="TOC9" HREF="readline.html#SEC9">Readline Init File</A>
-<UL>
-<LI><A NAME="TOC10" HREF="readline.html#SEC10">Readline Init File Syntax</A>
-<LI><A NAME="TOC11" HREF="readline.html#SEC11">Conditional Init Constructs</A>
-<LI><A NAME="TOC12" HREF="readline.html#SEC12">Sample Init File</A>
-</UL>
-<LI><A NAME="TOC13" HREF="readline.html#SEC13">Bindable Readline Commands</A>
-<UL>
-<LI><A NAME="TOC14" HREF="readline.html#SEC14">Commands For Moving</A>
-<LI><A NAME="TOC15" HREF="readline.html#SEC15">Commands For Manipulating The History</A>
-<LI><A NAME="TOC16" HREF="readline.html#SEC16">Commands For Changing Text</A>
-<LI><A NAME="TOC17" HREF="readline.html#SEC17">Killing And Yanking</A>
-<LI><A NAME="TOC18" HREF="readline.html#SEC18">Specifying Numeric Arguments</A>
-<LI><A NAME="TOC19" HREF="readline.html#SEC19">Letting Readline Type For You</A>
-<LI><A NAME="TOC20" HREF="readline.html#SEC20">Keyboard Macros</A>
-<LI><A NAME="TOC21" HREF="readline.html#SEC21">Some Miscellaneous Commands</A>
-</UL>
-<LI><A NAME="TOC22" HREF="readline.html#SEC22">Readline vi Mode</A>
-</UL>
-<LI><A NAME="TOC23" HREF="readline.html#SEC23">Programming with GNU Readline</A>
-<UL>
-<LI><A NAME="TOC24" HREF="readline.html#SEC24">Basic Behavior</A>
-<LI><A NAME="TOC25" HREF="readline.html#SEC25">Custom Functions</A>
-<UL>
-<LI><A NAME="TOC26" HREF="readline.html#SEC26">Readline Typedefs</A>
-<LI><A NAME="TOC27" HREF="readline.html#SEC27">Writing a New Function</A>
-</UL>
-<LI><A NAME="TOC28" HREF="readline.html#SEC28">Readline Variables</A>
-<LI><A NAME="TOC29" HREF="readline.html#SEC29">Readline Convenience Functions</A>
-<UL>
-<LI><A NAME="TOC30" HREF="readline.html#SEC30">Naming a Function</A>
-<LI><A NAME="TOC31" HREF="readline.html#SEC31">Selecting a Keymap</A>
-<LI><A NAME="TOC32" HREF="readline.html#SEC32">Binding Keys</A>
-<LI><A NAME="TOC33" HREF="readline.html#SEC33">Associating Function Names and Bindings</A>
-<LI><A NAME="TOC34" HREF="readline.html#SEC34">Allowing Undoing</A>
-<LI><A NAME="TOC35" HREF="readline.html#SEC35">Redisplay</A>
-<LI><A NAME="TOC36" HREF="readline.html#SEC36">Modifying Text</A>
-<LI><A NAME="TOC37" HREF="readline.html#SEC37">Character Input</A>
-<LI><A NAME="TOC38" HREF="readline.html#SEC38">Terminal Management</A>
-<LI><A NAME="TOC39" HREF="readline.html#SEC39">Utility Functions</A>
-<LI><A NAME="TOC40" HREF="readline.html#SEC40">Miscellaneous Functions</A>
-<LI><A NAME="TOC41" HREF="readline.html#SEC41">Alternate Interface</A>
-<LI><A NAME="TOC42" HREF="readline.html#SEC42">A Readline Example</A>
-</UL>
-<LI><A NAME="TOC43" HREF="readline.html#SEC43">Readline Signal Handling</A>
-<LI><A NAME="TOC44" HREF="readline.html#SEC44">Custom Completers</A>
-<UL>
-<LI><A NAME="TOC45" HREF="readline.html#SEC45">How Completing Works</A>
-<LI><A NAME="TOC46" HREF="readline.html#SEC46">Completion Functions</A>
-<LI><A NAME="TOC47" HREF="readline.html#SEC47">Completion Variables</A>
-<LI><A NAME="TOC48" HREF="readline.html#SEC48">A Short Completion Example</A>
-</UL>
-</UL>
-<LI><A NAME="TOC49" HREF="readline.html#SEC49">Concept Index</A>
-<LI><A NAME="TOC50" HREF="readline.html#SEC50">Function and Variable Index</A>
-</UL>
-<P><HR><P>
-<P>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>GNU Readline Library</H1></P><P>
+
This document describes the GNU Readline Library, a utility which aids
in the consistency of user interface across discrete programs that need
to provide a command line interface.
-
-</P>
-<P>
-Published by the Free Software Foundation <BR>
-59 Temple Place, Suite 330, <BR>
-Boston, MA 02111 USA
-
-</P>
-<P>
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-</P>
-<P>
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-</P>
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC1">1. Command Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC23">2. Programming with GNU Readline</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU Readline Programmer's Manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC49">Concept Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC50">Function and Variable Index</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions
+ and variables.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<A NAME="Command Line Editing"></A>
+<H1> 1. Command Line Editing </H1>
+<!--docid::SEC1::-->
<P>
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-
-</P>
-<P>
-Copyright (C) 1988-2001 Free Software Foundation, Inc.
-</P>
-
-
-
-<H1><A NAME="SEC1" HREF="readline.html#TOC1">Command Line Editing</A></H1>
-
-<P>
This chapter describes the basic features of the GNU
command line editing interface.
-
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC2">Introduction and Notation</A>: Notation used in this text.
-<LI><A HREF="readline.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line.
-<LI><A HREF="readline.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view.
-<LI><A HREF="readline.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands
- available for binding
-<LI><A HREF="readline.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline
- behave like the vi editor.
-</UL>
-
-
-
-<H2><A NAME="SEC2" HREF="readline.html#TOC2">Introduction to Line Editing</A></H2>
-
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC9">1.3 Readline Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands
+ available for binding</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC22">1.5 Readline vi Mode</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline
+ behave like the vi editor.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Introduction and Notation"></A>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 Introduction to Line Editing </H2>
+<!--docid::SEC2::-->
<P>
+
The following paragraphs describe the notation used to represent
keystrokes.
+</P><P>
-</P>
-<P>
The text <KBD>C-k</KBD> is read as `Control-K' and describes the character
produced when the <KBD>k</KBD> key is pressed while the Control key
is depressed.
+</P><P>
-</P>
-<P>
The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character
produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD>
key is pressed.
@@ -167,39 +116,46 @@ work as a Meta key.
The <KBD>ALT</KBD> key on the right may also be configured to work as a
Meta key or may be configured as some other modifier, such as a
Compose key for typing accented characters.
+</P><P>
-</P>
-<P>
If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as
a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD>
<EM>first</EM>, and then typing <KBD>k</KBD>.
Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key.
+</P><P>
-</P>
-<P>
The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the
character produced by <EM>metafying</EM> <KBD>C-k</KBD>.
+</P><P>
-</P>
-<P>
In addition, several keys have their own names. Specifically,
<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all
stand for themselves when seen in this text, or in an init file
-(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will
produce the desired character.
The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on
some keyboards.
-
-</P>
-
-
-<H2><A NAME="SEC3" HREF="readline.html#TOC3">Readline Interaction</A></H2>
+</P><P>
+
+<A NAME="Readline Interaction"></A>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.2 Readline Interaction </H2>
+<!--docid::SEC3::-->
<P>
-<A NAME="IDX1"></A>
-</P>
-<P>
Often during an interactive session you type in a long line of text,
only to notice that the first word on the line is misspelled. The
Readline library gives you a set of commands for manipulating the text
@@ -210,209 +166,234 @@ insert the text of the corrections. Then, when you are satisfied with
the line, you simply press <KBD>RET</KBD>. You do not have to be at the
end of the line to press <KBD>RET</KBD>; the entire line is accepted
regardless of the location of the cursor within the line.
-
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline.
-<LI><A HREF="readline.html#SEC5">Readline Movement Commands</A>: Moving about the input line.
-<LI><A HREF="readline.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back!
-<LI><A HREF="readline.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands.
-<LI><A HREF="readline.html#SEC8">Searching</A>: Searching through previous lines.
-</UL>
-
-
-
-<H3><A NAME="SEC4" HREF="readline.html#TOC4">Readline Bare Essentials</A></H3>
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC7">1.2.4 Readline Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Readline Bare Essentials"></A>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.1 Readline Bare Essentials </H3>
+<!--docid::SEC4::-->
<P>
-<A NAME="IDX2"></A>
-<A NAME="IDX3"></A>
-<A NAME="IDX4"></A>
-</P>
-<P>
In order to enter characters into the line, simply type them. The typed
character appears where the cursor was, and then the cursor moves one
space to the right. If you mistype a character, you can use your
erase character to back up and delete the mistyped character.
+</P><P>
-</P>
-<P>
Sometimes you may mistype a character, and
not notice the error until you have typed several other characters. In
that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then
correct your mistake. Afterwards, you can move the cursor to the right
with <KBD>C-f</KBD>.
+</P><P>
-</P>
-<P>
When you add text in the middle of a line, you will notice that characters
to the right of the cursor are `pushed over' to make room for the text
that you have inserted. Likewise, when you delete text behind the cursor,
characters to the right of the cursor are `pulled back' to fill in the
blank space created by the removal of the text. A list of the bare
essentials for editing the text of an input line follows.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-b</KBD>
-<DD>
-Move back one character.
+<DD>Move back one character.
<DT><KBD>C-f</KBD>
-<DD>
-Move forward one character.
+<DD>Move forward one character.
<DT><KBD>DEL</KBD> or <KBD>Backspace</KBD>
-<DD>
-Delete the character to the left of the cursor.
+<DD>Delete the character to the left of the cursor.
<DT><KBD>C-d</KBD>
-<DD>
-Delete the character underneath the cursor.
+<DD>Delete the character underneath the cursor.
<DT>Printing characters
-<DD>
-Insert the character into the line at the cursor.
+<DD>Insert the character into the line at the cursor.
<DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD>
-<DD>
-Undo the last editing command. You can undo all the way back to an
+<DD>Undo the last editing command. You can undo all the way back to an
empty line.
</DL>
-
<P>
+
(Depending on your configuration, the <KBD>Backspace</KBD> key be set to
delete the character to the left of the cursor and the <KBD>DEL</KBD> key set
to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather
than the character to the left of the cursor.)
-
-</P>
-
-
-<H3><A NAME="SEC5" HREF="readline.html#TOC5">Readline Movement Commands</A></H3>
-
+</P><P>
+
+<A NAME="Readline Movement Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.2 Readline Movement Commands </H3>
+<!--docid::SEC5::-->
<P>
+
The above table describes the most basic keystrokes that you need
in order to do editing of the input line. For your convenience, many
other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>,
<KBD>C-d</KBD>, and <KBD>DEL</KBD>. Here are some commands for moving more rapidly
about the line.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-a</KBD>
-<DD>
-Move to the start of the line.
+<DD>Move to the start of the line.
<DT><KBD>C-e</KBD>
-<DD>
-Move to the end of the line.
+<DD>Move to the end of the line.
<DT><KBD>M-f</KBD>
-<DD>
-Move forward a word, where a word is composed of letters and digits.
+<DD>Move forward a word, where a word is composed of letters and digits.
<DT><KBD>M-b</KBD>
-<DD>
-Move backward a word.
+<DD>Move backward a word.
<DT><KBD>C-l</KBD>
-<DD>
-Clear the screen, reprinting the current line at the top.
+<DD>Clear the screen, reprinting the current line at the top.
</DL>
-
<P>
+
Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves
forward a word. It is a loose convention that control keystrokes
operate on characters while meta keystrokes operate on words.
-
-</P>
-
-
-<H3><A NAME="SEC6" HREF="readline.html#TOC6">Readline Killing Commands</A></H3>
-
+</P><P>
+
+<A NAME="Readline Killing Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.3 Readline Killing Commands </H3>
+<!--docid::SEC6::-->
<P>
-<A NAME="IDX5"></A>
-<A NAME="IDX6"></A>
-</P>
-<P>
+<A NAME="IDX1"></A>
+<A NAME="IDX2"></A>
+</P><P>
+
<EM>Killing</EM> text means to delete the text from the line, but to save
it away for later use, usually by <EM>yanking</EM> (re-inserting)
it back into the line.
(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
+</P><P>
-</P>
-<P>
If the description for a command says that it `kills' text, then you can
be sure that you can get the text back in a different (or the same)
place later.
+</P><P>
-</P>
-<P>
When you use a kill command, the text is saved in a <EM>kill-ring</EM>.
Any number of consecutive kills save all of the killed text together, so
that when you yank it back, you get it all. The kill
ring is not line specific; the text that you killed on a previously
typed line is available to be yanked back later, when you are typing
another line.
-<A NAME="IDX7"></A>
+<A NAME="IDX3"></A>
+</P><P>
-</P>
-<P>
Here is the list of commands for killing text.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-k</KBD>
-<DD>
-Kill the text from the current cursor position to the end of the line.
+<DD>Kill the text from the current cursor position to the end of the line.
+<P>
<DT><KBD>M-d</KBD>
-<DD>
-Kill from the cursor to the end of the current word, or, if between
+<DD>Kill from the cursor to the end of the current word, or, if between
words, to the end of the next word.
Word boundaries are the same as those used by <KBD>M-f</KBD>.
+<P>
<DT><KBD>M-<KBD>DEL</KBD></KBD>
-<DD>
-Kill from the cursor the start of the previous word, or, if between
+<DD>Kill from the cursor the start of the current word, or, if between
words, to the start of the previous word.
Word boundaries are the same as those used by <KBD>M-b</KBD>.
+<P>
<DT><KBD>C-w</KBD>
-<DD>
-Kill from the cursor to the previous whitespace. This is different than
+<DD>Kill from the cursor to the previous whitespace. This is different than
<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ.
+<P>
</DL>
-
<P>
+
Here is how to <EM>yank</EM> the text back into the line. Yanking
means to copy the most-recently-killed text from the kill buffer.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-y</KBD>
-<DD>
-Yank the most recently killed text back into the buffer at the cursor.
+<DD>Yank the most recently killed text back into the buffer at the cursor.
+<P>
<DT><KBD>M-y</KBD>
-<DD>
-Rotate the kill-ring, and yank the new top. You can only do this if
+<DD>Rotate the kill-ring, and yank the new top. You can only do this if
the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>.
</DL>
+<P>
-
-
-<H3><A NAME="SEC7" HREF="readline.html#TOC7">Readline Arguments</A></H3>
-
+<A NAME="Readline Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.4 Readline Arguments </H3>
+<!--docid::SEC7::-->
<P>
+
You can pass numeric arguments to Readline commands. Sometimes the
argument acts as a repeat count, other times it is the <I>sign</I> of the
argument that is significant. If you pass a negative argument to a
command which normally acts in a forward direction, that command will
act in a backward direction. For example, to kill text back to the
start of the line, you might type <SAMP>`M-- C-k'</SAMP>.
+</P><P>
-</P>
-<P>
The general way to pass numeric arguments to a command is to type meta
digits before the command. If the first `digit' typed is a minus
sign (<SAMP>`-'</SAMP>), then the sign of the argument will be negative. Once
@@ -420,19 +401,31 @@ you have typed one meta digit to get the argument started, you can type
the remainder of the digits, and then the command. For example, to give
the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>,
which will delete the next ten characters on the input line.
-
-</P>
-
-
-<H3><A NAME="SEC8" HREF="readline.html#TOC8">Searching for Commands in the History</A></H3>
-
+</P><P>
+
+<A NAME="Searching"></A>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.5 Searching for Commands in the History </H3>
+<!--docid::SEC8::-->
<P>
+
Readline provides commands for searching through the command history
for lines containing a specified string.
There are two search modes: <EM>incremental</EM> and <EM>non-incremental</EM>.
+</P><P>
-</P>
-<P>
Incremental searches begin before the user has finished typing the
search string.
As each character of the search string is typed, Readline displays
@@ -448,9 +441,8 @@ If that variable has not been assigned a value, the <KBD>ESC</KBD> and
<KBD>C-g</KBD> will abort an incremental search and restore the original line.
When the search is terminated, the history entry containing the
search string becomes the current line.
+</P><P>
-</P>
-<P>
To find other matching entries in the history list, type <KBD>C-r</KBD> or
<KBD>C-s</KBD> as appropriate.
This will search backward or forward in the history for the next
@@ -461,121 +453,149 @@ For instance, a <KBD>RET</KBD> will terminate the search and accept
the line, thereby executing the command from the history list.
A movement command will terminate the search, make the last line found
the current line, and begin editing.
+</P><P>
+
+Readline remembers the last incremental search string. If two
+<KBD>C-r</KBD>s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+</P><P>
-</P>
-<P>
Non-incremental searches read the entire search string before starting
to search for matching history lines. The search string may be
typed by the user or be part of the contents of the current line.
-
-</P>
-
-
-<H2><A NAME="SEC9" HREF="readline.html#TOC9">Readline Init File</A></H2>
+</P><P>
+
+<A NAME="Readline Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.3 Readline Init File </H2>
+<!--docid::SEC9::-->
<P>
-<A NAME="IDX8"></A>
-</P>
-<P>
Although the Readline library comes with a set of Emacs-like
keybindings installed by default, it is possible to use a different set
of keybindings.
Any user can customize programs that use Readline by putting
commands in an <EM>inputrc</EM> file, conventionally in his home directory.
The name of this
-file is taken from the value of the environment variable @env{INPUTRC}. If
+file is taken from the value of the environment variable <CODE>INPUTRC</CODE>. If
that variable is unset, the default is <TT>`~/.inputrc'</TT>.
+</P><P>
-</P>
-<P>
When a program which uses the Readline library starts up, the
init file is read, and the key bindings are set.
+</P><P>
-</P>
-<P>
In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus
incorporating any changes that you might have made to it.
-
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file.
-
-<LI><A HREF="readline.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file.
-
-<LI><A HREF="readline.html#SEC12">Sample Init File</A>: An example inputrc file.
-</UL>
-
-
-
-<H3><A NAME="SEC10" HREF="readline.html#TOC10">Readline Init File Syntax</A></H3>
-
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR>
+</TABLE>
+
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR>
+</TABLE>
+
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC12">1.3.3 Sample Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Readline Init File Syntax"></A>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.1 Readline Init File Syntax </H3>
+<!--docid::SEC10::-->
<P>
+
There are only a few basic constructs allowed in the
Readline init file. Blank lines are ignored.
Lines beginning with a <SAMP>`#'</SAMP> are comments.
Lines beginning with a <SAMP>`$'</SAMP> indicate conditional
-constructs (see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>). Other lines
+constructs (see section <A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>). Other lines
denote variable settings and key bindings.
+</P><P>
-</P>
<DL COMPACT>
-
<DT>Variable Settings
-<DD>
-You can modify the run-time behavior of Readline by
+<DD>You can modify the run-time behavior of Readline by
altering the values of variables in Readline
using the <CODE>set</CODE> command within the init file.
The syntax is simple:
+<P>
-
-<PRE>
-set <VAR>variable</VAR> <VAR>value</VAR>
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR>
+</pre></td></tr></table></P><P>
Here, for example, is how to
change from the default Emacs-like key binding to use
<CODE>vi</CODE> line editing commands:
+</P><P>
-
-<PRE>
-set editing-mode vi
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set editing-mode vi
+</pre></td></tr></table></P><P>
Variable names and values, where appropriate, are recognized without regard
to case.
+</P><P>
A great deal of run-time behavior is changeable with the following
variables.
+</P><P>
-<A NAME="IDX9"></A>
+<A NAME="IDX4"></A>
<DL COMPACT>
<DT><CODE>bell-style</CODE>
-<DD>
-<A NAME="IDX10"></A>
+<DD><A NAME="IDX5"></A>
Controls what happens when Readline wants to ring the terminal bell.
If set to <SAMP>`none'</SAMP>, Readline never rings the bell. If set to
<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available.
If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring
the terminal's bell.
+<P>
<DT><CODE>comment-begin</CODE>
-<DD>
-<A NAME="IDX11"></A>
+<DD><A NAME="IDX6"></A>
The string to insert at the beginning of the line when the
<CODE>insert-comment</CODE> command is executed. The default value
is <CODE>"#"</CODE>.
+<P>
<DT><CODE>completion-ignore-case</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
+<DD>If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
in a case-insensitive fashion.
The default value is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>completion-query-items</CODE>
-<DD>
-<A NAME="IDX12"></A>
+<DD><A NAME="IDX7"></A>
The number of possible completions that determines when the user is
asked whether he wants to see the list of possibilities. If the
number of possible completions is greater than this value,
@@ -583,73 +603,79 @@ Readline will ask the user whether or not he wishes to view
them; otherwise, they are simply listed.
This variable must be set to an integer value greater than or equal to 0.
The default limit is <CODE>100</CODE>.
+<P>
<DT><CODE>convert-meta</CODE>
-<DD>
-<A NAME="IDX13"></A>
+<DD><A NAME="IDX8"></A>
If set to <SAMP>`on'</SAMP>, Readline will convert characters with the
eighth bit set to an ASCII key sequence by stripping the eighth
bit and prefixing an <KBD>ESC</KBD> character, converting them to a
meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>.
+<P>
<DT><CODE>disable-completion</CODE>
-<DD>
-<A NAME="IDX14"></A>
+<DD><A NAME="IDX9"></A>
If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion.
Completion characters will be inserted into the line as if they had
been mapped to <CODE>self-insert</CODE>. The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>editing-mode</CODE>
-<DD>
-<A NAME="IDX15"></A>
+<DD><A NAME="IDX10"></A>
The <CODE>editing-mode</CODE> variable controls which default set of
key bindings is used. By default, Readline starts up in Emacs editing
mode, where the keystrokes are most similar to Emacs. This variable can be
set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>.
+<P>
<DT><CODE>enable-keypad</CODE>
-<DD>
-<A NAME="IDX16"></A>
+<DD><A NAME="IDX11"></A>
When set to <SAMP>`on'</SAMP>, Readline will try to enable the application
keypad when it is called. Some systems need this to enable the
arrow keys. The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>expand-tilde</CODE>
-<DD>
-<A NAME="IDX17"></A>
+<DD><A NAME="IDX12"></A>
If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline
attempts word completion. The default is <SAMP>`off'</SAMP>.
+<P>
+
+<A NAME="IDX13"></A>
+If set to <SAMP>`on'</SAMP>, the history code attempts to place point at the
+same location on each history line retrived with <CODE>previous-history</CODE>
+or <CODE>next-history</CODE>.
+</P><P>
<DT><CODE>horizontal-scroll-mode</CODE>
-<DD>
-<A NAME="IDX18"></A>
+<DD><A NAME="IDX14"></A>
This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. Setting it
to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll
horizontally on a single screen line when they are longer than the width
of the screen, instead of wrapping onto a new screen line. By default,
this variable is set to <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>input-meta</CODE>
-<DD>
-<A NAME="IDX19"></A>
-<A NAME="IDX20"></A>
+<DD><A NAME="IDX15"></A>
+<A NAME="IDX16"></A>
If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it
will not clear the eighth bit in the characters it reads),
regardless of what the terminal claims it can support. The
default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a
synonym for this variable.
+<P>
<DT><CODE>isearch-terminators</CODE>
-<DD>
-<A NAME="IDX21"></A>
+<DD><A NAME="IDX17"></A>
The string of characters that should terminate an incremental search without
-subsequently executing the character as a command (see section <A HREF="readline.html#SEC8">Searching for Commands in the History</A>).
+subsequently executing the character as a command (see section <A HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A>).
If this variable has not been given a value, the characters <KBD>ESC</KBD> and
<KBD>C-J</KBD> will terminate an incremental search.
+<P>
<DT><CODE>keymap</CODE>
-<DD>
-<A NAME="IDX22"></A>
+<DD><A NAME="IDX18"></A>
Sets Readline's idea of the current keymap for key binding commands.
Acceptable <CODE>keymap</CODE> names are
<CODE>emacs</CODE>,
@@ -664,57 +690,68 @@ Acceptable <CODE>keymap</CODE> names are
equivalent to <CODE>emacs-standard</CODE>. The default value is <CODE>emacs</CODE>.
The value of the <CODE>editing-mode</CODE> variable also affects the
default keymap.
+<P>
<DT><CODE>mark-directories</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, completed directory names have a slash
+<DD>If set to <SAMP>`on'</SAMP>, completed directory names have a slash
appended. The default is <SAMP>`on'</SAMP>.
+<P>
<DT><CODE>mark-modified-lines</CODE>
-<DD>
-<A NAME="IDX23"></A>
+<DD><A NAME="IDX19"></A>
This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an
asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified.
This variable is <SAMP>`off'</SAMP> by default.
+<P>
+
+<DT><CODE>match-hidden-files</CODE>
+<DD><A NAME="IDX20"></A>
+This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose
+names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename
+completion, unless the leading <SAMP>`.'</SAMP> is
+supplied by the user in the filename to be completed.
+This variable is <SAMP>`on'</SAMP> by default.
+<P>
<DT><CODE>output-meta</CODE>
-<DD>
-<A NAME="IDX24"></A>
+<DD><A NAME="IDX21"></A>
If set to <SAMP>`on'</SAMP>, Readline will display characters with the
eighth bit set directly rather than as a meta-prefixed escape
sequence. The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>print-completions-horizontally</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
+<DD>If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
sorted horizontally in alphabetical order, rather than down the screen.
The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>show-all-if-ambiguous</CODE>
-<DD>
-<A NAME="IDX25"></A>
+<DD><A NAME="IDX22"></A>
This alters the default behavior of the completion functions. If
set to <SAMP>`on'</SAMP>,
words which have more than one possible completion cause the
matches to be listed immediately instead of ringing the bell.
The default value is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>visible-stats</CODE>
-<DD>
-<A NAME="IDX26"></A>
+<DD><A NAME="IDX23"></A>
If set to <SAMP>`on'</SAMP>, a character denoting a file's type
is appended to the filename when listing possible
completions. The default is <SAMP>`off'</SAMP>.
+<P>
</DL>
+<P>
<DT>Key Bindings
-<DD>
-The syntax for controlling key bindings in the init file is
+<DD>The syntax for controlling key bindings in the init file is
simple. First you need to find the name of the command that you
want to change. The following sections contain tables of the command
name, the default keybinding, if any, and a short description of what
the command does.
+<P>
Once you know the name of the command, simply place on a line
in the init file the name of the key
@@ -722,21 +759,19 @@ you wish to bind the command to, a colon, and then the name of the
command. The name of the key
can be expressed in different ways, depending on what you find most
comfortable.
+</P><P>
In addition to command names, readline allows keys to be bound
to a string that is inserted when the key is pressed (a <VAR>macro</VAR>).
+</P><P>
<DL COMPACT>
-
<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyname</VAR> is the name of a key spelled out in English. For example:
-
-<PRE>
-Control-u: universal-argument
+<DD><VAR>keyname</VAR> is the name of a key spelled out in English. For example:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "&#62; output"
-</PRE>
+</pre></td></tr></table><P>
In the above example, <KBD>C-u</KBD> is bound to the function
<CODE>universal-argument</CODE>,
@@ -744,6 +779,7 @@ In the above example, <KBD>C-u</KBD> is bound to the function
<KBD>C-o</KBD> is bound to run the macro
expressed on the right hand side (that is, to insert the text
<SAMP>`&#62; output'</SAMP> into the line).
+</P><P>
A number of symbolic character names are recognized while
processing this key binding syntax:
@@ -759,93 +795,80 @@ processing this key binding syntax:
<VAR>SPC</VAR>,
and
<VAR>TAB</VAR>.
+</P><P>
<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
+<DD><VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
denoting an entire key sequence can be specified, by placing
the key sequence in double quotes. Some GNU Emacs style key
escapes can be used, as in the following example, but the
special character names are not recognized.
+<P>
-
-<PRE>
-"\C-u": universal-argument
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
-</PRE>
+</pre></td></tr></table></P><P>
In the above example, <KBD>C-u</KBD> is again bound to the function
<CODE>universal-argument</CODE> (just as it was in the first example),
<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>,
and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert
the text <SAMP>`Function Key 1'</SAMP>.
+</P><P>
</DL>
+<P>
The following GNU Emacs style escape sequences are available when
specifying key sequences:
+</P><P>
<DL COMPACT>
-
<DT><CODE><KBD>\C-</KBD></CODE>
-<DD>
-control prefix
+<DD>control prefix
<DT><CODE><KBD>\M-</KBD></CODE>
-<DD>
-meta prefix
+<DD>meta prefix
<DT><CODE><KBD>\e</KBD></CODE>
-<DD>
-an escape character
+<DD>an escape character
<DT><CODE><KBD>\\</KBD></CODE>
-<DD>
-backslash
+<DD>backslash
<DT><CODE><KBD>\"</KBD></CODE>
-<DD>
-<KBD>"</KBD>, a double quotation mark
+<DD><KBD>"</KBD>, a double quotation mark
<DT><CODE><KBD>\'</KBD></CODE>
-<DD>
-<KBD>'</KBD>, a single quote or apostrophe
+<DD><KBD>'</KBD>, a single quote or apostrophe
</DL>
+<P>
In addition to the GNU Emacs style escape sequences, a second
set of backslash escapes is available:
+</P><P>
<DL COMPACT>
-
<DT><CODE>\a</CODE>
-<DD>
-alert (bell)
+<DD>alert (bell)
<DT><CODE>\b</CODE>
-<DD>
-backspace
+<DD>backspace
<DT><CODE>\d</CODE>
-<DD>
-delete
+<DD>delete
<DT><CODE>\f</CODE>
-<DD>
-form feed
+<DD>form feed
<DT><CODE>\n</CODE>
-<DD>
-newline
+<DD>newline
<DT><CODE>\r</CODE>
-<DD>
-carriage return
+<DD>carriage return
<DT><CODE>\t</CODE>
-<DD>
-horizontal tab
+<DD>horizontal tab
<DT><CODE>\v</CODE>
-<DD>
-vertical tab
+<DD>vertical tab
<DT><CODE>\<VAR>nnn</VAR></CODE>
-<DD>
-the character whose ASCII code is the octal value <VAR>nnn</VAR>
-(one to three digits)
-<DT><CODE>\x<VAR>nnn</VAR></CODE>
-<DD>
-the character whose ASCII code is the hexadecimal value <VAR>nnn</VAR>
+<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR>
(one to three digits)
+<DT><CODE>\x<VAR>HH</VAR></CODE>
+<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR>
+(one or two hex digits)
</DL>
+<P>
When entering the text of a macro, single or double quotes must
be used to indicate a macro definition.
@@ -855,107 +878,120 @@ Backslash will quote any other character in the macro text,
including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>.
For example, the following binding will make <SAMP>`<KBD>C-x</KBD> \'</SAMP>
insert a single <SAMP>`\'</SAMP> into the line:
-
-<PRE>
-"\C-x\\": "\\"
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-x\\": "\\"
+</pre></td></tr></table></P><P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC11" HREF="readline.html#TOC11">Conditional Init Constructs</A></H3>
-
+<A NAME="Conditional Init Constructs"></A>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.2 Conditional Init Constructs </H3>
+<!--docid::SEC11::-->
<P>
+
Readline implements a facility similar in spirit to the conditional
compilation features of the C preprocessor which allows key
bindings and variable settings to be performed as the result
of tests. There are four parser directives used.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><CODE>$if</CODE>
-<DD>
-The <CODE>$if</CODE> construct allows bindings to be made based on the
+<DD>The <CODE>$if</CODE> construct allows bindings to be made based on the
editing mode, the terminal being used, or the application using
Readline. The text of the test extends to the end of the line;
no characters are required to isolate it.
+<P>
<DL COMPACT>
-
<DT><CODE>mode</CODE>
-<DD>
-The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
+<DD>The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode.
This may be used in conjunction
with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in
the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if
Readline is starting out in <CODE>emacs</CODE> mode.
+<P>
<DT><CODE>term</CODE>
-<DD>
-The <CODE>term=</CODE> form may be used to include terminal-specific
+<DD>The <CODE>term=</CODE> form may be used to include terminal-specific
key bindings, perhaps to bind the key sequences output by the
terminal's function keys. The word on the right side of the
<SAMP>`='</SAMP> is tested against both the full name of the terminal and
the portion of the terminal name before the first <SAMP>`-'</SAMP>. This
allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>,
for instance.
+<P>
<DT><CODE>application</CODE>
-<DD>
-The <VAR>application</VAR> construct is used to include
+<DD>The <VAR>application</VAR> construct is used to include
application-specific settings. Each program using the Readline
library sets the <VAR>application name</VAR>, and you can test for
a particular value.
This could be used to bind key sequences to functions useful for
a specific program. For instance, the following command adds a
key sequence that quotes the current or previous word in Bash:
-
-<PRE>
-$if Bash
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
-</PRE>
-
-</DL>
+</pre></td></tr></table></DL>
+<P>
<DT><CODE>$endif</CODE>
-<DD>
-This command, as seen in the previous example, terminates an
+<DD>This command, as seen in the previous example, terminates an
<CODE>$if</CODE> command.
+<P>
<DT><CODE>$else</CODE>
-<DD>
-Commands in this branch of the <CODE>$if</CODE> directive are executed if
+<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if
the test fails.
+<P>
<DT><CODE>$include</CODE>
-<DD>
-This directive takes a single filename as an argument and reads commands
+<DD>This directive takes a single filename as an argument and reads commands
and bindings from that file.
For example, the following directive reads from <TT>`/etc/inputrc'</TT>:
-
-<PRE>
-$include /etc/inputrc
-</PRE>
-
-</DL>
-
-
-
-<H3><A NAME="SEC12" HREF="readline.html#TOC12">Sample Init File</A></H3>
-
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$include /etc/inputrc
+</pre></td></tr></table></DL>
+<P>
+
+<A NAME="Sample Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.3 Sample Init File </H3>
+<!--docid::SEC12::-->
<P>
+
Here is an example of an <VAR>inputrc</VAR> file. This illustrates key
binding, variable assignment, and conditional syntax.
+</P><P>
-</P>
-
-<PRE>
-# This file controls the behaviour of line input editing for
+<TABLE><tr><td>&nbsp;</td><td class=example><pre># This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library. Existing programs
# include FTP, Bash, and Gdb.
#
@@ -1052,368 +1088,497 @@ $if Ftp
"\C-xt": "put \M-?"
"\M-.": yank-last-arg
$endif
-</PRE>
-
-
-
-<H2><A NAME="SEC13" HREF="readline.html#TOC13">Bindable Readline Commands</A></H2>
-
-
-<UL>
-<LI><A HREF="readline.html#SEC14">Commands For Moving</A>: Moving about the line.
-<LI><A HREF="readline.html#SEC15">Commands For History</A>: Getting at previous lines.
-<LI><A HREF="readline.html#SEC16">Commands For Text</A>: Commands for changing text.
-<LI><A HREF="readline.html#SEC17">Commands For Killing</A>: Commands for killing and yanking.
-<LI><A HREF="readline.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts.
-<LI><A HREF="readline.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you.
-<LI><A HREF="readline.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters
-<LI><A HREF="readline.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands.
-</UL>
-
+</pre></td></tr></table></P><P>
+
+<A NAME="Bindable Readline Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.4 Bindable Readline Commands </H2>
+<!--docid::SEC13::-->
+<P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR>
+</TABLE></BLOCKQUOTE>
<P>
+
This section describes Readline commands that may be bound to key
sequences.
Command names without an accompanying key sequence are unbound by default.
+</P><P>
-</P>
-<P>
In the following descriptions, <EM>point</EM> refers to the current cursor
position, and <EM>mark</EM> refers to a cursor position saved by the
<CODE>set-mark</CODE> command.
The text between the point and mark is referred to as the <EM>region</EM>.
-
-</P>
-
-
-<H3><A NAME="SEC14" HREF="readline.html#TOC14">Commands For Moving</A></H3>
+</P><P>
+
+<A NAME="Commands For Moving"></A>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.1 Commands For Moving </H3>
+<!--docid::SEC14::-->
<DL COMPACT>
-
+<A NAME="IDX24"></A>
<DT><CODE>beginning-of-line (C-a)</CODE>
-<DD>
-<A NAME="IDX27"></A>
+<DD><A NAME="IDX25"></A>
Move to the start of the current line.
+<P>
+<A NAME="IDX26"></A>
<DT><CODE>end-of-line (C-e)</CODE>
-<DD>
-<A NAME="IDX28"></A>
+<DD><A NAME="IDX27"></A>
Move to the end of the line.
+<P>
+<A NAME="IDX28"></A>
<DT><CODE>forward-char (C-f)</CODE>
-<DD>
-<A NAME="IDX29"></A>
+<DD><A NAME="IDX29"></A>
Move forward a character.
+<P>
-<DT><CODE>backward-char (C-b)</CODE>
-<DD>
<A NAME="IDX30"></A>
+<DT><CODE>backward-char (C-b)</CODE>
+<DD><A NAME="IDX31"></A>
Move back a character.
+<P>
+<A NAME="IDX32"></A>
<DT><CODE>forward-word (M-f)</CODE>
-<DD>
-<A NAME="IDX31"></A>
+<DD><A NAME="IDX33"></A>
Move forward to the end of the next word. Words are composed of
letters and digits.
+<P>
+<A NAME="IDX34"></A>
<DT><CODE>backward-word (M-b)</CODE>
-<DD>
-<A NAME="IDX32"></A>
+<DD><A NAME="IDX35"></A>
Move back to the start of the current or previous word. Words are
composed of letters and digits.
+<P>
+<A NAME="IDX36"></A>
<DT><CODE>clear-screen (C-l)</CODE>
-<DD>
-<A NAME="IDX33"></A>
+<DD><A NAME="IDX37"></A>
Clear the screen and redraw the current line,
leaving the current line at the top of the screen.
+<P>
+<A NAME="IDX38"></A>
<DT><CODE>redraw-current-line ()</CODE>
-<DD>
-<A NAME="IDX34"></A>
+<DD><A NAME="IDX39"></A>
Refresh the current line. By default, this is unbound.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC15" HREF="readline.html#TOC15">Commands For Manipulating The History</A></H3>
+<A NAME="Commands For History"></A>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.2 Commands For Manipulating The History </H3>
+<!--docid::SEC15::-->
+<P>
<DL COMPACT>
-
+<A NAME="IDX40"></A>
<DT><CODE>accept-line (Newline or Return)</CODE>
-<DD>
-<A NAME="IDX35"></A>
+<DD><A NAME="IDX41"></A>
Accept the line regardless of where the cursor is.
If this line is
non-empty, it may be added to the history list for future recall with
<CODE>add_history()</CODE>.
If this line is a modified history line, the history line is restored
to its original state.
+<P>
+<A NAME="IDX42"></A>
<DT><CODE>previous-history (C-p)</CODE>
-<DD>
-<A NAME="IDX36"></A>
+<DD><A NAME="IDX43"></A>
Move `back' through the history list, fetching the previous command.
+<P>
+<A NAME="IDX44"></A>
<DT><CODE>next-history (C-n)</CODE>
-<DD>
-<A NAME="IDX37"></A>
+<DD><A NAME="IDX45"></A>
Move `forward' through the history list, fetching the next command.
+<P>
+<A NAME="IDX46"></A>
<DT><CODE>beginning-of-history (M-&#60;)</CODE>
-<DD>
-<A NAME="IDX38"></A>
+<DD><A NAME="IDX47"></A>
Move to the first line in the history.
+<P>
+<A NAME="IDX48"></A>
<DT><CODE>end-of-history (M-&#62;)</CODE>
-<DD>
-<A NAME="IDX39"></A>
+<DD><A NAME="IDX49"></A>
Move to the end of the input history, i.e., the line currently
being entered.
+<P>
+<A NAME="IDX50"></A>
<DT><CODE>reverse-search-history (C-r)</CODE>
-<DD>
-<A NAME="IDX40"></A>
+<DD><A NAME="IDX51"></A>
Search backward starting at the current line and moving `up' through
the history as necessary. This is an incremental search.
+<P>
+<A NAME="IDX52"></A>
<DT><CODE>forward-search-history (C-s)</CODE>
-<DD>
-<A NAME="IDX41"></A>
+<DD><A NAME="IDX53"></A>
Search forward starting at the current line and moving `down' through
the the history as necessary. This is an incremental search.
+<P>
+<A NAME="IDX54"></A>
<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE>
-<DD>
-<A NAME="IDX42"></A>
+<DD><A NAME="IDX55"></A>
Search backward starting at the current line and moving `up'
through the history as necessary using a non-incremental search
for a string supplied by the user.
+<P>
+<A NAME="IDX56"></A>
<DT><CODE>non-incremental-forward-search-history (M-n)</CODE>
-<DD>
-<A NAME="IDX43"></A>
+<DD><A NAME="IDX57"></A>
Search forward starting at the current line and moving `down'
through the the history as necessary using a non-incremental search
for a string supplied by the user.
+<P>
+<A NAME="IDX58"></A>
<DT><CODE>history-search-forward ()</CODE>
-<DD>
-<A NAME="IDX44"></A>
+<DD><A NAME="IDX59"></A>
Search forward through the history for the string of characters
between the start of the current line and the point.
This is a non-incremental search.
By default, this command is unbound.
+<P>
+<A NAME="IDX60"></A>
<DT><CODE>history-search-backward ()</CODE>
-<DD>
-<A NAME="IDX45"></A>
+<DD><A NAME="IDX61"></A>
Search backward through the history for the string of characters
between the start of the current line and the point. This
is a non-incremental search. By default, this command is unbound.
+<P>
+<A NAME="IDX62"></A>
<DT><CODE>yank-nth-arg (M-C-y)</CODE>
-<DD>
-<A NAME="IDX46"></A>
+<DD><A NAME="IDX63"></A>
Insert the first argument to the previous command (usually
the second word on the previous line) at point.
With an argument <VAR>n</VAR>,
insert the <VAR>n</VAR>th word from the previous command (the words
in the previous command begin with word 0). A negative argument
inserts the <VAR>n</VAR>th word from the end of the previous command.
+<P>
+<A NAME="IDX64"></A>
<DT><CODE>yank-last-arg (M-. or M-_)</CODE>
-<DD>
-<A NAME="IDX47"></A>
+<DD><A NAME="IDX65"></A>
Insert last argument to the previous command (the last word of the
previous history entry). With an
argument, behave exactly like <CODE>yank-nth-arg</CODE>.
Successive calls to <CODE>yank-last-arg</CODE> move back through the history
list, inserting the last argument of each line in turn.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC16" HREF="readline.html#TOC16">Commands For Changing Text</A></H3>
+<A NAME="Commands For Text"></A>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.3 Commands For Changing Text </H3>
+<!--docid::SEC16::-->
+<P>
<DL COMPACT>
-
+<A NAME="IDX66"></A>
<DT><CODE>delete-char (C-d)</CODE>
-<DD>
-<A NAME="IDX48"></A>
+<DD><A NAME="IDX67"></A>
Delete the character at point. If point is at the
beginning of the line, there are no characters in the line, and
the last character typed was not bound to <CODE>delete-char</CODE>, then
return EOF.
+<P>
+<A NAME="IDX68"></A>
<DT><CODE>backward-delete-char (Rubout)</CODE>
-<DD>
-<A NAME="IDX49"></A>
+<DD><A NAME="IDX69"></A>
Delete the character behind the cursor. A numeric argument means
to kill the characters instead of deleting them.
+<P>
+<A NAME="IDX70"></A>
<DT><CODE>forward-backward-delete-char ()</CODE>
-<DD>
-<A NAME="IDX50"></A>
+<DD><A NAME="IDX71"></A>
Delete the character under the cursor, unless the cursor is at the
end of the line, in which case the character behind the cursor is
deleted. By default, this is not bound to a key.
+<P>
+<A NAME="IDX72"></A>
<DT><CODE>quoted-insert (C-q or C-v)</CODE>
-<DD>
-<A NAME="IDX51"></A>
+<DD><A NAME="IDX73"></A>
Add the next character typed to the line verbatim. This is
how to insert key sequences like <KBD>C-q</KBD>, for example.
+<P>
+<A NAME="IDX74"></A>
<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE>
-<DD>
-<A NAME="IDX52"></A>
+<DD><A NAME="IDX75"></A>
Insert a tab character.
+<P>
-<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE>
-<DD>
-<A NAME="IDX53"></A>
+<A NAME="IDX76"></A>
+<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE>
+<DD><A NAME="IDX77"></A>
Insert yourself.
+<P>
+<A NAME="IDX78"></A>
<DT><CODE>transpose-chars (C-t)</CODE>
-<DD>
-<A NAME="IDX54"></A>
+<DD><A NAME="IDX79"></A>
Drag the character before the cursor forward over
the character at the cursor, moving the
cursor forward as well. If the insertion point
is at the end of the line, then this
transposes the last two characters of the line.
Negative arguments have no effect.
+<P>
+<A NAME="IDX80"></A>
<DT><CODE>transpose-words (M-t)</CODE>
-<DD>
-<A NAME="IDX55"></A>
+<DD><A NAME="IDX81"></A>
Drag the word before point past the word after point,
moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
+<P>
+<A NAME="IDX82"></A>
<DT><CODE>upcase-word (M-u)</CODE>
-<DD>
-<A NAME="IDX56"></A>
+<DD><A NAME="IDX83"></A>
Uppercase the current (or following) word. With a negative argument,
uppercase the previous word, but do not move the cursor.
+<P>
+<A NAME="IDX84"></A>
<DT><CODE>downcase-word (M-l)</CODE>
-<DD>
-<A NAME="IDX57"></A>
+<DD><A NAME="IDX85"></A>
Lowercase the current (or following) word. With a negative argument,
lowercase the previous word, but do not move the cursor.
+<P>
+<A NAME="IDX86"></A>
<DT><CODE>capitalize-word (M-c)</CODE>
-<DD>
-<A NAME="IDX58"></A>
+<DD><A NAME="IDX87"></A>
Capitalize the current (or following) word. With a negative argument,
capitalize the previous word, but do not move the cursor.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC17" HREF="readline.html#TOC17">Killing And Yanking</A></H3>
+<A NAME="Commands For Killing"></A>
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.4 Killing And Yanking </H3>
+<!--docid::SEC17::-->
+<P>
<DL COMPACT>
+<A NAME="IDX88"></A>
<DT><CODE>kill-line (C-k)</CODE>
-<DD>
-<A NAME="IDX59"></A>
+<DD><A NAME="IDX89"></A>
Kill the text from point to the end of the line.
+<P>
+<A NAME="IDX90"></A>
<DT><CODE>backward-kill-line (C-x Rubout)</CODE>
-<DD>
-<A NAME="IDX60"></A>
+<DD><A NAME="IDX91"></A>
Kill backward to the beginning of the line.
+<P>
+<A NAME="IDX92"></A>
<DT><CODE>unix-line-discard (C-u)</CODE>
-<DD>
-<A NAME="IDX61"></A>
+<DD><A NAME="IDX93"></A>
Kill backward from the cursor to the beginning of the current line.
+<P>
+<A NAME="IDX94"></A>
<DT><CODE>kill-whole-line ()</CODE>
-<DD>
-<A NAME="IDX62"></A>
+<DD><A NAME="IDX95"></A>
Kill all characters on the current line, no matter where point is.
By default, this is unbound.
+<P>
+<A NAME="IDX96"></A>
<DT><CODE>kill-word (M-d)</CODE>
-<DD>
-<A NAME="IDX63"></A>
+<DD><A NAME="IDX97"></A>
Kill from point to the end of the current word, or if between
words, to the end of the next word.
Word boundaries are the same as <CODE>forward-word</CODE>.
+<P>
+<A NAME="IDX98"></A>
<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE>
-<DD>
-<A NAME="IDX64"></A>
+<DD><A NAME="IDX99"></A>
Kill the word behind point.
Word boundaries are the same as <CODE>backward-word</CODE>.
+<P>
+<A NAME="IDX100"></A>
<DT><CODE>unix-word-rubout (C-w)</CODE>
-<DD>
-<A NAME="IDX65"></A>
+<DD><A NAME="IDX101"></A>
Kill the word behind point, using white space as a word boundary.
The killed text is saved on the kill-ring.
+<P>
+<A NAME="IDX102"></A>
<DT><CODE>delete-horizontal-space ()</CODE>
-<DD>
-<A NAME="IDX66"></A>
+<DD><A NAME="IDX103"></A>
Delete all spaces and tabs around point. By default, this is unbound.
+<P>
+<A NAME="IDX104"></A>
<DT><CODE>kill-region ()</CODE>
-<DD>
-<A NAME="IDX67"></A>
+<DD><A NAME="IDX105"></A>
Kill the text in the current region.
By default, this command is unbound.
+<P>
+<A NAME="IDX106"></A>
<DT><CODE>copy-region-as-kill ()</CODE>
-<DD>
-<A NAME="IDX68"></A>
+<DD><A NAME="IDX107"></A>
Copy the text in the region to the kill buffer, so it can be yanked
right away. By default, this command is unbound.
+<P>
+<A NAME="IDX108"></A>
<DT><CODE>copy-backward-word ()</CODE>
-<DD>
-<A NAME="IDX69"></A>
+<DD><A NAME="IDX109"></A>
Copy the word before point to the kill buffer.
The word boundaries are the same as <CODE>backward-word</CODE>.
By default, this command is unbound.
+<P>
+<A NAME="IDX110"></A>
<DT><CODE>copy-forward-word ()</CODE>
-<DD>
-<A NAME="IDX70"></A>
+<DD><A NAME="IDX111"></A>
Copy the word following point to the kill buffer.
The word boundaries are the same as <CODE>forward-word</CODE>.
By default, this command is unbound.
+<P>
+<A NAME="IDX112"></A>
<DT><CODE>yank (C-y)</CODE>
-<DD>
-<A NAME="IDX71"></A>
+<DD><A NAME="IDX113"></A>
Yank the top of the kill ring into the buffer at point.
+<P>
+<A NAME="IDX114"></A>
<DT><CODE>yank-pop (M-y)</CODE>
-<DD>
-<A NAME="IDX72"></A>
+<DD><A NAME="IDX115"></A>
Rotate the kill-ring, and yank the new top. You can only do this if
the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>.
</DL>
+<P>
-
-
-<H3><A NAME="SEC18" HREF="readline.html#TOC18">Specifying Numeric Arguments</A></H3>
+<A NAME="Numeric Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.5 Specifying Numeric Arguments </H3>
+<!--docid::SEC18::-->
<DL COMPACT>
-<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, ... <KBD>M--</KBD>)</CODE>
-<DD>
-<A NAME="IDX73"></A>
+<A NAME="IDX116"></A>
+<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE>
+<DD><A NAME="IDX117"></A>
Add this digit to the argument already accumulating, or start a new
argument. <KBD>M--</KBD> starts a negative argument.
+<P>
+<A NAME="IDX118"></A>
<DT><CODE>universal-argument ()</CODE>
-<DD>
-<A NAME="IDX74"></A>
+<DD><A NAME="IDX119"></A>
This is another way to specify an argument.
If this command is followed by one or more digits, optionally with a
leading minus sign, those digits define the argument.
@@ -1427,34 +1592,51 @@ first time makes the argument count four, a second time makes the
argument count sixteen, and so on.
By default, this is not bound to a key.
</DL>
+<P>
-
-
-<H3><A NAME="SEC19" HREF="readline.html#TOC19">Letting Readline Type For You</A></H3>
+<A NAME="Commands For Completion"></A>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.6 Letting Readline Type For You </H3>
+<!--docid::SEC19::-->
+<P>
<DL COMPACT>
-
+<A NAME="IDX120"></A>
<DT><CODE>complete (<KBD>TAB</KBD>)</CODE>
-<DD>
-<A NAME="IDX75"></A>
+<DD><A NAME="IDX121"></A>
Attempt to perform completion on the text before point.
The actual completion performed is application-specific.
The default is filename completion.
+<P>
+<A NAME="IDX122"></A>
<DT><CODE>possible-completions (M-?)</CODE>
-<DD>
-<A NAME="IDX76"></A>
+<DD><A NAME="IDX123"></A>
List the possible completions of the text before point.
+<P>
+<A NAME="IDX124"></A>
<DT><CODE>insert-completions (M-*)</CODE>
-<DD>
-<A NAME="IDX77"></A>
+<DD><A NAME="IDX125"></A>
Insert all completions of the text before point that would have
been generated by <CODE>possible-completions</CODE>.
+<P>
+<A NAME="IDX126"></A>
<DT><CODE>menu-complete ()</CODE>
-<DD>
-<A NAME="IDX78"></A>
+<DD><A NAME="IDX127"></A>
Similar to <CODE>complete</CODE>, but replaces the word to be completed
with a single match from the list of possible completions.
Repeated execution of <CODE>menu-complete</CODE> steps through the list
@@ -1467,276 +1649,368 @@ of matches; a negative argument may be used to move backward
through the list.
This command is intended to be bound to <KBD>TAB</KBD>, but is unbound
by default.
+<P>
+<A NAME="IDX128"></A>
<DT><CODE>delete-char-or-list ()</CODE>
-<DD>
-<A NAME="IDX79"></A>
+<DD><A NAME="IDX129"></A>
Deletes the character under the cursor if not at the beginning or
end of the line (like <CODE>delete-char</CODE>).
If at the end of the line, behaves identically to
<CODE>possible-completions</CODE>.
This command is unbound by default.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC20" HREF="readline.html#TOC20">Keyboard Macros</A></H3>
+<A NAME="Keyboard Macros"></A>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.7 Keyboard Macros </H3>
+<!--docid::SEC20::-->
<DL COMPACT>
+<A NAME="IDX130"></A>
<DT><CODE>start-kbd-macro (C-x ()</CODE>
-<DD>
-<A NAME="IDX80"></A>
+<DD><A NAME="IDX131"></A>
Begin saving the characters typed into the current keyboard macro.
+<P>
+<A NAME="IDX132"></A>
<DT><CODE>end-kbd-macro (C-x ))</CODE>
-<DD>
-<A NAME="IDX81"></A>
+<DD><A NAME="IDX133"></A>
Stop saving the characters typed into the current keyboard macro
and save the definition.
+<P>
+<A NAME="IDX134"></A>
<DT><CODE>call-last-kbd-macro (C-x e)</CODE>
-<DD>
-<A NAME="IDX82"></A>
+<DD><A NAME="IDX135"></A>
Re-execute the last keyboard macro defined, by making the characters
in the macro appear as if typed at the keyboard.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC21" HREF="readline.html#TOC21">Some Miscellaneous Commands</A></H3>
+<A NAME="Miscellaneous Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.8 Some Miscellaneous Commands </H3>
+<!--docid::SEC21::-->
<DL COMPACT>
+<A NAME="IDX136"></A>
<DT><CODE>re-read-init-file (C-x C-r)</CODE>
-<DD>
-<A NAME="IDX83"></A>
+<DD><A NAME="IDX137"></A>
Read in the contents of the <VAR>inputrc</VAR> file, and incorporate
any bindings or variable assignments found there.
+<P>
+<A NAME="IDX138"></A>
<DT><CODE>abort (C-g)</CODE>
-<DD>
-<A NAME="IDX84"></A>
+<DD><A NAME="IDX139"></A>
Abort the current editing command and
ring the terminal's bell (subject to the setting of
<CODE>bell-style</CODE>).
+<P>
-<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE>
-<DD>
-<A NAME="IDX85"></A>
+<A NAME="IDX140"></A>
+<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE>
+<DD><A NAME="IDX141"></A>
If the metafied character <VAR>x</VAR> is lowercase, run the command
that is bound to the corresponding uppercase character.
+<P>
+<A NAME="IDX142"></A>
<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE>
-<DD>
-<A NAME="IDX86"></A>
+<DD><A NAME="IDX143"></A>
Metafy the next character typed. This is for keyboards
without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing
<KBD>M-f</KBD>.
+<P>
+<A NAME="IDX144"></A>
<DT><CODE>undo (C-_ or C-x C-u)</CODE>
-<DD>
-<A NAME="IDX87"></A>
+<DD><A NAME="IDX145"></A>
Incremental undo, separately remembered for each line.
+<P>
+<A NAME="IDX146"></A>
<DT><CODE>revert-line (M-r)</CODE>
-<DD>
-<A NAME="IDX88"></A>
+<DD><A NAME="IDX147"></A>
Undo all changes made to this line. This is like executing the <CODE>undo</CODE>
command enough times to get back to the beginning.
+<P>
+<A NAME="IDX148"></A>
<DT><CODE>tilde-expand (M-~)</CODE>
-<DD>
-<A NAME="IDX89"></A>
+<DD><A NAME="IDX149"></A>
Perform tilde expansion on the current word.
+<P>
+<A NAME="IDX150"></A>
<DT><CODE>set-mark (C-@)</CODE>
-<DD>
-<A NAME="IDX90"></A>
+<DD><A NAME="IDX151"></A>
Set the mark to the point. If a
numeric argument is supplied, the mark is set to that position.
+<P>
+<A NAME="IDX152"></A>
<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
-<DD>
-<A NAME="IDX91"></A>
+<DD><A NAME="IDX153"></A>
Swap the point with the mark. The current cursor position is set to
the saved position, and the old cursor position is saved as the mark.
+<P>
+<A NAME="IDX154"></A>
<DT><CODE>character-search (C-])</CODE>
-<DD>
-<A NAME="IDX92"></A>
+<DD><A NAME="IDX155"></A>
A character is read and point is moved to the next occurrence of that
character. A negative count searches for previous occurrences.
+<P>
+<A NAME="IDX156"></A>
<DT><CODE>character-search-backward (M-C-])</CODE>
-<DD>
-<A NAME="IDX93"></A>
+<DD><A NAME="IDX157"></A>
A character is read and point is moved to the previous occurrence
of that character. A negative count searches for subsequent
occurrences.
+<P>
+<A NAME="IDX158"></A>
<DT><CODE>insert-comment (M-#)</CODE>
-<DD>
-<A NAME="IDX94"></A>
+<DD><A NAME="IDX159"></A>
The value of the <CODE>comment-begin</CODE>
variable is inserted at the beginning of the current line,
and the line is accepted as if a newline had been typed.
+<P>
+<A NAME="IDX160"></A>
<DT><CODE>dump-functions ()</CODE>
-<DD>
-<A NAME="IDX95"></A>
+<DD><A NAME="IDX161"></A>
Print all of the functions and their key bindings to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
+<P>
+<A NAME="IDX162"></A>
<DT><CODE>dump-variables ()</CODE>
-<DD>
-<A NAME="IDX96"></A>
+<DD><A NAME="IDX163"></A>
Print all of the settable variables and their values to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
+<P>
+<A NAME="IDX164"></A>
<DT><CODE>dump-macros ()</CODE>
-<DD>
-<A NAME="IDX97"></A>
+<DD><A NAME="IDX165"></A>
Print all of the Readline key sequences bound to macros and the
strings they output. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
+<P>
</DL>
+<P>
-
-
-<H2><A NAME="SEC22" HREF="readline.html#TOC22">Readline vi Mode</A></H2>
-
+<A NAME="Readline vi Mode"></A>
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.5 Readline vi Mode </H2>
+<!--docid::SEC22::-->
<P>
+
While the Readline library does not have a full set of <CODE>vi</CODE>
editing functions, it does contain enough to allow simple editing
of the line. The Readline <CODE>vi</CODE> mode behaves as specified in
the POSIX 1003.2 standard.
+</P><P>
-</P>
-<P>
In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE>
editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode
when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> mode).
The Readline default is <CODE>emacs</CODE> mode.
+</P><P>
-</P>
-<P>
When you enter a line in <CODE>vi</CODE> mode, you are already placed in
`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>. Pressing <KBD>ESC</KBD>
switches you into `command' mode, where you can edit the text of the
line with the standard <CODE>vi</CODE> movement keys, move to previous
history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and
so forth.
+</P><P>
-</P>
+This document describes the GNU Readline Library, a utility for aiding
+in the consitency of user interface across discrete programs that need
+to provide a command line interface.
+</P><P>
+Copyright (C) 1988-2001 Free Software Foundation, Inc.
+</P><P>
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+pare preserved on all copies.
+</P><P>
-<H1><A NAME="SEC23" HREF="readline.html#TOC23">Programming with GNU Readline</A></H1>
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+</P><P>
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+</P><P>
+
+<A NAME="Programming with GNU Readline"></A>
+<HR SIZE="6">
+<A NAME="SEC23"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> 2. Programming with GNU Readline </H1>
+<!--docid::SEC23::-->
<P>
+
This chapter describes the interface between the GNU Readline Library and
other programs. If you are a programmer, and you wish to include the
features found in GNU Readline
such as completion, line editing, and interactive history manipulation
in your own programs, this section is for you.
-
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC24">Basic Behavior</A>: Using the default behavior of Readline.
-<LI><A HREF="readline.html#SEC25">Custom Functions</A>: Adding your own functions to Readline.
-<LI><A HREF="readline.html#SEC28">Readline Variables</A>: Variables accessible to custom
- functions.
-<LI><A HREF="readline.html#SEC29">Readline Convenience Functions</A>: Functions which Readline supplies to
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Using the default behavior of Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC25">2.2 Custom Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Adding your own functions to Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables accessible to custom
+ functions.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions which Readline supplies to
aid in writing your own custom
- functions.
-<LI><A HREF="readline.html#SEC43">Readline Signal Handling</A>: How Readline behaves when it receives signals.
-<LI><A HREF="readline.html#SEC44">Custom Completers</A>: Supplanting or supplementing Readline's
- completion functions.
-</UL>
-
-
-
-<H2><A NAME="SEC24" HREF="readline.html#TOC24">Basic Behavior</A></H2>
-
+ functions.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How Readline behaves when it receives signals.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC44">2.6 Custom Completers</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Supplanting or supplementing Readline's
+ completion functions.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Basic Behavior"></A>
+<HR SIZE="6">
+<A NAME="SEC24"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.1 Basic Behavior </H2>
+<!--docid::SEC24::-->
<P>
+
Many programs provide a command line interface, such as <CODE>mail</CODE>,
<CODE>ftp</CODE>, and <CODE>sh</CODE>. For such programs, the default behaviour of
Readline is sufficient. This section describes how to use Readline in
the simplest way possible, perhaps to replace calls in your code to
<CODE>gets()</CODE> or <CODE>fgets()</CODE>.
+</P><P>
-</P>
-<P>
-<A NAME="IDX98"></A>
-<A NAME="IDX99"></A>
+<A NAME="IDX166"></A>
+<A NAME="IDX167"></A>
+</P><P>
-</P>
-<P>
The function <CODE>readline()</CODE> prints a prompt <VAR>prompt</VAR>
and then reads and returns a single line of text from the user.
If <VAR>prompt</VAR> is <CODE>NULL</CODE> or the empty string, no prompt is displayed.
The line <CODE>readline</CODE> returns is allocated with <CODE>malloc()</CODE>;
the caller should <CODE>free()</CODE> the line when it has finished with it.
The declaration for <CODE>readline</CODE> in ANSI C is
+</P><P>
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>char *readline (const char *<VAR>prompt</VAR>);</CODE>
+</pre></td></tr></table></P><P>
-<PRE>
-<CODE>char *readline (const char *<VAR>prompt</VAR>);</CODE>
-</PRE>
-
-<P>
So, one might say
-
-<PRE>
-<CODE>char *line = readline ("Enter a line: ");</CODE>
-</PRE>
-
-<P>
-in order to read a line of text from the user.
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>char *line = readline ("Enter a line: ");</CODE>
+</pre></td></tr></table>in order to read a line of text from the user.
The line returned has the final newline removed, so only the
text remains.
+</P><P>
-</P>
-<P>
If <CODE>readline</CODE> encounters an <CODE>EOF</CODE> while reading the line, and the
line is empty at that point, then <CODE>(char *)NULL</CODE> is returned.
Otherwise, the line is ended just as if a newline had been typed.
+</P><P>
-</P>
-<P>
If you want the user to be able to get at the line later, (with
<KBD>C-p</KBD> for example), you must call <CODE>add_history()</CODE> to save the
line away in a <EM>history</EM> list of such lines.
+</P><P>
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>add_history (line)</CODE>;
+</pre></td></tr></table></P><P>
-<PRE>
-<CODE>add_history (line)</CODE>;
-</PRE>
-
-<P>
For full details on the GNU History Library, see the associated manual.
+</P><P>
-</P>
-<P>
It is preferable to avoid saving empty lines on the history list, since
users rarely have a burning need to reuse a blank line. Here is
a function which usefully replaces the standard <CODE>gets()</CODE> library
function, and has the advantage of no static buffer to overflow:
+</P><P>
-</P>
-
-<PRE>
-/* A static variable for holding the line. */
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>/* A static variable for holding the line. */
static char *line_read = (char *)NULL;
/* Read a string, and return a pointer to it. Returns NULL on EOF. */
@@ -1760,181 +2034,215 @@ rl_gets ()
return (line_read);
}
-</PRE>
+</pre></td></tr></table></P><P>
-<P>
This function gives the user the default behaviour of <KBD>TAB</KBD>
completion: completion on file names. If you do not want Readline to
complete on filenames, you can change the binding of the <KBD>TAB</KBD> key
with <CODE>rl_bind_key()</CODE>.
+</P><P>
-</P>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>int rl_bind_key (int <VAR>key</VAR>, rl_command_func_t *<VAR>function</VAR>);</CODE>
+</pre></td></tr></table></P><P>
-<PRE>
-<CODE>int rl_bind_key (int <VAR>key</VAR>, rl_command_func_t *<VAR>function</VAR>);</CODE>
-</PRE>
-
-<P>
<CODE>rl_bind_key()</CODE> takes two arguments: <VAR>key</VAR> is the character that
you want to bind, and <VAR>function</VAR> is the address of the function to
call when <VAR>key</VAR> is pressed. Binding <KBD>TAB</KBD> to <CODE>rl_insert()</CODE>
makes <KBD>TAB</KBD> insert itself.
<CODE>rl_bind_key()</CODE> returns non-zero if <VAR>key</VAR> is not a valid
ASCII character code (between 0 and 255).
+</P><P>
-</P>
-<P>
Thus, to disable the default <KBD>TAB</KBD> behavior, the following suffices:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>rl_bind_key ('\t', rl_insert);</CODE>
+</pre></td></tr></table></P><P>
-<PRE>
-<CODE>rl_bind_key ('\t', rl_insert);</CODE>
-</PRE>
-
-<P>
This code should be executed once at the start of your program; you
might write a function called <CODE>initialize_readline()</CODE> which
performs this and other desired initializations, such as installing
-custom completers (see section <A HREF="readline.html#SEC44">Custom Completers</A>).
-
-</P>
-
-
-<H2><A NAME="SEC25" HREF="readline.html#TOC25">Custom Functions</A></H2>
-
+custom completers (see section <A HREF="readline.html#SEC44">2.6 Custom Completers</A>).
+</P><P>
+
+<A NAME="Custom Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC25"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.2 Custom Functions </H2>
+<!--docid::SEC25::-->
<P>
+
Readline provides many functions for manipulating the text of
the line, but it isn't possible to anticipate the needs of all
programs. This section describes the various functions and variables
defined within the Readline library which allow a user program to add
customized functionality to Readline.
+</P><P>
-</P>
-<P>
Before declaring any functions that customize Readline's behavior, or
using any functionality Readline provides in other code, an
application writer should include the file <CODE>&#60;readline/readline.h&#62;</CODE>
in any file that uses Readline's features. Since some of the definitions
in <CODE>readline.h</CODE> use the <CODE>stdio</CODE> library, the file
<CODE>&#60;stdio.h&#62;</CODE> should be included before <CODE>readline.h</CODE>.
-
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC26">Readline Typedefs</A>: C declarations to make code readable.
-<LI><A HREF="readline.html#SEC27">Function Writing</A>: Variables and calling conventions.
-</UL>
-
-
-
-<H3><A NAME="SEC26" HREF="readline.html#TOC26">Readline Typedefs</A></H3>
-
+</P><P>
+
+<CODE>readline.h</CODE> defines a C preprocessor variable that should
+be treated as an integer, <CODE>RL_READLINE_VERSION</CODE>, which may
+be used to conditionally compile application code depending on
+the installed Readline version. The value is a hexadecimal
+encoding of the major and minor version numbers of the library,
+of the form 0x<VAR>MMmm</VAR>. <VAR>MM</VAR> is the two-digit major
+version number; <VAR>mm</VAR> is the two-digit minor version number.
+For Readline 4.2, for example, the value of
+<CODE>RL_READLINE_VERSION</CODE> would be <CODE>0x0402</CODE>.
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">C declarations to make code readable.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC27">2.2.2 Writing a New Function</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables and calling conventions.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Readline Typedefs"></A>
+<HR SIZE="6">
+<A NAME="SEC26"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.1 Readline Typedefs </H3>
+<!--docid::SEC26::-->
<P>
+
For readabilty, we declare a number of new object types, all pointers
to functions.
+</P><P>
-</P>
-<P>
The reason for declaring these new types is to make it easier to write
code describing pointers to C functions with appropriately prototyped
arguments and return values.
+</P><P>
-</P>
-<P>
For instance, say we want to declare a variable <VAR>func</VAR> as a pointer
to a function which takes two <CODE>int</CODE> arguments and returns an
<CODE>int</CODE> (this is the type of all of the Readline bindable functions).
Instead of the classic C declaration
+</P><P>
-</P>
-<P>
<CODE>int (*func)();</CODE>
+</P><P>
-</P>
-<P>
or the ANSI-C style declaration
+</P><P>
-</P>
-<P>
<CODE>int (*func)(int, int);</CODE>
+</P><P>
-</P>
-<P>
we may write
+</P><P>
-</P>
-<P>
<CODE>rl_command_func_t *func;</CODE>
+</P><P>
-</P>
-<P>
The full list of function pointer types available is
+</P><P>
-</P>
<DL COMPACT>
-
<DT><CODE>typedef int rl_command_func_t (int, int);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef char *rl_compentry_func_t (const char *, int);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef char **rl_completion_func_t (const char *, int, int);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef char *rl_quote_func_t (char *, int, char *);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef char *rl_dequote_func_t (char *, int);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef int rl_compignore_func_t (char **);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef void rl_compdisp_func_t (char **, int, int);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef int rl_hook_func_t (void);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef int rl_getc_func_t (FILE *);</CODE>
-<DD>
+<DD><P>
+
<DT><CODE>typedef int rl_linebuf_func_t (char *, int);</CODE>
-<DD>
-<DT><CODE>typedef int rl_intfunc_t (int);</CODE>
-<DD>
-<DT><CODE>#define rl_ivoidfunc_t rl_hook_func_t</CODE>
-<DD>
-<DT><CODE>typedef int rl_icpfunc_t (char *);</CODE>
-<DD>
-<DT><CODE>typedef int rl_icppfunc_t (char **);</CODE>
-<DD>
-<DT><CODE>typedef void rl_voidfunc_t (void);</CODE>
-<DD>
-<DT><CODE>typedef void rl_vintfunc_t (int);</CODE>
-<DD>
-<DT><CODE>typedef void rl_vcpfunc_t (char *);</CODE>
-<DD>
-<DT><CODE>typedef void rl_vcppfunc_t (char **);</CODE>
-<DD>
-</DL>
+<DD><P>
+<DT><CODE>typedef int rl_intfunc_t (int);</CODE>
+<DD><DT><CODE>#define rl_ivoidfunc_t rl_hook_func_t</CODE>
+<DD><DT><CODE>typedef int rl_icpfunc_t (char *);</CODE>
+<DD><DT><CODE>typedef int rl_icppfunc_t (char **);</CODE>
+<DD><P>
+<DT><CODE>typedef void rl_voidfunc_t (void);</CODE>
+<DD><DT><CODE>typedef void rl_vintfunc_t (int);</CODE>
+<DD><DT><CODE>typedef void rl_vcpfunc_t (char *);</CODE>
+<DD><DT><CODE>typedef void rl_vcppfunc_t (char **);</CODE>
+<DD><P>
-<H3><A NAME="SEC27" HREF="readline.html#TOC27">Writing a New Function</A></H3>
+</DL>
+<P>
+<A NAME="Function Writing"></A>
+<HR SIZE="6">
+<A NAME="SEC27"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.2.2 Writing a New Function </H3>
+<!--docid::SEC27::-->
<P>
+
In order to write new functions for Readline, you need to know the
calling conventions for keyboard-invoked functions, and the names of the
variables that describe the current state of the line read so far.
+</P><P>
-</P>
-<P>
The calling sequence for a command <CODE>foo</CODE> looks like
+</P><P>
-</P>
-
-<PRE>
-<CODE>foo (int count, int key)</CODE>
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre><CODE>foo (int count, int key)</CODE>
+</pre></td></tr></table></P><P>
-<P>
where <VAR>count</VAR> is the numeric argument (or 1 if defaulted) and
<VAR>key</VAR> is the key that invoked this function.
+</P><P>
-</P>
-<P>
It is completely up to the function as to what should be done with the
numeric argument. Some functions use it as a repeat count, some
as a flag, and others to choose alternate behavior (refreshing the current
@@ -1944,120 +2252,122 @@ function uses the numeric argument as a repeat count, it should be able
to do something useful with both negative and positive arguments.
At the very least, it should be aware that it can be passed a
negative argument.
-
-</P>
-
-
-<H2><A NAME="SEC28" HREF="readline.html#TOC28">Readline Variables</A></H2>
-
+</P><P>
+
+<A NAME="Readline Variables"></A>
+<HR SIZE="6">
+<A NAME="SEC28"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.3 Readline Variables </H2>
+<!--docid::SEC28::-->
<P>
+
These variables are available to function writers.
+</P><P>
-</P>
-<P>
+<A NAME="IDX168"></A>
<DL>
<DT><U>Variable:</U> char * <B>rl_line_buffer</B>
-<DD><A NAME="IDX100"></A>
-This is the line gathered so far. You are welcome to modify the
-contents of the line, but see section <A HREF="readline.html#SEC34">Allowing Undoing</A>. The
+<DD>This is the line gathered so far. You are welcome to modify the
+contents of the line, but see <A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A>. The
function <CODE>rl_extend_line_buffer</CODE> is available to increase
the memory allocated to <CODE>rl_line_buffer</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX169"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_point</B>
-<DD><A NAME="IDX101"></A>
-The offset of the current cursor position in <CODE>rl_line_buffer</CODE>
+<DD>The offset of the current cursor position in <CODE>rl_line_buffer</CODE>
(the <EM>point</EM>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX170"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_end</B>
-<DD><A NAME="IDX102"></A>
-The number of characters present in <CODE>rl_line_buffer</CODE>. When
+<DD>The number of characters present in <CODE>rl_line_buffer</CODE>. When
<CODE>rl_point</CODE> is at the end of the line, <CODE>rl_point</CODE> and
<CODE>rl_end</CODE> are equal.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX171"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_mark</B>
-<DD><A NAME="IDX103"></A>
-The <VAR>mark</VAR> (saved position) in the current line. If set, the mark
+<DD>The <VAR>mark</VAR> (saved position) in the current line. If set, the mark
and point define a <EM>region</EM>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX172"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_done</B>
-<DD><A NAME="IDX104"></A>
-Setting this to a non-zero value causes Readline to return the current
+<DD>Setting this to a non-zero value causes Readline to return the current
line immediately.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX173"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_num_chars_to_read</B>
-<DD><A NAME="IDX105"></A>
-Setting this to a positive value before calling <CODE>readline()</CODE> causes
+<DD>Setting this to a positive value before calling <CODE>readline()</CODE> causes
Readline to return after accepting that many characters, rather
than reading up to a character bound to <CODE>accept-line</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX174"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_pending_input</B>
-<DD><A NAME="IDX106"></A>
-Setting this to a value makes it the next keystroke read. This is a
+<DD>Setting this to a value makes it the next keystroke read. This is a
way to stuff a single character into the input stream.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX175"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_dispatching</B>
-<DD><A NAME="IDX107"></A>
-Set to a non-zero value if a function is being called from a key binding;
+<DD>Set to a non-zero value if a function is being called from a key binding;
zero otherwise. Application functions can test this to discover whether
they were called directly or by Readline's dispatching mechanism.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX176"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_erase_empty_line</B>
-<DD><A NAME="IDX108"></A>
-Setting this to a non-zero value causes Readline to completely erase
+<DD>Setting this to a non-zero value causes Readline to completely erase
the current line, including any prompt, any time a newline is typed as
the only character on an otherwise-empty line. The cursor is moved to
the beginning of the newly-blank line.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX177"></A>
<DL>
<DT><U>Variable:</U> char * <B>rl_prompt</B>
-<DD><A NAME="IDX109"></A>
-The prompt Readline uses. This is set from the argument to
+<DD>The prompt Readline uses. This is set from the argument to
<CODE>readline()</CODE>, and should not be assigned to directly.
-The <CODE>rl_set_prompt()</CODE> function (see section <A HREF="readline.html#SEC35">Redisplay</A>) may
+The <CODE>rl_set_prompt()</CODE> function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>) may
be used to modify the prompt string after calling <CODE>readline()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX178"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_already_prompted</B>
-<DD><A NAME="IDX110"></A>
-If an application wishes to display the prompt itself, rather than have
+<DD>If an application wishes to display the prompt itself, rather than have
Readline do it the first time <CODE>readline()</CODE> is called, it should set
this variable to a non-zero value after displaying the prompt.
The prompt must also be passed as the argument to <CODE>readline()</CODE> so
@@ -2065,851 +2375,856 @@ the redisplay functions can update the display properly.
The calling application is responsible for managing the value; Readline
never sets it.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX179"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_library_version</B>
-<DD><A NAME="IDX111"></A>
-The version number of this revision of the library.
+<DD>The version number of this revision of the library.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX180"></A>
+<DL>
+<DT><U>Variable:</U> int <B>rl_readline_version</B>
+<DD>An integer encoding the current version of the library. The encoding is
+of the form 0x<VAR>MMmm</VAR>, where <VAR>MM</VAR> is the two-digit major version
+number, and <VAR>mm</VAR> is the two-digit minor version number.
+For example, for Readline-4.2, <CODE>rl_readline_version</CODE> would have the
+value 0x0402.
+</DL>
+</P><P>
+
+<A NAME="IDX181"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_gnu_readline_p</B>
-<DD><A NAME="IDX112"></A>
-Always set to 1, denoting that this is GNU readline rather than some
+<DD>Always set to 1, denoting that this is GNU readline rather than some
emulation.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX182"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_terminal_name</B>
-<DD><A NAME="IDX113"></A>
-The terminal type, used for initialization. If not set by the application,
-Readline sets this to the value of the @env{TERM} environment variable
+<DD>The terminal type, used for initialization. If not set by the application,
+Readline sets this to the value of the <CODE>TERM</CODE> environment variable
the first time it is called.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX183"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_readline_name</B>
-<DD><A NAME="IDX114"></A>
-This variable is set to a unique name by each application using Readline.
+<DD>This variable is set to a unique name by each application using Readline.
The value allows conditional parsing of the inputrc file
-(see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>).
+(see section <A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX184"></A>
<DL>
<DT><U>Variable:</U> FILE * <B>rl_instream</B>
-<DD><A NAME="IDX115"></A>
-The stdio stream from which Readline reads input.
+<DD>The stdio stream from which Readline reads input.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX185"></A>
<DL>
<DT><U>Variable:</U> FILE * <B>rl_outstream</B>
-<DD><A NAME="IDX116"></A>
-The stdio stream to which Readline performs output.
+<DD>The stdio stream to which Readline performs output.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX186"></A>
<DL>
<DT><U>Variable:</U> rl_command_func_t * <B>rl_last_func</B>
-<DD><A NAME="IDX117"></A>
-The address of the last command function Readline executed. May be used to
+<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
example.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX187"></A>
<DL>
<DT><U>Variable:</U> rl_hook_func_t * <B>rl_startup_hook</B>
-<DD><A NAME="IDX118"></A>
-If non-zero, this is the address of a function to call just
+<DD>If non-zero, this is the address of a function to call just
before <CODE>readline</CODE> prints the first prompt.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX188"></A>
<DL>
<DT><U>Variable:</U> rl_hook_func_t * <B>rl_pre_input_hook</B>
-<DD><A NAME="IDX119"></A>
-If non-zero, this is the address of a function to call after
+<DD>If non-zero, this is the address of a function to call after
the first prompt has been printed and just before <CODE>readline</CODE>
starts reading input characters.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX189"></A>
<DL>
<DT><U>Variable:</U> rl_hook_func_t * <B>rl_event_hook</B>
-<DD><A NAME="IDX120"></A>
-If non-zero, this is the address of a function to call periodically
+<DD>If non-zero, this is the address of a function to call periodically
when Readline is waiting for terminal input.
By default, this will be called at most ten times a second if there
is no keyboard input.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX190"></A>
<DL>
<DT><U>Variable:</U> rl_getc_func_t * <B>rl_getc_function</B>
-<DD><A NAME="IDX121"></A>
-If non-zero, Readline will call indirectly through this pointer
+<DD>If non-zero, Readline will call indirectly through this pointer
to get a character from the input stream. By default, it is set to
<CODE>rl_getc</CODE>, the default Readline character input function
-(see section <A HREF="readline.html#SEC37">Character Input</A>).
+(see section <A HREF="readline.html#SEC37">2.4.8 Character Input</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX191"></A>
<DL>
<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_redisplay_function</B>
-<DD><A NAME="IDX122"></A>
-If non-zero, Readline will call indirectly through this pointer
+<DD>If non-zero, Readline will call indirectly through this pointer
to update the display with the current contents of the editing buffer.
By default, it is set to <CODE>rl_redisplay</CODE>, the default Readline
-redisplay function (see section <A HREF="readline.html#SEC35">Redisplay</A>).
+redisplay function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX192"></A>
<DL>
<DT><U>Variable:</U> rl_vintfunc_t * <B>rl_prep_term_function</B>
-<DD><A NAME="IDX123"></A>
-If non-zero, Readline will call indirectly through this pointer
+<DD>If non-zero, Readline will call indirectly through this pointer
to initialize the terminal. The function takes a single argument, an
<CODE>int</CODE> flag that says whether or not to use eight-bit characters.
By default, this is set to <CODE>rl_prep_terminal</CODE>
-(see section <A HREF="readline.html#SEC38">Terminal Management</A>).
+(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX193"></A>
<DL>
<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_deprep_term_function</B>
-<DD><A NAME="IDX124"></A>
-If non-zero, Readline will call indirectly through this pointer
+<DD>If non-zero, Readline will call indirectly through this pointer
to reset the terminal. This function should undo the effects of
<CODE>rl_prep_term_function</CODE>.
By default, this is set to <CODE>rl_deprep_terminal</CODE>
-(see section <A HREF="readline.html#SEC38">Terminal Management</A>).
+(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX194"></A>
<DL>
<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B>
-<DD><A NAME="IDX125"></A>
-This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the
+<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
currently executing readline function was found.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX195"></A>
<DL>
<DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B>
-<DD><A NAME="IDX126"></A>
-This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the
+<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
last key binding occurred.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX196"></A>
<DL>
<DT><U>Variable:</U> char * <B>rl_executing_macro</B>
-<DD><A NAME="IDX127"></A>
-This variable is set to the text of any currently-executing macro.
+<DD>This variable is set to the text of any currently-executing macro.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX197"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_readline_state</B>
-<DD><A NAME="IDX128"></A>
-A variable with bit values that encapsulate the current Readline state.
+<DD>A variable with bit values that encapsulate the current Readline state.
A bit is set with the <CODE>RL_SETSTATE</CODE> macro, and unset with the
<CODE>RL_UNSETSTATE</CODE> macro. Use the <CODE>RL_ISSTATE</CODE> macro to test
whether a particular state bit is set. Current state bits include:
+</P><P>
-</P>
<DL COMPACT>
-
<DT><CODE>RL_STATE_NONE</CODE>
-<DD>
-Readline has not yet been called, nor has it begun to intialize.
+<DD>Readline has not yet been called, nor has it begun to intialize.
<DT><CODE>RL_STATE_INITIALIZING</CODE>
-<DD>
-Readline is initializing its internal data structures.
+<DD>Readline is initializing its internal data structures.
<DT><CODE>RL_STATE_INITIALIZED</CODE>
-<DD>
-Readline has completed its initialization.
+<DD>Readline has completed its initialization.
<DT><CODE>RL_STATE_TERMPREPPED</CODE>
-<DD>
-Readline has modified the terminal modes to do its own input and redisplay.
+<DD>Readline has modified the terminal modes to do its own input and redisplay.
<DT><CODE>RL_STATE_READCMD</CODE>
-<DD>
-Readline is reading a command from the keyboard.
+<DD>Readline is reading a command from the keyboard.
<DT><CODE>RL_STATE_METANEXT</CODE>
-<DD>
-Readline is reading more input after reading the meta-prefix character.
+<DD>Readline is reading more input after reading the meta-prefix character.
<DT><CODE>RL_STATE_DISPATCHING</CODE>
-<DD>
-Readline is dispatching to a command.
+<DD>Readline is dispatching to a command.
<DT><CODE>RL_STATE_MOREINPUT</CODE>
-<DD>
-Readline is reading more input while executing an editing command.
+<DD>Readline is reading more input while executing an editing command.
<DT><CODE>RL_STATE_ISEARCH</CODE>
-<DD>
-Readline is performing an incremental history search.
+<DD>Readline is performing an incremental history search.
<DT><CODE>RL_STATE_NSEARCH</CODE>
-<DD>
-Readline is performing a non-incremental history search.
+<DD>Readline is performing a non-incremental history search.
<DT><CODE>RL_STATE_SEARCH</CODE>
-<DD>
-Readline is searching backward or forward through the history for a string.
+<DD>Readline is searching backward or forward through the history for a string.
<DT><CODE>RL_STATE_NUMERICARG</CODE>
-<DD>
-Readline is reading a numeric argument.
+<DD>Readline is reading a numeric argument.
<DT><CODE>RL_STATE_MACROINPUT</CODE>
-<DD>
-Readline is currently getting its input from a previously-defined keyboard
+<DD>Readline is currently getting its input from a previously-defined keyboard
macro.
<DT><CODE>RL_STATE_MACRODEF</CODE>
-<DD>
-Readline is currently reading characters defining a keyboard macro.
+<DD>Readline is currently reading characters defining a keyboard macro.
<DT><CODE>RL_STATE_OVERWRITE</CODE>
-<DD>
-Readline is in overwrite mode.
+<DD>Readline is in overwrite mode.
<DT><CODE>RL_STATE_COMPLETING</CODE>
-<DD>
-Readline is performing word completion.
+<DD>Readline is performing word completion.
<DT><CODE>RL_STATE_SIGHANDLER</CODE>
-<DD>
-Readline is currently executing the readline signal handler.
+<DD>Readline is currently executing the readline signal handler.
<DT><CODE>RL_STATE_UNDOING</CODE>
-<DD>
-Readline is performing an undo.
+<DD>Readline is performing an undo.
<DT><CODE>RL_STATE_DONE</CODE>
-<DD>
-Readline has read a key sequence bound to <CODE>accept-line</CODE>
+<DD>Readline has read a key sequence bound to <CODE>accept-line</CODE>
and is about to return the line to the caller.
</DL>
+<P>
</DL>
+</P><P>
-<P>
+<A NAME="IDX198"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_explicit_arg</B>
-<DD><A NAME="IDX129"></A>
-Set to a non-zero value if an explicit numeric argument was specified by
+<DD>Set to a non-zero value if an explicit numeric argument was specified by
the user. Only valid in a bindable command function.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX199"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_numeric_arg</B>
-<DD><A NAME="IDX130"></A>
-Set to the value of any numeric argument explicitly specified by the user
+<DD>Set to the value of any numeric argument explicitly specified by the user
before executing the current Readline function. Only valid in a bindable
command function.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX200"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_editing_mode</B>
-<DD><A NAME="IDX131"></A>
-Set to a value denoting Readline's current editing mode. A value of
+<DD>Set to a value denoting Readline's current editing mode. A value of
<VAR>1</VAR> means Readline is currently in emacs mode; <VAR>0</VAR>
means that vi mode is active.
</DL>
-
-</P>
-
-
-
-<H2><A NAME="SEC29" HREF="readline.html#TOC29">Readline Convenience Functions</A></H2>
-
-
-<UL>
-<LI><A HREF="readline.html#SEC30">Function Naming</A>: How to give a function you write a name.
-<LI><A HREF="readline.html#SEC31">Keymaps</A>: Making keymaps.
-<LI><A HREF="readline.html#SEC32">Binding Keys</A>: Changing Keymaps.
-<LI><A HREF="readline.html#SEC33">Associating Function Names and Bindings</A>: Translate function names to
- key sequences.
-<LI><A HREF="readline.html#SEC34">Allowing Undoing</A>: How to make your functions undoable.
-<LI><A HREF="readline.html#SEC35">Redisplay</A>: Functions to control line display.
-<LI><A HREF="readline.html#SEC36">Modifying Text</A>: Functions to modify <CODE>rl_line_buffer</CODE>.
-<LI><A HREF="readline.html#SEC37">Character Input</A>: Functions to read keyboard input.
-<LI><A HREF="readline.html#SEC38">Terminal Management</A>: Functions to manage terminal settings.
-<LI><A HREF="readline.html#SEC39">Utility Functions</A>: Generally useful functions and hooks.
-<LI><A HREF="readline.html#SEC40">Miscellaneous Functions</A>: Functions that don't fall into any category.
-<LI><A HREF="readline.html#SEC41">Alternate Interface</A>: Using Readline in a `callback' fashion.
-<LI><A HREF="readline.html#SEC42">A Readline Example</A>: An example Readline function.
-</UL>
-
-
-
-<H3><A NAME="SEC30" HREF="readline.html#TOC30">Naming a Function</A></H3>
-
+</P><P>
+
+<A NAME="Readline Convenience Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC29"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.4 Readline Convenience Functions </H2>
+<!--docid::SEC29::-->
+<P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to give a function you write a name.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Making keymaps.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Changing Keymaps.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Translate function names to
+ key sequences.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to make your functions undoable.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to control line display.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to modify <CODE>rl_line_buffer</CODE>.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to read keyboard input.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions to manage terminal settings.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Generally useful functions and hooks.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions that don't fall into any category.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Using Readline in a `callback' fashion.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC42">2.4.13 A Readline Example</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example Readline function.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="Function Naming"></A>
+<HR SIZE="6">
+<A NAME="SEC30"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.1 Naming a Function </H3>
+<!--docid::SEC30::-->
<P>
+
The user can dynamically change the bindings of keys while using
Readline. This is done by representing the function with a descriptive
name. The user is able to type the descriptive name when referring to
the function. Thus, in an init file, one might find
+</P><P>
-</P>
-
-<PRE>
-Meta-Rubout: backward-kill-word
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Meta-Rubout: backward-kill-word
+</pre></td></tr></table></P><P>
-<P>
This binds the keystroke <KBD>Meta-Rubout</KBD> to the function
<EM>descriptively</EM> named <CODE>backward-kill-word</CODE>. You, as the
programmer, should bind the functions you write to descriptive names as
well. Readline provides a function for doing that:
+</P><P>
-</P>
-<P>
+<A NAME="IDX201"></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><A NAME="IDX132"></A>
-Add <VAR>name</VAR> to the list of named functions. Make <VAR>function</VAR> be
+<DD>Add <VAR>name</VAR> to the list of named functions. Make <VAR>function</VAR> be
the function that gets called. If <VAR>key</VAR> is not -1, then bind it to
<VAR>function</VAR> using <CODE>rl_bind_key()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
Using this function alone is sufficient for most applications. It is
the recommended way to add a few functions to the default functions that
Readline has built in. If you need to do something other
than adding a function to Readline, you may need to use the
underlying functions described below.
-
-</P>
-
-
-<H3><A NAME="SEC31" HREF="readline.html#TOC31">Selecting a Keymap</A></H3>
-
+</P><P>
+
+<A NAME="Keymaps"></A>
+<HR SIZE="6">
+<A NAME="SEC31"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.2 Selecting a Keymap </H3>
+<!--docid::SEC31::-->
<P>
+
Key bindings take place on a <EM>keymap</EM>. The keymap is the
association between the keys that the user types and the functions that
get run. You can make your own keymaps, copy existing keymaps, and tell
Readline which keymap to use.
+</P><P>
-</P>
-<P>
+<A NAME="IDX202"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>(void)</I>
-<DD><A NAME="IDX133"></A>
-Returns a new, empty keymap. The space for the keymap is allocated with
+<DD>Returns a new, empty keymap. The space for the keymap is allocated with
<CODE>malloc()</CODE>; the caller should free it by calling
<CODE>rl_discard_keymap()</CODE> when done.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX203"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I>
-<DD><A NAME="IDX134"></A>
-Return a new keymap which is a copy of <VAR>map</VAR>.
+<DD>Return a new keymap which is a copy of <VAR>map</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX204"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>(void)</I>
-<DD><A NAME="IDX135"></A>
-Return a new keymap with the printing characters bound to rl_insert,
+<DD>Return a new keymap with the printing characters bound to rl_insert,
the lowercase Meta characters bound to run their equivalents, and
the Meta digits bound to produce numeric arguments.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX205"></A>
<DL>
<DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I>
-<DD><A NAME="IDX136"></A>
-Free the storage associated with <VAR>keymap</VAR>.
+<DD>Free the storage associated with <VAR>keymap</VAR>.
</DL>
+</P><P>
-</P>
-<P>
Readline has several internal keymaps. These functions allow you to
change which keymap is active.
+</P><P>
-</P>
-<P>
+<A NAME="IDX206"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>(void)</I>
-<DD><A NAME="IDX137"></A>
-Returns the currently active keymap.
+<DD>Returns the currently active keymap.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX207"></A>
<DL>
<DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I>
-<DD><A NAME="IDX138"></A>
-Makes <VAR>keymap</VAR> the currently active keymap.
+<DD>Makes <VAR>keymap</VAR> the currently active keymap.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX208"></A>
<DL>
<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(const char *name)</I>
-<DD><A NAME="IDX139"></A>
-Return the keymap matching <VAR>name</VAR>. <VAR>name</VAR> is one which would
-be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+<DD>Return the keymap matching <VAR>name</VAR>. <VAR>name</VAR> is one which would
+be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX209"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I>
-<DD><A NAME="IDX140"></A>
-Return the name matching <VAR>keymap</VAR>. <VAR>name</VAR> is one which would
-be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>).
-</DL>
-
-</P>
-
-
-<H3><A NAME="SEC32" HREF="readline.html#TOC32">Binding Keys</A></H3>
-
+<DD>Return the name matching <VAR>keymap</VAR>. <VAR>name</VAR> is one which would
+be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
+</DL>
+</P><P>
+
+<A NAME="Binding Keys"></A>
+<HR SIZE="6">
+<A NAME="SEC32"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.3 Binding Keys </H3>
+<!--docid::SEC32::-->
<P>
+
Key sequences are associate with functions through the keymap.
Readline has several internal keymaps: <CODE>emacs_standard_keymap</CODE>,
<CODE>emacs_meta_keymap</CODE>, <CODE>emacs_ctlx_keymap</CODE>,
<CODE>vi_movement_keymap</CODE>, and <CODE>vi_insertion_keymap</CODE>.
<CODE>emacs_standard_keymap</CODE> is the default, and the examples in
this manual assume that.
+</P><P>
-</P>
-<P>
Since <CODE>readline()</CODE> installs a set of default key bindings the first
time it is called, there is always the danger that a custom binding
installed before the first call to <CODE>readline()</CODE> will be overridden.
An alternate mechanism is to install custom key bindings in an
initialization function assigned to the <CODE>rl_startup_hook</CODE> variable
-(see section <A HREF="readline.html#SEC28">Readline Variables</A>).
+(see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>).
+</P><P>
-</P>
-<P>
These functions manage key bindings.
+</P><P>
-</P>
-<P>
+<A NAME="IDX210"></A>
<DL>
<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, rl_command_func_t *function)</I>
-<DD><A NAME="IDX141"></A>
-Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap.
+<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap.
Returns non-zero in the case of an invalid <VAR>key</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX211"></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><A NAME="IDX142"></A>
-Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>. Returns non-zero in the case
+<DD>Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>. Returns non-zero in the case
of an invalid <VAR>key</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX212"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I>
-<DD><A NAME="IDX143"></A>
-Bind <VAR>key</VAR> to the null function in the currently active keymap.
+<DD>Bind <VAR>key</VAR> to the null function in the currently active keymap.
Returns non-zero in case of error.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX213"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I>
-<DD><A NAME="IDX144"></A>
-Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>.
+<DD>Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>.
Returns non-zero in case of error.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX214"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
-<DD><A NAME="IDX145"></A>
-Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>.
+<DD>Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX215"></A>
<DL>
<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(const char *command, Keymap map)</I>
-<DD><A NAME="IDX146"></A>
-Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>.
+<DD>Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX216"></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><A NAME="IDX147"></A>
-Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function
+<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function
<VAR>function</VAR>. This makes new keymaps as
necessary. The initial keymap in which to do bindings is <VAR>map</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX217"></A>
<DL>
<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, const char *keyseq, char *data, Keymap map)</I>
-<DD><A NAME="IDX148"></A>
-Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary
+<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary
pointer <VAR>data</VAR>. <VAR>type</VAR> says what kind of data is pointed to by
<VAR>data</VAR>; this can be a function (<CODE>ISFUNC</CODE>), a macro
(<CODE>ISMACR</CODE>), or a keymap (<CODE>ISKMAP</CODE>). This makes new keymaps as
necessary. The initial keymap in which to do bindings is <VAR>map</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX218"></A>
<DL>
<DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I>
-<DD><A NAME="IDX149"></A>
-Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and
+<DD>Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and
perform any key bindings and variable assignments found
-(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
+(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX219"></A>
<DL>
<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(const char *filename)</I>
-<DD><A NAME="IDX150"></A>
-Read keybindings and variable assignments from <VAR>filename</VAR>
-(see section <A HREF="readline.html#SEC9">Readline Init File</A>).
-</DL>
-
-</P>
-
-
-<H3><A NAME="SEC33" HREF="readline.html#TOC33">Associating Function Names and Bindings</A></H3>
-
+<DD>Read keybindings and variable assignments from <VAR>filename</VAR>
+(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>).
+</DL>
+</P><P>
+
+<A NAME="Associating Function Names and Bindings"></A>
+<HR SIZE="6">
+<A NAME="SEC33"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.4 Associating Function Names and Bindings </H3>
+<!--docid::SEC33::-->
<P>
+
These functions allow you to find out what keys invoke named functions
and the functions invoked by a particular key sequence. You may also
associate a new function name with an arbitrary function.
+</P><P>
-</P>
-<P>
+<A NAME="IDX220"></A>
<DL>
<DT><U>Function:</U> rl_command_func_t * <B>rl_named_function</B> <I>(const char *name)</I>
-<DD><A NAME="IDX151"></A>
-Return the function with name <VAR>name</VAR>.
+<DD>Return the function with name <VAR>name</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX221"></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><A NAME="IDX152"></A>
-Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>.
+<DD>Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>.
If <VAR>map</VAR> is <CODE>NULL</CODE>, the current keymap is used. If <VAR>type</VAR> is
not <CODE>NULL</CODE>, the type of the object is returned in the <CODE>int</CODE> variable
it points to (one of <CODE>ISFUNC</CODE>, <CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX222"></A>
<DL>
<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(rl_command_func_t *function)</I>
-<DD><A NAME="IDX153"></A>
-Return an array of strings representing the key sequences used to
+<DD>Return an array of strings representing the key sequences used to
invoke <VAR>function</VAR> in the current keymap.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX223"></A>
<DL>
<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
-<DD><A NAME="IDX154"></A>
-Return an array of strings representing the key sequences used to
+<DD>Return an array of strings representing the key sequences used to
invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX224"></A>
<DL>
<DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I>
-<DD><A NAME="IDX155"></A>
-Print the readline function names and the key sequences currently
+<DD>Print the readline function names and the key sequences currently
bound to them to <CODE>rl_outstream</CODE>. If <VAR>readable</VAR> is non-zero,
the list is formatted in such a way that it can be made part of an
<CODE>inputrc</CODE> file and re-read.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX225"></A>
<DL>
<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>(void)</I>
-<DD><A NAME="IDX156"></A>
-Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>.
+<DD>Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX226"></A>
<DL>
<DT><U>Function:</U> const char ** <B>rl_funmap_names</B> <I>(void)</I>
-<DD><A NAME="IDX157"></A>
-Return a NULL terminated array of known function names. The array is
+<DD>Return a NULL terminated array of known function names. The array is
sorted. The array itself is allocated, but not the strings inside. You
should <CODE>free()</CODE> the array when you are done, but not the pointers.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX227"></A>
<DL>
<DT><U>Function:</U> int <B>rl_add_funmap_entry</B> <I>(const char *name, rl_command_func_t *function)</I>
-<DD><A NAME="IDX158"></A>
-Add <VAR>name</VAR> to the list of bindable Readline command names, and make
+<DD>Add <VAR>name</VAR> to the list of bindable Readline command names, and make
<VAR>function</VAR> the function to be called when <VAR>name</VAR> is invoked.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC34" HREF="readline.html#TOC34">Allowing Undoing</A></H3>
-
+</P><P>
+
+<A NAME="Allowing Undoing"></A>
+<HR SIZE="6">
+<A NAME="SEC34"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.5 Allowing Undoing </H3>
+<!--docid::SEC34::-->
<P>
+
Supporting the undo command is a painless thing, and makes your
functions much more useful. It is certainly easy to try
something if you know you can undo it.
+</P><P>
-</P>
-<P>
If your function simply inserts text once, or deletes text once, and
uses <CODE>rl_insert_text()</CODE> or <CODE>rl_delete_text()</CODE> to do it, then
undoing is already done for you automatically.
+</P><P>
-</P>
-<P>
If you do multiple insertions or multiple deletions, or any combination
of these operations, you should group them together into one operation.
This is done with <CODE>rl_begin_undo_group()</CODE> and
<CODE>rl_end_undo_group()</CODE>.
+</P><P>
-</P>
-<P>
The types of events that can be undone are:
+</P><P>
-</P>
-
-<PRE>
-enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
+</pre></td></tr></table></P><P>
-<P>
Notice that <CODE>UNDO_DELETE</CODE> means to insert some text, and
<CODE>UNDO_INSERT</CODE> means to delete some text. That is, the undo code
tells what to undo, not how to undo it. <CODE>UNDO_BEGIN</CODE> and
<CODE>UNDO_END</CODE> are tags added by <CODE>rl_begin_undo_group()</CODE> and
<CODE>rl_end_undo_group()</CODE>.
+</P><P>
-</P>
-<P>
+<A NAME="IDX228"></A>
<DL>
<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>(void)</I>
-<DD><A NAME="IDX159"></A>
-Begins saving undo information in a group construct. The undo
+<DD>Begins saving undo information in a group construct. The undo
information usually comes from calls to <CODE>rl_insert_text()</CODE> and
<CODE>rl_delete_text()</CODE>, but could be the result of calls to
<CODE>rl_add_undo()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX229"></A>
<DL>
<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>(void)</I>
-<DD><A NAME="IDX160"></A>
-Closes the current undo group started with <CODE>rl_begin_undo_group
+<DD>Closes the current undo group started with <CODE>rl_begin_undo_group
()</CODE>. There should be one call to <CODE>rl_end_undo_group()</CODE>
for each call to <CODE>rl_begin_undo_group()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX230"></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><A NAME="IDX161"></A>
-Remember how to undo an event (according to <VAR>what</VAR>). The affected
+<DD>Remember how to undo an event (according to <VAR>what</VAR>). The affected
text runs from <VAR>start</VAR> to <VAR>end</VAR>, and encompasses <VAR>text</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX231"></A>
<DL>
<DT><U>Function:</U> void <B>rl_free_undo_list</B> <I>(void)</I>
-<DD><A NAME="IDX162"></A>
-Free the existing undo list.
+<DD>Free the existing undo list.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX232"></A>
<DL>
<DT><U>Function:</U> int <B>rl_do_undo</B> <I>(void)</I>
-<DD><A NAME="IDX163"></A>
-Undo the first thing on the undo list. Returns <CODE>0</CODE> if there was
+<DD>Undo the first thing on the undo list. Returns <CODE>0</CODE> if there was
nothing to undo, non-zero if something was undone.
</DL>
+</P><P>
-</P>
-<P>
Finally, if you neither insert nor delete text, but directly modify the
existing text (e.g., change its case), call <CODE>rl_modifying()</CODE>
once, just before you modify the text. You must supply the indices of
the text range that you are going to modify.
+</P><P>
-</P>
-<P>
+<A NAME="IDX233"></A>
<DL>
<DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX164"></A>
-Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a
+<DD>Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a
single undo unit. It is assumed that you will subsequently modify
that text.
</DL>
+</P><P>
-</P>
-
-
-<H3><A NAME="SEC35" HREF="readline.html#TOC35">Redisplay</A></H3>
-
+<A NAME="Redisplay"></A>
+<HR SIZE="6">
+<A NAME="SEC35"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.6 Redisplay </H3>
+<!--docid::SEC35::-->
<P>
+
+<A NAME="IDX234"></A>
<DL>
<DT><U>Function:</U> void <B>rl_redisplay</B> <I>(void)</I>
-<DD><A NAME="IDX165"></A>
-Change what's displayed on the screen to reflect the current contents
+<DD>Change what's displayed on the screen to reflect the current contents
of <CODE>rl_line_buffer</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX235"></A>
<DL>
<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>(void)</I>
-<DD><A NAME="IDX166"></A>
-Force the line to be updated and redisplayed, whether or not
+<DD>Force the line to be updated and redisplayed, whether or not
Readline thinks the screen display is correct.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX236"></A>
<DL>
<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>(void)</I>
-<DD><A NAME="IDX167"></A>
-Tell the update functions that we have moved onto a new (empty) line,
+<DD>Tell the update functions that we have moved onto a new (empty) line,
usually after ouputting a newline.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX237"></A>
<DL>
<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>(void)</I>
-<DD><A NAME="IDX168"></A>
-Tell the update functions that we have moved onto a new line, with
+<DD>Tell the update functions that we have moved onto a new line, with
<VAR>rl_prompt</VAR> already displayed.
This could be used by applications that want to output the prompt string
themselves, but still need Readline to know the prompt string length for
redisplay.
It should be used after setting <VAR>rl_already_prompted</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX238"></A>
<DL>
<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>(void)</I>
-<DD><A NAME="IDX169"></A>
-Reset the display state to a clean state and redisplay the current line
+<DD>Reset the display state to a clean state and redisplay the current line
starting on a new line.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX239"></A>
<DL>
<DT><U>Function:</U> int <B>rl_crlf</B> <I>(void)</I>
-<DD><A NAME="IDX170"></A>
-Move the cursor to the start of the next screen line.
+<DD>Move the cursor to the start of the next screen line.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX240"></A>
<DL>
<DT><U>Function:</U> int <B>rl_show_char</B> <I>(int c)</I>
-<DD><A NAME="IDX171"></A>
-Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>.
+<DD>Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>.
If Readline has not been set to display meta characters directly, this
will convert meta characters to a meta-prefixed key sequence.
This is intended for use by applications which wish to do their own
redisplay.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX241"></A>
<DL>
-<DT><U>Function:</U> int <B>rl_message</B> <I>(const char *, ...)</I>
-<DD><A NAME="IDX172"></A>
-The arguments are a format string as would be supplied to <CODE>printf</CODE>,
+<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>,
possibly containing conversion specifications such as <SAMP>`%d'</SAMP>, and
any additional arguments necessary to satisfy the conversion specifications.
The resulting string is displayed in the <EM>echo area</EM>. The echo area
is also used to display numeric arguments and search strings.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX242"></A>
<DL>
<DT><U>Function:</U> int <B>rl_clear_message</B> <I>(void)</I>
-<DD><A NAME="IDX173"></A>
-Clear the message in the echo area.
+<DD>Clear the message in the echo area.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX243"></A>
<DL>
<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>(void)</I>
-<DD><A NAME="IDX174"></A>
-Save the local Readline prompt display state in preparation for
+<DD>Save the local Readline prompt display state in preparation for
displaying a new message in the message area with <CODE>rl_message()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX244"></A>
<DL>
<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>(void)</I>
-<DD><A NAME="IDX175"></A>
-Restore the local Readline prompt display state saved by the most
+<DD>Restore the local Readline prompt display state saved by the most
recent call to <CODE>rl_save_prompt</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX245"></A>
<DL>
<DT><U>Function:</U> int <B>rl_expand_prompt</B> <I>(char *prompt)</I>
-<DD><A NAME="IDX176"></A>
-Expand any special character sequences in <VAR>prompt</VAR> and set up the
+<DD>Expand any special character sequences in <VAR>prompt</VAR> and set up the
local Readline prompt redisplay variables.
This function is called by <CODE>readline()</CODE>. It may also be called to
expand the primary prompt if the <CODE>rl_on_new_line_with_prompt()</CODE>
@@ -2917,376 +3232,436 @@ function or <CODE>rl_already_prompted</CODE> variable is used.
It returns the number of visible characters on the last line of the
(possibly multi-line) prompt.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX246"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_prompt</B> <I>(const char *prompt)</I>
-<DD><A NAME="IDX177"></A>
-Make Readline use <VAR>prompt</VAR> for subsequent redisplay. This calls
+<DD>Make Readline use <VAR>prompt</VAR> for subsequent redisplay. This calls
<CODE>rl_expand_prompt()</CODE> to expand the prompt and sets <CODE>rl_prompt</CODE>
to the result.
</DL>
+</P><P>
-</P>
-
-
-<H3><A NAME="SEC36" HREF="readline.html#TOC36">Modifying Text</A></H3>
-
+<A NAME="Modifying Text"></A>
+<HR SIZE="6">
+<A NAME="SEC36"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.7 Modifying Text </H3>
+<!--docid::SEC36::-->
<P>
+
+<A NAME="IDX247"></A>
<DL>
<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(const char *text)</I>
-<DD><A NAME="IDX178"></A>
-Insert <VAR>text</VAR> into the line at the current cursor position.
+<DD>Insert <VAR>text</VAR> into the line at the current cursor position.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX248"></A>
<DL>
<DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX179"></A>
-Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line.
+<DD>Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX249"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX180"></A>
-Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in
+<DD>Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in
the current line.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX250"></A>
<DL>
<DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I>
-<DD><A NAME="IDX181"></A>
-Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line
+<DD>Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line
to the kill ring, appending or prepending to the last kill if the
last command was a kill command. The text is deleted.
If <VAR>start</VAR> is less than <VAR>end</VAR>,
the text is appended, otherwise prepended. If the last command was
not a kill, a new kill ring slot is used.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX251"></A>
<DL>
<DT><U>Function:</U> int <B>rl_push_macro_input</B> <I>(char *macro)</I>
-<DD><A NAME="IDX182"></A>
-Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked
+<DD>Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked
by a key bound to a macro. Not especially useful; use
<CODE>rl_insert_text()</CODE> instead.
</DL>
+</P><P>
-</P>
-
-
-<H3><A NAME="SEC37" HREF="readline.html#TOC37">Character Input</A></H3>
-
+<A NAME="Character Input"></A>
+<HR SIZE="6">
+<A NAME="SEC37"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.8 Character Input </H3>
+<!--docid::SEC37::-->
<P>
+
+<A NAME="IDX252"></A>
<DL>
<DT><U>Function:</U> int <B>rl_read_key</B> <I>(void)</I>
-<DD><A NAME="IDX183"></A>
-Return the next character available from Readline's current input stream.
+<DD>Return the next character available from Readline's current input stream.
This handles input inserted into
-the input stream via <VAR>rl_pending_input</VAR> (see section <A HREF="readline.html#SEC28">Readline Variables</A>)
+the input stream via <VAR>rl_pending_input</VAR> (see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>)
and <CODE>rl_stuff_char()</CODE>, macros, and characters read from the keyboard.
While waiting for input, this function will call any function assigned to
the <CODE>rl_event_hook</CODE> variable.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX253"></A>
<DL>
<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *stream)</I>
-<DD><A NAME="IDX184"></A>
-Return the next character available from <VAR>stream</VAR>, which is assumed to
+<DD>Return the next character available from <VAR>stream</VAR>, which is assumed to
be the keyboard.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX254"></A>
<DL>
<DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I>
-<DD><A NAME="IDX185"></A>
-Insert <VAR>c</VAR> into the Readline input stream. It will be "read"
+<DD>Insert <VAR>c</VAR> into the Readline input stream. It will be "read"
before Readline attempts to read characters from the terminal with
<CODE>rl_read_key()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX255"></A>
<DL>
<DT><U>Function:</U> int <B>rl_execute_next</B> <I>(int c)</I>
-<DD><A NAME="IDX186"></A>
-Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE>
+<DD>Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE>
is called. This sets <VAR>rl_pending_input</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX256"></A>
<DL>
<DT><U>Function:</U> int <B>rl_clear_pending_input</B> <I>(void)</I>
-<DD><A NAME="IDX187"></A>
-Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any
+<DD>Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any
previous call to <CODE>rl_execute_next()</CODE>. This works only if the
pending input has not already been read with <CODE>rl_read_key()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX257"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_keyboard_input_timeout</B> <I>(int u)</I>
-<DD><A NAME="IDX188"></A>
-While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will
+<DD>While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will
wait for <VAR>u</VAR> microseconds for input before calling any function
assigned to <CODE>rl_event_hook</CODE>. The default waiting period is
one-tenth of a second. Returns the old timeout value.
</DL>
+</P><P>
-</P>
-
-
-<H3><A NAME="SEC38" HREF="readline.html#TOC38">Terminal Management</A></H3>
-
+<A NAME="Terminal Management"></A>
+<HR SIZE="6">
+<A NAME="SEC38"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.9 Terminal Management </H3>
+<!--docid::SEC38::-->
<P>
+
+<A NAME="IDX258"></A>
<DL>
<DT><U>Function:</U> void <B>rl_prep_terminal</B> <I>(int meta_flag)</I>
-<DD><A NAME="IDX189"></A>
-Modify the terminal settings for Readline's use, so <CODE>readline()</CODE>
+<DD>Modify the terminal settings for Readline's use, so <CODE>readline()</CODE>
can read a single character at a time from the keyboard.
The <VAR>meta_flag</VAR> argument should be non-zero if Readline should
read eight-bit input.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX259"></A>
<DL>
<DT><U>Function:</U> void <B>rl_deprep_terminal</B> <I>(void)</I>
-<DD><A NAME="IDX190"></A>
-Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in
+<DD>Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in
the state in which it was before the most recent call to
<CODE>rl_prep_terminal()</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX260"></A>
<DL>
<DT><U>Function:</U> void <B>rl_tty_set_default_bindings</B> <I>(Keymap kmap)</I>
-<DD><A NAME="IDX191"></A>
-Read the operating system's terminal editing characters (as would be displayed
+<DD>Read the operating system's terminal editing characters (as would be displayed
by <CODE>stty</CODE>) to their Readline equivalents. The bindings are performed
in <VAR>kmap</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX261"></A>
<DL>
<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(const char *terminal_name)</I>
-<DD><A NAME="IDX192"></A>
-Reinitialize Readline's idea of the terminal settings using
+<DD>Reinitialize Readline's idea of the terminal settings using
<VAR>terminal_name</VAR> as the terminal type (e.g., <CODE>vt100</CODE>).
If <VAR>terminal_name</VAR> is <CODE>NULL</CODE>, the value of the <CODE>TERM</CODE>
environment variable is used.
</DL>
+</P><P>
-</P>
-
-
-<H3><A NAME="SEC39" HREF="readline.html#TOC39">Utility Functions</A></H3>
-
+<A NAME="Utility Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC39"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.10 Utility Functions </H3>
+<!--docid::SEC39::-->
<P>
+
+<A NAME="IDX262"></A>
<DL>
<DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I>
-<DD><A NAME="IDX193"></A>
-Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR>
+<DD>Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR>
characters, possibly reallocating it if necessary.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX263"></A>
<DL>
<DT><U>Function:</U> int <B>rl_initialize</B> <I>(void)</I>
-<DD><A NAME="IDX194"></A>
-Initialize or re-initialize Readline's internal state.
+<DD>Initialize or re-initialize Readline's internal state.
It's not strictly necessary to call this; <CODE>readline()</CODE> calls it before
reading any input.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX264"></A>
<DL>
<DT><U>Function:</U> int <B>rl_ding</B> <I>(void)</I>
-<DD><A NAME="IDX195"></A>
-Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>.
+<DD>Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX265"></A>
<DL>
<DT><U>Function:</U> int <B>rl_alphabetic</B> <I>(int c)</I>
-<DD><A NAME="IDX196"></A>
-Return 1 if <VAR>c</VAR> is an alphabetic character.
+<DD>Return 1 if <VAR>c</VAR> is an alphabetic character.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX266"></A>
<DL>
<DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I>
-<DD><A NAME="IDX197"></A>
-A convenience function for displaying a list of strings in
+<DD>A convenience function for displaying a list of strings in
columnar format on Readline's output stream. <CODE>matches</CODE> is the list
of strings, in argv format, such as a list of completion matches.
<CODE>len</CODE> is the number of strings in <CODE>matches</CODE>, and <CODE>max</CODE>
is the length of the longest string in <CODE>matches</CODE>. This function uses
the setting of <CODE>print-completions-horizontally</CODE> to select how the
-matches are displayed (see section <A HREF="readline.html#SEC10">Readline Init File Syntax</A>).
+matches are displayed (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>).
</DL>
+</P><P>
-</P>
-<P>
The following are implemented as macros, defined in <CODE>chardefs.h</CODE>.
Applications should refrain from using them.
+</P><P>
-</P>
-<P>
+<A NAME="IDX267"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_uppercase_p</B> <I>(int c)</I>
-<DD><A NAME="IDX198"></A>
-Return 1 if <VAR>c</VAR> is an uppercase alphabetic character.
+<DD>Return 1 if <VAR>c</VAR> is an uppercase alphabetic character.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX268"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_lowercase_p</B> <I>(int c)</I>
-<DD><A NAME="IDX199"></A>
-Return 1 if <VAR>c</VAR> is a lowercase alphabetic character.
+<DD>Return 1 if <VAR>c</VAR> is a lowercase alphabetic character.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX269"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_digit_p</B> <I>(int c)</I>
-<DD><A NAME="IDX200"></A>
-Return 1 if <VAR>c</VAR> is a numeric character.
+<DD>Return 1 if <VAR>c</VAR> is a numeric character.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX270"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_to_upper</B> <I>(int c)</I>
-<DD><A NAME="IDX201"></A>
-If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding
+<DD>If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding
uppercase character.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX271"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_to_lower</B> <I>(int c)</I>
-<DD><A NAME="IDX202"></A>
-If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding
+<DD>If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding
lowercase character.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX272"></A>
<DL>
<DT><U>Function:</U> int <B>_rl_digit_value</B> <I>(int c)</I>
-<DD><A NAME="IDX203"></A>
-If <VAR>c</VAR> is a number, return the value it represents.
-</DL>
-
-</P>
-
-
-<H3><A NAME="SEC40" HREF="readline.html#TOC40">Miscellaneous Functions</A></H3>
-
-<P>
+<DD>If <VAR>c</VAR> is a number, return the value it represents.
+</DL>
+</P><P>
+
+<A NAME="Miscellaneous Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC40"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.11 Miscellaneous Functions </H3>
+<!--docid::SEC40::-->
+<P>
+
+<A NAME="IDX273"></A>
<DL>
<DT><U>Function:</U> int <B>rl_macro_bind</B> <I>(const char *keyseq, const char *macro, Keymap map)</I>
-<DD><A NAME="IDX204"></A>
-Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>.
+<DD>Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>.
The binding is performed in <VAR>map</VAR>. When <VAR>keyseq</VAR> is invoked, the
<VAR>macro</VAR> will be inserted into the line. This function is deprecated;
use <CODE>rl_generic_bind()</CODE> instead.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX274"></A>
<DL>
<DT><U>Function:</U> void <B>rl_macro_dumper</B> <I>(int readable)</I>
-<DD><A NAME="IDX205"></A>
-Print the key sequences bound to macros and their values, using
+<DD>Print the key sequences bound to macros and their values, using
the current keymap, to <CODE>rl_outstream</CODE>.
If <VAR>readable</VAR> is non-zero, the list is formatted in such a way
that it can be made part of an <CODE>inputrc</CODE> file and re-read.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX275"></A>
<DL>
<DT><U>Function:</U> int <B>rl_variable_bind</B> <I>(const char *variable, const char *value)</I>
-<DD><A NAME="IDX206"></A>
-Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>.
+<DD>Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>.
This behaves as if the readline command
<SAMP>`set <VAR>variable</VAR> <VAR>value</VAR>'</SAMP> had been executed in an <CODE>inputrc</CODE>
-file (see section <A HREF="readline.html#SEC10">Readline Init File Syntax</A>).
+file (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX276"></A>
<DL>
<DT><U>Function:</U> void <B>rl_variable_dumper</B> <I>(int readable)</I>
-<DD><A NAME="IDX207"></A>
-Print the readline variable names and their current values
+<DD>Print the readline variable names and their current values
to <CODE>rl_outstream</CODE>.
If <VAR>readable</VAR> is non-zero, the list is formatted in such a way
that it can be made part of an <CODE>inputrc</CODE> file and re-read.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX277"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_paren_blink_timeout</B> <I>(int u)</I>
-<DD><A NAME="IDX208"></A>
-Set the time interval (in microseconds) that Readline waits when showing
+<DD>Set the time interval (in microseconds) that Readline waits when showing
a balancing character when <CODE>blink-matching-paren</CODE> has been enabled.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC41" HREF="readline.html#TOC41">Alternate Interface</A></H3>
-
+</P><P>
+
+<A NAME="IDX278"></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>.
+Readline fetches the termcap entry for the current terminal name and
+uses those capabilities to move around the screen line and perform other
+terminal-specific operations, like erasing a line. Readline does not
+use all of a terminal's capabilities, and this function will return
+values for only those capabilities Readline uses.
+</DL>
+</P><P>
+
+<A NAME="Alternate Interface"></A>
+<HR SIZE="6">
+<A NAME="SEC41"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.12 Alternate Interface </H3>
+<!--docid::SEC41::-->
<P>
+
An alternate interface is available to plain <CODE>readline()</CODE>. Some
applications need to interleave keyboard I/O with file, device, or
window system I/O, typically by using a main loop to <CODE>select()</CODE>
on various file descriptors. To accomodate this need, readline can
also be invoked as a `callback' function from an event loop. There
are functions available to make this easy.
+</P><P>
-</P>
-<P>
+<A NAME="IDX279"></A>
<DL>
<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(const char *prompt, rl_vcpfunc_t *lhandler)</I>
-<DD><A NAME="IDX209"></A>
-Set up the terminal for readline I/O and display the initial
+<DD>Set up the terminal for readline I/O and display the initial
expanded value of <VAR>prompt</VAR>. Save the value of <VAR>lhandler</VAR> to
use as a function to call when a complete line of input has been entered.
The function takes the text of the line as an argument.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX280"></A>
<DL>
<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>(void)</I>
-<DD><A NAME="IDX210"></A>
-Whenever an application determines that keyboard input is available, it
+<DD>Whenever an application determines that keyboard input is available, it
should call <CODE>rl_callback_read_char()</CODE>, which will read the next
character from the current input source. If that character completes the
line, <CODE>rl_callback_read_char</CODE> will invoke the <VAR>lhandler</VAR>
@@ -3294,33 +3669,43 @@ function saved by <CODE>rl_callback_handler_install</CODE> to process the
line. <CODE>EOF</CODE> is indicated by calling <VAR>lhandler</VAR> with a
<CODE>NULL</CODE> line.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX281"></A>
<DL>
<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>(void)</I>
-<DD><A NAME="IDX211"></A>
-Restore the terminal to its initial state and remove the line handler.
+<DD>Restore the terminal to its initial state and remove the line handler.
This may be called from within a callback as well as independently.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC42" HREF="readline.html#TOC42">A Readline Example</A></H3>
-
+</P><P>
+
+<A NAME="A Readline Example"></A>
+<HR SIZE="6">
+<A NAME="SEC42"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.4.13 A Readline Example </H3>
+<!--docid::SEC42::-->
<P>
+
Here is a function which changes lowercase characters to their uppercase
equivalents, and uppercase characters to lowercase. If
this function was bound to <SAMP>`M-c'</SAMP>, then typing <SAMP>`M-c'</SAMP> would
change the case of the character under point. Typing <SAMP>`M-1 0 M-c'</SAMP>
would change the case of the following 10 characters, leaving the cursor on
the last character changed.
+</P><P>
-</P>
-
-<PRE>
-/* Invert the case of the COUNT following characters. */
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>/* Invert the case of the COUNT following characters. */
int
invert_case_line (count, key)
int count, key;
@@ -3374,13 +3759,26 @@ invert_case_line (count, key)
rl_point = (direction == 1) ? end - 1 : start;
return (0);
}
-</PRE>
-
-
-
-<H2><A NAME="SEC43" HREF="readline.html#TOC43">Readline Signal Handling</A></H2>
-
+</pre></td></tr></table></P><P>
+
+<A NAME="Readline Signal Handling"></A>
+<HR SIZE="6">
+<A NAME="SEC43"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.5 Readline Signal Handling </H2>
+<!--docid::SEC43::-->
<P>
+
Signals are asynchronous events sent to a process by the Unix kernel,
sometimes on behalf of another process. They are intended to indicate
exceptional events, like a user pressing the interrupt key on his terminal,
@@ -3390,9 +3788,8 @@ Readline changes the terminal attributes when it is called, it needs to
perform special processing when such a signal is received in order to
restore the terminal to a sane state, or provide application writers with
functions to do so manually.
+</P><P>
-</P>
-<P>
Readline contains an internal signal handler that is installed for a
number of signals (<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>,
<CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>).
@@ -3406,9 +3803,8 @@ will reinitialize the terminal and continue to accept input.
When a <CODE>SIGINT</CODE> is received, the Readline signal handler performs
some additional work, which will cause any partially-entered line to be
aborted (see the description of <CODE>rl_free_line_state()</CODE> below).
+</P><P>
-</P>
-<P>
There is an additional Readline signal handler, for <CODE>SIGWINCH</CODE>, which
the kernel sends to a process whenever the terminal's size changes (for
example, if a user resizes an <CODE>xterm</CODE>). The Readline <CODE>SIGWINCH</CODE>
@@ -3420,173 +3816,182 @@ handler does more than update its idea of the terminal size and return (for
example, a <CODE>longjmp</CODE> back to a main processing loop), it <EM>must</EM>
call <CODE>rl_cleanup_after_signal()</CODE> (described below), to restore the
terminal state.
+</P><P>
-</P>
-<P>
Readline provides two variables that allow application writers to
control whether or not it will catch certain signals and act on them
when they are received. It is important that applications change the
values of these variables only when calling <CODE>readline()</CODE>, not in
a signal handler, so Readline's internal signal state is not corrupted.
+</P><P>
-</P>
-<P>
+<A NAME="IDX282"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_catch_signals</B>
-<DD><A NAME="IDX212"></A>
-If this variable is non-zero, Readline will install signal handlers for
+<DD>If this variable is non-zero, Readline will install signal handlers for
<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>,
<CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>.
+</P><P>
-</P>
-<P>
The default value of <CODE>rl_catch_signals</CODE> is 1.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX283"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_catch_sigwinch</B>
-<DD><A NAME="IDX213"></A>
-If this variable is non-zero, Readline will install a signal handler for
+<DD>If this variable is non-zero, Readline will install a signal handler for
<CODE>SIGWINCH</CODE>.
+</P><P>
-</P>
-<P>
The default value of <CODE>rl_catch_sigwinch</CODE> is 1.
</DL>
+</P><P>
-</P>
-<P>
If an application does not wish to have Readline catch any signals, or
to handle signals other than those Readline catches (<CODE>SIGHUP</CODE>,
for example),
Readline provides convenience functions to do the necessary terminal
and internal state cleanup upon receipt of a signal.
+</P><P>
-</P>
-<P>
+<A NAME="IDX284"></A>
<DL>
<DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I>
-<DD><A NAME="IDX214"></A>
-This function will reset the state of the terminal to what it was before
+<DD>This function will reset the state of the terminal to what it was before
<CODE>readline()</CODE> was called, and remove the Readline signal handlers for
all signals, depending on the values of <CODE>rl_catch_signals</CODE> and
<CODE>rl_catch_sigwinch</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX285"></A>
<DL>
<DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I>
-<DD><A NAME="IDX215"></A>
-This will free any partial state associated with the current input line
+<DD>This will free any partial state associated with the current input line
(undo information, any partial history entry, any partially-entered
keyboard macro, and any partially-entered numeric argument). This
should be called before <CODE>rl_cleanup_after_signal()</CODE>. The
Readline signal handler for <CODE>SIGINT</CODE> calls this to abort the
current input line.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX286"></A>
<DL>
<DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I>
-<DD><A NAME="IDX216"></A>
-This will reinitialize the terminal and reinstall any Readline signal
+<DD>This will reinitialize the terminal and reinstall any Readline signal
handlers, depending on the values of <CODE>rl_catch_signals</CODE> and
<CODE>rl_catch_sigwinch</CODE>.
</DL>
+</P><P>
-</P>
-<P>
If an application does not wish Readline to catch <CODE>SIGWINCH</CODE>, it may
call <CODE>rl_resize_terminal()</CODE> or <CODE>rl_set_screen_size()</CODE> to force
Readline to update its idea of the terminal size when a <CODE>SIGWINCH</CODE>
is received.
+</P><P>
-</P>
-<P>
+<A NAME="IDX287"></A>
<DL>
<DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I>
-<DD><A NAME="IDX217"></A>
-Update Readline's internal screen size by reading values from the kernel.
+<DD>Update Readline's internal screen size by reading values from the kernel.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX288"></A>
<DL>
<DT><U>Function:</U> void <B>rl_set_screen_size</B> <I>(int rows, int cols)</I>
-<DD><A NAME="IDX218"></A>
-Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and
+<DD>Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and
<VAR>cols</VAR> columns.
</DL>
+</P><P>
-</P>
-<P>
If an application does not want to install a <CODE>SIGWINCH</CODE> handler, but
is still interested in the screen dimensions, Readline's idea of the screen
size may be queried.
+</P><P>
-</P>
-<P>
+<A NAME="IDX289"></A>
<DL>
<DT><U>Function:</U> void <B>rl_get_screen_size</B> <I>(int *rows, int *cols)</I>
-<DD><A NAME="IDX219"></A>
-Return Readline's idea of the terminal's size in the
+<DD>Return Readline's idea of the terminal's size in the
variables pointed to by the arguments.
</DL>
+</P><P>
-</P>
-<P>
The following functions install and remove Readline's signal handlers.
+</P><P>
-</P>
-<P>
+<A NAME="IDX290"></A>
<DL>
<DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I>
-<DD><A NAME="IDX220"></A>
-Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>,
+<DD>Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>,
<CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>,
<CODE>SIGTTOU</CODE>, and <CODE>SIGWINCH</CODE>, depending on the values of
<CODE>rl_catch_signals</CODE> and <CODE>rl_catch_sigwinch</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX291"></A>
<DL>
<DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I>
-<DD><A NAME="IDX221"></A>
-Remove all of the Readline signal handlers installed by
+<DD>Remove all of the Readline signal handlers installed by
<CODE>rl_set_signals()</CODE>.
</DL>
-
-</P>
-
-
-<H2><A NAME="SEC44" HREF="readline.html#TOC44">Custom Completers</A></H2>
-
+</P><P>
+
+<A NAME="Custom Completers"></A>
+<HR SIZE="6">
+<A NAME="SEC44"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 2.6 Custom Completers </H2>
+<!--docid::SEC44::-->
<P>
+
Typically, a program that reads commands from the user has a way of
disambiguating commands and data. If your program is one of these, then
it can provide completion for commands, data, or both.
The following sections describe how your program and Readline
cooperate to provide this service.
-
-</P>
-
-<UL>
-<LI><A HREF="readline.html#SEC45">How Completing Works</A>: The logic used to do completion.
-<LI><A HREF="readline.html#SEC46">Completion Functions</A>: Functions provided by Readline.
-<LI><A HREF="readline.html#SEC47">Completion Variables</A>: Variables which control completion.
-<LI><A HREF="readline.html#SEC48">A Short Completion Example</A>: An example of writing completer subroutines.
-</UL>
-
-
-
-<H3><A NAME="SEC45" HREF="readline.html#TOC45">How Completing Works</A></H3>
-
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The logic used to do completion.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Functions provided by Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Variables which control completion.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example of writing completer subroutines.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
+
+<A NAME="How Completing Works"></A>
+<HR SIZE="6">
+<A NAME="SEC45"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.1 How Completing Works </H3>
+<!--docid::SEC45::-->
<P>
+
In order to complete some text, the full list of possible completions
must be available. That is, it is not possible to accurately
expand a partial word without knowing all of the possible words
@@ -3595,16 +4000,13 @@ the user interface to completion, and two of the most common
completion functions: filename and username. For completing other types
of text, you must write your own completion function. This section
describes exactly what such functions must do, and provides an example.
+</P><P>
-</P>
-<P>
There are three major functions used to perform completion:
-
-</P>
+</P><P>
<OL>
<LI>
-
The user-interface function <CODE>rl_complete()</CODE>. This function is
called with the same arguments as other bindable Readline functions:
<VAR>count</VAR> and <VAR>invoking_key</VAR>.
@@ -3613,17 +4015,17 @@ It isolates the word to be completed and calls
It then either lists the possible completions, inserts the possible
completions, or actually performs the
completion, depending on which behavior is desired.
+<P>
<LI>
-
The internal function <CODE>rl_completion_matches()</CODE> uses an
application-supplied <EM>generator</EM> function to generate the list of
possible matches, and then returns the array of these matches.
The caller should place the address of its generator function in
<CODE>rl_completion_entry_function</CODE>.
+<P>
<LI>
-
The generator function is called repeatedly from
<CODE>rl_completion_matches()</CODE>, returning a string each time. The
arguments to the generator function are <VAR>text</VAR> and <VAR>state</VAR>.
@@ -3637,148 +4039,165 @@ list of possible completions when <VAR>state</VAR> is zero, and returns them
one at a time on subsequent calls. Each string the generator function
returns as a match must be allocated with <CODE>malloc()</CODE>; Readline
frees the strings when it has finished with them.
+<P>
</OL>
-
<P>
+
+<A NAME="IDX292"></A>
<DL>
<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
-<DD><A NAME="IDX222"></A>
-Complete the word at or before point. You have supplied the function
+<DD>Complete the word at or before point. You have supplied the function
that does the initial simple matching selection algorithm (see
<CODE>rl_completion_matches()</CODE>). The default is to do filename completion.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX293"></A>
<DL>
<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
-<DD><A NAME="IDX223"></A>
-This is a pointer to the generator function for
+<DD>This is a pointer to the generator function for
<CODE>rl_completion_matches()</CODE>.
If the value of <CODE>rl_completion_entry_function</CODE> is
<CODE>NULL</CODE> then the default filename generator
function, <CODE>rl_filename_completion_function()</CODE>, is used.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC46" HREF="readline.html#TOC46">Completion Functions</A></H3>
-
+</P><P>
+
+<A NAME="Completion Functions"></A>
+<HR SIZE="6">
+<A NAME="SEC46"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.2 Completion Functions </H3>
+<!--docid::SEC46::-->
<P>
+
Here is the complete list of callable completion functions present in
Readline.
+</P><P>
-</P>
-<P>
+<A NAME="IDX294"></A>
<DL>
<DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I>
-<DD><A NAME="IDX224"></A>
-Complete the word at or before point. <VAR>what_to_do</VAR> says what to do
+<DD>Complete the word at or before point. <VAR>what_to_do</VAR> says what to do
with the completion. A value of <SAMP>`?'</SAMP> means list the possible
completions. <SAMP>`TAB'</SAMP> means do standard completion. <SAMP>`*'</SAMP> means
insert all of the possible completions. <SAMP>`!'</SAMP> means to display
all of the possible completions, if there is more than one, as well as
performing partial completion.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX295"></A>
<DL>
<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
-<DD><A NAME="IDX225"></A>
-Complete the word at or before point. You have supplied the function
+<DD>Complete the word at or before point. You have supplied the function
that does the initial simple matching selection algorithm (see
<CODE>rl_completion_matches()</CODE> and <CODE>rl_completion_entry_function</CODE>).
The default is to do filename
completion. This calls <CODE>rl_complete_internal()</CODE> with an
argument depending on <VAR>invoking_key</VAR>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX296"></A>
<DL>
<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key)</I>
-<DD><A NAME="IDX226"></A>
-List the possible completions. See description of <CODE>rl_complete
+<DD>List the possible completions. See description of <CODE>rl_complete
()</CODE>. This calls <CODE>rl_complete_internal()</CODE> with an argument of
<SAMP>`?'</SAMP>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX297"></A>
<DL>
<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key)</I>
-<DD><A NAME="IDX227"></A>
-Insert the list of possible completions into the line, deleting the
+<DD>Insert the list of possible completions into the line, deleting the
partially-completed word. See description of <CODE>rl_complete()</CODE>.
This calls <CODE>rl_complete_internal()</CODE> with an argument of <SAMP>`*'</SAMP>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX298"></A>
<DL>
<DT><U>Function:</U> char ** <B>rl_completion_matches</B> <I>(const char *text, rl_compentry_func_t *entry_func)</I>
-<DD><A NAME="IDX228"></A>
-Returns an array of strings which is a list of completions for
+<DD>Returns an array of strings which is a list of completions for
<VAR>text</VAR>. If there are no completions, returns <CODE>NULL</CODE>.
The first entry in the returned array is the substitution for <VAR>text</VAR>.
The remaining entries are the possible completions. The array is
terminated with a <CODE>NULL</CODE> pointer.
+</P><P>
-</P>
-<P>
<VAR>entry_func</VAR> is a function of two args, and returns a
<CODE>char *</CODE>. The first argument is <VAR>text</VAR>. The second is a
state argument; it is zero on the first call, and non-zero on subsequent
calls. <VAR>entry_func</VAR> returns a <CODE>NULL</CODE> pointer to the caller
when there are no more matches.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX299"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_filename_completion_function</B> <I>(const char *text, int state)</I>
-<DD><A NAME="IDX229"></A>
-A generator function for filename completion in the general case.
+<DD>A generator function for filename completion in the general case.
<VAR>text</VAR> is a partial filename.
The Bash source is a useful reference for writing custom
completion functions (the Bash completion functions call this and other
Readline functions).
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX300"></A>
<DL>
<DT><U>Function:</U> char * <B>rl_username_completion_function</B> <I>(const char *text, int state)</I>
-<DD><A NAME="IDX230"></A>
-A completion generator for usernames. <VAR>text</VAR> contains a partial
+<DD>A completion generator for usernames. <VAR>text</VAR> contains a partial
username preceded by a random character (usually <SAMP>`~'</SAMP>). As with all
completion generators, <VAR>state</VAR> is zero on the first call and non-zero
for subsequent calls.
</DL>
+</P><P>
-</P>
-
-
-<H3><A NAME="SEC47" HREF="readline.html#TOC47">Completion Variables</A></H3>
-
+<A NAME="Completion Variables"></A>
+<HR SIZE="6">
+<A NAME="SEC47"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.3 Completion Variables </H3>
+<!--docid::SEC47::-->
<P>
+
+<A NAME="IDX301"></A>
<DL>
<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
-<DD><A NAME="IDX231"></A>
-A pointer to the generator function for <CODE>rl_completion_matches()</CODE>.
+<DD>A pointer to the generator function for <CODE>rl_completion_matches()</CODE>.
<CODE>NULL</CODE> means to use <CODE>rl_filename_completion_function()</CODE>, the default
filename completer.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX302"></A>
<DL>
<DT><U>Variable:</U> rl_completion_func_t * <B>rl_attempted_completion_function</B>
-<DD><A NAME="IDX232"></A>
-A pointer to an alternative function to create matches.
+<DD>A pointer to an alternative function to create matches.
The function is called with <VAR>text</VAR>, <VAR>start</VAR>, and <VAR>end</VAR>.
<VAR>start</VAR> and <VAR>end</VAR> are indices in <CODE>rl_line_buffer</CODE> defining
the boundaries of <VAR>text</VAR>, which is a character string.
@@ -3790,13 +4209,12 @@ If this function sets the <CODE>rl_attempted_completion_over</CODE>
variable to a non-zero value, Readline will not perform its default
completion even if this function returns no matches.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX303"></A>
<DL>
<DT><U>Variable:</U> rl_quote_func_t * <B>rl_filename_quoting_function</B>
-<DD><A NAME="IDX233"></A>
-A pointer to a function that will quote a filename in an
+<DD>A pointer to a function that will quote a filename in an
application-specific fashion. This is called if filename completion is being
attempted and one of the characters in <CODE>rl_filename_quote_characters</CODE>
appears in a completed filename. The function is called with
@@ -3808,13 +4226,12 @@ insert a closing quote character. The <VAR>quote_pointer</VAR> is a pointer
to any opening quote character the user typed. Some functions choose
to reset this character.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX304"></A>
<DL>
<DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_dequoting_function</B>
-<DD><A NAME="IDX234"></A>
-A pointer to a function that will remove application-specific quoting
+<DD>A pointer to a function that will remove application-specific quoting
characters from a filename before completion is attempted, so those
characters do not interfere with matching the text against names in
the filesystem. It is called with <VAR>text</VAR>, the text of the word
@@ -3822,13 +4239,12 @@ to be dequoted, and <VAR>quote_char</VAR>, which is the quoting character
that delimits the filename (usually <SAMP>`''</SAMP> or <SAMP>`"'</SAMP>). If
<VAR>quote_char</VAR> is zero, the filename was not in an embedded string.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX305"></A>
<DL>
<DT><U>Variable:</U> rl_linebuf_func_t * <B>rl_char_is_quoted_p</B>
-<DD><A NAME="IDX235"></A>
-A pointer to a function to call that determines whether or not a specific
+<DD>A pointer to a function to call that determines whether or not a specific
character in the line buffer is quoted, according to whatever quoting
mechanism the program calling Readline uses. The function is called with
two arguments: <VAR>text</VAR>, the text of the line, and <VAR>index</VAR>, the
@@ -3836,84 +4252,76 @@ index of the character in the line. It is used to decide whether a
character found in <CODE>rl_completer_word_break_characters</CODE> should be
used to break words for the completer.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX306"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_query_items</B>
-<DD><A NAME="IDX236"></A>
-Up to this many items will be displayed in response to a
+<DD>Up to this many items will be displayed in response to a
possible-completions call. After that, we ask the user if she is sure
she wants to see them all. The default value is 100.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX307"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_basic_word_break_characters</B>
-<DD><A NAME="IDX237"></A>
-The basic list of characters that signal a break between words for the
+<DD>The basic list of characters that signal a break between words for the
completer routine. The default value of this variable is the characters
which break words for completion in Bash:
-<CODE>" \t\n\"\\'`@$&#62;&#60;=;|&#38;{("</CODE>.
+<CODE>" \t\n\"\\'`@$>&#60;=;|&#38;{("</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX308"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_basic_quote_characters</B>
-<DD><A NAME="IDX238"></A>
-A list of quote characters which can cause a word break.
+<DD>A list of quote characters which can cause a word break.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX309"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_completer_word_break_characters</B>
-<DD><A NAME="IDX239"></A>
-The list of characters that signal a break between words for
+<DD>The list of characters that signal a break between words for
<CODE>rl_complete_internal()</CODE>. The default list is the value of
<CODE>rl_basic_word_break_characters</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX310"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_completer_quote_characters</B>
-<DD><A NAME="IDX240"></A>
-A list of characters which can be used to quote a substring of the line.
+<DD>A list of characters which can be used to quote a substring of the line.
Completion occurs on the entire substring, and within the substring
<CODE>rl_completer_word_break_characters</CODE> are treated as any other character,
unless they also appear within this list.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX311"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_filename_quote_characters</B>
-<DD><A NAME="IDX241"></A>
-A list of characters that cause a filename to be quoted by the completer
+<DD>A list of characters that cause a filename to be quoted by the completer
when they appear in a completed filename. The default is the null string.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX312"></A>
<DL>
<DT><U>Variable:</U> const char * <B>rl_special_prefixes</B>
-<DD><A NAME="IDX242"></A>
-The list of characters that are word break characters, but should be
+<DD>The list of characters that are word break characters, but should be
left in <VAR>text</VAR> when it is passed to the completion function.
Programs can use this to help determine what kind of completing to do.
For instance, Bash sets this variable to "$@" so that it can complete
shell variables and hostnames.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX313"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_append_character</B>
-<DD><A NAME="IDX243"></A>
-When a single completion alternative matches at the end of the command
+<DD>When a single completion alternative matches at the end of the command
line, this character is appended to the inserted completion text. The
default is a space character (<SAMP>` '</SAMP>). Setting this to the null
character (<SAMP>`\0'</SAMP>) prevents anything being appended automatically.
@@ -3921,22 +4329,20 @@ This can be changed in custom completion functions to
provide the "most sensible word separator character" according to
an application-specific command line syntax specification.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX314"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B>
-<DD><A NAME="IDX244"></A>
-If non-zero, then duplicates in the matches are removed.
+<DD>If non-zero, then duplicates in the matches are removed.
The default is 1.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX315"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B>
-<DD><A NAME="IDX245"></A>
-Non-zero means that the results of the matches are to be treated as
+<DD>Non-zero means that the results of the matches are to be treated as
filenames. This is <EM>always</EM> zero on entry, and can only be changed
within a completion entry generator function. If it is set to a non-zero
value, directory names have a slash appended and Readline attempts to
@@ -3944,13 +4350,12 @@ quote completed filenames if they contain any characters in
<CODE>rl_filename_quote_characters</CODE> and <CODE>rl_filename_quoting_desired</CODE>
is set to a non-zero value.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX316"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B>
-<DD><A NAME="IDX246"></A>
-Non-zero means that the results of the matches are to be quoted using
+<DD>Non-zero means that the results of the matches are to be quoted using
double quotes (or an application-specific quoting mechanism) if the
completed filename contains any characters in
<CODE>rl_filename_quote_chars</CODE>. This is <EM>always</EM> non-zero
@@ -3958,44 +4363,40 @@ on entry, and can only be changed within a completion entry generator
function. The quoting is effected via a call to the function pointed to
by <CODE>rl_filename_quoting_function</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX317"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_attempted_completion_over</B>
-<DD><A NAME="IDX247"></A>
-If an application-specific completion function assigned to
+<DD>If an application-specific completion function assigned to
<CODE>rl_attempted_completion_function</CODE> sets this variable to a non-zero
value, Readline will not perform its default filename completion even
if the application's completion function returns no matches.
It should be set only by an application's completion function.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX318"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_completion_type</B>
-<DD><A NAME="IDX248"></A>
-Set to a character describing the type of completion Readline is currently
+<DD>Set to a character describing the type of completion Readline is currently
attempting; see the description of <CODE>rl_complete_internal()</CODE>
-(see section <A HREF="readline.html#SEC46">Completion Functions</A>) for the list of characters.
+(see section <A HREF="readline.html#SEC46">2.6.2 Completion Functions</A>) for the list of characters.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX319"></A>
<DL>
<DT><U>Variable:</U> int <B>rl_inhibit_completion</B>
-<DD><A NAME="IDX249"></A>
-If this variable is non-zero, completion is inhibited. The completion
+<DD>If this variable is non-zero, completion is inhibited. The completion
character will be inserted as any other bound to <CODE>self-insert</CODE>.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX320"></A>
<DL>
<DT><U>Variable:</U> rl_compignore_func_t * <B>rl_ignore_some_completions_function</B>
-<DD><A NAME="IDX250"></A>
-This function, if defined, is called by the completer when real filename
+<DD>This function, if defined, is called by the completer when real filename
completion is done, after all the matching names have been generated.
It is passed a <CODE>NULL</CODE> terminated array of matches.
The first element (<CODE>matches[0]</CODE>) is the
@@ -4003,13 +4404,12 @@ maximal substring common to all matches. This function can
re-arrange the list of matches as required, but each element deleted
from the array must be freed.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX321"></A>
<DL>
<DT><U>Variable:</U> rl_icppfunc_t * <B>rl_directory_completion_hook</B>
-<DD><A NAME="IDX251"></A>
-This function, if defined, is allowed to modify the directory portion
+<DD>This function, if defined, is allowed to modify the directory portion
of filenames Readline completes. It is called with the address of a
string (the current directory name) as an argument, and may modify that string.
If the string is replaced with a new string, the old value should be freed.
@@ -4020,13 +4420,12 @@ It returns an integer that should be non-zero if the function modifies
its directory argument.
It could be used to expand symbolic links or shell variables in pathnames.
</DL>
+</P><P>
-</P>
-<P>
+<A NAME="IDX322"></A>
<DL>
<DT><U>Variable:</U> rl_compdisp_func_t * <B>rl_completion_display_matches_hook</B>
-<DD><A NAME="IDX252"></A>
-If non-zero, then this is the address of a function to call when
+<DD>If non-zero, then this is the address of a function to call when
completing a word would normally display the list of possible matches.
This function is called in lieu of Readline displaying the list.
It takes three arguments:
@@ -4038,23 +4437,34 @@ Readline provides a convenience function, <CODE>rl_display_match_list</CODE>,
that takes care of doing the display to Readline's output stream. That
function may be called from this hook.
</DL>
-
-</P>
-
-
-<H3><A NAME="SEC48" HREF="readline.html#TOC48">A Short Completion Example</A></H3>
-
+</P><P>
+
+<A NAME="A Short Completion Example"></A>
+<HR SIZE="6">
+<A NAME="SEC48"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 2.6.4 A Short Completion Example </H3>
+<!--docid::SEC48::-->
<P>
+
Here is a small application demonstrating the use of the GNU Readline
library. It is called <CODE>fileman</CODE>, and the source code resides in
<TT>`examples/fileman.c'</TT>. This sample application provides
completion of command names, line editing features, and access to the
history list.
+</P><P>
-</P>
-
-<PRE>
-/* fileman.c -- A tiny application which demonstrates how to use the
+<TABLE><tr><td>&nbsp;</td><td class=smallexample><FONT SIZE=-1><pre>/* fileman.c -- A tiny application which demonstrates how to use the
GNU Readline library. This application interactively allows users
to manipulate files and their modes. */
@@ -4488,420 +4898,876 @@ valid_argument (caller, arg)
return (1);
}
-</PRE>
-
-
-
-<H1><A NAME="SEC49" HREF="readline.html#TOC49">Concept Index</A></H1>
-<P>
-Jump to:
-<A HREF="#cindex_c">c</A>
--
-<A HREF="#cindex_e">e</A>
--
-<A HREF="#cindex_i">i</A>
--
-<A HREF="#cindex_k">k</A>
--
-<A HREF="#cindex_n">n</A>
--
-<A HREF="#cindex_r">r</A>
--
-<A HREF="#cindex_v">v</A>
--
-<A HREF="#cindex_y">y</A>
-<P>
-<H2><A NAME="cindex_c">c</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX3">command editing</A>
-</DIR>
-<H2><A NAME="cindex_e">e</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX4">editing command lines</A>
-</DIR>
-<H2><A NAME="cindex_i">i</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX8">initialization file, readline</A>
-<LI><A HREF="readline.html#IDX1">interaction, readline</A>
-</DIR>
-<H2><A NAME="cindex_k">k</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX7">kill ring</A>
-<LI><A HREF="readline.html#IDX5">killing text</A>
-</DIR>
-<H2><A NAME="cindex_n">n</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX2">notation, readline</A>
-</DIR>
-<H2><A NAME="cindex_r">r</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX99">readline, function</A>
-</DIR>
-<H2><A NAME="cindex_v">v</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX9">variables, readline</A>
-</DIR>
-<H2><A NAME="cindex_y">y</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX6">yanking text</A>
-</DIR>
-
-</P>
-
-
-<H1><A NAME="SEC50" HREF="readline.html#TOC50">Function and Variable Index</A></H1>
-<P>
-Jump to:
-<A HREF="#findex__">_</A>
--
-<A HREF="#findex_a">a</A>
--
-<A HREF="#findex_b">b</A>
--
-<A HREF="#findex_c">c</A>
--
-<A HREF="#findex_d">d</A>
--
-<A HREF="#findex_e">e</A>
--
-<A HREF="#findex_f">f</A>
--
-<A HREF="#findex_h">h</A>
--
-<A HREF="#findex_i">i</A>
--
-<A HREF="#findex_k">k</A>
--
-<A HREF="#findex_m">m</A>
--
-<A HREF="#findex_n">n</A>
--
-<A HREF="#findex_o">o</A>
--
-<A HREF="#findex_p">p</A>
--
-<A HREF="#findex_q">q</A>
--
-<A HREF="#findex_r">r</A>
--
-<A HREF="#findex_s">s</A>
--
-<A HREF="#findex_t">t</A>
--
-<A HREF="#findex_u">u</A>
--
-<A HREF="#findex_v">v</A>
--
-<A HREF="#findex_y">y</A>
-<P>
-<H2><A NAME="findex__">_</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX200">_rl_digit_p</A>
-<LI><A HREF="readline.html#IDX203">_rl_digit_value</A>
-<LI><A HREF="readline.html#IDX199">_rl_lowercase_p</A>
-<LI><A HREF="readline.html#IDX202">_rl_to_lower</A>
-<LI><A HREF="readline.html#IDX201">_rl_to_upper</A>
-<LI><A HREF="readline.html#IDX198">_rl_uppercase_p</A>
-</DIR>
-<H2><A NAME="findex_a">a</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX84">abort (C-g)</A>
-<LI><A HREF="readline.html#IDX35">accept-line (Newline or Return)</A>
-</DIR>
-<H2><A NAME="findex_b">b</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX30">backward-char (C-b)</A>
-<LI><A HREF="readline.html#IDX49">backward-delete-char (Rubout)</A>
-<LI><A HREF="readline.html#IDX60">backward-kill-line (C-x Rubout)</A>
-<LI><A HREF="readline.html#IDX64">backward-kill-word (M-<KBD>DEL</KBD>)</A>
-<LI><A HREF="readline.html#IDX32">backward-word (M-b)</A>
-<LI><A HREF="readline.html#IDX38">beginning-of-history (M-&#38;#60;)</A>
-<LI><A HREF="readline.html#IDX27">beginning-of-line (C-a)</A>
-<LI><A HREF="readline.html#IDX10">bell-style</A>
-</DIR>
-<H2><A NAME="findex_c">c</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX82">call-last-kbd-macro (C-x e)</A>
-<LI><A HREF="readline.html#IDX58">capitalize-word (M-c)</A>
-<LI><A HREF="readline.html#IDX92">character-search (C-])</A>
-<LI><A HREF="readline.html#IDX93">character-search-backward (M-C-])</A>
-<LI><A HREF="readline.html#IDX33">clear-screen (C-l)</A>
-<LI><A HREF="readline.html#IDX11">comment-begin</A>
-<LI><A HREF="readline.html#IDX75">complete (<KBD>TAB</KBD>)</A>
-<LI><A HREF="readline.html#IDX12">completion-query-items</A>
-<LI><A HREF="readline.html#IDX13">convert-meta</A>
-<LI><A HREF="readline.html#IDX69">copy-backward-word ()</A>
-<LI><A HREF="readline.html#IDX70">copy-forward-word ()</A>
-<LI><A HREF="readline.html#IDX68">copy-region-as-kill ()</A>
-</DIR>
-<H2><A NAME="findex_d">d</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX48">delete-char (C-d)</A>
-<LI><A HREF="readline.html#IDX79">delete-char-or-list ()</A>
-<LI><A HREF="readline.html#IDX66">delete-horizontal-space ()</A>
-<LI><A HREF="readline.html#IDX73">digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, ... <KBD>M--</KBD>)</A>
-<LI><A HREF="readline.html#IDX14">disable-completion</A>
-<LI><A HREF="readline.html#IDX85">do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</A>
-<LI><A HREF="readline.html#IDX57">downcase-word (M-l)</A>
-<LI><A HREF="readline.html#IDX95">dump-functions ()</A>
-<LI><A HREF="readline.html#IDX97">dump-macros ()</A>
-<LI><A HREF="readline.html#IDX96">dump-variables ()</A>
-</DIR>
-<H2><A NAME="findex_e">e</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX15">editing-mode</A>
-<LI><A HREF="readline.html#IDX16">enable-keypad</A>
-<LI><A HREF="readline.html#IDX81">end-kbd-macro (C-x ))</A>
-<LI><A HREF="readline.html#IDX39">end-of-history (M-&#38;#62;)</A>
-<LI><A HREF="readline.html#IDX28">end-of-line (C-e)</A>
-<LI><A HREF="readline.html#IDX91">exchange-point-and-mark (C-x C-x)</A>
-<LI><A HREF="readline.html#IDX17">expand-tilde</A>
-</DIR>
-<H2><A NAME="findex_f">f</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX50">forward-backward-delete-char ()</A>
-<LI><A HREF="readline.html#IDX29">forward-char (C-f)</A>
-<LI><A HREF="readline.html#IDX41">forward-search-history (C-s)</A>
-<LI><A HREF="readline.html#IDX31">forward-word (M-f)</A>
-</DIR>
-<H2><A NAME="findex_h">h</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX45">history-search-backward ()</A>
-<LI><A HREF="readline.html#IDX44">history-search-forward ()</A>
-<LI><A HREF="readline.html#IDX18">horizontal-scroll-mode</A>
-</DIR>
-<H2><A NAME="findex_i">i</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX19">input-meta</A>
-<LI><A HREF="readline.html#IDX94">insert-comment (M-#)</A>
-<LI><A HREF="readline.html#IDX77">insert-completions (M-*)</A>
-<LI><A HREF="readline.html#IDX21">isearch-terminators</A>
-</DIR>
-<H2><A NAME="findex_k">k</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX22">keymap</A>
-<LI><A HREF="readline.html#IDX59">kill-line (C-k)</A>
-<LI><A HREF="readline.html#IDX67">kill-region ()</A>
-<LI><A HREF="readline.html#IDX62">kill-whole-line ()</A>
-<LI><A HREF="readline.html#IDX63">kill-word (M-d)</A>
-</DIR>
-<H2><A NAME="findex_m">m</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX23">mark-modified-lines</A>
-<LI><A HREF="readline.html#IDX78">menu-complete ()</A>
-<LI><A HREF="readline.html#IDX20">meta-flag</A>
-</DIR>
-<H2><A NAME="findex_n">n</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX37">next-history (C-n)</A>
-<LI><A HREF="readline.html#IDX43">non-incremental-forward-search-history (M-n)</A>
-<LI><A HREF="readline.html#IDX42">non-incremental-reverse-search-history (M-p)</A>
-</DIR>
-<H2><A NAME="findex_o">o</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX24">output-meta</A>
-</DIR>
-<H2><A NAME="findex_p">p</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX76">possible-completions (M-?)</A>
-<LI><A HREF="readline.html#IDX86">prefix-meta (<KBD>ESC</KBD>)</A>
-<LI><A HREF="readline.html#IDX36">previous-history (C-p)</A>
-</DIR>
-<H2><A NAME="findex_q">q</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX51">quoted-insert (C-q or C-v)</A>
-</DIR>
-<H2><A NAME="findex_r">r</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX83">re-read-init-file (C-x C-r)</A>
-<LI><A HREF="readline.html#IDX98">readline</A>
-<LI><A HREF="readline.html#IDX34">redraw-current-line ()</A>
-<LI><A HREF="readline.html#IDX40">reverse-search-history (C-r)</A>
-<LI><A HREF="readline.html#IDX88">revert-line (M-r)</A>
-<LI><A HREF="readline.html#IDX132">rl_add_defun</A>
-<LI><A HREF="readline.html#IDX158">rl_add_funmap_entry</A>
-<LI><A HREF="readline.html#IDX161">rl_add_undo</A>
-<LI><A HREF="readline.html#IDX196">rl_alphabetic</A>
-<LI><A HREF="readline.html#IDX110">rl_already_prompted</A>
-<LI><A HREF="readline.html#IDX232">rl_attempted_completion_function</A>
-<LI><A HREF="readline.html#IDX247">rl_attempted_completion_over</A>
-<LI><A HREF="readline.html#IDX238">rl_basic_quote_characters</A>
-<LI><A HREF="readline.html#IDX237">rl_basic_word_break_characters</A>
-<LI><A HREF="readline.html#IDX159">rl_begin_undo_group</A>
-<LI><A HREF="readline.html#IDX141">rl_bind_key</A>
-<LI><A HREF="readline.html#IDX142">rl_bind_key_in_map</A>
-<LI><A HREF="readline.html#IDX126">rl_binding_keymap</A>
-<LI><A HREF="readline.html#IDX209">rl_callback_handler_install</A>
-<LI><A HREF="readline.html#IDX211">rl_callback_handler_remove</A>
-<LI><A HREF="readline.html#IDX210">rl_callback_read_char</A>
-<LI><A HREF="readline.html#IDX212">rl_catch_signals</A>
-<LI><A HREF="readline.html#IDX213">rl_catch_sigwinch</A>
-<LI><A HREF="readline.html#IDX235">rl_char_is_quoted_p</A>
-<LI><A HREF="readline.html#IDX214">rl_cleanup_after_signal</A>
-<LI><A HREF="readline.html#IDX173">rl_clear_message</A>
-<LI><A HREF="readline.html#IDX187">rl_clear_pending_input</A>
-<LI><A HREF="readline.html#IDX221">rl_clear_signals</A>
-<LI><A HREF="readline.html#IDX222">rl_complete</A>, <A HREF="readline.html#IDX225">rl_complete</A>
-<LI><A HREF="readline.html#IDX224">rl_complete_internal</A>
-<LI><A HREF="readline.html#IDX240">rl_completer_quote_characters</A>
-<LI><A HREF="readline.html#IDX239">rl_completer_word_break_characters</A>
-<LI><A HREF="readline.html#IDX243">rl_completion_append_character</A>
-<LI><A HREF="readline.html#IDX252">rl_completion_display_matches_hook</A>
-<LI><A HREF="readline.html#IDX223">rl_completion_entry_function</A>, <A HREF="readline.html#IDX231">rl_completion_entry_function</A>
-<LI><A HREF="readline.html#IDX228">rl_completion_matches</A>
-<LI><A HREF="readline.html#IDX236">rl_completion_query_items</A>
-<LI><A HREF="readline.html#IDX248">rl_completion_type</A>
-<LI><A HREF="readline.html#IDX134">rl_copy_keymap</A>
-<LI><A HREF="readline.html#IDX180">rl_copy_text</A>
-<LI><A HREF="readline.html#IDX170">rl_crlf</A>
-<LI><A HREF="readline.html#IDX179">rl_delete_text</A>
-<LI><A HREF="readline.html#IDX124">rl_deprep_term_function</A>
-<LI><A HREF="readline.html#IDX190">rl_deprep_terminal</A>
-<LI><A HREF="readline.html#IDX195">rl_ding</A>
-<LI><A HREF="readline.html#IDX251">rl_directory_completion_hook</A>
-<LI><A HREF="readline.html#IDX136">rl_discard_keymap</A>
-<LI><A HREF="readline.html#IDX107">rl_dispatching</A>
-<LI><A HREF="readline.html#IDX197">rl_display_match_list</A>
-<LI><A HREF="readline.html#IDX163">rl_do_undo</A>
-<LI><A HREF="readline.html#IDX104">rl_done</A>
-<LI><A HREF="readline.html#IDX131">rl_editing_mode</A>
-<LI><A HREF="readline.html#IDX102">rl_end</A>
-<LI><A HREF="readline.html#IDX160">rl_end_undo_group</A>
-<LI><A HREF="readline.html#IDX108">rl_erase_empty_line</A>
-<LI><A HREF="readline.html#IDX120">rl_event_hook</A>
-<LI><A HREF="readline.html#IDX186">rl_execute_next</A>
-<LI><A HREF="readline.html#IDX125">rl_executing_keymap</A>
-<LI><A HREF="readline.html#IDX127">rl_executing_macro</A>
-<LI><A HREF="readline.html#IDX176">rl_expand_prompt</A>
-<LI><A HREF="readline.html#IDX129">rl_explicit_arg</A>
-<LI><A HREF="readline.html#IDX193">rl_extend_line_buffer</A>
-<LI><A HREF="readline.html#IDX245">rl_filename_completion_desired</A>
-<LI><A HREF="readline.html#IDX229">rl_filename_completion_function</A>
-<LI><A HREF="readline.html#IDX234">rl_filename_dequoting_function</A>
-<LI><A HREF="readline.html#IDX241">rl_filename_quote_characters</A>
-<LI><A HREF="readline.html#IDX246">rl_filename_quoting_desired</A>
-<LI><A HREF="readline.html#IDX233">rl_filename_quoting_function</A>
-<LI><A HREF="readline.html#IDX166">rl_forced_update_display</A>
-<LI><A HREF="readline.html#IDX215">rl_free_line_state</A>
-<LI><A HREF="readline.html#IDX162">rl_free_undo_list</A>
-<LI><A HREF="readline.html#IDX155">rl_function_dumper</A>
-<LI><A HREF="readline.html#IDX152">rl_function_of_keyseq</A>
-<LI><A HREF="readline.html#IDX157">rl_funmap_names</A>
-<LI><A HREF="readline.html#IDX148">rl_generic_bind</A>
-<LI><A HREF="readline.html#IDX137">rl_get_keymap</A>
-<LI><A HREF="readline.html#IDX139">rl_get_keymap_by_name</A>
-<LI><A HREF="readline.html#IDX140">rl_get_keymap_name</A>
-<LI><A HREF="readline.html#IDX219">rl_get_screen_size</A>
-<LI><A HREF="readline.html#IDX184">rl_getc</A>
-<LI><A HREF="readline.html#IDX121">rl_getc_function</A>
-<LI><A HREF="readline.html#IDX112">rl_gnu_readline_p</A>
-<LI><A HREF="readline.html#IDX244">rl_ignore_completion_duplicates</A>
-<LI><A HREF="readline.html#IDX250">rl_ignore_some_completions_function</A>
-<LI><A HREF="readline.html#IDX249">rl_inhibit_completion</A>
-<LI><A HREF="readline.html#IDX194">rl_initialize</A>
-<LI><A HREF="readline.html#IDX227">rl_insert_completions</A>
-<LI><A HREF="readline.html#IDX178">rl_insert_text</A>
-<LI><A HREF="readline.html#IDX115">rl_instream</A>
-<LI><A HREF="readline.html#IDX153">rl_invoking_keyseqs</A>
-<LI><A HREF="readline.html#IDX154">rl_invoking_keyseqs_in_map</A>
-<LI><A HREF="readline.html#IDX181">rl_kill_text</A>
-<LI><A HREF="readline.html#IDX117">rl_last_func</A>
-<LI><A HREF="readline.html#IDX111">rl_library_version</A>
-<LI><A HREF="readline.html#IDX100">rl_line_buffer</A>
-<LI><A HREF="readline.html#IDX156">rl_list_funmap_names</A>
-<LI><A HREF="readline.html#IDX204">rl_macro_bind</A>
-<LI><A HREF="readline.html#IDX205">rl_macro_dumper</A>
-<LI><A HREF="readline.html#IDX133">rl_make_bare_keymap</A>
-<LI><A HREF="readline.html#IDX135">rl_make_keymap</A>
-<LI><A HREF="readline.html#IDX103">rl_mark</A>
-<LI><A HREF="readline.html#IDX172">rl_message</A>
-<LI><A HREF="readline.html#IDX164">rl_modifying</A>
-<LI><A HREF="readline.html#IDX151">rl_named_function</A>
-<LI><A HREF="readline.html#IDX105">rl_num_chars_to_read</A>
-<LI><A HREF="readline.html#IDX130">rl_numeric_arg</A>
-<LI><A HREF="readline.html#IDX167">rl_on_new_line</A>
-<LI><A HREF="readline.html#IDX168">rl_on_new_line_with_prompt</A>
-<LI><A HREF="readline.html#IDX116">rl_outstream</A>
-<LI><A HREF="readline.html#IDX149">rl_parse_and_bind</A>
-<LI><A HREF="readline.html#IDX106">rl_pending_input</A>
-<LI><A HREF="readline.html#IDX101">rl_point</A>
-<LI><A HREF="readline.html#IDX226">rl_possible_completions</A>
-<LI><A HREF="readline.html#IDX119">rl_pre_input_hook</A>
-<LI><A HREF="readline.html#IDX123">rl_prep_term_function</A>
-<LI><A HREF="readline.html#IDX189">rl_prep_terminal</A>
-<LI><A HREF="readline.html#IDX109">rl_prompt</A>
-<LI><A HREF="readline.html#IDX182">rl_push_macro_input</A>
-<LI><A HREF="readline.html#IDX150">rl_read_init_file</A>
-<LI><A HREF="readline.html#IDX183">rl_read_key</A>
-<LI><A HREF="readline.html#IDX114">rl_readline_name</A>
-<LI><A HREF="readline.html#IDX128">rl_readline_state</A>
-<LI><A HREF="readline.html#IDX165">rl_redisplay</A>
-<LI><A HREF="readline.html#IDX122">rl_redisplay_function</A>
-<LI><A HREF="readline.html#IDX216">rl_reset_after_signal</A>
-<LI><A HREF="readline.html#IDX169">rl_reset_line_state</A>
-<LI><A HREF="readline.html#IDX192">rl_reset_terminal</A>
-<LI><A HREF="readline.html#IDX217">rl_resize_terminal</A>
-<LI><A HREF="readline.html#IDX175">rl_restore_prompt</A>
-<LI><A HREF="readline.html#IDX174">rl_save_prompt</A>
-<LI><A HREF="readline.html#IDX147">rl_set_key</A>
-<LI><A HREF="readline.html#IDX188">rl_set_keyboard_input_timeout</A>
-<LI><A HREF="readline.html#IDX138">rl_set_keymap</A>
-<LI><A HREF="readline.html#IDX208">rl_set_paren_blink_timeout</A>
-<LI><A HREF="readline.html#IDX177">rl_set_prompt</A>
-<LI><A HREF="readline.html#IDX218">rl_set_screen_size</A>
-<LI><A HREF="readline.html#IDX220">rl_set_signals</A>
-<LI><A HREF="readline.html#IDX171">rl_show_char</A>
-<LI><A HREF="readline.html#IDX242">rl_special_prefixes</A>
-<LI><A HREF="readline.html#IDX118">rl_startup_hook</A>
-<LI><A HREF="readline.html#IDX185">rl_stuff_char</A>
-<LI><A HREF="readline.html#IDX113">rl_terminal_name</A>
-<LI><A HREF="readline.html#IDX191">rl_tty_set_default_bindings</A>
-<LI><A HREF="readline.html#IDX146">rl_unbind_command_in_map</A>
-<LI><A HREF="readline.html#IDX145">rl_unbind_function_in_map</A>
-<LI><A HREF="readline.html#IDX143">rl_unbind_key</A>
-<LI><A HREF="readline.html#IDX144">rl_unbind_key_in_map</A>
-<LI><A HREF="readline.html#IDX230">rl_username_completion_function</A>
-<LI><A HREF="readline.html#IDX206">rl_variable_bind</A>
-<LI><A HREF="readline.html#IDX207">rl_variable_dumper</A>
-</DIR>
-<H2><A NAME="findex_s">s</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX53">self-insert (a, b, A, 1, !, ...)</A>
-<LI><A HREF="readline.html#IDX90">set-mark (C-@)</A>
-<LI><A HREF="readline.html#IDX25">show-all-if-ambiguous</A>
-<LI><A HREF="readline.html#IDX80">start-kbd-macro (C-x ()</A>
-</DIR>
-<H2><A NAME="findex_t">t</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX52">tab-insert (M-<KBD>TAB</KBD>)</A>
-<LI><A HREF="readline.html#IDX89">tilde-expand (M-~)</A>
-<LI><A HREF="readline.html#IDX54">transpose-chars (C-t)</A>
-<LI><A HREF="readline.html#IDX55">transpose-words (M-t)</A>
-</DIR>
-<H2><A NAME="findex_u">u</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX87">undo (C-_ or C-x C-u)</A>
-<LI><A HREF="readline.html#IDX74">universal-argument ()</A>
-<LI><A HREF="readline.html#IDX61">unix-line-discard (C-u)</A>
-<LI><A HREF="readline.html#IDX65">unix-word-rubout (C-w)</A>
-<LI><A HREF="readline.html#IDX56">upcase-word (M-u)</A>
-</DIR>
-<H2><A NAME="findex_v">v</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX26">visible-stats</A>
-</DIR>
-<H2><A NAME="findex_y">y</A></H2>
-<DIR>
-<LI><A HREF="readline.html#IDX71">yank (C-y)</A>
-<LI><A HREF="readline.html#IDX47">yank-last-arg (M-. or M-_)</A>
-<LI><A HREF="readline.html#IDX46">yank-nth-arg (M-C-y)</A>
-<LI><A HREF="readline.html#IDX72">yank-pop (M-y)</A>
-</DIR>
-
-</P>
-<P><HR><P>
-This document was generated on 16 April 2001 using the
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
-translator version 1.52.</P>
+</FONT></pre></td></tr></table></P><P>
+
+<A NAME="Concept Index"></A>
+<HR SIZE="6">
+<A NAME="SEC49"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC50"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> Concept Index </H1>
+<!--docid::SEC49::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp;
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<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="cp_C"></A>C</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">command editing</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">editing command lines</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</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="readline.html#SEC9">1.3 Readline Init File</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC3">interaction, readline</A></TD><TD valign=top><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_K"></A>K</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX3">kill ring</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX1">killing text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_N"></A>N</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">notation, readline</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167">readline, function</A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX4">variables, readline</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="cp_Y"></A>Y</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX2">yanking text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp;
+<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp;
+</td></tr></table><br><P>
+
+<A NAME="Function and Variable Index"></A>
+<HR SIZE="6">
+<A NAME="SEC50"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1> Function and Variable Index </H1>
+<!--docid::SEC50::-->
+<table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A>
+ &nbsp;
+<BR>
+<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp;
+</td></tr></table><br><P></P>
+<TABLE border=0>
+<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#IDX269"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="readline.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#IDX138"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX40"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX41"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_B"></A>B</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX30"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX31"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX68"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX69"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX90"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX91"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX98"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX99"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX34"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX35"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX46"><CODE>beginning-of-history (M-&#38;#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX47"><CODE>beginning-of-history (M-&#38;#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX24"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX25"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX5">bell-style</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_C"></A>C</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX86"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX87"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX36"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX37"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX6">comment-begin</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX7">completion-query-items</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX8">convert-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX106"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_D"></A>D</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX66"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX67"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX102"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX103"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, &#60;small&#62;...&#60;/small&#62; <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, &#60;small&#62;...&#60;/small&#62; <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX9">disable-completion</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX84"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX85"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_E"></A>E</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX10">editing-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX11">enable-keypad</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX48"><CODE>end-of-history (M-&#38;#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX49"><CODE>end-of-history (M-&#38;#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX26"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX27"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX12">expand-tilde</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_F"></A>F</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX70"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX71"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX28"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX29"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX52"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX53"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX32"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX33"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_H"></A>H</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX13">history-preserve-point</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX60"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX61"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX58"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX59"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX14">horizontal-scroll-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_I"></A>I</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX15">input-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX17">isearch-terminators</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_K"></A>K</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX18">keymap</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX88"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX89"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX104"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX105"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX94"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX95"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX96"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX97"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_M"></A>M</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX19">mark-modified-lines</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX20">match-hidden-files</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX16">meta-flag</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_N"></A>N</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX44"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX45"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX56"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX57"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX54"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX55"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_O"></A>O</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX21">output-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_P"></A>P</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX42"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX43"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_Q"></A>Q</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX72"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX73"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_R"></A>R</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX38"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX39"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX50"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX51"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178">rl_already_prompted</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_binding_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282">rl_catch_signals</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313">rl_completion_append_character</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306">rl_completion_query_items</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318">rl_completion_type</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_deprep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175">rl_dispatching</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172">rl_done</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_editing_mode</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170">rl_end</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176">rl_erase_empty_line</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_event_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_executing_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_executing_macro</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_explicit_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_getc_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319">rl_inhibit_completion</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_instream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_last_func</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179">rl_library_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168">rl_line_buffer</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171">rl_mark</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_numeric_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_outstream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174">rl_pending_input</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169">rl_point</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_pre_input_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_prep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177">rl_prompt</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_readline_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_readline_state</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_readline_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_redisplay_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312">rl_special_prefixes</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_startup_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_terminal_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="readline.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#IDX76"><CODE>self-insert (a, b, A, 1, !, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX77"><CODE>self-insert (a, b, A, 1, !, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX22">show-all-if-ambiguous</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_T"></A>T</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX74"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX75"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX78"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX79"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX80"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX81"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_U"></A>U</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX92"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX93"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX100"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX101"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX82"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX83"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_V"></A>V</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX23">visible-stats</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+<TR><TH><A NAME="fn_Y"></A>Y</TH><TD></TD><TD></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX64"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX65"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX62"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX63"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+</TABLE><P></P><table><tr><th valign=top>Jump to: &nbsp; </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A>
+ &nbsp;
+<BR>
+<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A>
+ &nbsp;
+<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A>
+ &nbsp;
+</td></tr></table><br><P>
+
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A>
+<BR>
+<A NAME="TOC3" HREF="readline.html#SEC3">1.2 Readline Interaction</A>
+<BR>
+<UL>
+<A NAME="TOC4" HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A>
+<BR>
+<A NAME="TOC5" HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A>
+<BR>
+<A NAME="TOC6" HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A>
+<BR>
+<A NAME="TOC7" HREF="readline.html#SEC7">1.2.4 Readline Arguments</A>
+<BR>
+<A NAME="TOC8" HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A>
+<BR>
+</UL>
+<A NAME="TOC9" HREF="readline.html#SEC9">1.3 Readline Init File</A>
+<BR>
+<UL>
+<A NAME="TOC10" HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>
+<BR>
+<A NAME="TOC11" HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>
+<BR>
+<A NAME="TOC12" HREF="readline.html#SEC12">1.3.3 Sample Init File</A>
+<BR>
+</UL>
+<A NAME="TOC13" HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A>
+<BR>
+<UL>
+<A NAME="TOC14" HREF="readline.html#SEC14">1.4.1 Commands For Moving</A>
+<BR>
+<A NAME="TOC15" HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A>
+<BR>
+<A NAME="TOC16" HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A>
+<BR>
+<A NAME="TOC17" HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A>
+<BR>
+<A NAME="TOC18" HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A>
+<BR>
+<A NAME="TOC19" HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A>
+<BR>
+<A NAME="TOC20" HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A>
+<BR>
+<A NAME="TOC21" HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A>
+<BR>
+</UL>
+<A NAME="TOC22" HREF="readline.html#SEC22">1.5 Readline vi Mode</A>
+<BR>
+</UL>
+<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A>
+<BR>
+<UL>
+<A NAME="TOC24" HREF="readline.html#SEC24">2.1 Basic Behavior</A>
+<BR>
+<A NAME="TOC25" HREF="readline.html#SEC25">2.2 Custom Functions</A>
+<BR>
+<UL>
+<A NAME="TOC26" HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A>
+<BR>
+<A NAME="TOC27" HREF="readline.html#SEC27">2.2.2 Writing a New Function</A>
+<BR>
+</UL>
+<A NAME="TOC28" HREF="readline.html#SEC28">2.3 Readline Variables</A>
+<BR>
+<A NAME="TOC29" HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A>
+<BR>
+<UL>
+<A NAME="TOC30" HREF="readline.html#SEC30">2.4.1 Naming a Function</A>
+<BR>
+<A NAME="TOC31" HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>
+<BR>
+<A NAME="TOC32" HREF="readline.html#SEC32">2.4.3 Binding Keys</A>
+<BR>
+<A NAME="TOC33" HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A>
+<BR>
+<A NAME="TOC34" HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A>
+<BR>
+<A NAME="TOC35" HREF="readline.html#SEC35">2.4.6 Redisplay</A>
+<BR>
+<A NAME="TOC36" HREF="readline.html#SEC36">2.4.7 Modifying Text</A>
+<BR>
+<A NAME="TOC37" HREF="readline.html#SEC37">2.4.8 Character Input</A>
+<BR>
+<A NAME="TOC38" HREF="readline.html#SEC38">2.4.9 Terminal Management</A>
+<BR>
+<A NAME="TOC39" HREF="readline.html#SEC39">2.4.10 Utility Functions</A>
+<BR>
+<A NAME="TOC40" HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A>
+<BR>
+<A NAME="TOC41" HREF="readline.html#SEC41">2.4.12 Alternate Interface</A>
+<BR>
+<A NAME="TOC42" HREF="readline.html#SEC42">2.4.13 A Readline Example</A>
+<BR>
+</UL>
+<A NAME="TOC43" HREF="readline.html#SEC43">2.5 Readline Signal Handling</A>
+<BR>
+<A NAME="TOC44" HREF="readline.html#SEC44">2.6 Custom Completers</A>
+<BR>
+<UL>
+<A NAME="TOC45" HREF="readline.html#SEC45">2.6.1 How Completing Works</A>
+<BR>
+<A NAME="TOC46" HREF="readline.html#SEC46">2.6.2 Completion Functions</A>
+<BR>
+<A NAME="TOC47" HREF="readline.html#SEC47">2.6.3 Completion Variables</A>
+<BR>
+<A NAME="TOC48" HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A>
+<BR>
+</UL>
+</UL>
+<A NAME="TOC49" HREF="readline.html#SEC49">Concept Index</A>
+<BR>
+<A NAME="TOC50" HREF="readline.html#SEC50">Function and Variable Index</A>
+<BR>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A>
+<BR>
+<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A>
+<BR>
+<A NAME="TOC49" HREF="readline.html#SEC49">Concept Index</A>
+<BR>
+<A NAME="TOC50" HREF="readline.html#SEC50">Function and Variable Index</A>
+<BR>
+
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD>
+<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, 9 2001</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt; ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated
+by <I>Chet Ramey</I> on <I>October, 9 2001</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+
</BODY>
</HTML>
diff --git a/doc/readline.info b/doc/readline.info
index ad721c5..8853f1c 100644
--- a/doc/readline.info
+++ b/doc/readline.info
@@ -236,7 +236,7 @@ available to be yanked back later, when you are typing another line.
as those used by `M-f'.
`M-<DEL>'
- Kill from the cursor the start of the previous word, or, if between
+ Kill from the cursor the start of the current word, or, if between
words, to the start of the previous word. Word boundaries are the
same as those used by `M-b'.
@@ -309,6 +309,10 @@ the search and accept the line, thereby executing the command from the
history list. A movement command will terminate the search, make the
last line found the current line, and begin editing.
+ Readline remembers the last incremental search string. If two
+`C-r's are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+
Non-incremental searches read the entire search string before
starting to search for matching history lines. The search string may be
typed by the user or be part of the contents of the current line.
@@ -423,6 +427,10 @@ Variable Settings
If set to `on', tilde expansion is performed when Readline
attempts word completion. The default is `off'.
+ If set to `on', the history code attempts to place point at
+ the same location on each history line retrived with
+ `previous-history' or `next-history'.
+
`horizontal-scroll-mode'
This variable can be set to either `on' or `off'. Setting it
to `on' means that the text of the lines being edited will
@@ -462,6 +470,13 @@ Variable Settings
asterisk (`*') at the start of history lines which have been
modified. This variable is `off' by default.
+ `match-hidden-files'
+ This variable, when set to `on', causes Readline to match
+ files whose names begin with a `.' (hidden files) when
+ performing filename completion, unless the leading `.' is
+ supplied by the user in the filename to be completed. This
+ variable is `on' by default.
+
`output-meta'
If set to `on', Readline will display characters with the
eighth bit set directly rather than as a meta-prefixed escape
@@ -582,13 +597,13 @@ Key Bindings
vertical tab
`\NNN'
- the character whose ASCII code is the octal value NNN (one to
- three digits)
-
- `\xNNN'
- the character whose ASCII code is the hexadecimal value NNN
+ the eight-bit character whose value is the octal value NNN
(one to three digits)
+ `\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
+
When entering the text of a macro, single or double quotes must be
used to indicate a macro definition. Unquoted text is assumed to
be a function name. In the macro body, the backslash escapes
@@ -932,7 +947,8 @@ Commands For Changing Text
`transpose-words (M-t)'
Drag the word before point past the word after point, moving point
- past that word as well.
+ past that word as well. If the insertion point is at the end of
+ the line, this transposes the last two words on the line.
`upcase-word (M-u)'
Uppercase the current (or following) word. With a negative
@@ -1332,6 +1348,15 @@ uses Readline's features. Since some of the definitions in
`readline.h' use the `stdio' library, the file `<stdio.h>' should be
included before `readline.h'.
+ `readline.h' defines a C preprocessor variable that should be
+treated as an integer, `RL_READLINE_VERSION', which may be used to
+conditionally compile application code depending on the installed
+Readline version. The value is a hexadecimal encoding of the major and
+minor version numbers of the library, of the form 0xMMMM. MM is the
+two-digit major version number; MM is the two-digit minor version
+number. For Readline 4.2, for example, the value of
+`RL_READLINE_VERSION' would be `0x0402'.
+
* Menu:
* Readline Typedefs:: C declarations to make code readable.
@@ -1498,6 +1523,13 @@ Readline Variables
- Variable: const char * rl_library_version
The version number of this revision of the library.
+ - Variable: int rl_readline_version
+ An integer encoding the current version of the library. The
+ encoding is of the form 0xMMMM, where MM is the two-digit major
+ version number, and MM is the two-digit minor version number. For
+ example, for Readline-4.2, `rl_readline_version' would have the
+ value 0x0402.
+
- Variable: int rl_gnu_readline_p
Always set to 1, denoting that this is GNU readline rather than
some emulation.
@@ -2195,6 +2227,14 @@ Miscellaneous Functions
showing a balancing character when `blink-matching-paren' has been
enabled.
+ - Function: char * rl_get_termcap (const char *cap)
+ Retrieve the string value of the termcap capability CAP. Readline
+ fetches the termcap entry for the current terminal name and uses
+ those capabilities to move around the screen line and perform other
+ terminal-specific operations, like erasing a line. Readline does
+ not use all of a terminal's capabilities, and this function will
+ return values for only those capabilities Readline uses.
+

File: readline.info, Node: Alternate Interface, Next: A Readline Example, Prev: Miscellaneous Functions, Up: Readline Convenience Functions
@@ -3250,6 +3290,7 @@ Function and Variable Index
* forward-char (C-f): Commands For Moving.
* forward-search-history (C-s): Commands For History.
* forward-word (M-f): Commands For Moving.
+* history-preserve-point: Readline Init File Syntax.
* history-search-backward (): Commands For History.
* history-search-forward (): Commands For History.
* horizontal-scroll-mode: Readline Init File Syntax.
@@ -3263,6 +3304,7 @@ Function and Variable Index
* kill-whole-line (): Commands For Killing.
* kill-word (M-d): Commands For Killing.
* mark-modified-lines: Readline Init File Syntax.
+* match-hidden-files: Readline Init File Syntax.
* menu-complete (): Commands For Completion.
* meta-flag: Readline Init File Syntax.
* next-history (C-n): Commands For History.
@@ -3354,6 +3396,7 @@ Function and Variable Index
* rl_get_keymap_by_name: Keymaps.
* rl_get_keymap_name: Keymaps.
* rl_get_screen_size: Readline Signal Handling.
+* rl_get_termcap: Miscellaneous Functions.
* rl_getc: Character Input.
* rl_getc_function: Readline Variables.
* rl_gnu_readline_p: Readline Variables.
@@ -3397,6 +3440,7 @@ Function and Variable Index
* rl_read_key: Character Input.
* rl_readline_name: Readline Variables.
* rl_readline_state: Readline Variables.
+* rl_readline_version: Readline Variables.
* rl_redisplay: Redisplay.
* rl_redisplay_function: Readline Variables.
* rl_reset_after_signal: Readline Signal Handling.
@@ -3452,49 +3496,49 @@ Node: Readline Interaction4032
Node: Readline Bare Essentials5219
Node: Readline Movement Commands7000
Node: Readline Killing Commands7957
-Node: Readline Arguments9867
-Node: Searching10903
-Node: Readline Init File12859
-Node: Readline Init File Syntax13920
-Node: Conditional Init Constructs23842
-Node: Sample Init File26367
-Node: Bindable Readline Commands29537
-Node: Commands For Moving30587
-Node: Commands For History31436
-Node: Commands For Text34294
-Node: Commands For Killing36281
-Node: Numeric Arguments38232
-Node: Commands For Completion39360
-Node: Keyboard Macros40892
-Node: Miscellaneous Commands41451
-Node: Readline vi Mode44244
-Node: Programming with GNU Readline46062
-Node: Basic Behavior47030
-Node: Custom Functions50443
-Node: Readline Typedefs51421
-Node: Function Writing53050
-Node: Readline Variables54134
-Node: Readline Convenience Functions63133
-Node: Function Naming64115
-Node: Keymaps65367
-Node: Binding Keys67123
-Node: Associating Function Names and Bindings70049
-Node: Allowing Undoing72294
-Node: Redisplay74829
-Node: Modifying Text77900
-Node: Character Input79033
-Node: Terminal Management80678
-Node: Utility Functions81853
-Node: Miscellaneous Functions83920
-Node: Alternate Interface85512
-Node: A Readline Example87135
-Node: Readline Signal Handling89072
-Node: Custom Completers94675
-Node: How Completing Works95390
-Node: Completion Functions98388
-Node: Completion Variables101392
-Node: A Short Completion Example110763
-Node: Concept Index123288
-Node: Function and Variable Index124110
+Node: Readline Arguments9866
+Node: Searching10902
+Node: Readline Init File13045
+Node: Readline Init File Syntax14106
+Node: Conditional Init Constructs24556
+Node: Sample Init File27081
+Node: Bindable Readline Commands30251
+Node: Commands For Moving31301
+Node: Commands For History32150
+Node: Commands For Text35008
+Node: Commands For Killing37099
+Node: Numeric Arguments39050
+Node: Commands For Completion40178
+Node: Keyboard Macros41710
+Node: Miscellaneous Commands42269
+Node: Readline vi Mode45062
+Node: Programming with GNU Readline46880
+Node: Basic Behavior47848
+Node: Custom Functions51261
+Node: Readline Typedefs52739
+Node: Function Writing54368
+Node: Readline Variables55452
+Node: Readline Convenience Functions64784
+Node: Function Naming65766
+Node: Keymaps67018
+Node: Binding Keys68774
+Node: Associating Function Names and Bindings71700
+Node: Allowing Undoing73945
+Node: Redisplay76480
+Node: Modifying Text79551
+Node: Character Input80684
+Node: Terminal Management82329
+Node: Utility Functions83504
+Node: Miscellaneous Functions85571
+Node: Alternate Interface87635
+Node: A Readline Example89258
+Node: Readline Signal Handling91195
+Node: Custom Completers96798
+Node: How Completing Works97513
+Node: Completion Functions100511
+Node: Completion Variables103515
+Node: A Short Completion Example112886
+Node: Concept Index125411
+Node: Function and Variable Index126233

End Tag Table
diff --git a/doc/readline.ps b/doc/readline.ps
index 9d7e875..00827ed 100644
--- a/doc/readline.ps
+++ b/doc/readline.ps
@@ -1,14 +1,14 @@
%!PS-Adobe-2.0
%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
%%Title: readline.dvi
-%%Pages: 62
+%%Pages: 64
%%PageOrder: Ascend
%%BoundingBox: 0 0 612 792
%%EndComments
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 300 -t letter -o readline.ps readline.dvi
%DVIPSParameters: dpi=300, compressed
-%DVIPSSource: TeX output 2001.04.16:1105
+%DVIPSSource: TeX output 2001.10.09:1508
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -389,8 +389,8 @@ E02601F8635BA29038FCE3F1000001C15B15F990267F80FBC7FCA215FF90383F007EA201
5AA26DC7FCA21306A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720
>I E
%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fk cmsl10 10.95 46
-/Fk 46 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380
+%DVIPSBitmapFont: Fk cmsl10 10.95 48
+/Fk 48 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380
70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12
D<EB03F4EB1C1CEB383C137013E01438EA01C0A538038070387FFFF038038070A4380700
E0A6380E01C0A6381C0380001E13C038FF9FF016207E9F19>I<EAFFF0A20C027E8A0F>
@@ -409,68 +409,72 @@ D<13181338EA01F8EA0E701200A513E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B
23>I<0007B512FC3900F8007C0178131C150C5B1504A414043901E00800A31438EBFFF8
EBE0383803C010A4EC00081510485AA21520A2156015C0380F00011407B612801E1F7E9E
1F>I<0007B512F83900F800780178133815185B1508A53901E00800A314181438EBFFF8
-3803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E>I<3807FF803800F80013
-78A25BA6485AA6485AA6485AA648C7FC7FEAFFF0111F7E9E10>73
-D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C1460
-14F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381380F
-00016D487E39FFF00FFE231F7E9E23>75 D<3807FFE0D800FCC7FC1378A25BA6485AA648
-5AA41580EC0100EA0780A25C14021406140E380F001E147CB512FC191F7E9E1C>I<D807
-F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83C0D801035BEB01E0
-A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A21401000C5C001E1300
-B47E221F7E9E22>78 D<EB01FCEB0E0790383801C090387000E0484813F048481378485A
-153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01F0007C14E01403
-003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F801F217C9F23>I<
-0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC01E0EC03C0EC0F
-00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807FFFE3900F80780
-90387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EBFFF03803C038
-80141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078CC7EA01F020207E
-9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C00061304120EA3000F1300A2
-7FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA200401338A31430006013
-70146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512F0383C07800030
-1430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383FFFE01C1F7A9E21
->I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A6485BA600705BA25C
-A200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFFF07FF81FF03B1F
-000FC007C0001E903907800380001FED01006C1502140F5EEC17C002135B142301805C00
-0713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C415F2EBC80015F4
-EA01F015F85B5D5B15605B000014402C207A9E2F>87 D<EA07F8EA0C0CEA1E061307121C
-1200A313FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F87801414
-7D9317>97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14
-F0A5387001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA03
-83380E0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D
-9314>I<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801
-C0127812F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13
-F8EA070EEA0E07381C038012381278127012F0B5FC00F0C7FCA25AA46C5AEA7002EA3004
-EA1C18EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA
-3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801
-C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0F
-FF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<
-13E0120712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E
-01C0A6381C0380001E13C038FF8FF014207E9F19>I<EA01C0EA03E0A213C0EA0180C7FC
-A6EA0380121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>I<13E0120712
-011200A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338137C131C120E
-7FA2130F7F1480EA1C03381E07C038FF8FF016207E9F18>107 D<13E0120712011200A2
-EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>I<390387C07C391F98
-61863907A072073903C03403EB80380007EB7807EB0070A5000EEBE00EA64848485A001E
-EBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A03803C0601380000713
-E01300A5380E01C0A6381C0380001E13C038FF8FF014147E9319>I<13FCEA0387380E01
-80381C00C04813E0A24813F012F0A438E001E0A214C0130300F0138038700700EA380E6C
-5AEA07E014147D9317>I<EBE3E03807EC383801F01C6C487E140F48487E1580A5390380
-0F00A2140E141E141C5C38074070EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D80
-9319>I<EBFC2038038260EA0702381E01E0123C003813C0127812F0A438E00380A212F0
-A21307127038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA03
-8E381FB380EA07C71203EB8300EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<
-EA01F9EA0607EA080312181301EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA400713
-03A212601306EAF004EAC818EA87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8
-EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07
-EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F8011147B9319>I<38FF83F838
-1E00E0001C13C01480121E380E01005B13025B12075BA25BEA039013A013E05B5B120190
-C7FC15147C9318>I<39FF9FE1FC393C078070391C030060148015401580EA0E0790380D
-81001309EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C485A1460000213401E14
-7C9321>I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C
-132E134E1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>I<390F
-F83F803901E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A13
-3E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I
-E
+3803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E>I<3A07FF83FFC03A00F8
+007C000178133CA2495BA648485BA490B5FCEBE0004848485AA64848485AA64848485A01
+807F39FFF07FF8221F7E9E22>72 D<3807FF803800F8001378A25BA6485AA6485AA6485A
+A648C7FC7FEAFFF0111F7E9E10>I<3A07FF803FE03A00F8001F000178130C5D4913205D
+5D4AC7FC1402140848485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E
+141F48487E81140781140381380F00016D487E39FFF00FFE231F7E9E23>75
+D<3807FFE0D800FCC7FC1378A25BA6485AA6485AA41580EC0100EA0780A25C1402140614
+0E380F001E147CB512FC191F7E9E1C>I<D807F8EC7FE00000ED7C00017814BCA2019C49
+5AA21502A2018E13041508D8010E5C1510A26D1320A215400002EC41E09038038081EC81
+01A21482A23A0401C403C0A214C8A2EB00F0000C13E04B5A001E01C07FD8FFC0EB7FFC2B
+1F7E9E2A>I<D807F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83
+C0D801035BEB01E0A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A214
+01000C5C001E1300B47E221F7E9E22>I<EB01FCEB0E0790383801C090387000E0484813
+F048481378485A153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01
+F0007C14E01403003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F80
+1F217C9F23>I<0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC
+01E0EC03C0EC0F00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807
+FFFE3900F8078090387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00
+EBFFF03803C03880141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078C
+C7EA01F020207E9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C0006130412
+0EA3000F1300A27FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA2004013
+38A3143000601370146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512
+F0383C078000301430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383F
+FFE01C1F7A9E21>I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A648
+5BA600705BA25CA200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFF
+F07FF81FF03B1F000FC007C0001E903907800380001FED01006C1502140F5EEC17C00213
+5B142301805C000713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C4
+15F2EBC80015F4EA01F015F85B5D5B15605B000014402C207A9E2F>87
+D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A313
+1EEB2E2038784F40381F878014147D9317>97 D<1207123F120F7EA2120EA65A137CEA1D
+83381E0180001C13C0EB00E05A14F0A5387001E0A214C013031480EB0700EAE80EEACC38
+EA83E014207B9F19>I<13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5B
+EA70026C5AEA1C18EA07E011147D9314>I<1438EB01F8EB00781438A21470A614E013FC
+EA0382EA0601121CEA3C00383801C0127812F0A438E00380A412F0EA700738380F00381C
+37803807C7E015207D9F19>I<13F8EA070EEA0E07381C038012381278127012F0B5FC00
+F0C7FCA25AA46C5AEA7002EA3004EA1C18EA07E011147D9314>I<EB07C0EB1C60EB30F0
+1360EBE0E0EBC0001201A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F
+9F0E>I<140EEB3E11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB87
+00EA04FC48C7FCA21218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0
+381C0700EA07FC181F809417>I<13E0120712011200A2485AA6485AEB8F80EB90E013A0
+EBC0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014207E9F19>I<
+EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6120EA65A121EEA
+FF800B1F7F9E0C>I<13E0120712011200A2485AA6485AEB81FCEB80F014C0EB81801400
+EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07C038FF8FF016207E9F
+18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B
+207F9F0C>I<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB00
+70A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F
+90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014
+147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0
+130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807EC383801F01C
+6C487E140F48487E1580A53903800F00A2140E141E141C5C38074070EB61C0011FC7FC90
+C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E01E0123C0038
+13C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA0007A3130EA4
+131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120E
+A65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802EA3C00121F13
+F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>I<
+1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C
+9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F
+9F8011147B9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075B
+A25BEA039013A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C03
+0060148015401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB
+80F0A26C485A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0
+C0EBE180EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03
+E038FE07FC18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B14301420
+5C13705CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8
+FC12E61278191D809318>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fl cmti10 10.95 20
/Fl 20 122 df<EC3FE0ECE010903801803801031378A290380700301500A3130EA390B5
@@ -705,8 +709,8 @@ A328207F9F2B>I E
306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0
D900FEC7FC272B7DA02E>13 D E
%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fs cmbx12 14.4 54
-/Fs 54 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
+%DVIPSBitmapFont: Fs cmbx12 14.4 55
+/Fs 55 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612
0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46
D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49
D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2
@@ -722,67 +726,69 @@ C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218
22>I<EB07F8EB3FFE90B5FC3901FC07803903F00FC03807C01FEA0F80121F130048EB0F
8091C7FC127EA3EAFE02EB1FF0EB3FFCEB603EEB801F00FF14809038000FC0A24814E0A4
127EA4123E003F14C07EEC1F80D80F8013003807E07E6CB45A6C5B38003FC01B277DA622
->I<EB7F803801FFF000077F380FC0FC381F803E48487E007E1480A2140F00FE14C0A315
-E0A5007E131FA26C133F6C132F380F80CF3807FF8F0001130FEA0008010013C0A3EC1F80
-123E127FEC3F00143E147E007E5B383E03F8381FFFE06C1380D801FEC7FC1B277DA622>
-57 D<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F14
-80A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F080491303
-000181491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8
-001FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EA
-FE00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1F
-F8B712E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF0
-0F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290
-C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F09039
-7FF007C0011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03
-FC001FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0
-A217C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0
-A33903FC001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3
-EBFC0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327
-297EA82C>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A31600
-1403A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387F
-E003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F48488048488048
-4880485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E
-6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5
-D8F00FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835
->I<B512F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F00
-161E5E5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFD
-E79038FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F
-80B539F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A2
-1507A2150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D
-0003EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8
-130EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE3
-80A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8
-FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF01801380
-147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF115
-0F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835>
-I<ECFFC0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F81
-48486D7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C
-6C14FEA26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC
-010013C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FE
-A716FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<
-ECFFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48
-486D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C
-6C14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC0
-90263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F
-5A6F5A6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A6
-5E4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170E
-A21503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E0
-000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F
-FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0
-1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8
-25>I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A24815
-01A5C791C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA
-0001ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7
-FC2F297EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B
-017F140E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE03
-01015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230
-297FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E
-13016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F16
-0E17F09126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC7003
-5BA2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E8002
-1E141EA242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D
-6C130E6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7
-FC6D138FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89
+>I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CC6485AA249
+5A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA822>I<EB
+7F803801FFF000077F380FC0FC381F803E48487E007E1480A2140F00FE14C0A315E0A500
+7E131FA26C133F6C132F380F80CF3807FF8F0001130FEA0008010013C0A3EC1F80123E12
+7FEC3F00143E147E007E5B383E03F8381FFFE06C1380D801FEC7FC1B277DA622>57
+D<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480A2
+49486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F0804913030001
+81491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8001F
+E0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE00
+EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8B7
+12E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F
+9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290C9FC
+5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF0
+07C0011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03FC00
+1FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A217
+C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A339
+03FC001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EBFC
+0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327297E
+A82C>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A316001403
+A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE003
+903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880
+485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E
+6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F0
+0FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I<
+B512F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F0016
+1E5E5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFDE7
+9038FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F80
+B539F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A215
+07A2150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D00
+03EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F813
+0EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380
+A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8FF
+FCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF0180138014
+7F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F
+16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835>I<
+ECFFC0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F8148
+486D7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C6C
+14FEA26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC01
+0013C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA7
+16FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<EC
+FFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E4848
+6D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C6C
+14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC090
+263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F5A
+6F5A6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E
+4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA2
+1503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E000
+0F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFC
+EBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E013
+03A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825
+>I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A2481501
+A5C791C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA00
+01ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC
+2F297EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B01
+7F140E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE0301
+015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA23029
+7FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13
+016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E
+17F09126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035B
+A2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E
+141EA242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D6C
+130E6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7FC
+6D138FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89
D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA
0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B7E9A21
>97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F09038F001F89038E0
@@ -1124,9 +1130,9 @@ letter
%%EndSetup
%%Page: 1 1
1 0 bop 75 659 a Fv(GNU)33 b(Readline)h(Library)p 75
-709 1800 17 v 936 757 a Fu(Edition)17 b(4.2,)c(for)i
-Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.2.)1692 811
-y(Apr)f(2001)75 2467 y Fs(Brian)23 b(F)-6 b(o)n(x,)23
+709 1800 17 v 891 757 a Fu(Edition)16 b(4.2a,)e(for)g
+Ft(Readline)g(Library)h Fu(V)l(ersion)h(4.2a.)1608 811
+y(Octob)q(er)g(2001)75 2467 y Fs(Brian)23 b(F)-6 b(o)n(x,)23
b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75
2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23
b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop
@@ -1360,12 +1366,12 @@ e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q
(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f
Fo(M-f)p Fu(.)75 668 y Fo(M-)123 666 y Fn(h)p 135 640
73 2 v 135 668 a Fm(DEL)p 135 675 V 206 666 a Fn(i)315
-668 y Fu(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h(the)g
-(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f(to)315
-723 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19
-b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g
-(b)o(y)315 777 y Fo(M-b)p Fu(.)75 855 y Fo(C-w)168 b
-Fu(Kill)18 b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22
+668 y Fu(Kill)i(from)e(the)g(cursor)g(the)h(start)e(of)h(the)g(curren)o
+(t)g(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)e(to)h(the)315
+723 y(start)j(of)h(the)g(previous)h(w)o(ord.)31 b(W)l(ord)19
+b(b)q(oundaries)h(are)f(the)h(same)e(as)h(those)g(used)h(b)o(y)315
+777 y Fo(M-b)p Fu(.)75 855 y Fo(C-w)168 b Fu(Kill)18
+b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22
b(This)16 b(is)g(di\013eren)o(t)g(than)f Fo(M-)1777 853
y Fn(h)p 1789 827 V 1789 855 a Fm(DEL)p 1789 863 V 1860
853 a Fn(i)315 910 y Fu(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h
@@ -1433,358 +1439,374 @@ b Fo(C-g)21 b Fu(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f
(and)g(restore)g(the)75 204 y(original)16 b(line.)21
b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o
(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259
-y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 324 y(T)l(o)g(\014nd)i
+y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 325 y(T)l(o)g(\014nd)i
(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o
(yp)q(e)f Fo(C-r)g Fu(or)g Fo(C-s)g Fu(as)h(appropriate.)k(This)75
-379 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i
+380 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i
(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g
(searc)o(h)g(string)75 434 y(t)o(yp)q(ed)19 b(so)g(far.)30
b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)
h(command)e(will)j(terminate)e(the)75 489 y(searc)o(h)10
b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063
487 y Fn(h)p 1076 461 76 2 v 1076 489 a Fm(RET)p 1076
-496 V 1149 487 a Fn(i)1174 489 y Fu(will)g(terminate)f(the)g(searc)o(h)
-f(and)h(accept)75 543 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g
+497 V 1149 487 a Fn(i)1174 489 y Fu(will)g(terminate)f(the)g(searc)o(h)
+f(and)h(accept)75 544 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g
(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f
-(command)g(will)75 598 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g
+(command)g(will)75 599 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g
(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g
-(editing.)137 664 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the)f
-(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o
-(h)i(for)75 718 y(matc)o(hing)d(history)h(lines.)39 b(The)22
+(editing.)137 665 y(Readline)j(remem)o(b)q(ers)e(the)h(last)f(incremen)
+o(tal)i(searc)o(h)e(string.)27 b(If)17 b(t)o(w)o(o)f
+Fo(C-r)p Fu(s)h(are)g(t)o(yp)q(ed)h(without)75 719 y(an)o(y)g(in)o
+(terv)o(ening)h(c)o(haracters)f(de\014ning)h(a)f(new)h(searc)o(h)f
+(string,)g(an)o(y)g(remem)o(b)q(ered)h(searc)o(h)f(string)g(is)75
+774 y(used.)137 840 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the)
+f(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o
+(h)i(for)75 895 y(matc)o(hing)d(history)h(lines.)39 b(The)22
b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h(t)o(yp)q(ed)f(b)o(y)h(the)f
-(user)h(or)e(b)q(e)i(part)f(of)g(the)75 773 y(con)o(ten)o(ts)15
-b(of)f(the)i(curren)o(t)f(line.)75 896 y Fs(1.3)33 b(Readline)23
-b(Init)h(File)137 990 y Fu(Although)f(the)g(Readline)h(library)f(comes)
-g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75
-1045 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e(use)i(a)e
-(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39 b(An)o(y)20
-b(user)h(can)g(customize)75 1100 y(programs)15 b(that)h(use)g(Readline)
-i(b)o(y)e(putting)g(commands)g(in)i(an)e Fk(inputrc)k
-Fu(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75 1155
-y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g(is)g
-(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g(v)m
-(ariable)75 1209 y Ft(INPUTRC)p Fu(.)i(If)c(that)g(v)m(ariable)h(is)g
-(unset,)f(the)g(default)h(is)g(`)p Ft(~/.inputrc)p Fu('.)137
-1275 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline)h(library)
-g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75
-1329 y(k)o(ey)g(bindings)i(are)e(set.)137 1395 y(In)f(addition,)h(the)e
-Ft(C-x)i(C-r)e Fu(command)g(re-reads)h(this)g(init)g(\014le,)h(th)o(us)
-e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 1450 y(that)h(y)o(ou)h
-(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1556 y Fj(1.3.1)30
-b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1650 y Fu(There)c(are)g
-(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)o(ed)i(in)f(the)g
-(Readline)h(init)g(\014le.)26 b(Blank)18 b(lines)g(are)75
-1705 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p
-Ft(#)p Fu(')e(are)h(commen)o(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e
-(a)f(`)p Ft($)p Fu(')f(indicate)75 1760 y(conditional)c(constructs)f
-(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h
-(8\).)k(Other)c(lines)75 1814 y(denote)h(v)m(ariable)i(settings)e(and)h
-(k)o(ey)f(bindings.)75 1890 y(V)l(ariable)h(Settings)315
-1945 y(Y)l(ou)k(can)h(mo)q(dify)g(the)f(run-time)h(b)q(eha)o(vior)g(of)
-e(Readline)j(b)o(y)e(altering)h(the)f(v)m(alues)h(of)315
-2000 y(v)m(ariables)d(in)g(Readline)g(using)f(the)g Ft(set)g
-Fu(command)f(within)i(the)f(init)h(\014le.)26 b(The)17
-b(syn)o(tax)315 2055 y(is)f(simple:)435 2117 y Ft(set)23
-b Fk(v)m(ariable)28 b(v)m(alue)315 2182 y Fu(Here,)14
-b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f(the)h(default)
-g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315 2237 y(use)g
-Ft(vi)e Fu(line)j(editing)g(commands:)435 2299 y Ft(set)23
-b(editing-mode)g(vi)315 2365 y Fu(V)l(ariable)c(names)e(and)h(v)m
-(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without)e(regard)
-315 2419 y(to)e(case.)315 2485 y(A)g(great)g(deal)g(of)g(run-time)h(b)q
-(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m
-(ariables.)315 2560 y Ft(bell-style)555 2615 y Fu(Con)o(trols)21
-b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f
-(termi-)555 2670 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
-Ft(none)p Fu(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32
-b(If)19 b(set)g(to)p eop
+(user)h(or)e(b)q(e)i(part)f(of)g(the)75 950 y(con)o(ten)o(ts)15
+b(of)f(the)i(curren)o(t)f(line.)75 1074 y Fs(1.3)33 b(Readline)23
+b(Init)h(File)137 1169 y Fu(Although)f(the)g(Readline)h(library)f
+(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g
+(installed)75 1224 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e
+(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39
+b(An)o(y)20 b(user)h(can)g(customize)75 1278 y(programs)15
+b(that)h(use)g(Readline)i(b)o(y)e(putting)g(commands)g(in)i(an)e
+Fk(inputrc)k Fu(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75
+1333 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g
+(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g
+(v)m(ariable)75 1388 y Ft(INPUTRC)p Fu(.)i(If)c(that)g(v)m(ariable)h
+(is)g(unset,)f(the)g(default)h(is)g(`)p Ft(~/.inputrc)p
+Fu('.)137 1454 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline)
+h(library)g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g
+(the)75 1509 y(k)o(ey)g(bindings)i(are)e(set.)137 1574
+y(In)f(addition,)h(the)e Ft(C-x)i(C-r)e Fu(command)g(re-reads)h(this)g
+(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75
+1629 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75
+1737 y Fj(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137
+1832 y Fu(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)
+o(ed)i(in)f(the)g(Readline)h(init)g(\014le.)26 b(Blank)18
+b(lines)g(are)75 1886 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d
+(a)h(`)p Ft(#)p Fu(')e(are)h(commen)o(ts.)35 b(Lines)22
+b(b)q(eginning)h(with)e(a)f(`)p Ft($)p Fu(')f(indicate)75
+1941 y(conditional)c(constructs)f(\(see)g(Section)g(1.3.2)f
+([Conditional)h(Init)h(Constructs],)e(page)h(8\).)k(Other)c(lines)75
+1996 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75
+2073 y(V)l(ariable)h(Settings)315 2128 y(Y)l(ou)k(can)h(mo)q(dify)g
+(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)j(b)o(y)e(altering)h
+(the)f(v)m(alues)h(of)315 2182 y(v)m(ariables)d(in)g(Readline)g(using)f
+(the)g Ft(set)g Fu(command)f(within)i(the)f(init)h(\014le.)26
+b(The)17 b(syn)o(tax)315 2237 y(is)f(simple:)435 2300
+y Ft(set)23 b Fk(v)m(ariable)28 b(v)m(alue)315 2366 y
+Fu(Here,)14 b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f
+(the)h(default)g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315
+2421 y(use)g Ft(vi)e Fu(line)j(editing)g(commands:)435
+2484 y Ft(set)23 b(editing-mode)g(vi)315 2549 y Fu(V)l(ariable)c(names)
+e(and)h(v)m(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without)
+e(regard)315 2604 y(to)e(case.)315 2670 y(A)g(great)g(deal)g(of)g
+(run-time)h(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o
+(wing)f(v)m(ariables.)p eop
%%Page: 5 7
5 6 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(5)555 149 y(`)p Ft(visible)p Fu(',)15 b(Readline)i(uses)g(a)f
-(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
-b(If)16 b(set)h(to)555 204 y(`)p Ft(audible)p Fu(')g(\(the)h
+b(5)315 149 y Ft(bell-style)555 204 y Fu(Con)o(trols)21
+b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f
+(termi-)555 259 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
+Ft(none)p Fu(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32
+b(If)19 b(set)g(to)555 314 y(`)p Ft(visible)p Fu(',)c(Readline)i(uses)g
+(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
+b(If)16 b(set)h(to)555 369 y(`)p Ft(audible)p Fu(')g(\(the)h
(default\),)i(Readline)g(attempts)e(to)g(ring)h(the)g(terminal's)555
-259 y(b)q(ell.)315 338 y Ft(comment-begin)555 393 y Fu(The)c(string)f
+423 y(b)q(ell.)315 504 y Ft(comment-begin)555 559 y Fu(The)c(string)f
(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g
-Ft(insert-)555 448 y(comment)f Fu(command)h(is)h(executed.)21
+Ft(insert-)555 614 y(comment)f Fu(command)h(is)h(executed.)21
b(The)15 b(default)h(v)m(alue)g(is)g Ft("#")p Fu(.)315
-527 y Ft(completion-ignore-case)555 582 y Fu(If)e(set)f(to)g(`)p
+694 y Ft(completion-ignore-case)555 749 y Fu(If)e(set)f(to)g(`)p
Ft(on)p Fu(',)g(Readline)i(p)q(erforms)e(\014lename)i(matc)o(hing)f
-(and)g(completion)555 637 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k
+(and)g(completion)555 804 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k
(The)15 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)315
-716 y Ft(completion-query-items)555 770 y Fu(The)d(n)o(um)o(b)q(er)h
+884 y Ft(completion-query-items)555 939 y Fu(The)d(n)o(um)o(b)q(er)h
(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f
-(user)555 825 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i
+(user)555 994 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i
(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21
-b(the)555 880 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f
+b(the)555 1049 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f
(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555
-935 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f
-(view)h(them;)f(otherwise,)555 990 y(they)f(are)g(simply)i(listed.)20
+1104 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)
+f(view)h(them;)f(otherwise,)555 1158 y(they)f(are)g(simply)i(listed.)20
b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger)
-h(v)m(alue)555 1044 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d
-(default)f(limit)i(is)f Ft(100)p Fu(.)315 1124 y Ft(convert-meta)555
-1178 y Fu(If)11 b(set)g(to)g(`)p Ft(on)p Fu(',)f(Readline)i(will)h(con)
+h(v)m(alue)555 1213 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d
+(default)f(limit)i(is)f Ft(100)p Fu(.)315 1294 y Ft(convert-meta)555
+1348 y Fu(If)11 b(set)g(to)g(`)p Ft(on)p Fu(',)f(Readline)i(will)h(con)
o(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555
-1233 y(to)f(an)h Fp(asci)q(i)e Fu(k)o(ey)i(sequence)g(b)o(y)g
+1403 y(to)f(an)h Fp(asci)q(i)e Fu(k)o(ey)i(sequence)g(b)o(y)g
(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555
-1286 y Fn(h)p 567 1260 70 2 v 567 1288 a Fm(ESC)p 567
-1296 V 634 1286 a Fn(i)666 1288 y Fu(c)o(haracter,)k(con)o(v)o(erting)h
+1456 y Fn(h)p 567 1430 70 2 v 567 1458 a Fm(ESC)p 567
+1466 V 634 1456 a Fn(i)666 1458 y Fu(c)o(haracter,)k(con)o(v)o(erting)h
(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555
-1343 y(The)e(default)h(v)m(alue)h(is)e(`)p Ft(on)p Fu('.)315
-1422 y Ft(disable-completion)555 1477 y Fu(If)k(set)f(to)f(`)p
+1513 y(The)e(default)h(v)m(alue)h(is)e(`)p Ft(on)p Fu('.)315
+1593 y Ft(disable-completion)555 1648 y Fu(If)k(set)f(to)f(`)p
Ft(On)p Fu(',)h(Readline)i(will)g(inhibit)g(w)o(ord)e(completion.)30
-b(Completion)555 1531 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g
+b(Completion)555 1703 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g
(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555
-1586 y(to)h Ft(self-insert)p Fu(.)j(The)d(default)h(is)g(`)p
-Ft(off)p Fu('.)315 1665 y Ft(editing-mode)555 1720 y
+1758 y(to)h Ft(self-insert)p Fu(.)j(The)d(default)h(is)g(`)p
+Ft(off)p Fu('.)315 1838 y Ft(editing-mode)555 1893 y
Fu(The)f Ft(editing-mode)d Fu(v)m(ariable)k(con)o(trols)e(whic)o(h)h
-(default)g(set)f(of)g(k)o(ey)g(bind-)555 1775 y(ings)f(is)g(used.)20
+(default)g(set)f(of)g(k)o(ey)g(bind-)555 1948 y(ings)f(is)g(used.)20
b(By)12 b(default,)i(Readline)f(starts)f(up)h(in)g(Emacs)f(editing)i
-(mo)q(de,)555 1830 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g
+(mo)q(de,)555 2003 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g
(similar)i(to)d(Emacs.)20 b(This)15 b(v)m(ariable)h(can)555
-1885 y(b)q(e)g(set)f(to)f(either)i(`)p Ft(emacs)p Fu(')e(or)h(`)p
-Ft(vi)p Fu('.)315 1964 y Ft(enable-keypad)555 2019 y
+2058 y(b)q(e)g(set)f(to)f(either)i(`)p Ft(emacs)p Fu(')e(or)h(`)p
+Ft(vi)p Fu('.)315 2138 y Ft(enable-keypad)555 2193 y
Fu(When)d(set)f(to)h(`)p Ft(on)p Fu(',)e(Readline)j(will)h(try)d(to)g
-(enable)i(the)f(application)h(k)o(eypad)555 2073 y(when)h(it)f(is)h
+(enable)i(the)f(application)h(k)o(eypad)555 2248 y(when)h(it)f(is)h
(called.)21 b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g
-(arro)o(w)e(k)o(eys.)555 2128 y(The)j(default)h(is)g(`)p
-Ft(off)p Fu('.)315 2207 y Ft(expand-tilde)555 2262 y
+(arro)o(w)e(k)o(eys.)555 2303 y(The)j(default)h(is)g(`)p
+Ft(off)p Fu('.)315 2383 y Ft(expand-tilde)555 2438 y
Fu(If)e(set)g(to)f(`)p Ft(on)p Fu(',)f(tilde)k(expansion)e(is)h(p)q
-(erformed)f(when)g(Readline)h(attempts)555 2317 y(w)o(ord)g
+(erformed)f(when)g(Readline)h(attempts)555 2493 y(w)o(ord)g
(completion.)21 b(The)15 b(default)h(is)f(`)p Ft(off)p
-Fu('.)315 2396 y Ft(horizontal-scroll-mode)555 2451 y
-Fu(This)k(v)m(ariable)g(can)f(b)q(e)g(set)g(to)f(either)i(`)p
-Ft(on)p Fu(')e(or)g(`)p Ft(off)p Fu('.)27 b(Setting)19
-b(it)f(to)f(`)p Ft(on)p Fu(')555 2506 y(means)c(that)f(the)i(text)e(of)
-h(the)g(lines)i(b)q(eing)f(edited)g(will)h(scroll)f(horizon)o(tally)555
-2560 y(on)i(a)f(single)i(screen)g(line)g(when)g(they)f(are)f(longer)h
-(than)g(the)g(width)g(of)g(the)555 2615 y(screen,)e(instead)f(of)g
-(wrapping)g(on)o(to)f(a)h(new)g(screen)h(line.)21 b(By)13
-b(default,)h(this)555 2670 y(v)m(ariable)j(is)e(set)g(to)g(`)p
-Ft(off)p Fu('.)p eop
+Fu('.)555 2560 y(If)g(set)g(to)f(`)p Ft(on)p Fu(',)g(the)g(history)h
+(co)q(de)h(attempts)e(to)g(place)i(p)q(oin)o(t)f(at)f(the)h(same)555
+2615 y(lo)q(cation)20 b(on)f(eac)o(h)g(history)h(line)g(retriv)o(ed)g
+(with)f Ft(previous-history)e Fu(or)555 2670 y Ft(next-history)p
+Fu(.)p eop
%%Page: 6 8
6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)h(Library)315
-149 y Ft(input-meta)555 204 y Fu(If)g(set)f(to)g(`)p
+149 y Ft(horizontal-scroll-mode)555 204 y Fu(This)j(v)m(ariable)g(can)f
+(b)q(e)g(set)g(to)f(either)i(`)p Ft(on)p Fu(')e(or)g(`)p
+Ft(off)p Fu('.)27 b(Setting)19 b(it)f(to)f(`)p Ft(on)p
+Fu(')555 259 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q(eing)
+f(edited)g(will)h(scroll)f(horizon)o(tally)555 314 y(on)i(a)f(single)i
+(screen)g(line)g(when)g(they)f(are)f(longer)h(than)g(the)g(width)g(of)g
+(the)555 369 y(screen,)e(instead)f(of)g(wrapping)g(on)o(to)f(a)h(new)g
+(screen)h(line.)21 b(By)13 b(default,)h(this)555 423
+y(v)m(ariable)j(is)e(set)g(to)g(`)p Ft(off)p Fu('.)315
+506 y Ft(input-meta)555 560 y Fu(If)h(set)f(to)g(`)p
Ft(on)p Fu(',)f(Readline)j(will)h(enable)e(eigh)o(t-bit)h(input)f(\(it)
-g(will)h(not)e(clear)555 259 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c)
+g(will)h(not)e(clear)555 615 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c)
o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)555
-314 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20
+670 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20
b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)33 b(The)555
-369 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for)f(this)i(v)
-m(ariable.)315 448 y Ft(isearch-terminators)555 503 y
+725 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for)f(this)i(v)
+m(ariable.)315 807 y Ft(isearch-terminators)555 862 y
Fu(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i(terminate)f
-(an)g(incremen)o(tal)555 557 y(searc)o(h)12 b(without)h(subsequen)o
+(an)g(incremen)o(tal)555 917 y(searc)o(h)12 b(without)h(subsequen)o
(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555
-612 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40
-b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 667 y(b)q(een)17
+971 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40
+b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 1026 y(b)q(een)17
b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247
-665 y Fn(h)p 1259 639 70 2 v 1259 667 a Fm(ESC)p 1259
-675 V 1326 665 a Fn(i)1357 667 y Fu(and)g Fo(C-J)f Fu(will)i(terminate)
-f(an)555 722 y(incremen)o(tal)g(searc)o(h.)315 801 y
-Ft(keymap)96 b Fu(Sets)19 b(Readline's)i(idea)f(of)f(the)g(curren)o(t)h
-(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555 856 y(mands.)41
-b(Acceptable)23 b Ft(keymap)f Fu(names)g(are)f Ft(emacs)p
-Fu(,)i Ft(emacs-standard)p Fu(,)555 910 y Ft(emacs-meta)p
-Fu(,)49 b Ft(emacs-ctlx)p Fu(,)g Ft(vi)p Fu(,)h Ft(vi-move)p
-Fu(,)f Ft(vi-command)p Fu(,)g(and)555 965 y Ft(vi-insert)p
-Fu(.)31 b Ft(vi)20 b Fu(is)g(equiv)m(alen)o(t)h(to)e
-Ft(vi-command)p Fu(;)g Ft(emacs)g Fu(is)h(equiv)m(alen)o(t)555
-1020 y(to)15 b Ft(emacs-standard)p Fu(.)20 b(The)d(default)f(v)m(alue)h
+1024 y Fn(h)p 1259 998 70 2 v 1259 1026 a Fm(ESC)p 1259
+1034 V 1326 1024 a Fn(i)1357 1026 y Fu(and)g Fo(C-J)f
+Fu(will)i(terminate)f(an)555 1081 y(incremen)o(tal)g(searc)o(h.)315
+1163 y Ft(keymap)96 b Fu(Sets)19 b(Readline's)i(idea)f(of)f(the)g
+(curren)o(t)h(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555
+1218 y(mands.)41 b(Acceptable)23 b Ft(keymap)f Fu(names)g(are)f
+Ft(emacs)p Fu(,)i Ft(emacs-standard)p Fu(,)555 1273 y
+Ft(emacs-meta)p Fu(,)49 b Ft(emacs-ctlx)p Fu(,)g Ft(vi)p
+Fu(,)h Ft(vi-move)p Fu(,)f Ft(vi-command)p Fu(,)g(and)555
+1328 y Ft(vi-insert)p Fu(.)31 b Ft(vi)20 b Fu(is)g(equiv)m(alen)o(t)h
+(to)e Ft(vi-command)p Fu(;)g Ft(emacs)g Fu(is)h(equiv)m(alen)o(t)555
+1382 y(to)15 b Ft(emacs-standard)p Fu(.)20 b(The)d(default)f(v)m(alue)h
(is)g Ft(emacs)p Fu(.)k(The)16 b(v)m(alue)h(of)f(the)555
-1075 y Ft(editing-mode)e Fu(v)m(ariable)i(also)f(a\013ects)g(the)g
-(default)h(k)o(eymap.)315 1154 y Ft(mark-directories)555
-1209 y Fu(If)j(set)g(to)g(`)p Ft(on)p Fu(',)f(completed)i(directory)g
-(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1264
-y(The)15 b(default)h(is)g(`)p Ft(on)p Fu('.)315 1343
-y Ft(mark-modified-lines)555 1398 y Fu(This)j(v)m(ariable,)g(when)g
+1437 y Ft(editing-mode)e Fu(v)m(ariable)i(also)f(a\013ects)g(the)g
+(default)h(k)o(eymap.)315 1519 y Ft(mark-directories)555
+1574 y Fu(If)j(set)g(to)g(`)p Ft(on)p Fu(',)f(completed)i(directory)g
+(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1629
+y(The)15 b(default)h(is)g(`)p Ft(on)p Fu('.)315 1711
+y Ft(mark-modified-lines)555 1766 y Fu(This)j(v)m(ariable,)g(when)g
(set)e(to)h(`)p Ft(on)p Fu(',)f(causes)h(Readline)h(to)e(displa)o(y)i
-(an)f(as-)555 1452 y(terisk)f(\(`)p Ft(*)p Fu('\))e(at)i(the)f(start)g
+(an)f(as-)555 1821 y(terisk)f(\(`)p Ft(*)p Fu('\))e(at)i(the)f(start)g
(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q
-(di\014ed.)555 1507 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p
-Fu(')e(b)o(y)h(default.)315 1586 y Ft(output-meta)555
-1641 y Fu(If)j(set)f(to)g(`)p Ft(on)p Fu(',)g(Readline)i(will)h(displa)
+(di\014ed.)555 1875 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p
+Fu(')e(b)o(y)h(default.)315 1958 y Ft(match-hidden-files)555
+2012 y Fu(This)d(v)m(ariable,)h(when)e(set)g(to)g(`)p
+Ft(on)p Fu(',)f(causes)h(Readline)i(to)d(matc)o(h)h(\014les)h(whose)555
+2067 y(names)22 b(b)q(egin)h(with)g(a)e(`)p Ft(.)p Fu(')h(\(hidden)h
+(\014les\))g(when)f(p)q(erforming)h(\014lename)555 2122
+y(completion,)g(unless)f(the)f(leading)h(`)p Ft(.)p Fu(')e(is)h
+(supplied)i(b)o(y)e(the)f(user)h(in)h(the)555 2177 y(\014lename)16
+b(to)f(b)q(e)h(completed.)21 b(This)15 b(v)m(ariable)i(is)f(`)p
+Ft(on)p Fu(')e(b)o(y)h(default.)315 2259 y Ft(output-meta)555
+2314 y Fu(If)j(set)f(to)g(`)p Ft(on)p Fu(',)g(Readline)i(will)h(displa)
o(y)f(c)o(haracters)d(with)j(the)e(eigh)o(th)h(bit)555
-1696 y(set)g(directly)i(rather)d(than)h(as)g(a)g(meta-pre\014xed)h
-(escap)q(e)g(sequence.)30 b(The)555 1751 y(default)16
-b(is)f(`)p Ft(off)p Fu('.)315 1830 y Ft(print-completions-horizont)o
-(ally)555 1885 y Fu(If)d(set)g(to)f(`)p Ft(on)p Fu(',)h(Readline)h
+2369 y(set)g(directly)i(rather)d(than)h(as)g(a)g(meta-pre\014xed)h
+(escap)q(e)g(sequence.)30 b(The)555 2423 y(default)16
+b(is)f(`)p Ft(off)p Fu('.)315 2506 y Ft(print-completions-horizont)o
+(ally)555 2560 y Fu(If)d(set)g(to)f(`)p Ft(on)p Fu(',)h(Readline)h
(will)g(displa)o(y)h(completions)f(with)f(matc)o(hes)f(sorted)555
-1939 y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e
-(than)g(do)o(wn)h(the)g(screen.)555 1994 y(The)15 b(default)h(is)g(`)p
-Ft(off)p Fu('.)315 2073 y Ft(show-all-if-ambiguous)555
-2128 y Fu(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h
-(completion)h(functions.)21 b(If)15 b(set)555 2183 y(to)e(`)p
-Ft(on)p Fu(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h
-(p)q(ossible)i(completion)f(cause)555 2238 y(the)20 b(matc)o(hes)f(to)f
-(b)q(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q
-(ell.)555 2293 y(The)c(default)h(v)m(alue)h(is)e(`)p
-Ft(off)p Fu('.)315 2372 y Ft(visible-stats)555 2426 y
-Fu(If)h(set)g(to)f(`)p Ft(on)p Fu(',)g(a)h(c)o(haracter)f(denoting)h(a)
-g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555
-2481 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c
-(default)g(is)f(`)p Ft(off)p Fu('.)75 2560 y(Key)h(Bindings)315
-2615 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h
-(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20
-b(y)o(ou)315 2670 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f
-(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19
-b(The)14 b(follo)o(wing)p eop
+2615 y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e
+(than)g(do)o(wn)h(the)g(screen.)555 2670 y(The)15 b(default)h(is)g(`)p
+Ft(off)p Fu('.)p eop
%%Page: 7 9
7 8 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(7)315 149 y(sections)18 b(con)o(tain)h(tables)f(of)f(the)h(command)g
-(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315
-204 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q
-(es.)315 273 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g
+b(7)315 149 y Ft(show-all-if-ambiguous)555 204 y Fu(This)16
+b(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h(completion)h
+(functions.)21 b(If)15 b(set)555 259 y(to)e(`)p Ft(on)p
+Fu(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h(p)q
+(ossible)i(completion)f(cause)555 314 y(the)20 b(matc)o(hes)f(to)f(b)q
+(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q(ell.)555
+369 y(The)c(default)h(v)m(alue)h(is)e(`)p Ft(off)p Fu('.)315
+448 y Ft(visible-stats)555 502 y Fu(If)h(set)g(to)f(`)p
+Ft(on)p Fu(',)g(a)h(c)o(haracter)f(denoting)h(a)g(\014le's)h(t)o(yp)q
+(e)f(is)g(app)q(ended)i(to)d(the)555 557 y(\014lename)h(when)g(listing)
+h(p)q(ossible)g(completions.)j(The)c(default)g(is)f(`)p
+Ft(off)p Fu('.)75 636 y(Key)h(Bindings)315 691 y(The)21
+b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h(in)g(the)f
+(init)h(\014le)g(is)g(simple.)39 b(First)20 b(y)o(ou)315
+746 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f(command)h(that)f
+(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 b(The)14 b(follo)o(wing)315
+801 y(sections)k(con)o(tain)h(tables)f(of)f(the)h(command)g(name,)g
+(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315
+855 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q
+(es.)315 922 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g
(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315
-328 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e
+977 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e
(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315
-382 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g
+1032 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g
(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315
-437 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)e
-(comfortable.)315 506 y(In)19 b(addition)g(to)e(command)h(names,)g
+1087 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)
+e(comfortable.)315 1154 y(In)19 b(addition)g(to)e(command)h(names,)g
(readline)i(allo)o(ws)e(k)o(eys)g(to)f(b)q(e)i(b)q(ound)g(to)e(a)h
-(string)315 561 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h
-(pressed)g(\(a)e Fk(macro)r Fu(\).)315 643 y Fk(k)o(eyname)s
-Fu(:)19 b Fk(function-name)g Fu(or)c Fk(macro)555 698
+(string)315 1208 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h
+(pressed)g(\(a)e Fk(macro)r Fu(\).)315 1288 y Fk(k)o(eyname)s
+Fu(:)19 b Fk(function-name)g Fu(or)c Fk(macro)555 1342
y(k)o(eyname)i Fu(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j(out)
-d(in)h(English.)21 b(F)l(or)13 b(example:)675 764 y Ft(Control-u:)22
-b(universal-argument)675 816 y(Meta-Rubout:)g(backward-kill-word)675
-867 y(Control-o:)g(">)i(output")555 936 y Fu(In)c(the)f(ab)q(o)o(v)o(e)
-g(example,)i Fo(C-u)e Fu(is)h(b)q(ound)g(to)f(the)g(function)h
-Ft(universal-)555 991 y(argument)p Fu(,)e Fo(M-DEL)h
-Fu(is)g(b)q(ound)h(to)e(the)h(function)h Ft(backward-kill-word)p
-Fu(,)555 1046 y(and)g Fo(C-o)f Fu(is)h(b)q(ound)g(to)f(run)h(the)f
-(macro)g(expressed)h(on)g(the)f(righ)o(t)h(hand)555 1101
-y(side)c(\(that)e(is,)i(to)e(insert)i(the)f(text)g(`)p
-Ft(>)f(output)p Fu(')g(in)o(to)i(the)f(line\).)555 1169
-y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e(names)g
-(are)g(recognized)i(while)g(pro-)555 1224 y(cessing)13
+d(in)h(English.)21 b(F)l(or)13 b(example:)675 1406 y
+Ft(Control-u:)22 b(universal-argument)675 1458 y(Meta-Rubout:)g
+(backward-kill-word)675 1510 y(Control-o:)g(">)i(output")555
+1577 y Fu(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i Fo(C-u)e
+Fu(is)h(b)q(ound)g(to)f(the)g(function)h Ft(universal-)555
+1632 y(argument)p Fu(,)e Fo(M-DEL)h Fu(is)g(b)q(ound)h(to)e(the)h
+(function)h Ft(backward-kill-word)p Fu(,)555 1687 y(and)g
+Fo(C-o)f Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g
+(the)f(righ)o(t)h(hand)555 1741 y(side)c(\(that)e(is,)i(to)e(insert)i
+(the)f(text)g(`)p Ft(>)f(output)p Fu(')g(in)o(to)i(the)f(line\).)555
+1808 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e
+(names)g(are)g(recognized)i(while)g(pro-)555 1863 y(cessing)13
b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fk(DEL)p
Fu(,)11 b Fk(ESC)p Fu(,)h Fk(ESCAPE)p Fu(,)f Fk(LFD)p
-Fu(,)g Fk(NEW-)555 1279 y(LINE)p Fu(,)16 b Fk(RET)p Fu(,)e
+Fu(,)g Fk(NEW-)555 1918 y(LINE)p Fu(,)16 b Fk(RET)p Fu(,)e
Fk(RETURN)p Fu(,)f Fk(R)o(UBOUT)p Fu(,)i Fk(SP)l(A)o(CE)p
-Fu(,)g Fk(SPC)p Fu(,)f(and)i Fk(T)l(AB)p Fu(.)315 1361
+Fu(,)g Fk(SPC)p Fu(,)f(and)i Fk(T)l(AB)p Fu(.)315 1997
y Ft(")p Fk(k)o(eyseq)q Ft(")p Fu(:)k Fk(function-name)e
-Fu(or)d Fk(macro)555 1416 y(k)o(eyseq)i Fu(di\013ers)e(from)g
+Fu(or)d Fk(macro)555 2052 y(k)o(eyseq)i Fu(di\013ers)e(from)g
Fk(k)o(eyname)j Fu(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g
-(an)f(en-)555 1471 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q
+(an)f(en-)555 2107 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q
(eci\014ed,)i(b)o(y)e(placing)h(the)f(k)o(ey)g(sequence)h(in)555
-1526 y(double)e(quotes.)j(Some)c Fp(gnu)g Fu(Emacs)f(st)o(yle)h(k)o(ey)
-g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)555 1580 y(in)j(the)f(follo)o
+2161 y(double)e(quotes.)j(Some)c Fp(gnu)g Fu(Emacs)f(st)o(yle)h(k)o(ey)
+g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)555 2216 y(in)j(the)f(follo)o
(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are)
-f(not)555 1635 y(recognized.)675 1701 y Ft("\\C-u":)23
-b(universal-argument)675 1753 y("\\C-x\\C-r":)f(re-read-init-file)675
-1805 y("\\e[11~":)h("Function)f(Key)i(1")555 1873 y Fu(In)33
+f(not)555 2271 y(recognized.)675 2335 y Ft("\\C-u":)23
+b(universal-argument)675 2387 y("\\C-x\\C-r":)f(re-read-init-file)675
+2439 y("\\e[11~":)h("Function)f(Key)i(1")555 2506 y Fu(In)33
b(the)f(ab)q(o)o(v)o(e)g(example,)37 b Fo(C-u)32 b Fu(is)h(again)f(b)q
-(ound)h(to)f(the)g(function)555 1928 y Ft(universal-argument)19
+(ound)h(to)f(the)g(function)555 2560 y Ft(universal-argument)19
b Fu(\(just)j(as)f(it)h(w)o(as)f(in)i(the)f(\014rst)f(example\),)j(`)p
-Fo(C-x)555 1983 y(C-r)p Fu(')c(is)h(b)q(ound)g(to)f(the)h(function)g
-Ft(re-read-init-file)p Fu(,)f(and)g(`)1731 1981 y Fn(h)p
-1743 1955 70 2 v 1743 1983 a Fm(ESC)p 1743 1991 V 1810
-1981 a Fn(i)15 b(h)p 1852 1955 10 2 v 1852 1983 a Fm([)p
-1852 1991 V 1860 1981 a Fn(i)555 2036 y(h)p 567 2010
-18 2 v 567 2038 a Fm(1)p 567 2045 V 583 2036 a Fn(i)g(h)p
-625 2010 V 625 2038 a Fm(1)p 625 2045 V 640 2036 a Fn(i)g(h)p
-683 2010 24 2 v 683 2038 a Ft(~)p 683 2045 V 704 2036
-a Fn(i)719 2038 y Fu(')g(is)h(b)q(ound)g(to)e(insert)i(the)f(text)g(`)p
-Ft(Function)f(Key)g(1)p Fu('.)315 2120 y(The)h(follo)o(wing)h
-Fp(gnu)e Fu(Emacs)h(st)o(yle)g(escap)q(e)h(sequences)g(are)e(a)o(v)m
-(ailable)j(when)e(sp)q(ecifying)315 2175 y(k)o(ey)g(sequences:)315
-2258 y Fo(\\C-)168 b Fu(con)o(trol)15 b(pre\014x)315
-2340 y Fo(\\M-)168 b Fu(meta)15 b(pre\014x)315 2423 y
-Fo(\\e)192 b Fu(an)15 b(escap)q(e)h(c)o(haracter)315
-2505 y Fo(\\\\)192 b Fu(bac)o(kslash)315 2587 y Fo(\\)p
-Ft(")555 2585 y Fn(h)p 567 2559 V 567 2587 a Ft(")p 567
-2595 V 589 2585 a Fn(i)604 2587 y Fu(,)15 b(a)f(double)j(quotation)e
-(mark)315 2670 y Fo(\\')555 2668 y Fn(h)p 567 2642 10
-2 v 567 2670 a Fm(')p 567 2678 V 575 2668 a Fn(i)590
-2670 y Fu(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)p
-eop
+Fo(C-x)555 2615 y(C-r)p Fu(')c(is)h(b)q(ound)g(to)f(the)h(function)g
+Ft(re-read-init-file)p Fu(,)f(and)g(`)1731 2613 y Fn(h)p
+1743 2587 70 2 v 1743 2615 a Fm(ESC)p 1743 2623 V 1810
+2613 a Fn(i)15 b(h)p 1852 2587 10 2 v 1852 2615 a Fm([)p
+1852 2623 V 1860 2613 a Fn(i)555 2668 y(h)p 567 2642
+18 2 v 567 2670 a Fm(1)p 567 2678 V 583 2668 a Fn(i)g(h)p
+625 2642 V 625 2670 a Fm(1)p 625 2678 V 640 2668 a Fn(i)g(h)p
+683 2642 24 2 v 683 2670 a Ft(~)p 683 2678 V 704 2668
+a Fn(i)719 2670 y Fu(')g(is)h(b)q(ound)g(to)e(insert)i(the)f(text)g(`)p
+Ft(Function)f(Key)g(1)p Fu('.)p eop
%%Page: 8 10
8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)h(Library)315
-149 y(In)e(addition)h(to)f(the)f Fp(gnu)h Fu(Emacs)g(st)o(yle)f(escap)q
-(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315
-204 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 286 y Ft(\\a)192
-b Fu(alert)15 b(\(b)q(ell\))315 368 y Ft(\\b)192 b Fu(bac)o(kspace)315
-449 y Ft(\\d)g Fu(delete)315 531 y Ft(\\f)g Fu(form)14
-b(feed)315 613 y Ft(\\n)192 b Fu(newline)315 694 y Ft(\\r)g
-Fu(carriage)15 b(return)315 776 y Ft(\\t)192 b Fu(horizon)o(tal)16
-b(tab)315 858 y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315
-940 y Ft(\\)p Fk(nnn)141 b Fu(the)14 b(c)o(haracter)f(whose)h
-Fp(asci)q(i)e Fu(co)q(de)j(is)f(the)g(o)q(ctal)g(v)m(alue)h
-Fk(nnn)f Fu(\(one)g(to)f(three)555 994 y(digits\))315
-1076 y Ft(\\x)p Fk(nnn)117 b Fu(the)16 b(c)o(haracter)f(whose)h
-Fp(asci)q(i)f Fu(co)q(de)i(is)f(the)h(hexadecimal)g(v)m(alue)g
-Fk(nnn)g Fu(\(one)555 1131 y(to)e(three)g(digits\))315
-1213 y(When)k(en)o(tering)g(the)g(text)f(of)g(a)h(macro,)f(single)i(or)
-e(double)i(quotes)f(m)o(ust)f(b)q(e)h(used)h(to)315 1267
+149 y(The)f(follo)o(wing)h Fp(gnu)e Fu(Emacs)h(st)o(yle)g(escap)q(e)h
+(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)315
+204 y(k)o(ey)g(sequences:)315 287 y Fo(\\C-)168 b Fu(con)o(trol)15
+b(pre\014x)315 370 y Fo(\\M-)168 b Fu(meta)15 b(pre\014x)315
+453 y Fo(\\e)192 b Fu(an)15 b(escap)q(e)h(c)o(haracter)315
+536 y Fo(\\\\)192 b Fu(bac)o(kslash)315 619 y Fo(\\)p
+Ft(")555 617 y Fn(h)p 567 591 24 2 v 567 619 a Ft(")p
+567 627 V 589 617 a Fn(i)604 619 y Fu(,)15 b(a)f(double)j(quotation)e
+(mark)315 702 y Fo(\\')555 700 y Fn(h)p 567 674 10 2
+v 567 702 a Fm(')p 567 710 V 575 700 a Fn(i)590 702 y
+Fu(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315 785
+y(In)f(addition)h(to)f(the)f Fp(gnu)h Fu(Emacs)g(st)o(yle)f(escap)q(e)i
+(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315
+840 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 923 y Ft(\\a)192
+b Fu(alert)15 b(\(b)q(ell\))315 1006 y Ft(\\b)192 b Fu(bac)o(kspace)315
+1089 y Ft(\\d)g Fu(delete)315 1172 y Ft(\\f)g Fu(form)14
+b(feed)315 1255 y Ft(\\n)192 b Fu(newline)315 1338 y
+Ft(\\r)g Fu(carriage)15 b(return)315 1421 y Ft(\\t)192
+b Fu(horizon)o(tal)16 b(tab)315 1504 y Ft(\\v)192 b Fu(v)o(ertical)16
+b(tab)315 1587 y Ft(\\)p Fk(nnn)141 b Fu(the)17 b(eigh)o(t-bit)h(c)o
+(haracter)f(whose)g(v)m(alue)i(is)e(the)h(o)q(ctal)f(v)m(alue)i
+Fk(nnn)f Fu(\(one)f(to)555 1642 y(three)e(digits\))315
+1725 y Ft(\\x)p Fk(HH)124 b Fu(the)20 b(eigh)o(t-bit)g(c)o(haracter)f
+(whose)h(v)m(alue)h(is)f(the)g(hexadecimal)h(v)m(alue)g
+Fk(HH)555 1780 y Fu(\(one)15 b(or)g(t)o(w)o(o)f(hex)h(digits\))315
+1863 y(When)k(en)o(tering)g(the)g(text)f(of)g(a)h(macro,)f(single)i(or)
+e(double)i(quotes)f(m)o(ust)f(b)q(e)h(used)h(to)315 1917
y(indicate)12 b(a)f(macro)f(de\014nition.)20 b(Unquoted)11
b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)f(function)i(name.)18
-b(In)315 1322 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o(kslash)g
+b(In)315 1972 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o(kslash)g
(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)g(expanded.)20
-b(Bac)o(kslash)315 1377 y(will)i(quote)d(an)o(y)h(other)g(c)o(haracter)
+b(Bac)o(kslash)315 2027 y(will)i(quote)d(an)o(y)h(other)g(c)o(haracter)
f(in)i(the)f(macro)f(text,)h(including)j(`)p Ft(")p Fu(')c(and)h(`)p
-Ft(')p Fu('.)34 b(F)l(or)315 1432 y(example,)14 b(the)f(follo)o(wing)g
+Ft(')p Fu('.)34 b(F)l(or)315 2082 y(example,)14 b(the)f(follo)o(wing)g
(binding)i(will)g(mak)o(e)d(`)p Fo(C-x)i Ft(\\)p Fu(')f(insert)g(a)g
(single)h(`)p Ft(\\)p Fu(')e(in)o(to)h(the)g(line:)435
-1497 y Ft("\\C-x\\\\":)23 b("\\\\")75 1613 y Fj(1.3.2)30
-b(Conditional)20 b(Init)g(Constructs)137 1712 y Fu(Readline)f(implemen)
+2148 y Ft("\\C-x\\\\":)23 b("\\\\")75 2267 y Fj(1.3.2)30
+b(Conditional)20 b(Init)g(Constructs)137 2366 y Fu(Readline)f(implemen)
o(ts)g(a)f(facilit)o(y)g(similar)h(in)g(spirit)f(to)f(the)h
-(conditional)h(compilation)g(features)75 1766 y(of)e(the)g(C)g(prepro)q
+(conditional)h(compilation)g(features)75 2421 y(of)e(the)g(C)g(prepro)q
(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g(bindings)i(and)f(v)m(ariable)
-g(settings)f(to)g(b)q(e)h(p)q(erformed)f(as)75 1821 y(the)e(result)h
+g(settings)f(to)g(b)q(e)h(p)q(erformed)f(as)75 2476 y(the)e(result)h
(of)f(tests.)k(There)c(are)g(four)g(parser)g(directiv)o(es)h(used.)75
-1904 y Ft($if)168 b Fu(The)16 b Ft($if)f Fu(construct)g(allo)o(ws)h
+2560 y Ft($if)168 b Fu(The)16 b Ft($if)f Fu(construct)g(allo)o(ws)h
(bindings)i(to)d(b)q(e)h(made)g(based)g(on)f(the)h(editing)h(mo)q(de,)f
-(the)315 1959 y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i
+(the)315 2615 y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i
(using)e(Readline.)33 b(The)19 b(text)g(of)f(the)i(test)315
-2013 y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o
-(haracters)f(are)h(required)i(to)d(isolate)i(it.)315
-2095 y Ft(mode)144 b Fu(The)11 b Ft(mode=)e Fu(form)h(of)g(the)h
+2670 y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o
+(haracters)f(are)h(required)i(to)d(isolate)i(it.)p eop
+%%Page: 9 11
+9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(9)315 149 y Ft(mode)144 b Fu(The)11 b Ft(mode=)e Fu(form)h(of)g(the)h
Ft($if)f Fu(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)
-555 2150 y(is)k(in)h Ft(emacs)e Fu(or)g Ft(vi)g Fu(mo)q(de.)20
+555 204 y(is)k(in)h Ft(emacs)e Fu(or)g Ft(vi)g Fu(mo)q(de.)20
b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555
-2205 y(`)p Ft(set)f(keymap)p Fu(')f(command,)g(for)h(instance,)g(to)f
-(set)h(bindings)h(in)g(the)f Ft(emacs-)555 2260 y(standard)d
+259 y(`)p Ft(set)f(keymap)p Fu(')f(command,)g(for)h(instance,)g(to)f
+(set)h(bindings)h(in)g(the)f Ft(emacs-)555 314 y(standard)d
Fu(and)i Ft(emacs-ctlx)e Fu(k)o(eymaps)h(only)i(if)f(Readline)g(is)g
-(starting)f(out)555 2314 y(in)k Ft(emacs)f Fu(mo)q(de.)315
-2396 y Ft(term)144 b Fu(The)14 b Ft(term=)e Fu(form)h(ma)o(y)g(b)q(e)h
+(starting)f(out)555 369 y(in)k Ft(emacs)f Fu(mo)q(de.)315
+448 y Ft(term)144 b Fu(The)14 b Ft(term=)e Fu(form)h(ma)o(y)g(b)q(e)h
(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555
-2451 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
-(output)e(b)o(y)g(the)g(terminal's)555 2506 y(function)13
+503 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
+(output)e(b)o(y)g(the)g(terminal's)555 558 y(function)13
b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g
-(the)g(`)p Ft(=)p Fu(')f(is)h(tested)g(against)555 2560
+(the)g(`)p Ft(=)p Fu(')f(is)h(tested)g(against)555 613
y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q
-(ortion)h(of)e(the)h(terminal)555 2615 y(name)i(b)q(efore)g(the)g
+(ortion)h(of)e(the)h(terminal)555 667 y(name)i(b)q(efore)g(the)g
(\014rst)f(`)p Ft(-)p Fu('.)24 b(This)17 b(allo)o(ws)g
Ft(sun)f Fu(to)g(matc)o(h)h(b)q(oth)f Ft(sun)h Fu(and)555
-2670 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)p eop
-%%Page: 9 11
-9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(9)315 149 y Ft(application)555 204 y Fu(The)11 b Fk(application)i
-Fu(construct)e(is)g(used)h(to)e(include)j(application-sp)q(eci)q(\014c)
-h(set-)555 259 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e
-(Readline)i(library)f(sets)f(the)g Fk(application)555
-314 y(name)p Fu(,)g(and)g(y)o(ou)f(can)h(test)f(for)g(a)g(particular)h
-(v)m(alue.)20 b(This)12 b(could)h(b)q(e)f(used)h(to)555
-369 y(bind)18 b(k)o(ey)e(sequences)i(to)d(functions)j(useful)f(for)f(a)
-g(sp)q(eci\014c)i(program.)23 b(F)l(or)555 423 y(instance,)17
-b(the)g(follo)o(wing)g(command)g(adds)f(a)g(k)o(ey)h(sequence)g(that)f
-(quotes)555 478 y(the)f(curren)o(t)g(or)g(previous)h(w)o(ord)e(in)j
-(Bash:)675 543 y Ft($if)23 b(Bash)675 594 y(#)h(Quote)f(the)g(current)g
-(or)h(previous)f(word)675 646 y("\\C-xq":)g("\\eb\\"\\ef\\"")675
-698 y($endif)75 778 y($endif)96 b Fu(This)16 b(command,)e(as)h(seen)h
-(in)g(the)f(previous)h(example,)g(terminates)f(an)g Ft($if)f
-Fu(command.)75 858 y Ft($else)120 b Fu(Commands)15 b(in)h(this)f(branc)
-o(h)h(of)e(the)i Ft($if)e Fu(directiv)o(e)j(are)e(executed)h(if)g(the)f
-(test)g(fails.)75 937 y Ft($include)48 b Fu(This)22 b(directiv)o(e)h
-(tak)o(es)e(a)h(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h
-(reads)f(commands)315 992 y(and)e(bindings)j(from)c(that)h(\014le.)33
+722 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 802 y Ft(application)555
+857 y Fu(The)d Fk(application)i Fu(construct)e(is)g(used)h(to)e
+(include)j(application-sp)q(eci)q(\014c)h(set-)555 912
+y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)i(library)f
+(sets)f(the)g Fk(application)555 966 y(name)p Fu(,)g(and)g(y)o(ou)f
+(can)h(test)f(for)g(a)g(particular)h(v)m(alue.)20 b(This)12
+b(could)h(b)q(e)f(used)h(to)555 1021 y(bind)18 b(k)o(ey)e(sequences)i
+(to)d(functions)j(useful)f(for)f(a)g(sp)q(eci\014c)i(program.)23
+b(F)l(or)555 1076 y(instance,)17 b(the)g(follo)o(wing)g(command)g(adds)
+f(a)g(k)o(ey)h(sequence)g(that)f(quotes)555 1131 y(the)f(curren)o(t)g
+(or)g(previous)h(w)o(ord)e(in)j(Bash:)675 1195 y Ft($if)23
+b(Bash)675 1247 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)675
+1299 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 1351 y($endif)75
+1430 y($endif)96 b Fu(This)16 b(command,)e(as)h(seen)h(in)g(the)f
+(previous)h(example,)g(terminates)f(an)g Ft($if)f Fu(command.)75
+1510 y Ft($else)120 b Fu(Commands)15 b(in)h(this)f(branc)o(h)h(of)e
+(the)i Ft($if)e Fu(directiv)o(e)j(are)e(executed)h(if)g(the)f(test)g
+(fails.)75 1590 y Ft($include)48 b Fu(This)22 b(directiv)o(e)h(tak)o
+(es)e(a)h(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h(reads)f
+(commands)315 1645 y(and)e(bindings)j(from)c(that)h(\014le.)33
b(F)l(or)19 b(example,)i(the)e(follo)o(wing)h(directiv)o(e)h(reads)e
-(from)315 1047 y(`)p Ft(/etc/inputrc)p Fu(':)435 1111
-y Ft($include)k(/etc/inputrc)75 1223 y Fj(1.3.3)30 b(Sample)20
-b(Init)h(File)137 1320 y Fu(Here)16 b(is)g(an)f(example)h(of)f(an)g
+(from)315 1699 y(`)p Ft(/etc/inputrc)p Fu(':)435 1764
+y Ft($include)k(/etc/inputrc)75 1876 y Fj(1.3.3)30 b(Sample)20
+b(Init)h(File)137 1972 y Fu(Here)16 b(is)g(an)f(example)h(of)f(an)g
Fk(inputrc)k Fu(\014le.)i(This)16 b(illustrates)g(k)o(ey)f(binding,)i
-(v)m(ariable)f(assignmen)o(t,)75 1374 y(and)f(conditional)i(syn)o(tax.)
+(v)m(ariable)f(assignmen)o(t,)75 2027 y(and)f(conditional)i(syn)o(tax.)
p eop
%%Page: 10 12
10 11 bop 75 -58 a Fu(10)1299 b(GNU)15 b(Readline)h(Library)195
@@ -1962,48 +1984,51 @@ g(at)e(the)i(b)q(eginning)i(of)d(the)g(line,)j(there)315
259 y(are)c(no)h(c)o(haracters)e(in)j(the)e(line,)j(and)e(the)f(last)h
(c)o(haracter)e(t)o(yp)q(ed)i(w)o(as)f(not)g(b)q(ound)i(to)315
314 y Ft(delete-char)p Fu(,)13 b(then)j(return)f Fp(eof)p
-Fu(.)75 406 y Ft(backward-delete-char)d(\(Rubout\))315
-460 y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c
+Fu(.)75 401 y Ft(backward-delete-char)d(\(Rubout\))315
+456 y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c
(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315
-515 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
-607 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315
-662 y Fu(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
+511 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
+598 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315
+653 y Fu(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315
-717 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
+707 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315
-771 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 863
-y Ft(quoted-insert)e(\(C-q)i(or)g(C-v\))315 918 y Fu(Add)j(the)f(next)g
+762 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 850
+y Ft(quoted-insert)e(\(C-q)i(or)g(C-v\))315 904 y Fu(Add)j(the)f(next)g
(c)o(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26
-b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 973
+b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 959
y(sequences)f(lik)o(e)h Fo(C-q)p Fu(,)d(for)h(example.)75
-1065 y Ft(tab-insert)f(\(M-)401 1063 y Fn(h)p 412 1037
-74 2 v 412 1065 a Fm(T)m(AB)p 412 1072 V 484 1063 a Fn(i)499
-1065 y Ft(\))315 1119 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75
-1211 y Ft(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315
-1266 y Fu(Insert)g(y)o(ourself.)75 1358 y Ft(transpose-chars)e(\(C-t\))
-315 1413 y Fu(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e
+1046 y Ft(tab-insert)f(\(M-)401 1044 y Fn(h)p 412 1018
+74 2 v 412 1046 a Fm(T)m(AB)p 412 1054 V 484 1044 a Fn(i)499
+1046 y Ft(\))315 1101 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75
+1188 y Ft(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315
+1243 y Fu(Insert)g(y)o(ourself.)75 1330 y Ft(transpose-chars)e(\(C-t\))
+315 1385 y Fu(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e
(forw)o(ard)g(o)o(v)o(er)g(the)h(c)o(haracter)f(at)h(the)g(cursor,)315
-1467 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28
+1440 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28
b(If)18 b(the)g(insertion)h(p)q(oin)o(t)f(is)g(at)f(the)h(end)h(of)e
-(the)315 1522 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o
+(the)315 1495 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o
(w)o(o)f(c)o(haracters)g(of)h(the)g(line.)20 b(Negativ)o(e)11
-b(argumen)o(ts)315 1577 y(ha)o(v)o(e)k(no)g(e\013ect.)75
-1669 y Ft(transpose-words)e(\(M-t\))315 1724 y Fu(Drag)i(the)h(w)o(ord)
+b(argumen)o(ts)315 1550 y(ha)o(v)o(e)k(no)g(e\013ect.)75
+1637 y Ft(transpose-words)e(\(M-t\))315 1692 y Fu(Drag)i(the)h(w)o(ord)
g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o
-(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1778
-y(w)o(ord)f(as)f(w)o(ell.)75 1870 y Ft(upcase-word)g(\(M-u\))315
-1925 y Fu(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o
-(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315
-1980 y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f
-(the)i(cursor.)75 2072 y Ft(downcase-word)d(\(M-l\))315
-2126 y Fu(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h
-(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o
-(ercase)315 2181 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o
-(v)o(e)f(the)h(cursor.)75 2273 y Ft(capitalize-word)e(\(M-c\))315
-2328 y Fu(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
+(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1746
+y(w)o(ord)d(as)h(w)o(ell.)21 b(If)14 b(the)g(insertion)i(p)q(oin)o(t)e
+(is)h(at)f(the)g(end)h(of)e(the)i(line,)g(this)g(transp)q(oses)f(the)
+315 1801 y(last)h(t)o(w)o(o)f(w)o(ords)g(on)i(the)f(line.)75
+1888 y Ft(upcase-word)f(\(M-u\))315 1943 y Fu(Upp)q(ercase)j(the)f
+(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o(ord.)22 b(With)16
+b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315 1998
+y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f(the)
+i(cursor.)75 2085 y Ft(downcase-word)d(\(M-l\))315 2140
+y Fu(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o
+(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o(ercase)
+315 2195 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)75 2282 y Ft(capitalize-word)e(\(M-c\))315
+2337 y Fu(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315
-2383 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
-(the)h(cursor.)75 2494 y Fj(1.4.4)30 b(Killing)20 b(And)h(Y)-5
+2392 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)75 2499 y Fj(1.4.4)30 b(Killing)20 b(And)h(Y)-5
b(anking)75 2615 y Ft(kill-line)14 b(\(C-k\))315 2670
y Fu(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
(the)g(line.)p eop
@@ -2293,1735 +2318,1771 @@ y Ft(/*)24 b(A)f(static)g(variable)g(for)h(holding)e(the)i(line.)f(*/)
y(/*)g(If)h(the)f(line)h(has)f(any)h(text)f(in)g(it,)h(save)f(it)h(on)f
(the)h(history.)f(*/)243 461 y(if)g(\(line_read)g(&&)g(*line_read\))290
513 y(add_history)g(\(line_read\);)243 616 y(return)g(\(line_read\);)
-195 668 y(})137 738 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h
-(the)g(default)h(b)q(eha)o(viour)g(of)1169 736 y Fn(h)p
-1181 710 74 2 v 1181 738 a Fm(T)m(AB)p 1181 746 V 1253
-736 a Fn(i)1280 738 y Fu(completion:)19 b(completion)13
-b(on)f(\014le)75 793 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t)
+195 668 y(})137 735 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h
+(the)g(default)h(b)q(eha)o(viour)g(of)1169 733 y Fn(h)p
+1181 707 74 2 v 1181 735 a Fm(T)m(AB)p 1181 743 V 1253
+733 a Fn(i)1280 735 y Fu(completion:)19 b(completion)13
+b(on)f(\014le)75 790 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t)
f(Readline)j(to)d(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o
-(hange)h(the)f(binding)75 848 y(of)g(the)205 846 y Fn(h)p
-217 820 V 217 848 a Fm(T)m(AB)p 217 855 V 289 846 a Fn(i)319
-848 y Fu(k)o(ey)g(with)h Ft(rl_bind_key\(\))p Fu(.)195
-914 y Ft(int)23 b(rl_bind_key)g(\(int)g Fk(k)o(ey)p Ft(,)h
-(rl_command_func_t)d(*)p Fk(function)p Ft(\);)137 984
+(hange)h(the)f(binding)75 845 y(of)g(the)205 843 y Fn(h)p
+217 817 V 217 845 a Fm(T)m(AB)p 217 853 V 289 843 a Fn(i)319
+845 y Fu(k)o(ey)g(with)h Ft(rl_bind_key\(\))p Fu(.)195
+909 y Ft(int)23 b(rl_bind_key)g(\(int)g Fk(k)o(ey)p Ft(,)h
+(rl_command_func_t)d(*)p Fk(function)p Ft(\);)137 976
y(rl_bind_key\(\))15 b Fu(tak)o(es)h(t)o(w)o(o)g(argumen)o(ts:)22
b Fk(k)o(ey)e Fu(is)e(the)e(c)o(haracter)g(that)g(y)o(ou)h(w)o(an)o(t)f
-(to)g(bind,)i(and)75 1039 y Fk(function)h Fu(is)f(the)g(address)g(of)g
+(to)g(bind,)i(and)75 1031 y Fk(function)h Fu(is)f(the)g(address)g(of)g
(the)g(function)g(to)g(call)h(when)f Fk(k)o(ey)k Fu(is)c(pressed.)29
-b(Binding)1628 1037 y Fn(h)p 1641 1011 V 1641 1039 a
-Fm(T)m(AB)p 1641 1046 V 1712 1037 a Fn(i)1745 1039 y
-Fu(to)17 b Ft(rl_)75 1094 y(insert\(\))f Fu(mak)o(es)422
-1092 y Fn(h)p 434 1066 V 434 1094 a Fm(T)m(AB)p 434 1101
-V 506 1092 a Fn(i)539 1094 y Fu(insert)i(itself.)28 b
+b(Binding)1628 1029 y Fn(h)p 1641 1003 V 1641 1031 a
+Fm(T)m(AB)p 1641 1038 V 1712 1029 a Fn(i)1745 1031 y
+Fu(to)17 b Ft(rl_)75 1085 y(insert\(\))f Fu(mak)o(es)422
+1083 y Fn(h)p 434 1057 V 434 1085 a Fm(T)m(AB)p 434 1093
+V 506 1083 a Fn(i)539 1085 y Fu(insert)i(itself.)28 b
Ft(rl_bind_key\(\))15 b Fu(returns)j(non-zero)g(if)g
-Fk(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1148 y(ASCI)q(I)f(c)o
+Fk(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1140 y(ASCI)q(I)f(c)o
(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137
-1218 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1216
-y Fn(h)p 716 1190 V 716 1218 a Fm(T)m(AB)p 716 1226 V
-787 1216 a Fn(i)817 1218 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h
-(su\016ces:)195 1285 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137
-1354 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e
+1207 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1205
+y Fn(h)p 716 1179 V 716 1207 a Fm(T)m(AB)p 716 1215 V
+787 1205 a Fn(i)817 1207 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h
+(su\016ces:)195 1271 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137
+1338 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e
(the)h(start)f(of)h(y)o(our)g(program;)f(y)o(ou)h(migh)o(t)g(write)g(a)
-g(func-)75 1409 y(tion)k(called)h Ft(initialize_readline\(\))13
+g(func-)75 1393 y(tion)k(called)h Ft(initialize_readline\(\))13
b Fu(whic)o(h)k(p)q(erforms)f(this)h(and)g(other)f(desired)h
-(initializations,)75 1464 y(suc)o(h)f(as)e(installing)k(custom)c
+(initializations,)75 1448 y(suc)o(h)f(as)e(installing)k(custom)c
(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h
-(38\).)75 1599 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137
-1697 y Fu(Readline)14 b(pro)o(vides)f(man)o(y)e(functions)i(for)f
+(39\).)75 1575 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137
+1671 y Fu(Readline)14 b(pro)o(vides)f(man)o(y)e(functions)i(for)f
(manipulating)i(the)e(text)g(of)g(the)g(line,)i(but)e(it)h(isn't)f(p)q
-(ossi-)75 1752 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h
+(ossi-)75 1726 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h
(programs.)k(This)13 b(section)h(describ)q(es)h(the)e(v)m(arious)h
-(functions)g(and)75 1807 y(v)m(ariables)g(de\014ned)h(within)f(the)f
+(functions)g(and)75 1781 y(v)m(ariables)g(de\014ned)h(within)f(the)f
(Readline)i(library)e(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h
-(add)g(customized)75 1862 y(functionalit)o(y)j(to)f(Readline.)137
-1931 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g
+(add)g(customized)75 1836 y(functionalit)o(y)j(to)f(Readline.)137
+1903 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g
(Readline's)h(b)q(eha)o(vior,)h(or)d(using)i(an)o(y)f(func-)75
-1986 y(tionalit)o(y)23 b(Readline)h(pro)o(vides)g(in)f(other)g(co)q
+1958 y(tionalit)o(y)23 b(Readline)h(pro)o(vides)g(in)f(other)g(co)q
(de,)h(an)f(application)i(writer)d(should)i(include)h(the)e(\014le)75
-2041 y Ft(<readline/readline.h>)14 b Fu(in)j(an)o(y)g(\014le)h(that)e
+2012 y Ft(<readline/readline.h>)14 b Fu(in)j(an)o(y)g(\014le)h(that)e
(uses)h(Readline's)g(features.)24 b(Since)19 b(some)d(of)g(the)h
-(de\014-)75 2096 y(nitions)g(in)f Ft(readline.h)e Fu(use)i(the)g
+(de\014-)75 2067 y(nitions)g(in)f Ft(readline.h)e Fu(use)i(the)g
Ft(stdio)f Fu(library)l(,)h(the)g(\014le)g Ft(<stdio.h>)f
-Fu(should)h(b)q(e)g(included)j(b)q(efore)75 2151 y Ft(readline.h)p
-Fu(.)75 2268 y Fj(2.2.1)30 b(Readline)20 b(T)n(yp)r(edefs)137
-2366 y Fu(F)l(or)15 b(readabilt)o(y)l(,)g(w)o(e)g(declare)i(a)d(n)o(um)
+Fu(should)h(b)q(e)g(included)j(b)q(efore)75 2122 y Ft(readline.h)p
+Fu(.)137 2189 y Ft(readline.h)14 b Fu(de\014nes)i(a)f(C)h(prepro)q
+(cessor)f(v)m(ariable)i(that)d(should)i(b)q(e)g(treated)f(as)g(an)g(in)
+o(teger,)g Ft(RL_)75 2244 y(READLINE_VERSION)p Fu(,)9
+b(whic)o(h)j(ma)o(y)f(b)q(e)g(used)h(to)e(conditionally)k(compile)e
+(application)h(co)q(de)f(dep)q(ending)75 2298 y(on)17
+b(the)h(installed)h(Readline)g(v)o(ersion.)27 b(The)18
+b(v)m(alue)h(is)f(a)f(hexadecimal)i(enco)q(ding)g(of)e(the)h(ma)s(jor)e
+(and)75 2353 y(minor)h(v)o(ersion)h(n)o(um)o(b)q(ers)f(of)g(the)g
+(library)l(,)h(of)f(the)g(form)f(0x)p Fk(MMmm)p Fu(.)25
+b Fk(MM)c Fu(is)c(the)h(t)o(w)o(o-digit)e(ma)s(jor)75
+2408 y(v)o(ersion)f(n)o(um)o(b)q(er;)f Fk(mm)h Fu(is)g(the)f(t)o(w)o
+(o-digit)g(minor)h(v)o(ersion)g(n)o(um)o(b)q(er.)20 b(F)l(or)14
+b(Readline)h(4.2,)f(for)f(example,)75 2463 y(the)i(v)m(alue)i(of)d
+Ft(RL_READLINE_VERSION)f Fu(w)o(ould)j(b)q(e)f Ft(0x0402)p
+Fu(.)75 2574 y Fj(2.2.1)30 b(Readline)20 b(T)n(yp)r(edefs)137
+2670 y Fu(F)l(or)15 b(readabilt)o(y)l(,)g(w)o(e)g(declare)i(a)d(n)o(um)
o(b)q(er)i(of)f(new)g(ob)s(ject)g(t)o(yp)q(es,)g(all)h(p)q(oin)o(ters)f
-(to)g(functions.)137 2436 y(The)j(reason)g(for)f(declaring)i(these)f
-(new)g(t)o(yp)q(es)g(is)h(to)e(mak)o(e)g(it)h(easier)h(to)e(write)h(co)
-q(de)g(describing)75 2491 y(p)q(oin)o(ters)e(to)e(C)h(functions)h(with)
-g(appropriately)f(protot)o(yp)q(ed)g(argumen)o(ts)g(and)g(return)g(v)m
-(alues.)137 2560 y(F)l(or)j(instance,)i(sa)o(y)e(w)o(e)g(w)o(an)o(t)f
-(to)h(declare)h(a)f(v)m(ariable)i Fk(func)i Fu(as)c(a)g(p)q(oin)o(ter)h
-(to)f(a)g(function)h(whic)o(h)75 2615 y(tak)o(es)12 b(t)o(w)o(o)g
-Ft(int)g Fu(argumen)o(ts)g(and)h(returns)g(an)g Ft(int)f
-Fu(\(this)h(is)g(the)g(t)o(yp)q(e)g(of)g(all)g(of)g(the)g(Readline)h
-(bindable)75 2670 y(functions\).)20 b(Instead)c(of)f(the)g(classic)h(C)
-f(declaration)p eop
+(to)g(functions.)p eop
%%Page: 21 23
21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(21)137 149 y Ft(int)15 b(\(*func\)\(\);)75
-220 y Fu(or)g(the)g(ANSI-C)h(st)o(yle)f(declaration)137
-290 y Ft(int)g(\(*func\)\(int,)f(int\);)75 360 y Fu(w)o(e)h(ma)o(y)f
-(write)137 430 y Ft(rl_command_func_t)f(*func;)137 500
+(Readline)843 b(21)137 149 y(The)18 b(reason)g(for)f(declaring)i(these)
+f(new)g(t)o(yp)q(es)g(is)h(to)e(mak)o(e)g(it)h(easier)h(to)e(write)h
+(co)q(de)g(describing)75 204 y(p)q(oin)o(ters)e(to)e(C)h(functions)h
+(with)g(appropriately)f(protot)o(yp)q(ed)g(argumen)o(ts)g(and)g(return)
+g(v)m(alues.)137 271 y(F)l(or)j(instance,)i(sa)o(y)e(w)o(e)g(w)o(an)o
+(t)f(to)h(declare)h(a)f(v)m(ariable)i Fk(func)i Fu(as)c(a)g(p)q(oin)o
+(ter)h(to)f(a)g(function)h(whic)o(h)75 326 y(tak)o(es)12
+b(t)o(w)o(o)g Ft(int)g Fu(argumen)o(ts)g(and)h(returns)g(an)g
+Ft(int)f Fu(\(this)h(is)g(the)g(t)o(yp)q(e)g(of)g(all)g(of)g(the)g
+(Readline)h(bindable)75 381 y(functions\).)20 b(Instead)c(of)f(the)g
+(classic)h(C)f(declaration)137 447 y Ft(int)g(\(*func\)\(\);)75
+514 y Fu(or)g(the)g(ANSI-C)h(st)o(yle)f(declaration)137
+581 y Ft(int)g(\(*func\)\(int,)f(int\);)75 647 y Fu(w)o(e)h(ma)o(y)f
+(write)137 714 y Ft(rl_command_func_t)f(*func;)137 781
y Fu(The)j(full)g(list)g(of)f(function)h(p)q(oin)o(ter)g(t)o(yp)q(es)f
-(a)o(v)m(ailable)i(is)75 584 y Ft(typedef)d(int)h(rl_command_func_t)e
-(\(int,)h(int\);)75 652 y(typedef)g(char)h(*rl_compentry_func_t)d
-(\(const)j(char)f(*,)h(int\);)75 721 y(typedef)f(char)h
+(a)o(v)m(ailable)i(is)75 859 y Ft(typedef)d(int)h(rl_command_func_t)e
+(\(int,)h(int\);)75 926 y(typedef)g(char)h(*rl_compentry_func_t)d
+(\(const)j(char)f(*,)h(int\);)75 993 y(typedef)f(char)h
(**rl_completion_func_t)d(\(const)i(char)h(*,)g(int,)f(int\);)75
-790 y(typedef)g(char)h(*rl_quote_func_t)e(\(char)h(*,)h(int,)g(char)f
-(*\);)75 858 y(typedef)g(char)h(*rl_dequote_func_t)d(\(char)j(*,)g
-(int\);)75 927 y(typedef)f(int)h(rl_compignore_func_t)d(\(char)j(**\);)
-75 996 y(typedef)f(void)h(rl_compdisp_func_t)d(\(char)j(**,)g(int,)f
-(int\);)75 1064 y(typedef)g(int)h(rl_hook_func_t)e(\(void\);)75
-1133 y(typedef)h(int)h(rl_getc_func_t)e(\(FILE)i(*\);)75
-1202 y(typedef)f(int)h(rl_linebuf_func_t)e(\(char)h(*,)h(int\);)75
-1270 y(typedef)f(int)h(rl_intfunc_t)e(\(int\);)75 1339
-y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)75 1408 y(typedef)h(int)h
-(rl_icpfunc_t)e(\(char)i(*\);)75 1476 y(typedef)f(int)h(rl_icppfunc_t)e
-(\(char)i(**\);)75 1545 y(typedef)f(void)h(rl_voidfunc_t)e(\(void\);)75
-1614 y(typedef)h(void)h(rl_vintfunc_t)e(\(int\);)75 1682
-y(typedef)h(void)h(rl_vcpfunc_t)e(\(char)i(*\);)75 1751
+1059 y(typedef)g(char)h(*rl_quote_func_t)e(\(char)h(*,)h(int,)g(char)f
+(*\);)75 1126 y(typedef)g(char)h(*rl_dequote_func_t)d(\(char)j(*,)g
+(int\);)75 1193 y(typedef)f(int)h(rl_compignore_func_t)d(\(char)j
+(**\);)75 1259 y(typedef)f(void)h(rl_compdisp_func_t)d(\(char)j(**,)g
+(int,)f(int\);)75 1326 y(typedef)g(int)h(rl_hook_func_t)e(\(void\);)75
+1393 y(typedef)h(int)h(rl_getc_func_t)e(\(FILE)i(*\);)75
+1459 y(typedef)f(int)h(rl_linebuf_func_t)e(\(char)h(*,)h(int\);)75
+1526 y(typedef)f(int)h(rl_intfunc_t)e(\(int\);)75 1593
+y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)75 1659 y(typedef)h(int)h
+(rl_icpfunc_t)e(\(char)i(*\);)75 1726 y(typedef)f(int)h(rl_icppfunc_t)e
+(\(char)i(**\);)75 1793 y(typedef)f(void)h(rl_voidfunc_t)e(\(void\);)75
+1859 y(typedef)h(void)h(rl_vintfunc_t)e(\(int\);)75 1926
+y(typedef)h(void)h(rl_vcpfunc_t)e(\(char)i(*\);)75 1993
y(typedef)f(void)h(rl_vcppfunc_t)e(\(char)i(**\);)75
-1855 y Fj(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5
-b(unction)137 1954 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g
+2091 y Fj(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5
+b(unction)137 2187 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g
(for)e(Readline,)i(y)o(ou)f(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o
-(v)o(en)o(tions)75 2009 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h
+(v)o(en)o(tions)75 2242 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h
(functions,)g(and)g(the)f(names)h(of)f(the)g(v)m(ariables)i(that)d
-(describ)q(e)k(the)d(curren)o(t)75 2064 y(state)c(of)h(the)g(line)i
-(read)e(so)g(far.)137 2134 y(The)h(calling)h(sequence)f(for)f(a)f
-(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)195 2201 y
-Ft(foo)23 b(\(int)h(count,)f(int)g(key\))75 2271 y Fu(where)18
+(describ)q(e)k(the)d(curren)o(t)75 2297 y(state)c(of)h(the)g(line)i
+(read)e(so)g(far.)137 2363 y(The)h(calling)h(sequence)f(for)f(a)f
+(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)195 2427 y
+Ft(foo)23 b(\(int)h(count,)f(int)g(key\))75 2494 y Fu(where)18
b Fk(coun)o(t)h Fu(is)f(the)g(n)o(umeric)h(argumen)o(t)e(\(or)h(1)f(if)
i(defaulted\))f(and)g Fk(k)o(ey)k Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v)
-o(ok)o(ed)75 2326 y(this)f(function.)137 2396 y(It)c(is)g(completely)h
+o(ok)o(ed)75 2549 y(this)f(function.)137 2615 y(It)c(is)g(completely)h
(up)f(to)f(the)g(function)i(as)e(to)g(what)g(should)h(b)q(e)g(done)g
-(with)g(the)g(n)o(umeric)g(argumen)o(t.)75 2451 y(Some)20
+(with)g(the)g(n)o(umeric)g(argumen)o(t.)75 2670 y(Some)20
b(functions)h(use)f(it)g(as)g(a)g(rep)q(eat)g(coun)o(t,)g(some)g(as)g
-(a)f(\015ag,)i(and)f(others)g(to)f(c)o(ho)q(ose)h(alternate)75
-2506 y(b)q(eha)o(vior)i(\(refreshing)g(the)g(curren)o(t)f(line)j(as)d
+(a)f(\015ag,)i(and)f(others)g(to)f(c)o(ho)q(ose)h(alternate)p
+eop
+%%Page: 22 24
+22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)h(Library)75
+149 y(b)q(eha)o(vior)22 b(\(refreshing)g(the)g(curren)o(t)f(line)j(as)d
(opp)q(osed)h(to)f(refreshing)i(the)e(screen,)j(for)d(example\).)75
-2560 y(Some)c(c)o(ho)q(ose)f(to)g(ignore)h(it.)24 b(In)18
+204 y(Some)c(c)o(ho)q(ose)f(to)g(ignore)h(it.)24 b(In)18
b(general,)f(if)g(a)f(function)h(uses)g(the)g(n)o(umeric)h(argumen)o(t)
-d(as)i(a)f(rep)q(eat)75 2615 y(coun)o(t,)e(it)g(should)h(b)q(e)f(able)h
+d(as)i(a)f(rep)q(eat)75 259 y(coun)o(t,)e(it)g(should)h(b)q(e)f(able)h
(to)e(do)h(something)h(useful)g(with)f(b)q(oth)g(negativ)o(e)g(and)g(p)
-q(ositiv)o(e)h(argumen)o(ts.)75 2670 y(A)o(t)g(the)g(v)o(ery)g(least,)g
+q(ositiv)o(e)h(argumen)o(ts.)75 314 y(A)o(t)g(the)g(v)o(ery)g(least,)g
(it)g(should)h(b)q(e)g(a)o(w)o(are)e(that)h(it)g(can)g(b)q(e)h(passed)g
-(a)f(negativ)o(e)g(argumen)o(t.)p eop
-%%Page: 22 24
-22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)h(Library)75
-149 y Fs(2.3)33 b(Readline)23 b(V)-6 b(ariables)137 245
-y Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m(ailable)i(to)e(function)h
-(writers.)1773 356 y(V)l(ariable)-1861 b Fi(char)20 b(*)f
-Fh(rl)p 286 356 18 3 v 21 w(line)p 395 356 V 23 w(bu\013er)195
-410 y Fu(This)d(is)g(the)g(line)h(gathered)f(so)f(far.)20
-b(Y)l(ou)c(are)f(w)o(elcome)h(to)f(mo)q(dify)h(the)g(con)o(ten)o(ts)f
-(of)g(the)h(line,)195 465 y(but)i(see)g(Section)h(2.4.5)d([Allo)o(wing)
-i(Undoing],)h(page)e(29.)27 b(The)18 b(function)h Ft(rl_extend_line_)
-195 520 y(buffer)14 b Fu(is)i(a)o(v)m(ailable)h(to)d(increase)j(the)e
-(memory)f(allo)q(cated)j(to)d Ft(rl_line_buffer)p Fu(.)1773
-631 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 631
-V 21 w(p)r(oin)n(t)195 686 y Fu(The)15 b(o\013set)g(of)f(the)i(curren)o
-(t)f(cursor)g(p)q(osition)h(in)g Ft(rl_line_buffer)d
-Fu(\(the)i Fl(p)n(oint)t Fu(\).)1773 797 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 797 V 21 w(end)195 852 y Fu(The)14
-b(n)o(um)o(b)q(er)g(of)g(c)o(haracters)f(presen)o(t)h(in)h
-Ft(rl_line_buffer)p Fu(.)i(When)e Ft(rl_point)e Fu(is)h(at)f(the)h(end)
-195 906 y(of)h(the)g(line,)i Ft(rl_point)d Fu(and)h Ft(rl_end)f
-Fu(are)h(equal.)1773 1017 y(V)l(ariable)-1861 b Fi(int)20
-b Fh(rl)p 215 1017 V 21 w(mark)195 1072 y Fu(The)f Fk(mark)h
-Fu(\(sa)o(v)o(ed)e(p)q(osition\))h(in)g(the)g(curren)o(t)f(line.)31
-b(If)19 b(set,)g(the)f(mark)g(and)h(p)q(oin)o(t)g(de\014ne)g(a)195
-1127 y Fl(r)n(e)n(gion)p Fu(.)1773 1238 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 1238 V 21 w(done)195 1293 y
+(a)f(negativ)o(e)g(argumen)o(t.)75 438 y Fs(2.3)33 b(Readline)23
+b(V)-6 b(ariables)137 533 y Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m
+(ailable)i(to)e(function)h(writers.)1773 642 y(V)l(ariable)-1861
+b Fi(char)20 b(*)f Fh(rl)p 286 642 18 3 v 21 w(line)p
+395 642 V 23 w(bu\013er)195 697 y Fu(This)d(is)g(the)g(line)h(gathered)
+f(so)f(far.)20 b(Y)l(ou)c(are)f(w)o(elcome)h(to)f(mo)q(dify)h(the)g
+(con)o(ten)o(ts)f(of)g(the)h(line,)195 752 y(but)i(see)g(Section)h
+(2.4.5)d([Allo)o(wing)i(Undoing],)h(page)e(29.)27 b(The)18
+b(function)h Ft(rl_extend_line_)195 807 y(buffer)14 b
+Fu(is)i(a)o(v)m(ailable)h(to)d(increase)j(the)e(memory)f(allo)q(cated)j
+(to)d Ft(rl_line_buffer)p Fu(.)1773 916 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 916 V 21 w(p)r(oin)n(t)195
+971 y Fu(The)15 b(o\013set)g(of)f(the)i(curren)o(t)f(cursor)g(p)q
+(osition)h(in)g Ft(rl_line_buffer)d Fu(\(the)i Fl(p)n(oint)t
+Fu(\).)1773 1081 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p
+215 1081 V 21 w(end)195 1136 y Fu(The)14 b(n)o(um)o(b)q(er)g(of)g(c)o
+(haracters)f(presen)o(t)h(in)h Ft(rl_line_buffer)p Fu(.)i(When)e
+Ft(rl_point)e Fu(is)h(at)f(the)h(end)195 1190 y(of)h(the)g(line,)i
+Ft(rl_point)d Fu(and)h Ft(rl_end)f Fu(are)h(equal.)1773
+1300 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1300
+V 21 w(mark)195 1355 y Fu(The)f Fk(mark)h Fu(\(sa)o(v)o(ed)e(p)q
+(osition\))h(in)g(the)g(curren)o(t)f(line.)31 b(If)19
+b(set,)g(the)f(mark)g(and)h(p)q(oin)o(t)g(de\014ne)g(a)195
+1410 y Fl(r)n(e)n(gion)p Fu(.)1773 1519 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1519 V 21 w(done)195 1574 y
Fu(Setting)11 b(this)g(to)g(a)f(non-zero)h(v)m(alue)h(causes)f
(Readline)h(to)f(return)f(the)h(curren)o(t)g(line)h(immediately)l(.)
-1773 1404 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215
-1404 V 21 w(n)n(um)p 347 1404 V 19 w(c)n(hars)p 496 1404
-V 20 w(to)p 567 1404 V 21 w(read)195 1459 y Fu(Setting)d(this)g(to)f(a)
+1773 1684 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215
+1684 V 21 w(n)n(um)p 347 1684 V 19 w(c)n(hars)p 496 1684
+V 20 w(to)p 567 1684 V 21 w(read)195 1738 y Fu(Setting)d(this)g(to)f(a)
g(p)q(ositiv)o(e)h(v)m(alue)h(b)q(efore)f(calling)h Ft(readline\(\))d
-Fu(causes)h(Readline)i(to)e(return)195 1514 y(after)h(accepting)i(that)
+Fu(causes)h(Readline)i(to)e(return)195 1793 y(after)h(accepting)i(that)
e(man)o(y)g(c)o(haracters,)h(rather)f(than)h(reading)g(up)g(to)f(a)h(c)
-o(haracter)f(b)q(ound)195 1568 y(to)e Ft(accept-line)p
-Fu(.)1773 1679 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p
-215 1679 V 21 w(p)r(ending)p 436 1679 V 20 w(input)195
-1734 y Fu(Setting)13 b(this)g(to)f(a)g(v)m(alue)i(mak)o(es)e(it)h(the)f
+o(haracter)f(b)q(ound)195 1848 y(to)e Ft(accept-line)p
+Fu(.)1773 1958 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p
+215 1958 V 21 w(p)r(ending)p 436 1958 V 20 w(input)195
+2012 y Fu(Setting)13 b(this)g(to)f(a)g(v)m(alue)i(mak)o(es)e(it)h(the)f
(next)h(k)o(eystrok)o(e)f(read.)19 b(This)13 b(is)g(a)f(w)o(a)o(y)g(to)
-f(stu\013)h(a)h(single)195 1789 y(c)o(haracter)h(in)o(to)i(the)f(input)
-h(stream.)1773 1900 y(V)l(ariable)-1861 b Fi(int)20 b
-Fh(rl)p 215 1900 V 21 w(dispatc)n(hing)195 1955 y Fu(Set)12
+f(stu\013)h(a)h(single)195 2067 y(c)o(haracter)h(in)o(to)i(the)f(input)
+h(stream.)1773 2177 y(V)l(ariable)-1861 b Fi(int)20 b
+Fh(rl)p 215 2177 V 21 w(dispatc)n(hing)195 2232 y Fu(Set)12
b(to)g(a)f(non-zero)i(v)m(alue)g(if)g(a)f(function)h(is)f(b)q(eing)i
(called)f(from)f(a)f(k)o(ey)h(binding;)j(zero)d(otherwise.)195
-2010 y(Application)20 b(functions)e(can)g(test)g(this)g(to)f(disco)o(v)
+2286 y(Application)20 b(functions)e(can)g(test)g(this)g(to)f(disco)o(v)
o(er)h(whether)g(they)g(w)o(ere)g(called)h(directly)g(or)195
-2064 y(b)o(y)c(Readline's)h(dispatc)o(hing)h(mec)o(hanism.)1773
-2175 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2175
-V 21 w(erase)p 363 2175 V 20 w(empt)n(y)p 540 2175 V
-20 w(line)195 2230 y Fu(Setting)j(this)h(to)e(a)h(non-zero)g(v)m(alue)h
+2341 y(b)o(y)c(Readline's)h(dispatc)o(hing)h(mec)o(hanism.)1773
+2451 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2451
+V 21 w(erase)p 363 2451 V 20 w(empt)n(y)p 540 2451 V
+20 w(line)195 2506 y Fu(Setting)j(this)h(to)e(a)h(non-zero)g(v)m(alue)h
(causes)f(Readline)i(to)d(completely)i(erase)f(the)g(curren)o(t)195
-2285 y(line,)g(including)h(an)o(y)c(prompt,)h(an)o(y)g(time)g(a)f
+2560 y(line,)g(including)h(an)o(y)c(prompt,)h(an)o(y)g(time)g(a)f
(newline)j(is)e(t)o(yp)q(ed)g(as)f(the)h(only)g(c)o(haracter)f(on)195
-2340 y(an)e(otherwise-empt)o(y)g(line.)31 b(The)18 b(cursor)g(is)h(mo)o
+2615 y(an)e(otherwise-empt)o(y)g(line.)31 b(The)18 b(cursor)g(is)h(mo)o
(v)o(ed)e(to)h(the)g(b)q(eginning)i(of)e(the)g(newly-blank)195
-2395 y(line.)1773 2506 y(V)l(ariable)-1861 b Fi(char)20
-b(*)f Fh(rl)p 286 2506 V 21 w(prompt)195 2560 y Fu(The)13
-b(prompt)g(Readline)h(uses.)20 b(This)13 b(is)h(set)f(from)f(the)h
-(argumen)o(t)g(to)f Ft(readline\(\))p Fu(,)g(and)h(should)195
-2615 y(not)g(b)q(e)h(assigned)g(to)f(directly)l(.)21
-b(The)14 b Ft(rl_set_prompt\(\))d Fu(function)j(\(see)g(Section)g
-(2.4.6)e([Redis-)195 2670 y(pla)o(y],)j(page)g(30\))f(ma)o(y)h(b)q(e)g
-(used)h(to)f(mo)q(dify)h(the)f(prompt)g(string)g(after)f(calling)j
-Ft(readline\(\))p Fu(.)p eop
+2670 y(line.)p eop
%%Page: 23 25
23 24 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(23)1773 149 y(V)l(ariable)-1861 b Fi(int)20
-b Fh(rl)p 215 149 18 3 v 21 w(already)p 419 149 V 21
-w(prompted)195 204 y Fu(If)e(an)g(application)i(wishes)f(to)f(displa)o
-(y)h(the)f(prompt)g(itself,)h(rather)f(than)g(ha)o(v)o(e)g(Readline)h
-(do)195 259 y(it)e(the)f(\014rst)g(time)h Ft(readline\(\))e
-Fu(is)i(called,)h(it)e(should)i(set)e(this)h(v)m(ariable)g(to)f(a)g
-(non-zero)h(v)m(alue)195 314 y(after)h(displa)o(ying)j(the)e(prompt.)31
-b(The)19 b(prompt)g(m)o(ust)f(also)h(b)q(e)h(passed)f(as)f(the)h
-(argumen)o(t)g(to)195 369 y Ft(readline\(\))c Fu(so)h(the)h(redispla)o
-(y)g(functions)h(can)e(up)q(date)h(the)g(displa)o(y)h(prop)q(erly)l(.)
-24 b(The)17 b(calling)195 423 y(application)g(is)f(resp)q(onsible)h
-(for)d(managing)h(the)h(v)m(alue;)g(Readline)g(nev)o(er)g(sets)e(it.)
-1773 549 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f
-Fh(rl)p 436 549 V 21 w(library)p 625 549 V 21 w(v)n(ersion)195
-604 y Fu(The)c(v)o(ersion)h(n)o(um)o(b)q(er)f(of)g(this)h(revision)g
-(of)f(the)g(library)l(.)1773 730 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 730 V 21 w(gn)n(u)p 327 730
-V 20 w(readline)p 545 730 V 22 w(p)195 785 y Fu(Alw)o(a)o(ys)15
-b(set)g(to)f(1,)h(denoting)h(that)e(this)i(is)g Fp(gnu)f
-Fu(readline)h(rather)f(than)g(some)g(em)o(ulation.)1773
-911 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
-436 911 V 21 w(terminal)p 668 911 V 21 w(name)195 966
-y Fu(The)14 b(terminal)h(t)o(yp)q(e,)f(used)h(for)e(initialization.)23
-b(If)14 b(not)f(set)h(b)o(y)g(the)g(application,)i(Readline)f(sets)195
-1021 y(this)h(to)e(the)h(v)m(alue)i(of)e(the)g Ft(TERM)g
-Fu(en)o(vironmen)o(t)g(v)m(ariable)i(the)e(\014rst)g(time)g(it)h(is)f
-(called.)1773 1147 y(V)l(ariable)-1861 b Fi(const)20
-b(char)g(*)f Fh(rl)p 436 1147 V 21 w(readline)p 655 1147
-V 22 w(name)195 1201 y Fu(This)d(v)m(ariable)h(is)f(set)g(to)f(a)g
+(Readline)843 b(23)1773 149 y(V)l(ariable)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 149 18 3 v 21 w(prompt)195 204 y Fu(The)13
+b(prompt)g(Readline)h(uses.)20 b(This)13 b(is)h(set)f(from)f(the)h
+(argumen)o(t)g(to)f Ft(readline\(\))p Fu(,)g(and)h(should)195
+259 y(not)g(b)q(e)h(assigned)g(to)f(directly)l(.)21 b(The)14
+b Ft(rl_set_prompt\(\))d Fu(function)j(\(see)g(Section)g(2.4.6)e
+([Redis-)195 314 y(pla)o(y],)j(page)g(30\))f(ma)o(y)h(b)q(e)g(used)h
+(to)f(mo)q(dify)h(the)f(prompt)g(string)g(after)f(calling)j
+Ft(readline\(\))p Fu(.)1773 429 y(V)l(ariable)-1861 b
+Fi(int)20 b Fh(rl)p 215 429 V 21 w(already)p 419 429
+V 21 w(prompted)195 484 y Fu(If)e(an)g(application)i(wishes)f(to)f
+(displa)o(y)h(the)f(prompt)g(itself,)h(rather)f(than)g(ha)o(v)o(e)g
+(Readline)h(do)195 538 y(it)e(the)f(\014rst)g(time)h
+Ft(readline\(\))e Fu(is)i(called,)h(it)e(should)i(set)e(this)h(v)m
+(ariable)g(to)f(a)g(non-zero)h(v)m(alue)195 593 y(after)h(displa)o
+(ying)j(the)e(prompt.)31 b(The)19 b(prompt)g(m)o(ust)f(also)h(b)q(e)h
+(passed)f(as)f(the)h(argumen)o(t)g(to)195 648 y Ft(readline\(\))c
+Fu(so)h(the)h(redispla)o(y)g(functions)h(can)e(up)q(date)h(the)g
+(displa)o(y)h(prop)q(erly)l(.)24 b(The)17 b(calling)195
+703 y(application)g(is)f(resp)q(onsible)h(for)d(managing)h(the)h(v)m
+(alue;)g(Readline)g(nev)o(er)g(sets)e(it.)1773 818 y(V)l(ariable)-1861
+b Fi(const)20 b(char)g(*)f Fh(rl)p 436 818 V 21 w(library)p
+625 818 V 21 w(v)n(ersion)195 873 y Fu(The)c(v)o(ersion)h(n)o(um)o(b)q
+(er)f(of)g(this)h(revision)g(of)f(the)g(library)l(.)1773
+988 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 988
+V 21 w(readline)p 434 988 V 22 w(v)n(ersion)195 1043
+y Fu(An)d(in)o(teger)h(enco)q(ding)g(the)f(curren)o(t)g(v)o(ersion)g
+(of)g(the)g(library)l(.)27 b(The)17 b(enco)q(ding)h(is)g(of)f(the)g
+(form)195 1097 y(0x)p Fk(MMmm)p Fu(,)g(where)i Fk(MM)j
+Fu(is)d(the)f(t)o(w)o(o-digit)g(ma)s(jor)f(v)o(ersion)i(n)o(um)o(b)q
+(er,)g(and)f Fk(mm)g Fu(is)h(the)f(t)o(w)o(o-)195 1152
+y(digit)i(minor)e(v)o(ersion)h(n)o(um)o(b)q(er.)31 b(F)l(or)18
+b(example,)i(for)e(Readline-4.2,)i Ft(rl_readline_version)195
+1207 y Fu(w)o(ould)c(ha)o(v)o(e)e(the)i(v)m(alue)g(0x0402.)1773
+1322 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1322
+V 21 w(gn)n(u)p 327 1322 V 20 w(readline)p 545 1322 V
+22 w(p)195 1377 y Fu(Alw)o(a)o(ys)15 b(set)g(to)f(1,)h(denoting)h(that)
+e(this)i(is)g Fp(gnu)f Fu(readline)h(rather)f(than)g(some)g(em)o
+(ulation.)1773 1492 y(V)l(ariable)-1861 b Fi(const)20
+b(char)g(*)f Fh(rl)p 436 1492 V 21 w(terminal)p 668 1492
+V 21 w(name)195 1547 y Fu(The)14 b(terminal)h(t)o(yp)q(e,)f(used)h(for)
+e(initialization.)23 b(If)14 b(not)f(set)h(b)o(y)g(the)g(application,)i
+(Readline)f(sets)195 1601 y(this)h(to)e(the)h(v)m(alue)i(of)e(the)g
+Ft(TERM)g Fu(en)o(vironmen)o(t)g(v)m(ariable)i(the)e(\014rst)g(time)g
+(it)h(is)f(called.)1773 1717 y(V)l(ariable)-1861 b Fi(const)20
+b(char)g(*)f Fh(rl)p 436 1717 V 21 w(readline)p 655 1717
+V 22 w(name)195 1771 y Fu(This)d(v)m(ariable)h(is)f(set)g(to)f(a)g
(unique)i(name)f(b)o(y)f(eac)o(h)h(application)h(using)f(Readline.)23
-b(The)16 b(v)m(alue)195 1256 y(allo)o(ws)e(conditional)i(parsing)e(of)g
+b(The)16 b(v)m(alue)195 1826 y(allo)o(ws)e(conditional)i(parsing)e(of)g
(the)g(inputrc)h(\014le)g(\(see)f(Section)h(1.3.2)d([Conditional)j
-(Init)g(Con-)195 1311 y(structs],)f(page)h(8\).)1773
-1437 y(V)l(ariable)-1861 b Fi(FILE)20 b(*)f Fh(rl)p 286
-1437 V 21 w(instream)195 1492 y Fu(The)c(stdio)h(stream)e(from)h(whic)o
-(h)h(Readline)g(reads)f(input.)1773 1618 y(V)l(ariable)-1861
-b Fi(FILE)20 b(*)f Fh(rl)p 286 1618 V 21 w(outstream)195
-1673 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)g(p)q
-(erforms)f(output.)1773 1799 y(V)l(ariable)-1861 b Fi
-(rl_command_func_t)22 b(*)d Fh(rl)p 626 1799 V 21 w(last)p
-735 1799 V 21 w(func)195 1854 y Fu(The)f(address)f(of)g(the)g(last)h
+(Init)g(Con-)195 1881 y(structs],)f(page)h(8\).)1773
+1996 y(V)l(ariable)-1861 b Fi(FILE)20 b(*)f Fh(rl)p 286
+1996 V 21 w(instream)195 2051 y Fu(The)c(stdio)h(stream)e(from)h(whic)o
+(h)h(Readline)g(reads)f(input.)1773 2166 y(V)l(ariable)-1861
+b Fi(FILE)20 b(*)f Fh(rl)p 286 2166 V 21 w(outstream)195
+2221 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)g(p)q
+(erforms)f(output.)1773 2336 y(V)l(ariable)-1861 b Fi
+(rl_command_func_t)22 b(*)d Fh(rl)p 626 2336 V 21 w(last)p
+735 2336 V 21 w(func)195 2391 y Fu(The)f(address)f(of)g(the)g(last)h
(command)f(function)h(Readline)h(executed.)27 b(Ma)o(y)17
-b(b)q(e)h(used)g(to)f(test)195 1908 y(whether)e(or)g(not)g(a)g
+b(b)q(e)h(used)g(to)f(test)195 2445 y(whether)e(or)g(not)g(a)g
(function)h(is)f(b)q(eing)i(executed)f(t)o(wice)g(in)g(succession,)g
-(for)e(example.)1773 2034 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21
-b(*)e Fh(rl)p 547 2034 V 22 w(startup)p 752 2034 V 19
-w(ho)r(ok)195 2089 y Fu(If)e(non-zero,)h(this)g(is)f(the)h(address)f
+(for)e(example.)1773 2560 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21
+b(*)e Fh(rl)p 547 2560 V 22 w(startup)p 752 2560 V 19
+w(ho)r(ok)195 2615 y Fu(If)e(non-zero,)h(this)g(is)f(the)h(address)f
(of)f(a)h(function)h(to)f(call)h(just)f(b)q(efore)g Ft(readline)f
-Fu(prin)o(ts)i(the)195 2144 y(\014rst)d(prompt.)1773
-2270 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e
-Fh(rl)p 547 2270 V 22 w(pre)p 651 2270 V 20 w(input)p
-804 2270 V 21 w(ho)r(ok)195 2325 y Fu(If)f(non-zero,)g(this)g(is)h(the)
-f(address)f(of)h(a)f(function)i(to)e(call)i(after)e(the)h(\014rst)f
-(prompt)g(has)h(b)q(een)195 2380 y(prin)o(ted)e(and)f(just)g(b)q(efore)
-h Ft(readline)e Fu(starts)g(reading)h(input)i(c)o(haracters.)1773
-2506 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e
-Fh(rl)p 547 2506 V 22 w(ev)n(en)n(t)p 701 2506 V 22 w(ho)r(ok)195
-2560 y Fu(If)i(non-zero,)g(this)g(is)g(the)f(address)g(of)g(a)g
-(function)h(to)f(call)i(p)q(erio)q(dically)h(when)e(Readline)g(is)195
-2615 y(w)o(aiting)15 b(for)f(terminal)h(input.)21 b(By)14
-b(default,)h(this)g(will)i(b)q(e)e(called)h(at)e(most)g(ten)g(times)h
-(a)f(second)195 2670 y(if)i(there)f(is)h(no)f(k)o(eyb)q(oard)g(input.)p
-eop
+Fu(prin)o(ts)i(the)195 2670 y(\014rst)d(prompt.)p eop
%%Page: 24 26
24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)h(Library)1773
-149 y(V)l(ariable)-1861 b Fi(rl_getc_func_t)21 b(*)e
-Fh(rl)p 547 149 18 3 v 22 w(getc)p 671 149 V 21 w(function)195
-204 y Fu(If)c(non-zero,)h(Readline)g(will)h(call)f(indirectly)i
+149 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e
+Fh(rl)p 547 149 18 3 v 22 w(pre)p 651 149 V 20 w(input)p
+804 149 V 21 w(ho)r(ok)195 204 y Fu(If)f(non-zero,)g(this)g(is)h(the)f
+(address)f(of)h(a)f(function)i(to)e(call)i(after)e(the)h(\014rst)f
+(prompt)g(has)h(b)q(een)195 259 y(prin)o(ted)e(and)f(just)g(b)q(efore)h
+Ft(readline)e Fu(starts)g(reading)h(input)i(c)o(haracters.)1773
+375 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e
+Fh(rl)p 547 375 V 22 w(ev)n(en)n(t)p 701 375 V 22 w(ho)r(ok)195
+430 y Fu(If)i(non-zero,)g(this)g(is)g(the)f(address)g(of)g(a)g
+(function)h(to)f(call)i(p)q(erio)q(dically)h(when)e(Readline)g(is)195
+484 y(w)o(aiting)15 b(for)f(terminal)h(input.)21 b(By)14
+b(default,)h(this)g(will)i(b)q(e)e(called)h(at)e(most)g(ten)g(times)h
+(a)f(second)195 539 y(if)i(there)f(is)h(no)f(k)o(eyb)q(oard)g(input.)
+1773 655 y(V)l(ariable)-1861 b Fi(rl_getc_func_t)21 b(*)e
+Fh(rl)p 547 655 V 22 w(getc)p 671 655 V 21 w(function)195
+710 y Fu(If)c(non-zero,)h(Readline)g(will)h(call)f(indirectly)i
(through)d(this)g(p)q(oin)o(ter)h(to)f(get)f(a)h(c)o(haracter)g(from)
-195 259 y(the)k(input)i(stream.)31 b(By)19 b(default,)h(it)g(is)g(set)f
+195 764 y(the)k(input)i(stream.)31 b(By)19 b(default,)h(it)g(is)g(set)f
(to)f Ft(rl_getc)p Fu(,)h(the)g(default)h(Readline)h(c)o(haracter)195
-314 y(input)16 b(function)g(\(see)f(Section)h(2.4.8)e([Character)g
-(Input],)h(page)g(32\).)1773 442 y(V)l(ariable)-1861
-b Fi(rl_voidfunc_t)21 b(*)e Fh(rl)p 521 442 V 21 w(redispla)n(y)p
-765 442 V 22 w(function)195 497 y Fu(If)f(non-zero,)h(Readline)g(will)h
+819 y(input)16 b(function)g(\(see)f(Section)h(2.4.8)e([Character)g
+(Input],)h(page)g(32\).)1773 935 y(V)l(ariable)-1861
+b Fi(rl_voidfunc_t)21 b(*)e Fh(rl)p 521 935 V 21 w(redispla)n(y)p
+765 935 V 22 w(function)195 990 y Fu(If)f(non-zero,)h(Readline)g(will)h
(call)f(indirectly)h(through)e(this)g(p)q(oin)o(ter)h(to)e(up)q(date)i
-(the)f(displa)o(y)195 552 y(with)c(the)f(curren)o(t)h(con)o(ten)o(ts)f
+(the)f(displa)o(y)195 1044 y(with)c(the)f(curren)o(t)h(con)o(ten)o(ts)f
(of)g(the)g(editing)i(bu\013er.)k(By)14 b(default,)g(it)g(is)g(set)f
-(to)g Ft(rl_redisplay)p Fu(,)195 607 y(the)i(default)h(Readline)h
+(to)g Ft(rl_redisplay)p Fu(,)195 1099 y(the)i(default)h(Readline)h
(redispla)o(y)f(function)g(\(see)f(Section)h(2.4.6)e([Redispla)o(y],)h
-(page)g(30\).)1773 735 y(V)l(ariable)-1861 b Fi(rl_vintfunc_t)21
-b(*)e Fh(rl)p 521 735 V 21 w(prep)p 656 735 V 21 w(term)p
-798 735 V 19 w(function)195 790 y Fu(If)12 b(non-zero,)h(Readline)g
+(page)g(30\).)1773 1215 y(V)l(ariable)-1861 b Fi(rl_vintfunc_t)21
+b(*)e Fh(rl)p 521 1215 V 21 w(prep)p 656 1215 V 21 w(term)p
+798 1215 V 19 w(function)195 1270 y Fu(If)12 b(non-zero,)h(Readline)g
(will)h(call)f(indirectly)h(through)e(this)g(p)q(oin)o(ter)h(to)e
-(initialize)k(the)e(terminal.)195 844 y(The)19 b(function)g(tak)o(es)f
+(initialize)k(the)e(terminal.)195 1324 y(The)19 b(function)g(tak)o(es)f
(a)g(single)i(argumen)o(t,)e(an)h Ft(int)f Fu(\015ag)g(that)g(sa)o(ys)g
-(whether)g(or)h(not)f(to)g(use)195 899 y(eigh)o(t-bit)g(c)o(haracters.)
-25 b(By)17 b(default,)h(this)f(is)h(set)e(to)h Ft(rl_prep_terminal)e
-Fu(\(see)i(Section)h(2.4.9)195 954 y([T)l(erminal)e(Managemen)o(t],)d
-(page)i(32\).)1773 1082 y(V)l(ariable)-1861 b Fi(rl_voidfunc_t)21
-b(*)e Fh(rl)p 521 1082 V 21 w(deprep)p 714 1082 V 21
-w(term)p 856 1082 V 19 w(function)195 1137 y Fu(If)g(non-zero,)g
-(Readline)g(will)h(call)g(indirectly)g(through)e(this)h(p)q(oin)o(ter)f
-(to)g(reset)g(the)h(terminal.)195 1192 y(This)f(function)g(should)h
-(undo)f(the)f(e\013ects)h(of)f Ft(rl_prep_term_function)p
-Fu(.)24 b(By)17 b(default,)i(this)195 1247 y(is)d(set)f(to)f
+(whether)g(or)h(not)f(to)g(use)195 1379 y(eigh)o(t-bit)g(c)o
+(haracters.)25 b(By)17 b(default,)h(this)f(is)h(set)e(to)h
+Ft(rl_prep_terminal)e Fu(\(see)i(Section)h(2.4.9)195
+1434 y([T)l(erminal)e(Managemen)o(t],)d(page)i(33\).)1773
+1550 y(V)l(ariable)-1861 b Fi(rl_voidfunc_t)21 b(*)e
+Fh(rl)p 521 1550 V 21 w(deprep)p 714 1550 V 21 w(term)p
+856 1550 V 19 w(function)195 1605 y Fu(If)g(non-zero,)g(Readline)g
+(will)h(call)g(indirectly)g(through)e(this)h(p)q(oin)o(ter)f(to)g
+(reset)g(the)h(terminal.)195 1659 y(This)f(function)g(should)h(undo)f
+(the)f(e\013ects)h(of)f Ft(rl_prep_term_function)p Fu(.)24
+b(By)17 b(default,)i(this)195 1714 y(is)d(set)f(to)f
Ft(rl_deprep_terminal)f Fu(\(see)i(Section)h(2.4.9)e([T)l(erminal)i
-(Managemen)o(t],)d(page)i(32\).)1773 1375 y(V)l(ariable)-1861
-b Fi(Keymap)20 b Fh(rl)p 293 1375 V 21 w(executing)p
-551 1375 V 22 w(k)n(eymap)195 1430 y Fu(This)f(v)m(ariable)g(is)f(set)g
+(Managemen)o(t],)d(page)i(33\).)1773 1830 y(V)l(ariable)-1861
+b Fi(Keymap)20 b Fh(rl)p 293 1830 V 21 w(executing)p
+551 1830 V 22 w(k)n(eymap)195 1885 y Fu(This)f(v)m(ariable)g(is)f(set)g
(to)g(the)g(k)o(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h
-(26\))f(in)i(whic)o(h)195 1485 y(the)c(curren)o(tly)h(executing)g
-(readline)h(function)f(w)o(as)f(found.)1773 1613 y(V)l(ariable)-1861
-b Fi(Keymap)20 b Fh(rl)p 293 1613 V 21 w(binding)p 501
-1613 V 22 w(k)n(eymap)195 1668 y Fu(This)f(v)m(ariable)g(is)f(set)g(to)
+(26\))f(in)i(whic)o(h)195 1939 y(the)c(curren)o(tly)h(executing)g
+(readline)h(function)f(w)o(as)f(found.)1773 2055 y(V)l(ariable)-1861
+b Fi(Keymap)20 b Fh(rl)p 293 2055 V 21 w(binding)p 501
+2055 V 22 w(k)n(eymap)195 2110 y Fu(This)f(v)m(ariable)g(is)f(set)g(to)
g(the)g(k)o(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h(26\))
-f(in)i(whic)o(h)195 1723 y(the)c(last)g(k)o(ey)g(binding)j(o)q
-(ccurred.)1773 1851 y(V)l(ariable)-1861 b Fi(char)20
-b(*)f Fh(rl)p 286 1851 V 21 w(executing)p 544 1851 V
-22 w(macro)195 1906 y Fu(This)d(v)m(ariable)g(is)g(set)f(to)g(the)g
+f(in)i(whic)o(h)195 2165 y(the)c(last)g(k)o(ey)g(binding)j(o)q
+(ccurred.)1773 2280 y(V)l(ariable)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 2280 V 21 w(executing)p 544 2280 V
+22 w(macro)195 2335 y Fu(This)d(v)m(ariable)g(is)g(set)f(to)g(the)g
(text)g(of)f(an)o(y)h(curren)o(tly-executing)i(macro.)1773
-2034 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2034
-V 21 w(readline)p 434 2034 V 22 w(state)195 2089 y Fu(A)d(v)m(ariable)i
+2451 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2451
+V 21 w(readline)p 434 2451 V 22 w(state)195 2506 y Fu(A)d(v)m(ariable)i
(with)e(bit)h(v)m(alues)h(that)d(encapsulate)i(the)g(curren)o(t)f
-(Readline)h(state.)25 b(A)18 b(bit)f(is)h(set)195 2144
+(Readline)h(state.)25 b(A)18 b(bit)f(is)h(set)195 2560
y(with)h(the)g Ft(RL_SETSTATE)f Fu(macro,)h(and)g(unset)g(with)g(the)g
-Ft(RL_UNSETSTATE)e Fu(macro.)31 b(Use)19 b(the)195 2199
+Ft(RL_UNSETSTATE)e Fu(macro.)31 b(Use)19 b(the)195 2615
y Ft(RL_ISSTATE)e Fu(macro)h(to)g(test)g(whether)h(a)f(particular)i
(state)d(bit)j(is)f(set.)30 b(Curren)o(t)18 b(state)g(bits)195
-2253 y(include:)195 2339 y Ft(RL_STATE_NONE)435 2393
-y Fu(Readline)e(has)g(not)e(y)o(et)h(b)q(een)h(called,)h(nor)e(has)g
-(it)g(b)q(egun)h(to)f(in)o(tialize.)195 2477 y Ft
-(RL_STATE_INITIALIZING)435 2532 y Fu(Readline)h(is)g(initializi)q(ng)i
-(its)d(in)o(ternal)h(data)f(structures.)195 2615 y Ft
-(RL_STATE_INITIALIZED)435 2670 y Fu(Readline)h(has)g(completed)g(its)f
-(initialization.)p eop
+2670 y(include:)p eop
%%Page: 25 27
25 26 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(25)195 149 y Ft(RL_STATE_TERMPREPPED)435
-204 y Fu(Readline)16 b(has)e(mo)q(di\014ed)i(the)e(terminal)h(mo)q(des)
-g(to)e(do)i(its)f(o)o(wn)g(input)h(and)g(redis-)435 259
-y(pla)o(y)l(.)195 342 y Ft(RL_STATE_READCMD)435 397 y
-Fu(Readline)h(is)g(reading)g(a)f(command)g(from)f(the)i(k)o(eyb)q
-(oard.)195 480 y Ft(RL_STATE_METANEXT)435 534 y Fu(Readline)g(is)g
+(Readline)843 b(25)195 149 y Ft(RL_STATE_NONE)435 204
+y Fu(Readline)16 b(has)g(not)e(y)o(et)h(b)q(een)h(called,)h(nor)e(has)g
+(it)g(b)q(egun)h(to)f(in)o(tialize.)195 277 y Ft(RL_STATE_INITIALIZING)
+435 332 y Fu(Readline)h(is)g(initializi)q(ng)i(its)d(in)o(ternal)h
+(data)f(structures.)195 405 y Ft(RL_STATE_INITIALIZED)435
+460 y Fu(Readline)h(has)g(completed)g(its)f(initialization.)195
+533 y Ft(RL_STATE_TERMPREPPED)435 588 y Fu(Readline)h(has)e(mo)q
+(di\014ed)i(the)e(terminal)h(mo)q(des)g(to)e(do)i(its)f(o)o(wn)g(input)
+h(and)g(redis-)435 643 y(pla)o(y)l(.)195 716 y Ft(RL_STATE_READCMD)435
+770 y Fu(Readline)h(is)g(reading)g(a)f(command)g(from)f(the)i(k)o(eyb)q
+(oard.)195 844 y Ft(RL_STATE_METANEXT)435 898 y Fu(Readline)g(is)g
(reading)g(more)f(input)h(after)e(reading)i(the)f(meta-pre\014x)h(c)o
-(haracter.)195 617 y Ft(RL_STATE_DISPATCHING)435 672
+(haracter.)195 971 y Ft(RL_STATE_DISPATCHING)435 1026
y Fu(Readline)g(is)g(dispatc)o(hing)h(to)d(a)h(command.)195
-755 y Ft(RL_STATE_MOREINPUT)435 810 y Fu(Readline)h(is)g(reading)g
+1099 y Ft(RL_STATE_MOREINPUT)435 1154 y Fu(Readline)h(is)g(reading)g
(more)f(input)h(while)h(executing)f(an)f(editing)i(command.)195
-893 y Ft(RL_STATE_ISEARCH)435 947 y Fu(Readline)f(is)g(p)q(erforming)g
-(an)f(incremen)o(tal)h(history)f(searc)o(h.)195 1030
-y Ft(RL_STATE_NSEARCH)435 1085 y Fu(Readline)h(is)g(p)q(erforming)g(a)f
-(non-incremen)o(tal)h(history)g(searc)o(h.)195 1168 y
-Ft(RL_STATE_SEARCH)435 1223 y Fu(Readline)11 b(is)g(searc)o(hing)g(bac)
+1227 y Ft(RL_STATE_ISEARCH)435 1282 y Fu(Readline)f(is)g(p)q(erforming)
+g(an)f(incremen)o(tal)h(history)f(searc)o(h.)195 1355
+y Ft(RL_STATE_NSEARCH)435 1410 y Fu(Readline)h(is)g(p)q(erforming)g(a)f
+(non-incremen)o(tal)h(history)g(searc)o(h.)195 1483 y
+Ft(RL_STATE_SEARCH)435 1538 y Fu(Readline)11 b(is)g(searc)o(hing)g(bac)
o(kw)o(ard)e(or)h(forw)o(ard)f(through)h(the)g(history)g(for)f(a)h
-(string.)195 1306 y Ft(RL_STATE_NUMERICARG)435 1360 y
+(string.)195 1611 y Ft(RL_STATE_NUMERICARG)435 1665 y
Fu(Readline)16 b(is)g(reading)g(a)f(n)o(umeric)h(argumen)o(t.)195
-1443 y Ft(RL_STATE_MACROINPUT)435 1498 y Fu(Readline)d(is)g(curren)o
+1738 y Ft(RL_STATE_MACROINPUT)435 1793 y Fu(Readline)d(is)g(curren)o
(tly)g(getting)f(its)g(input)h(from)e(a)h(previously-de\014ned)j(k)o
-(eyb)q(oard)435 1553 y(macro.)195 1636 y Ft(RL_STATE_MACRODEF)435
-1691 y Fu(Readline)h(is)g(curren)o(tly)g(reading)g(c)o(haracters)e
-(de\014ning)j(a)e(k)o(eyb)q(oard)g(macro.)195 1773 y
-Ft(RL_STATE_OVERWRITE)435 1828 y Fu(Readline)h(is)g(in)g(o)o(v)o
-(erwrite)f(mo)q(de.)195 1911 y Ft(RL_STATE_COMPLETING)435
-1966 y Fu(Readline)h(is)g(p)q(erforming)g(w)o(ord)e(completion.)195
-2049 y Ft(RL_STATE_SIGHANDLER)435 2104 y Fu(Readline)i(is)g(curren)o
+(eyb)q(oard)435 1848 y(macro.)195 1921 y Ft(RL_STATE_MACRODEF)435
+1976 y Fu(Readline)h(is)g(curren)o(tly)g(reading)g(c)o(haracters)e
+(de\014ning)j(a)e(k)o(eyb)q(oard)g(macro.)195 2049 y
+Ft(RL_STATE_OVERWRITE)435 2104 y Fu(Readline)h(is)g(in)g(o)o(v)o
+(erwrite)f(mo)q(de.)195 2177 y Ft(RL_STATE_COMPLETING)435
+2232 y Fu(Readline)h(is)g(p)q(erforming)g(w)o(ord)e(completion.)195
+2305 y Ft(RL_STATE_SIGHANDLER)435 2359 y Fu(Readline)i(is)g(curren)o
(tly)g(executing)g(the)f(readline)i(signal)f(handler.)195
-2187 y Ft(RL_STATE_UNDOING)435 2241 y Fu(Readline)g(is)g(p)q(erforming)
-g(an)f(undo.)195 2324 y Ft(RL_STATE_DONE)435 2379 y Fu(Readline)g(has)f
+2433 y Ft(RL_STATE_UNDOING)435 2487 y Fu(Readline)g(is)g(p)q(erforming)
+g(an)f(undo.)195 2560 y Ft(RL_STATE_DONE)435 2615 y Fu(Readline)g(has)f
(read)g(a)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e Ft(accept-line)f
-Fu(and)i(is)h(ab)q(out)f(to)435 2434 y(return)h(the)g(line)i(to)e(the)g
-(caller.)1773 2560 y(V)l(ariable)-1861 b Fi(int)20 b
-Fh(rl)p 215 2560 18 3 v 21 w(explicit)p 417 2560 V 24
-w(arg)195 2615 y Fu(Set)f(to)g(a)g(non-zero)h(v)m(alue)h(if)e(an)h
-(explicit)h(n)o(umeric)g(argumen)o(t)d(w)o(as)h(sp)q(eci\014ed)i(b)o(y)
-f(the)f(user.)195 2670 y(Only)d(v)m(alid)h(in)f(a)f(bindable)i(command)
-f(function.)p eop
+Fu(and)i(is)h(ab)q(out)f(to)435 2670 y(return)h(the)g(line)i(to)e(the)g
+(caller.)p eop
%%Page: 26 28
26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)h(Library)1773
149 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 149
-18 3 v 21 w(n)n(umeric)p 437 149 V 20 w(arg)195 204 y
-Fu(Set)j(to)f(the)g(v)m(alue)i(of)f(an)o(y)f(n)o(umeric)h(argumen)o(t)f
-(explicitly)k(sp)q(eci\014ed)f(b)o(y)d(the)h(user)g(b)q(efore)195
-259 y(executing)14 b(the)f(curren)o(t)g(Readline)h(function.)20
-b(Only)14 b(v)m(alid)h(in)f(a)f(bindable)i(command)d(function.)1773
-368 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 368
-V 21 w(editing)p 407 368 V 22 w(mo)r(de)195 423 y Fu(Set)13
+18 3 v 21 w(explicit)p 417 149 V 24 w(arg)195 204 y Fu(Set)f(to)g(a)g
+(non-zero)h(v)m(alue)h(if)e(an)h(explicit)h(n)o(umeric)g(argumen)o(t)d
+(w)o(as)h(sp)q(eci\014ed)i(b)o(y)f(the)f(user.)195 259
+y(Only)d(v)m(alid)h(in)f(a)f(bindable)i(command)f(function.)1773
+374 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 374
+V 21 w(n)n(umeric)p 437 374 V 20 w(arg)195 429 y Fu(Set)j(to)f(the)g(v)
+m(alue)i(of)f(an)o(y)f(n)o(umeric)h(argumen)o(t)f(explicitly)k(sp)q
+(eci\014ed)f(b)o(y)d(the)h(user)g(b)q(efore)195 484 y(executing)14
+b(the)f(curren)o(t)g(Readline)h(function.)20 b(Only)14
+b(v)m(alid)h(in)f(a)f(bindable)i(command)d(function.)1773
+599 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 599
+V 21 w(editing)p 407 599 V 22 w(mo)r(de)195 654 y Fu(Set)13
b(to)f(a)g(v)m(alue)i(denoting)f(Readline's)g(curren)o(t)g(editing)h
(mo)q(de.)19 b(A)12 b(v)m(alue)i(of)e Fk(1)k Fu(means)d(Readline)195
-477 y(is)j(curren)o(tly)f(in)h(emacs)g(mo)q(de;)f Fk(0)j
-Fu(means)d(that)g(vi)h(mo)q(de)f(is)h(activ)o(e.)75 601
+709 y(is)j(curren)o(tly)f(in)h(emacs)g(mo)q(de;)f Fk(0)j
+Fu(means)d(that)g(vi)h(mo)q(de)f(is)h(activ)o(e.)75 837
y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6
-b(unctions)75 737 y Fj(2.4.1)30 b(Naming)20 b(a)g(F)-5
-b(unction)137 832 y Fu(The)20 b(user)g(can)g(dynamically)i(c)o(hange)e
+b(unctions)75 977 y Fj(2.4.1)30 b(Naming)20 b(a)g(F)-5
+b(unction)137 1073 y Fu(The)20 b(user)g(can)g(dynamically)i(c)o(hange)e
(the)g(bindings)i(of)d(k)o(eys)h(while)h(using)g(Readline.)35
-b(This)20 b(is)75 887 y(done)f(b)o(y)f(represen)o(ting)h(the)g
+b(This)20 b(is)75 1128 y(done)f(b)o(y)f(represen)o(ting)h(the)g
(function)g(with)g(a)f(descriptiv)o(e)i(name.)29 b(The)19
-b(user)f(is)h(able)h(to)d(t)o(yp)q(e)i(the)75 941 y(descriptiv)o(e)e
+b(user)f(is)h(able)h(to)d(t)o(yp)q(e)i(the)75 1182 y(descriptiv)o(e)e
(name)e(when)h(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14
b(in)i(an)f(init)i(\014le,)f(one)f(migh)o(t)g(\014nd)195
-1004 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 1070
-y Fu(This)21 b(binds)g(the)f(k)o(eystrok)o(e)661 1068
-y Fn(h)p 673 1042 209 2 v 673 1070 a Fm(Meta-Rub)q(out)p
-673 1077 V 879 1068 a Fn(i)914 1070 y Fu(to)g(the)g(function)g
-Fl(descriptively)k Fu(named)c Ft(backward-)75 1124 y(kill-word)p
+1246 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 1313
+y Fu(This)21 b(binds)g(the)f(k)o(eystrok)o(e)661 1311
+y Fn(h)p 673 1285 209 2 v 673 1313 a Fm(Meta-Rub)q(out)p
+673 1321 V 879 1311 a Fn(i)914 1313 y Fu(to)g(the)g(function)g
+Fl(descriptively)k Fu(named)c Ft(backward-)75 1368 y(kill-word)p
Fu(.)29 b(Y)l(ou,)19 b(as)f(the)h(programmer,)f(should)i(bind)f(the)g
(functions)h(y)o(ou)e(write)h(to)e(descriptiv)o(e)75
-1179 y(names)e(as)g(w)o(ell.)21 b(Readline)16 b(pro)o(vides)g(a)f
-(function)h(for)e(doing)i(that:)1762 1288 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1288 18 3 v 21 w(add)p 328
-1288 V 20 w(defun)i Fg(\()p Ft(const)14 b(char)h(*name,)f
-(rl_command_func_t)283 1343 y(*function,)f(int)i(key)p
-Fg(\))195 1397 y Fu(Add)j Fk(name)i Fu(to)d(the)h(list)h(of)e(named)h
+1423 y(names)e(as)g(w)o(ell.)21 b(Readline)16 b(pro)o(vides)g(a)f
+(function)h(for)e(doing)i(that:)1762 1538 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1538 18 3 v 21 w(add)p 328
+1538 V 20 w(defun)i Fg(\()p Ft(const)14 b(char)h(*name,)f
+(rl_command_func_t)283 1593 y(*function,)f(int)i(key)p
+Fg(\))195 1648 y Fu(Add)j Fk(name)i Fu(to)d(the)h(list)h(of)e(named)h
(functions.)28 b(Mak)o(e)17 b Fk(function)h Fu(b)q(e)g(the)g(function)h
-(that)d(gets)195 1452 y(called.)21 b(If)16 b Fk(k)o(ey)j
+(that)d(gets)195 1703 y(called.)21 b(If)16 b Fk(k)o(ey)j
Fu(is)d(not)e(-1,)h(then)h(bind)g(it)g(to)e Fk(function)i
-Fu(using)g Ft(rl_bind_key\(\))p Fu(.)137 1539 y(Using)g(this)f
+Fu(using)g Ft(rl_bind_key\(\))p Fu(.)137 1794 y(Using)g(this)f
(function)h(alone)g(is)f(su\016cien)o(t)h(for)f(most)f(applications.)21
-b(It)15 b(is)h(the)f(recommended)h(w)o(a)o(y)75 1594
+b(It)15 b(is)h(the)f(recommended)h(w)o(a)o(y)75 1849
y(to)d(add)h(a)f(few)g(functions)h(to)f(the)h(default)g(functions)g
(that)f(Readline)i(has)e(built)i(in.)20 b(If)14 b(y)o(ou)f(need)h(to)f
-(do)75 1649 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e
+(do)75 1903 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e
(Readline,)i(y)o(ou)f(ma)o(y)f(need)i(to)e(use)h(the)g(underlying)75
-1704 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 1811
-y Fj(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 1906 y
+1958 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 2069
+y Fj(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 2165 y
Fu(Key)16 b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fk(k)o(eymap)p
Fu(.)21 b(The)15 b(k)o(eymap)h(is)f(the)h(asso)q(ciation)g(b)q(et)o(w)o
-(een)g(the)f(k)o(eys)75 1960 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h
+(een)g(the)f(k)o(eys)75 2220 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h
(the)f(functions)h(that)f(get)g(run.)19 b(Y)l(ou)c(can)f(mak)o(e)g(y)o
-(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 2015 y(existing)i(k)o(eymaps,)
+(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 2275 y(existing)i(k)o(eymaps,)
f(and)g(tell)h(Readline)h(whic)o(h)f(k)o(eymap)f(to)f(use.)1762
-2124 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
-2124 V 21 w(mak)n(e)p 445 2124 V 20 w(bare)p 575 2124
-V 20 w(k)n(eymap)j Fg(\()p Ft(void)p Fg(\))195 2179 y
+2390 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
+2390 V 21 w(mak)n(e)p 445 2390 V 20 w(bare)p 575 2390
+V 20 w(k)n(eymap)j Fg(\()p Ft(void)p Fg(\))195 2445 y
Fu(Returns)12 b(a)f(new,)i(empt)o(y)f(k)o(eymap.)18 b(The)13
b(space)f(for)f(the)i(k)o(eymap)e(is)i(allo)q(cated)g(with)f
-Ft(malloc\(\))p Fu(;)195 2233 y(the)j(caller)i(should)f(free)f(it)h(b)o
+Ft(malloc\(\))p Fu(;)195 2500 y(the)j(caller)i(should)f(free)f(it)h(b)o
(y)f(calling)i Ft(rl_discard_keymap\(\))12 b Fu(when)k(done.)1762
-2342 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
-2342 V 21 w(cop)n(y)p 428 2342 V 21 w(k)n(eymap)j Fg(\()p
-Ft(Keymap)14 b(map)p Fg(\))195 2397 y Fu(Return)h(a)g(new)g(k)o(eymap)g
-(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fk(map)p Fu(.)1762
-2506 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
-2506 V 21 w(mak)n(e)p 445 2506 V 20 w(k)n(eymap)j Fg(\()p
-Ft(void)p Fg(\))195 2560 y Fu(Return)16 b(a)f(new)i(k)o(eymap)e(with)i
-(the)f(prin)o(ting)h(c)o(haracters)e(b)q(ound)i(to)e(rl)p
-1457 2560 14 2 v 17 w(insert,)h(the)g(lo)o(w)o(ercase)195
-2615 y(Meta)11 b(c)o(haracters)f(b)q(ound)i(to)f(run)h(their)f(equiv)m
-(alen)o(ts,)j(and)d(the)h(Meta)e(digits)i(b)q(ound)g(to)f(pro)q(duce)
-195 2670 y(n)o(umeric)16 b(argumen)o(ts.)p eop
+2615 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
+2615 V 21 w(cop)n(y)p 428 2615 V 21 w(k)n(eymap)j Fg(\()p
+Ft(Keymap)14 b(map)p Fg(\))195 2670 y Fu(Return)h(a)g(new)g(k)o(eymap)g
+(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fk(map)p Fu(.)p eop
%%Page: 27 29
27 28 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(27)1762 149 y(F)l(unction)-1861 b Fi(void)20
-b Fh(rl)p 241 149 18 3 v 21 w(discard)p 441 149 V 21
-w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195
-204 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f
-Fk(k)o(eymap)p Fu(.)137 293 y(Readline)24 b(has)f(sev)o(eral)g(in)o
-(ternal)g(k)o(eymaps.)42 b(These)23 b(functions)g(allo)o(w)g(y)o(ou)f
-(to)g(c)o(hange)h(whic)o(h)75 348 y(k)o(eymap)15 b(is)h(activ)o(e.)1762
-459 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
-459 V 21 w(get)p 391 459 V 21 w(k)n(eymap)i Fg(\()p Ft(void)p
-Fg(\))195 514 y Fu(Returns)15 b(the)g(curren)o(tly)h(activ)o(e)f(k)o
-(eymap.)1762 625 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p
-241 625 V 21 w(set)p 333 625 V 21 w(k)n(eymap)i Fg(\()p
-Ft(Keymap)14 b(keymap)p Fg(\))195 680 y Fu(Mak)o(es)g
-Fk(k)o(eymap)j Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1762
-791 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293
-791 V 21 w(get)p 391 791 V 21 w(k)n(eymap)p 605 791 V
-20 w(b)n(y)p 685 791 V 21 w(name)i Fg(\()p Ft(const)14
-b(char)g(*name)p Fg(\))195 846 y Fu(Return)i(the)h(k)o(eymap)f(matc)o
+(Readline)843 b(27)1762 149 y(F)l(unction)-1861 b Fi(Keymap)20
+b Fh(rl)p 293 149 18 3 v 21 w(mak)n(e)p 445 149 V 20
+w(k)n(eymap)j Fg(\()p Ft(void)p Fg(\))195 204 y Fu(Return)16
+b(a)f(new)i(k)o(eymap)e(with)i(the)f(prin)o(ting)h(c)o(haracters)e(b)q
+(ound)i(to)e(rl)p 1457 204 14 2 v 17 w(insert,)h(the)g(lo)o(w)o(ercase)
+195 259 y(Meta)11 b(c)o(haracters)f(b)q(ound)i(to)f(run)h(their)f
+(equiv)m(alen)o(ts,)j(and)d(the)h(Meta)e(digits)i(b)q(ound)g(to)f(pro)q
+(duce)195 314 y(n)o(umeric)16 b(argumen)o(ts.)1762 437
+y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 437 18
+3 v 21 w(discard)p 441 437 V 21 w(k)n(eymap)i Fg(\()p
+Ft(Keymap)14 b(keymap)p Fg(\))195 492 y Fu(F)l(ree)h(the)h(storage)d
+(asso)q(ciated)j(with)f Fk(k)o(eymap)p Fu(.)137 589 y(Readline)24
+b(has)f(sev)o(eral)g(in)o(ternal)g(k)o(eymaps.)42 b(These)23
+b(functions)g(allo)o(w)g(y)o(ou)f(to)g(c)o(hange)h(whic)o(h)75
+643 y(k)o(eymap)15 b(is)h(activ)o(e.)1762 767 y(F)l(unction)-1861
+b Fi(Keymap)20 b Fh(rl)p 293 767 V 21 w(get)p 391 767
+V 21 w(k)n(eymap)i Fg(\()p Ft(void)p Fg(\))195 822 y
+Fu(Returns)15 b(the)g(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1762
+945 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 945
+V 21 w(set)p 333 945 V 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14
+b(keymap)p Fg(\))195 1000 y Fu(Mak)o(es)g Fk(k)o(eymap)j
+Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1762 1124
+y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 1124
+V 21 w(get)p 391 1124 V 21 w(k)n(eymap)p 605 1124 V 20
+w(b)n(y)p 685 1124 V 21 w(name)i Fg(\()p Ft(const)14
+b(char)g(*name)p Fg(\))195 1178 y Fu(Return)i(the)h(k)o(eymap)f(matc)o
(hing)h Fk(name)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o
-(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 901 y(keymap)e
+(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 1233 y(keymap)e
Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)i(Init)g(File],)g
-(page)f(4\).)1762 1012 y(F)l(unction)-1861 b Fi(char)20
-b(*)f Fh(rl)p 286 1012 V 21 w(get)p 384 1012 V 21 w(k)n(eymap)p
-598 1012 V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p
-Fg(\))195 1067 y Fu(Return)i(the)h(name)g(matc)o(hing)f
+(page)f(4\).)1762 1357 y(F)l(unction)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 1357 V 21 w(get)p 384 1357 V 21 w(k)n(eymap)p
+598 1357 V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p
+Fg(\))195 1412 y Fu(Return)i(the)h(name)g(matc)o(hing)f
Fk(k)o(eymap)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o
-(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 1122 y(keymap)e
+(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 1466 y(keymap)e
Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)i(Init)g(File],)g
-(page)f(4\).)75 1230 y Fj(2.4.3)30 b(Binding)20 b(Keys)137
-1325 y Fu(Key)13 b(sequences)g(are)e(asso)q(ciate)h(with)h(functions)f
+(page)f(4\).)75 1583 y Fj(2.4.3)30 b(Binding)20 b(Keys)137
+1681 y Fu(Key)13 b(sequences)g(are)e(asso)q(ciate)h(with)h(functions)f
(through)g(the)g(k)o(eymap.)19 b(Readline)13 b(has)f(sev)o(eral)g(in-)
-75 1380 y(ternal)j(k)o(eymaps:)k Ft(emacs_standard_keymap)p
+75 1736 y(ternal)j(k)o(eymaps:)k Ft(emacs_standard_keymap)p
Fu(,)11 b Ft(emacs_meta_keymap)p Fu(,)h Ft(emacs_ctlx_keymap)p
-Fu(,)g Ft(vi_)75 1435 y(movement_keymap)p Fu(,)20 b(and)i
+Fu(,)g Ft(vi_)75 1791 y(movement_keymap)p Fu(,)20 b(and)i
Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18
-b Fu(is)k(the)f(default,)75 1490 y(and)15 b(the)h(examples)g(in)g(this)
-f(man)o(ual)h(assume)f(that.)137 1556 y(Since)h Ft(readline\(\))c
+b Fu(is)k(the)f(default,)75 1846 y(and)15 b(the)h(examples)g(in)g(this)
+f(man)o(ual)h(assume)f(that.)137 1915 y(Since)h Ft(readline\(\))c
Fu(installs)j(a)f(set)f(of)h(default)g(k)o(ey)g(bindings)h(the)f
-(\014rst)g(time)g(it)g(is)g(called,)i(there)d(is)75 1611
+(\014rst)g(time)g(it)g(is)g(called,)i(there)d(is)75 1970
y(alw)o(a)o(ys)j(the)g(danger)g(that)g(a)g(custom)g(binding)i
(installed)g(b)q(efore)f(the)f(\014rst)g(call)i(to)d
-Ft(readline\(\))g Fu(will)75 1666 y(b)q(e)f(o)o(v)o(erridden.)19
+Ft(readline\(\))g Fu(will)75 2025 y(b)q(e)f(o)o(v)o(erridden.)19
b(An)13 b(alternate)g(mec)o(hanism)h(is)f(to)f(install)i(custom)f(k)o
-(ey)g(bindings)h(in)g(an)f(initialization)75 1720 y(function)19
+(ey)g(bindings)h(in)g(an)f(initialization)75 2079 y(function)19
b(assigned)h(to)d(the)i Ft(rl_startup_hook)e Fu(v)m(ariable)j(\(see)e
-(Section)h(2.3)f([Readline)i(V)l(ariables],)75 1775 y(page)15
-b(22\).)137 1841 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1762
-1953 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1953
-V 21 w(bind)p 347 1953 V 21 w(k)n(ey)k Fg(\()p Ft(int)14
-b(key,)h(rl_command_func_t)d(*function)p Fg(\))195 2007
+(Section)h(2.3)f([Readline)i(V)l(ariables],)75 2134 y(page)15
+b(22\).)137 2204 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1762
+2327 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2327
+V 21 w(bind)p 347 2327 V 21 w(k)n(ey)k Fg(\()p Ft(int)14
+b(key,)h(rl_command_func_t)d(*function)p Fg(\))195 2382
y Fu(Binds)18 b Fk(k)o(ey)i Fu(to)c Fk(function)h Fu(in)h(the)e(curren)
o(tly)h(activ)o(e)g(k)o(eymap.)23 b(Returns)16 b(non-zero)h(in)g(the)g
-(case)195 2062 y(of)e(an)g(in)o(v)m(alid)i Fk(k)o(ey)p
-Fu(.)1762 2173 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 2173 V 21 w(bind)p 347 2173 V 21 w(k)n(ey)p 452 2173
-V 21 w(in)p 520 2173 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h
-(rl_command_func_t)e(*function,)283 2228 y(Keymap)h(map)p
-Fg(\))195 2283 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c Fk(function)h
+(case)195 2437 y(of)e(an)g(in)o(v)m(alid)i Fk(k)o(ey)p
+Fu(.)1762 2560 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 2560 V 21 w(bind)p 347 2560 V 21 w(k)n(ey)p 452 2560
+V 21 w(in)p 520 2560 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h
+(rl_command_func_t)e(*function,)283 2615 y(Keymap)h(map)p
+Fg(\))195 2670 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c Fk(function)h
Fu(in)g Fk(map)p Fu(.)k(Returns)14 b(non-zero)i(in)g(the)f(case)g(of)g
-(an)g(in)o(v)m(alid)j Fk(k)o(ey)p Fu(.)1762 2394 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 2394 V 21 w(un)n(bind)p 409
-2394 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 b(key)p Fg(\))195
-2449 y Fu(Bind)19 b Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i(function)f(in)g
-(the)f(curren)o(tly)g(activ)o(e)h(k)o(eymap.)28 b(Returns)18
-b(non-zero)g(in)195 2504 y(case)d(of)g(error.)1762 2615
-y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2615 V
-21 w(un)n(bind)p 409 2615 V 21 w(k)n(ey)p 514 2615 V
-21 w(in)p 582 2615 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Keymap)f
-(map)p Fg(\))195 2670 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i
-(function)f(in)g Fk(map)p Fu(.)k(Returns)14 b(non-zero)i(in)g(case)f
-(of)g(error.)p eop
+(an)g(in)o(v)m(alid)j Fk(k)o(ey)p Fu(.)p eop
%%Page: 28 30
28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)h(Library)1762
149 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 149
-18 3 v 21 w(un)n(bind)p 409 149 V 21 w(function)p 635
-149 V 21 w(in)p 703 149 V 21 w(map)h Fg(\()p Ft(rl_command_func_t)13
-b(*function,)283 204 y(Keymap)h(map)p Fg(\))195 259 y
-Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i Fk(function)g
-Fu(in)g Fk(map)p Fu(.)1762 377 y(F)l(unction)-1861 b
-Fi(int)20 b Fh(rl)p 215 377 V 21 w(un)n(bind)p 409 377
-V 21 w(command)p 674 377 V 17 w(in)p 738 377 V 22 w(map)h
-Fg(\()p Ft(const)14 b(char)h(*command,)f(Keymap)283 432
-y(map)p Fg(\))195 486 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(are)h(b)q
-(ound)h(to)f Fk(command)i Fu(in)f Fk(map)p Fu(.)1762
-604 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 604
-V 21 w(set)p 307 604 V 20 w(k)n(ey)k Fg(\()p Ft(const)14
-b(char)h(*keyseq,)f(rl_command_func_t)f(*function,)283
-659 y(Keymap)h(map)p Fg(\))195 714 y Fu(Bind)g(the)e(k)o(ey)h(sequence)
-h(represen)o(ted)f(b)o(y)f(the)h(string)f Fk(k)o(eyseq)i
+18 3 v 21 w(un)n(bind)p 409 149 V 21 w(k)n(ey)k Fg(\()p
+Ft(int)14 b(key)p Fg(\))195 204 y Fu(Bind)19 b Fk(k)o(ey)j
+Fu(to)c(the)g(n)o(ull)i(function)f(in)g(the)f(curren)o(tly)g(activ)o(e)
+h(k)o(eymap.)28 b(Returns)18 b(non-zero)g(in)195 259
+y(case)d(of)g(error.)1762 395 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 395 V 21 w(un)n(bind)p 409 395 V 21 w(k)n(ey)p
+514 395 V 21 w(in)p 582 395 V 22 w(map)h Fg(\()p Ft(int)14
+b(key,)h(Keymap)f(map)p Fg(\))195 450 y Fu(Bind)i Fk(k)o(ey)j
+Fu(to)c(the)g(n)o(ull)i(function)f(in)g Fk(map)p Fu(.)k(Returns)14
+b(non-zero)i(in)g(case)f(of)g(error.)1762 586 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 586 V 21 w(un)n(bind)p 409
+586 V 21 w(function)p 635 586 V 21 w(in)p 703 586 V 21
+w(map)h Fg(\()p Ft(rl_command_func_t)13 b(*function,)283
+641 y(Keymap)h(map)p Fg(\))195 695 y Fu(Un)o(bind)j(all)f(k)o(eys)f
+(that)f(execute)i Fk(function)g Fu(in)g Fk(map)p Fu(.)1762
+831 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 831
+V 21 w(un)n(bind)p 409 831 V 21 w(command)p 674 831 V
+17 w(in)p 738 831 V 22 w(map)h Fg(\()p Ft(const)14 b(char)h(*command,)f
+(Keymap)283 886 y(map)p Fg(\))195 941 y Fu(Un)o(bind)j(all)f(k)o(eys)f
+(that)f(are)h(b)q(ound)h(to)f Fk(command)i Fu(in)f Fk(map)p
+Fu(.)1762 1077 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 1077 V 21 w(set)p 307 1077 V 20 w(k)n(ey)k Fg(\()p
+Ft(const)14 b(char)h(*keyseq,)f(rl_command_func_t)f(*function,)283
+1132 y(Keymap)h(map)p Fg(\))195 1186 y Fu(Bind)g(the)e(k)o(ey)h
+(sequence)h(represen)o(ted)f(b)o(y)f(the)h(string)f Fk(k)o(eyseq)i
Fu(to)e(the)g(function)i Fk(function)p Fu(.)19 b(This)195
-768 y(mak)o(es)13 b(new)g(k)o(eymaps)g(as)f(necessary)l(.)20
+1241 y(mak)o(es)13 b(new)g(k)o(eymaps)g(as)f(necessary)l(.)20
b(The)13 b(initial)j(k)o(eymap)c(in)i(whic)o(h)g(to)f(do)g(bindings)i
-(is)f Fk(map)p Fu(.)1762 886 y(F)l(unction)-1861 b Fi(int)20
-b Fh(rl)p 215 886 V 21 w(generic)p 413 886 V 21 w(bind)j
+(is)f Fk(map)p Fu(.)1762 1377 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 1377 V 21 w(generic)p 413 1377 V 21 w(bind)j
Fg(\()p Ft(int)15 b(type,)f(const)h(char)f(*keyseq,)g(char)h(*data,)283
-941 y(Keymap)f(map)p Fg(\))195 996 y Fu(Bind)h(the)e(k)o(ey)h(sequence)
-h(represen)o(ted)e(b)o(y)h(the)g(string)f Fk(k)o(eyseq)i
+1432 y(Keymap)f(map)p Fg(\))195 1487 y Fu(Bind)h(the)e(k)o(ey)h
+(sequence)h(represen)o(ted)e(b)o(y)h(the)g(string)f Fk(k)o(eyseq)i
Fu(to)d(the)i(arbitrary)f(p)q(oin)o(ter)h Fk(data)p Fu(.)195
-1051 y Fk(t)o(yp)q(e)j Fu(sa)o(ys)c(what)h(kind)h(of)f(data)g(is)g(p)q
+1542 y Fk(t)o(yp)q(e)j Fu(sa)o(ys)c(what)h(kind)h(of)f(data)g(is)g(p)q
(oin)o(ted)i(to)d(b)o(y)h Fk(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f
-(function)h(\()p Ft(ISFUNC)p Fu(\),)d(a)195 1105 y(macro)i(\()p
+(function)h(\()p Ft(ISFUNC)p Fu(\),)d(a)195 1596 y(macro)i(\()p
Ft(ISMACR)p Fu(\),)f(or)h(a)h(k)o(eymap)f(\()p Ft(ISKMAP)p
Fu(\).)k(This)e(mak)o(es)e(new)h(k)o(eymaps)f(as)h(necessary)l(.)20
-b(The)195 1160 y(initial)d(k)o(eymap)e(in)h(whic)o(h)g(to)f(do)g
-(bindings)i(is)f Fk(map)p Fu(.)1762 1278 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1278 V 21 w(parse)p 369 1278
-V 19 w(and)p 480 1278 V 21 w(bind)j Fg(\()p Ft(char)14
-b(*line)p Fg(\))195 1333 y Fu(P)o(arse)g Fk(line)19 b
+b(The)195 1651 y(initial)d(k)o(eymap)e(in)h(whic)o(h)g(to)f(do)g
+(bindings)i(is)f Fk(map)p Fu(.)1762 1787 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1787 V 21 w(parse)p 369 1787
+V 19 w(and)p 480 1787 V 21 w(bind)j Fg(\()p Ft(char)14
+b(*line)p Fg(\))195 1842 y Fu(P)o(arse)g Fk(line)19 b
Fu(as)14 b(if)h(it)g(had)g(b)q(een)h(read)f(from)f(the)g
Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)f(an)o(y)h(k)o(ey)f(bindings)
-195 1387 y(and)h(v)m(ariable)i(assignmen)o(ts)e(found)h(\(see)f
+195 1897 y(and)h(v)m(ariable)i(assignmen)o(ts)e(found)h(\(see)f
(Section)h(1.3)e([Readline)i(Init)g(File],)g(page)f(4\).)1762
-1505 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1505
-V 21 w(read)p 346 1505 V 20 w(init)p 450 1505 V 22 w(\014le)k
-Fg(\()p Ft(const)14 b(char)h(*filename)p Fg(\))195 1560
+2033 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2033
+V 21 w(read)p 346 2033 V 20 w(init)p 450 2033 V 22 w(\014le)k
+Fg(\()p Ft(const)14 b(char)h(*filename)p Fg(\))195 2088
y Fu(Read)g(k)o(eybindings)j(and)e(v)m(ariable)h(assignmen)o(ts)f(from)
f Fk(\014lename)k Fu(\(see)d(Section)g(1.3)f([Readline)195
-1615 y(Init)h(File],)g(page)f(4\).)75 1727 y Fj(2.4.4)30
+2142 y(Init)h(File],)g(page)f(4\).)75 2267 y Fj(2.4.4)30
b(Asso)r(ciating)20 b(F)-5 b(unction)20 b(Names)h(and)f(Bindings)137
-1824 y Fu(These)11 b(functions)h(allo)o(w)e(y)o(ou)h(to)f(\014nd)h(out)
+2370 y Fu(These)11 b(functions)h(allo)o(w)e(y)o(ou)h(to)f(\014nd)h(out)
f(what)g(k)o(eys)h(in)o(v)o(ok)o(e)f(named)h(functions)h(and)e(the)h
-(functions)75 1879 y(in)o(v)o(ok)o(ed)j(b)o(y)g(a)f(particular)h(k)o
+(functions)75 2424 y(in)o(v)o(ok)o(ed)j(b)o(y)g(a)f(particular)h(k)o
(ey)g(sequence.)21 b(Y)l(ou)14 b(ma)o(y)f(also)g(asso)q(ciate)h(a)g
-(new)g(function)g(name)g(with)g(an)75 1933 y(arbitrary)h(function.)1762
-2051 y(F)l(unction)-1861 b Fi(rl_command_func_t)22 b(*)d
-Fh(rl)p 626 2051 V 21 w(named)p 814 2051 V 19 w(function)k
-Fg(\()p Ft(const)14 b(char)h(*name)p Fg(\))195 2106 y
+(new)g(function)g(name)g(with)g(an)75 2479 y(arbitrary)h(function.)1762
+2615 y(F)l(unction)-1861 b Fi(rl_command_func_t)22 b(*)d
+Fh(rl)p 626 2615 V 21 w(named)p 814 2615 V 19 w(function)k
+Fg(\()p Ft(const)14 b(char)h(*name)p Fg(\))195 2670 y
Fu(Return)g(the)g(function)h(with)g(name)f Fk(name)p
-Fu(.)1762 2224 y(F)l(unction)-1861 b Fi(rl_command_func_t)22
-b(*)d Fh(rl)p 626 2224 V 21 w(function)p 852 2224 V 21
-w(of)p 920 2224 V 20 w(k)n(eyseq)24 b Fg(\()p Ft(const)14
-b(char)283 2278 y(*keyseq,)g(Keymap)g(map,)h(int)f(*type)p
-Fg(\))195 2333 y Fu(Return)i(the)g(function)h(in)o(v)o(ok)o(ed)g(b)o(y)
-f Fk(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fk(map)p Fu(.)23
-b(If)17 b Fk(map)g Fu(is)g Ft(NULL)p Fu(,)f(the)g(curren)o(t)195
-2388 y(k)o(eymap)i(is)h(used.)31 b(If)18 b Fk(t)o(yp)q(e)j
-Fu(is)e(not)g Ft(NULL)p Fu(,)f(the)g(t)o(yp)q(e)h(of)f(the)h(ob)s(ject)
-f(is)h(returned)g(in)g(the)f Ft(int)195 2443 y Fu(v)m(ariable)f(it)e(p)
-q(oin)o(ts)h(to)e(\(one)h(of)g Ft(ISFUNC)p Fu(,)f Ft(ISKMAP)p
-Fu(,)g(or)h Ft(ISMACR)p Fu(\).)1762 2560 y(F)l(unction)-1861
-b Fi(char)20 b(**)f Fh(rl)p 312 2560 V 21 w(in)n(v)n(oking)p
-541 2560 V 23 w(k)n(eyseqs)k Fg(\()p Ft(rl_command_func_t)13
-b(*function)p Fg(\))195 2615 y Fu(Return)i(an)h(arra)o(y)e(of)h
-(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in)
-o(v)o(ok)o(e)h Fk(function)g Fu(in)195 2670 y(the)f(curren)o(t)g(k)o
-(eymap.)p eop
+Fu(.)p eop
%%Page: 29 31
29 30 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(29)1762 149 y(F)l(unction)-1861 b Fi(char)20
-b(**)f Fh(rl)p 312 149 18 3 v 21 w(in)n(v)n(oking)p 541
-149 V 23 w(k)n(eyseqs)p 750 149 V 21 w(in)p 818 149 V
-22 w(map)i Fg(\()p Ft(rl_command_func_t)283 204 y(*function,)13
-b(Keymap)i(map)p Fg(\))195 259 y Fu(Return)g(an)h(arra)o(y)e(of)h
-(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in)
-o(v)o(ok)o(e)h Fk(function)g Fu(in)195 314 y(the)f(k)o(eymap)g
-Fk(map)p Fu(.)1762 426 y(F)l(unction)-1861 b Fi(void)20
-b Fh(rl)p 241 426 V 21 w(function)p 467 426 V 21 w(dump)r(er)g
-Fg(\()p Ft(int)15 b(readable)p Fg(\))195 481 y Fu(Prin)o(t)g(the)f
-(readline)j(function)e(names)g(and)f(the)h(k)o(ey)g(sequences)g(curren)
-o(tly)g(b)q(ound)h(to)e(them)h(to)195 536 y Ft(rl_outstream)p
-Fu(.)j(If)c Fk(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)h
-(formatted)d(in)j(suc)o(h)f(a)f(w)o(a)o(y)g(that)g(it)h(can)195
-590 y(b)q(e)i(made)f(part)g(of)f(an)i Ft(inputrc)e Fu(\014le)i(and)f
-(re-read.)1762 702 y(F)l(unction)-1861 b Fi(void)20 b
-Fh(rl)p 241 702 V 21 w(list)p 337 702 V 22 w(funmap)p
-550 702 V 18 w(names)h Fg(\()p Ft(void)p Fg(\))195 757
-y Fu(Prin)o(t)15 b(the)g(names)h(of)e(all)j(bindable)g(Readline)f
-(functions)g(to)f Ft(rl_outstream)p Fu(.)1762 869 y(F)l(unction)-1861
-b Fi(const)20 b(char)g(**)f Fh(rl)p 462 869 V 21 w(funmap)p
-674 869 V 18 w(names)i Fg(\()p Ft(void)p Fg(\))195 924
+(Readline)843 b(29)1762 149 y(F)l(unction)-1861 b Fi(rl_command_func_t)
+22 b(*)d Fh(rl)p 626 149 18 3 v 21 w(function)p 852 149
+V 21 w(of)p 920 149 V 20 w(k)n(eyseq)24 b Fg(\()p Ft(const)14
+b(char)283 204 y(*keyseq,)g(Keymap)g(map,)h(int)f(*type)p
+Fg(\))195 259 y Fu(Return)i(the)g(function)h(in)o(v)o(ok)o(ed)g(b)o(y)f
+Fk(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fk(map)p Fu(.)23 b(If)17
+b Fk(map)g Fu(is)g Ft(NULL)p Fu(,)f(the)g(curren)o(t)195
+314 y(k)o(eymap)i(is)h(used.)31 b(If)18 b Fk(t)o(yp)q(e)j
+Fu(is)e(not)g Ft(NULL)p Fu(,)f(the)g(t)o(yp)q(e)h(of)f(the)h(ob)s(ject)
+f(is)h(returned)g(in)g(the)f Ft(int)195 369 y Fu(v)m(ariable)f(it)e(p)q
+(oin)o(ts)h(to)e(\(one)h(of)g Ft(ISFUNC)p Fu(,)f Ft(ISKMAP)p
+Fu(,)g(or)h Ft(ISMACR)p Fu(\).)1762 474 y(F)l(unction)-1861
+b Fi(char)20 b(**)f Fh(rl)p 312 474 V 21 w(in)n(v)n(oking)p
+541 474 V 23 w(k)n(eyseqs)k Fg(\()p Ft(rl_command_func_t)13
+b(*function)p Fg(\))195 528 y Fu(Return)i(an)h(arra)o(y)e(of)h(strings)
+h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in)o(v)o(ok)
+o(e)h Fk(function)g Fu(in)195 583 y(the)f(curren)o(t)g(k)o(eymap.)1762
+688 y(F)l(unction)-1861 b Fi(char)20 b(**)f Fh(rl)p 312
+688 V 21 w(in)n(v)n(oking)p 541 688 V 23 w(k)n(eyseqs)p
+750 688 V 21 w(in)p 818 688 V 22 w(map)i Fg(\()p Ft(rl_command_func_t)
+283 743 y(*function,)13 b(Keymap)i(map)p Fg(\))195 798
+y Fu(Return)g(an)h(arra)o(y)e(of)h(strings)h(represen)o(ting)g(the)g(k)
+o(ey)f(sequences)i(used)f(to)f(in)o(v)o(ok)o(e)h Fk(function)g
+Fu(in)195 853 y(the)f(k)o(eymap)g Fk(map)p Fu(.)1762
+958 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 958
+V 21 w(function)p 467 958 V 21 w(dump)r(er)g Fg(\()p
+Ft(int)15 b(readable)p Fg(\))195 1013 y Fu(Prin)o(t)g(the)f(readline)j
+(function)e(names)g(and)f(the)h(k)o(ey)g(sequences)g(curren)o(tly)g(b)q
+(ound)h(to)e(them)h(to)195 1067 y Ft(rl_outstream)p Fu(.)j(If)c
+Fk(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)h(formatted)d(in)j
+(suc)o(h)f(a)f(w)o(a)o(y)g(that)g(it)h(can)195 1122 y(b)q(e)i(made)f
+(part)g(of)f(an)i Ft(inputrc)e Fu(\014le)i(and)f(re-read.)1762
+1227 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1227
+V 21 w(list)p 337 1227 V 22 w(funmap)p 550 1227 V 18
+w(names)h Fg(\()p Ft(void)p Fg(\))195 1282 y Fu(Prin)o(t)15
+b(the)g(names)h(of)e(all)j(bindable)g(Readline)f(functions)g(to)f
+Ft(rl_outstream)p Fu(.)1762 1387 y(F)l(unction)-1861
+b Fi(const)20 b(char)g(**)f Fh(rl)p 462 1387 V 21 w(funmap)p
+674 1387 V 18 w(names)i Fg(\()p Ft(void)p Fg(\))195 1442
y Fu(Return)13 b(a)f(NULL)i(terminated)g(arra)o(y)d(of)i(kno)o(wn)g
(function)g(names.)20 b(The)13 b(arra)o(y)f(is)h(sorted.)19
-b(The)195 979 y(arra)o(y)11 b(itself)j(is)f(allo)q(cated,)h(but)f(not)f
-(the)h(strings)f(inside.)21 b(Y)l(ou)13 b(should)h Ft(free\(\))d
-Fu(the)i(arra)o(y)e(when)195 1034 y(y)o(ou)k(are)g(done,)g(but)g(not)g
-(the)g(p)q(oin)o(ters.)1762 1146 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1146 V 21 w(add)p 328 1146
-V 20 w(funmap)p 539 1146 V 18 w(en)n(try)j Fg(\()p Ft(const)14
-b(char)h(*name,)f(rl_command_func_t)283 1201 y(*function)p
-Fg(\))195 1255 y Fu(Add)j Fk(name)i Fu(to)d(the)g(list)h(of)f(bindable)
+b(The)195 1497 y(arra)o(y)11 b(itself)j(is)f(allo)q(cated,)h(but)f(not)
+f(the)h(strings)f(inside.)21 b(Y)l(ou)13 b(should)h Ft(free\(\))d
+Fu(the)i(arra)o(y)e(when)195 1552 y(y)o(ou)k(are)g(done,)g(but)g(not)g
+(the)g(p)q(oin)o(ters.)1762 1657 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1657 V 21 w(add)p 328 1657
+V 20 w(funmap)p 539 1657 V 18 w(en)n(try)j Fg(\()p Ft(const)14
+b(char)h(*name,)f(rl_command_func_t)283 1711 y(*function)p
+Fg(\))195 1766 y Fu(Add)j Fk(name)i Fu(to)d(the)g(list)h(of)f(bindable)
j(Readline)f(command)e(names,)g(and)h(mak)o(e)f Fk(function)h
-Fu(the)195 1310 y(function)f(to)f(b)q(e)g(called)i(when)f
-Fk(name)i Fu(is)d(in)o(v)o(ok)o(ed.)75 1419 y Fj(2.4.5)30
-b(Allo)n(wing)21 b(Undoing)137 1515 y Fu(Supp)q(orting)14
+Fu(the)195 1821 y(function)f(to)f(b)q(e)g(called)i(when)f
+Fk(name)i Fu(is)d(in)o(v)o(ok)o(ed.)75 1926 y Fj(2.4.5)30
+b(Allo)n(wing)21 b(Undoing)137 2020 y Fu(Supp)q(orting)14
b(the)g(undo)f(command)g(is)h(a)f(painless)h(thing,)g(and)f(mak)o(es)g
-(y)o(our)f(functions)i(m)o(uc)o(h)f(more)75 1569 y(useful.)21
+(y)o(our)f(functions)i(m)o(uc)o(h)f(more)75 2075 y(useful.)21
b(It)15 b(is)h(certainly)g(easy)f(to)g(try)f(something)i(if)f(y)o(ou)g
-(kno)o(w)g(y)o(ou)g(can)g(undo)h(it.)137 1636 y(If)21
+(kno)o(w)g(y)o(ou)g(can)g(undo)h(it.)137 2140 y(If)21
b(y)o(our)f(function)h(simply)h(inserts)f(text)e(once,)j(or)e(deletes)h
-(text)f(once,)i(and)f(uses)f Ft(rl_insert_)75 1690 y(text\(\))13
+(text)f(once,)i(and)f(uses)f Ft(rl_insert_)75 2194 y(text\(\))13
b Fu(or)h Ft(rl_delete_text\(\))d Fu(to)j(do)f(it,)h(then)h(undoing)g
(is)f(already)g(done)h(for)e(y)o(ou)h(automatically)l(.)137
-1757 y(If)d(y)o(ou)f(do)g(m)o(ultiple)i(insertions)f(or)f(m)o(ultiple)i
+2259 y(If)d(y)o(ou)f(do)g(m)o(ultiple)i(insertions)f(or)f(m)o(ultiple)i
(deletions,)g(or)e(an)o(y)g(com)o(bination)h(of)f(these)g(op)q
-(erations,)75 1812 y(y)o(ou)19 b(should)h(group)e(them)h(together)g(in)
+(erations,)75 2314 y(y)o(ou)19 b(should)h(group)e(them)h(together)g(in)
o(to)g(one)g(op)q(eration.)31 b(This)20 b(is)f(done)h(with)f
-Ft(rl_begin_undo_)75 1866 y(group\(\))14 b Fu(and)i Ft
-(rl_end_undo_group\(\))p Fu(.)137 1933 y(The)g(t)o(yp)q(es)f(of)g(ev)o
-(en)o(ts)g(that)f(can)h(b)q(e)h(undone)g(are:)195 1996
+Ft(rl_begin_undo_)75 2369 y(group\(\))14 b Fu(and)i Ft
+(rl_end_undo_group\(\))p Fu(.)137 2434 y(The)g(t)o(yp)q(es)f(of)g(ev)o
+(en)o(ts)g(that)f(can)h(b)q(e)h(undone)g(are:)195 2496
y Ft(enum)23 b(undo_code)g({)h(UNDO_DELETE,)e(UNDO_INSERT,)g
-(UNDO_BEGIN,)g(UNDO_END)h(};)137 2062 y Fu(Notice)16
+(UNDO_BEGIN,)g(UNDO_END)h(};)137 2560 y Fu(Notice)16
b(that)e Ft(UNDO_DELETE)g Fu(means)h(to)g(insert)g(some)g(text,)f(and)i
-Ft(UNDO_INSERT)d Fu(means)i(to)g(delete)75 2117 y(some)e(text.)19
+Ft(UNDO_INSERT)d Fu(means)i(to)g(delete)75 2615 y(some)e(text.)19
b(That)14 b(is,)g(the)g(undo)g(co)q(de)g(tells)h(what)e(to)h(undo,)g
(not)f(ho)o(w)g(to)g(undo)i(it.)k Ft(UNDO_BEGIN)13 b
-Fu(and)75 2172 y Ft(UNDO_END)h Fu(are)h(tags)f(added)i(b)o(y)f
+Fu(and)75 2670 y Ft(UNDO_END)h Fu(are)h(tags)f(added)i(b)o(y)f
Ft(rl_begin_undo_group\(\))d Fu(and)k Ft(rl_end_undo_group\(\))p
-Fu(.)1762 2284 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 2284 V 21 w(b)r(egin)p 372 2284 V 20 w(undo)p 517
-2284 V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 2339
-y Fu(Begins)16 b(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g
-(construct.)20 b(The)c(undo)g(information)g(usually)195
-2393 y(comes)21 b(from)f(calls)i(to)e Ft(rl_insert_text\(\))e
-Fu(and)j Ft(rl_delete_text\(\))p Fu(,)f(but)h(could)g(b)q(e)h(the)195
-2448 y(result)16 b(of)e(calls)j(to)d Ft(rl_add_undo\(\))p
-Fu(.)1762 2560 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 2560 V 21 w(end)p 326 2560 V 20 w(undo)p 471 2560
-V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 2615 y Fu(Closes)15
-b(the)f(curren)o(t)h(undo)g(group)f(started)g(with)g
-Ft(rl_begin_undo_group)f(\(\))p Fu(.)19 b(There)c(should)195
-2670 y(b)q(e)h(one)f(call)i(to)d Ft(rl_end_undo_group\(\))f
-Fu(for)h(eac)o(h)h(call)i(to)d Ft(rl_begin_undo_group\(\))p
Fu(.)p eop
%%Page: 30 32
30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)h(Library)1762
-149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149
-18 3 v 21 w(add)p 354 149 V 20 w(undo)i Fg(\()p Ft(enum)14
+149 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 149
+18 3 v 21 w(b)r(egin)p 372 149 V 20 w(undo)p 517 149
+V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 204 y Fu(Begins)16
+b(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g(construct.)20
+b(The)c(undo)g(information)g(usually)195 259 y(comes)21
+b(from)f(calls)i(to)e Ft(rl_insert_text\(\))e Fu(and)j
+Ft(rl_delete_text\(\))p Fu(,)f(but)h(could)g(b)q(e)h(the)195
+314 y(result)16 b(of)e(calls)j(to)d Ft(rl_add_undo\(\))p
+Fu(.)1762 418 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 418 V 21 w(end)p 326 418 V 20 w(undo)p 471 418 V
+20 w(group)h Fg(\()p Ft(void)p Fg(\))195 472 y Fu(Closes)15
+b(the)f(curren)o(t)h(undo)g(group)f(started)g(with)g
+Ft(rl_begin_undo_group)f(\(\))p Fu(.)19 b(There)c(should)195
+527 y(b)q(e)h(one)f(call)i(to)d Ft(rl_end_undo_group\(\))f
+Fu(for)h(eac)o(h)h(call)i(to)d Ft(rl_begin_undo_group\(\))p
+Fu(.)1762 631 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p
+241 631 V 21 w(add)p 354 631 V 20 w(undo)i Fg(\()p Ft(enum)14
b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)h(char)283
-204 y(*text)p Fg(\))195 259 y Fu(Remem)o(b)q(er)i(ho)o(w)f(to)h(undo)g
+686 y(*text)p Fg(\))195 740 y Fu(Remem)o(b)q(er)i(ho)o(w)f(to)h(undo)g
(an)g(ev)o(en)o(t)g(\(according)g(to)g Fk(what)q Fu(\).)24
-b(The)17 b(a\013ected)g(text)f(runs)i(from)195 314 y
+b(The)17 b(a\013ected)g(text)f(runs)i(from)195 795 y
Fk(start)d Fu(to)g Fk(end)p Fu(,)g(and)g(encompasses)h
-Fk(text)p Fu(.)1762 428 y(F)l(unction)-1861 b Fi(void)20
-b Fh(rl)p 241 428 V 21 w(free)p 356 428 V 20 w(undo)p
-501 428 V 20 w(list)k Fg(\()p Ft(void)p Fg(\))195 483
+Fk(text)p Fu(.)1762 899 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 899 V 21 w(free)p 356 899 V 20 w(undo)p
+501 899 V 20 w(list)k Fg(\()p Ft(void)p Fg(\))195 954
y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1762
-598 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 598
-V 21 w(do)p 297 598 V 20 w(undo)i Fg(\()p Ft(void)p Fg(\))195
-652 y Fu(Undo)12 b(the)f(\014rst)g(thing)h(on)g(the)f(undo)h(list.)19
-b(Returns)11 b Ft(0)h Fu(if)g(there)f(w)o(as)g(nothing)h(to)e(undo,)j
-(non-zero)195 707 y(if)j(something)f(w)o(as)f(undone.)137
-798 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i
+1057 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1057
+V 21 w(do)p 297 1057 V 20 w(undo)i Fg(\()p Ft(void)p
+Fg(\))195 1112 y Fu(Undo)12 b(the)f(\014rst)g(thing)h(on)g(the)f(undo)h
+(list.)19 b(Returns)11 b Ft(0)h Fu(if)g(there)f(w)o(as)g(nothing)h(to)e
+(undo,)j(non-zero)195 1167 y(if)j(something)f(w)o(as)f(undone.)137
+1251 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i
(text,)e(but)g(directly)i(mo)q(dify)f(the)g(existing)g(text)g(\(e.g.,)
-75 853 y(c)o(hange)j(its)h(case\),)g(call)g Ft(rl_modifying\(\))e
+75 1306 y(c)o(hange)j(its)h(case\),)g(call)g Ft(rl_modifying\(\))e
Fu(once,)i(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f(text.)32
-b(Y)l(ou)20 b(m)o(ust)75 907 y(supply)c(the)g(indices)h(of)e(the)g
+b(Y)l(ou)20 b(m)o(ust)75 1361 y(supply)c(the)g(indices)h(of)e(the)g
(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q(dify)l(.)1762
-1022 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1022
+1464 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1464
V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p
-Fg(\))195 1077 y Fu(T)l(ell)22 b(Readline)f(to)e(sa)o(v)o(e)h(the)g
+Fg(\))195 1519 y Fu(T)l(ell)22 b(Readline)f(to)e(sa)o(v)o(e)h(the)g
(text)g(b)q(et)o(w)o(een)g Fk(start)g Fu(and)g Fk(end)j
Fu(as)c(a)h(single)h(undo)g(unit.)35 b(It)20 b(is)195
-1131 y(assumed)15 b(that)g(y)o(ou)g(will)i(subsequen)o(tly)f(mo)q(dify)
-g(that)e(text.)75 1242 y Fj(2.4.6)30 b(Redispla)n(y)1762
-1385 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241
-1385 V 21 w(redispla)n(y)k Fg(\()p Ft(void)p Fg(\))195
-1440 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)g(screen)g
+1574 y(assumed)15 b(that)g(y)o(ou)g(will)i(subsequen)o(tly)f(mo)q(dify)
+g(that)e(text.)75 1678 y Fj(2.4.6)30 b(Redispla)n(y)1762
+1811 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241
+1811 V 21 w(redispla)n(y)k Fg(\()p Ft(void)p Fg(\))195
+1866 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)g(screen)g
(to)f(re\015ect)i(the)f(curren)o(t)f(con)o(ten)o(ts)h(of)f
-Ft(rl_line_)195 1495 y(buffer)p Fu(.)1762 1609 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1609 V 21 w(forced)p 390 1609
-V 20 w(up)r(date)p 584 1609 V 20 w(displa)n(y)k Fg(\()p
-Ft(void)p Fg(\))195 1664 y Fu(F)l(orce)c(the)g(line)h(to)e(b)q(e)i(up)q
+Ft(rl_line_)195 1920 y(buffer)p Fu(.)1762 2024 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2024 V 21 w(forced)p 390 2024
+V 20 w(up)r(date)p 584 2024 V 20 w(displa)n(y)k Fg(\()p
+Ft(void)p Fg(\))195 2079 y Fu(F)l(orce)c(the)g(line)h(to)e(b)q(e)i(up)q
(dated)f(and)g(redispla)o(y)o(ed,)i(whether)e(or)g(not)f(Readline)i
-(thinks)g(the)195 1719 y(screen)16 b(displa)o(y)g(is)g(correct.)1762
-1833 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1833
-V 21 w(on)p 297 1833 V 20 w(new)p 416 1833 V 21 w(line)k
-Fg(\()p Ft(void)p Fg(\))195 1888 y Fu(T)l(ell)16 b(the)f(up)q(date)h
+(thinks)g(the)195 2134 y(screen)16 b(displa)o(y)g(is)g(correct.)1762
+2238 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2238
+V 21 w(on)p 297 2238 V 20 w(new)p 416 2238 V 21 w(line)k
+Fg(\()p Ft(void)p Fg(\))195 2292 y Fu(T)l(ell)16 b(the)f(up)q(date)h
(functions)g(that)e(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h
-(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 1943
-y(ouputting)f(a)e(newline.)1762 2058 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 2058 V 21 w(on)p 297 2058 V
-20 w(new)p 416 2058 V 21 w(line)p 525 2058 V 22 w(with)p
-657 2058 V 22 w(prompt)h Fg(\()p Ft(void)p Fg(\))195
-2112 y Fu(T)l(ell)14 b(the)e(up)q(date)h(functions)g(that)f(w)o(e)g(ha)
+(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 2347
+y(ouputting)f(a)e(newline.)1762 2451 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2451 V 21 w(on)p 297 2451 V
+20 w(new)p 416 2451 V 21 w(line)p 525 2451 V 22 w(with)p
+657 2451 V 22 w(prompt)h Fg(\()p Ft(void)p Fg(\))195
+2506 y Fu(T)l(ell)14 b(the)e(up)q(date)h(functions)g(that)f(w)o(e)g(ha)
o(v)o(e)g(mo)o(v)o(ed)f(on)o(to)h(a)g(new)g(line,)i(with)f
-Fk(rl)p 1556 2112 14 2 v 17 w(prompt)g Fu(already)195
-2167 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f
+Fk(rl)p 1556 2506 14 2 v 17 w(prompt)g Fu(already)195
+2560 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f
(applications)i(that)e(w)o(an)o(t)f(to)h(output)g(the)g(prompt)g
-(string)195 2222 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to)
+(string)195 2615 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to)
e(kno)o(w)g(the)h(prompt)f(string)h(length)g(for)f(redispla)o(y)l(.)21
-b(It)195 2277 y(should)16 b(b)q(e)g(used)g(after)e(setting)i
-Fk(rl)p 795 2277 V 16 w(already)p 956 2277 V 17 w(prompted)p
-Fu(.)1762 2391 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 2391 18 3 v 21 w(reset)p 357 2391 V 20 w(line)p 465
-2391 V 23 w(state)j Fg(\()p Ft(void)p Fg(\))195 2446
-y Fu(Reset)17 b(the)g(displa)o(y)i(state)d(to)h(a)g(clean)h(state)f
-(and)g(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)195
-2501 y(new)e(line.)1762 2615 y(F)l(unction)-1861 b Fi(int)20
-b Fh(rl)p 215 2615 V 21 w(crlf)j Fg(\()p Ft(void)p Fg(\))195
-2670 y Fu(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g
-(next)g(screen)h(line.)p eop
+b(It)195 2670 y(should)16 b(b)q(e)g(used)g(after)e(setting)i
+Fk(rl)p 795 2670 V 16 w(already)p 956 2670 V 17 w(prompted)p
+Fu(.)p eop
%%Page: 31 33
31 32 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
(Readline)843 b(31)1762 149 y(F)l(unction)-1861 b Fi(int)20
-b Fh(rl)p 215 149 18 3 v 21 w(sho)n(w)p 359 149 V 20
-w(c)n(har)j Fg(\()p Ft(int)14 b(c)p Fg(\))195 204 y Fu(Displa)o(y)j(c)o
-(haracter)e Fk(c)20 b Fu(on)c Ft(rl_outstream)p Fu(.)21
-b(If)c(Readline)g(has)f(not)g(b)q(een)i(set)e(to)f(displa)o(y)j(meta)
-195 259 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o(v)o
-(ert)d(meta)h(c)o(haracters)f(to)g(a)h(meta-pre\014xed)g(k)o(ey)g
-(sequence.)195 314 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g
+b Fh(rl)p 215 149 18 3 v 21 w(reset)p 357 149 V 20 w(line)p
+465 149 V 23 w(state)j Fg(\()p Ft(void)p Fg(\))195 204
+y Fu(Reset)17 b(the)g(displa)o(y)i(state)d(to)h(a)g(clean)h(state)f
+(and)g(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)195
+259 y(new)e(line.)1762 383 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 383 V 21 w(crlf)j Fg(\()p Ft(void)p Fg(\))195
+438 y Fu(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g
+(next)g(screen)h(line.)1762 562 y(F)l(unction)-1861 b
+Fi(int)20 b Fh(rl)p 215 562 V 21 w(sho)n(w)p 359 562
+V 20 w(c)n(har)j Fg(\()p Ft(int)14 b(c)p Fg(\))195 616
+y Fu(Displa)o(y)j(c)o(haracter)e Fk(c)20 b Fu(on)c Ft(rl_outstream)p
+Fu(.)21 b(If)c(Readline)g(has)f(not)g(b)q(een)i(set)e(to)f(displa)o(y)j
+(meta)195 671 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o
+(v)o(ert)d(meta)h(c)o(haracters)f(to)g(a)h(meta-pre\014xed)g(k)o(ey)g
+(sequence.)195 726 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g
(applications)i(whic)o(h)f(wish)g(to)f(do)g(their)g(o)o(wn)g(redispla)o
-(y)l(.)1762 443 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 443 V 21 w(message)g Fg(\()p Ft(const)14 b(char)h(*,)g(...)p
-Fg(\))195 498 y Fu(The)c(argumen)o(ts)e(are)h(a)g(format)f(string)h(as)
+(y)l(.)1762 850 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 850 V 21 w(message)g Fg(\()p Ft(const)14 b(char)h(*,)g(...)p
+Fg(\))195 905 y Fu(The)c(argumen)o(ts)e(are)h(a)g(format)f(string)h(as)
g(w)o(ould)h(b)q(e)g(supplied)i(to)c Ft(printf)p Fu(,)h(p)q(ossibly)i
-(con)o(taining)195 553 y(con)o(v)o(ersion)22 b(sp)q(eci\014cations)i
+(con)o(taining)195 959 y(con)o(v)o(ersion)22 b(sp)q(eci\014cations)i
(suc)o(h)f(as)e(`)p Ft(\045d)p Fu(',)i(and)f(an)o(y)g(additional)h
-(argumen)o(ts)e(necessary)i(to)195 608 y(satisfy)d(the)h(con)o(v)o
+(argumen)o(ts)e(necessary)i(to)195 1014 y(satisfy)d(the)h(con)o(v)o
(ersion)g(sp)q(eci\014cations.)38 b(The)21 b(resulting)h(string)e(is)i
-(displa)o(y)o(ed)g(in)f(the)g Fk(ec)o(ho)195 663 y(area)p
+(displa)o(y)o(ed)g(in)f(the)g Fk(ec)o(ho)195 1069 y(area)p
Fu(.)e(The)d(ec)o(ho)f(area)g(is)g(also)g(used)h(to)f(displa)o(y)h(n)o
(umeric)g(argumen)o(ts)f(and)g(searc)o(h)g(strings.)1762
-792 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 792
-V 21 w(clear)p 354 792 V 21 w(message)h Fg(\()p Ft(void)p
-Fg(\))195 847 y Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f
-(area.)1762 976 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p
-241 976 V 21 w(sa)n(v)n(e)p 365 976 V 21 w(prompt)h Fg(\()p
-Ft(void)p Fg(\))195 1031 y Fu(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)h
-(prompt)e(displa)o(y)i(state)e(in)h(preparation)f(for)g(displa)o(ying)j
-(a)d(new)195 1086 y(message)15 b(in)h(the)f(message)g(area)f(with)i
-Ft(rl_message\(\))p Fu(.)1762 1215 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 1215 V 21 w(restore)p 436
-1215 V 20 w(prompt)g Fg(\()p Ft(void)p Fg(\))195 1270
+1193 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1193
+V 21 w(clear)p 354 1193 V 21 w(message)h Fg(\()p Ft(void)p
+Fg(\))195 1248 y Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f
+(area.)1762 1371 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p
+241 1371 V 21 w(sa)n(v)n(e)p 365 1371 V 21 w(prompt)h
+Fg(\()p Ft(void)p Fg(\))195 1426 y Fu(Sa)o(v)o(e)g(the)h(lo)q(cal)g
+(Readline)h(prompt)e(displa)o(y)i(state)e(in)h(preparation)f(for)g
+(displa)o(ying)j(a)d(new)195 1481 y(message)15 b(in)h(the)f(message)g
+(area)f(with)i Ft(rl_message\(\))p Fu(.)1762 1605 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 1605 V 21 w(restore)p 436
+1605 V 20 w(prompt)g Fg(\()p Ft(void)p Fg(\))195 1660
y Fu(Restore)g(the)i(lo)q(cal)g(Readline)h(prompt)e(displa)o(y)h(state)
f(sa)o(v)o(ed)g(b)o(y)g(the)g(most)g(recen)o(t)g(call)i(to)195
-1325 y Ft(rl_save_prompt)p Fu(.)1762 1455 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1455 V 21 w(expand)p 416 1455
+1714 y Ft(rl_save_prompt)p Fu(.)1762 1838 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1838 V 21 w(expand)p 416 1838
V 20 w(prompt)h Fg(\()p Ft(char)14 b(*prompt)p Fg(\))195
-1509 y Fu(Expand)22 b(an)o(y)f(sp)q(ecial)i(c)o(haracter)e(sequences)h
+1893 y Fu(Expand)22 b(an)o(y)f(sp)q(ecial)i(c)o(haracter)e(sequences)h
(in)g Fk(prompt)g Fu(and)g(set)f(up)h(the)f(lo)q(cal)i(Readline)195
-1564 y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18
+1948 y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18
b(function)h(is)f(called)i(b)o(y)e Ft(readline\(\))p
-Fu(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 1619 y(called)12
+Fu(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 2003 y(called)12
b(to)e(expand)h(the)g(primary)g(prompt)f(if)h(the)f Ft
-(rl_on_new_line_with_prompt\(\))d Fu(function)195 1674
+(rl_on_new_line_with_prompt\(\))d Fu(function)195 2057
y(or)12 b Ft(rl_already_prompted)e Fu(v)m(ariable)k(is)g(used.)19
b(It)13 b(returns)g(the)f(n)o(um)o(b)q(er)i(of)e(visible)j(c)o
-(haracters)195 1729 y(on)g(the)g(last)h(line)g(of)f(the)g(\(p)q
-(ossibly)i(m)o(ulti-line\))g(prompt.)1762 1858 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1858 V 21 w(set)p 307 1858
+(haracters)195 2112 y(on)g(the)g(last)h(line)g(of)f(the)g(\(p)q
+(ossibly)i(m)o(ulti-line\))g(prompt.)1762 2236 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2236 V 21 w(set)p 307 2236
V 20 w(prompt)h Fg(\()p Ft(const)14 b(char)h(*prompt)p
-Fg(\))195 1913 y Fu(Mak)o(e)e(Readline)i(use)e Fk(prompt)h
+Fg(\))195 2291 y Fu(Mak)o(e)e(Readline)i(use)e Fk(prompt)h
Fu(for)f(subsequen)o(t)h(redispla)o(y)l(.)21 b(This)14
-b(calls)g Ft(rl_expand_prompt\(\))195 1968 y Fu(to)h(expand)g(the)h
+b(calls)g Ft(rl_expand_prompt\(\))195 2346 y Fu(to)h(expand)g(the)h
(prompt)e(and)i(sets)f Ft(rl_prompt)f Fu(to)g(the)h(result.)75
-2088 y Fj(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1762
-2247 y Fu(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
-2247 V 21 w(insert)p 378 2247 V 21 w(text)k Fg(\()p Ft(const)14
-b(char)g(*text)p Fg(\))195 2301 y Fu(Insert)h Fk(text)h
+2462 y Fj(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1762
+2615 y Fu(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
+2615 V 21 w(insert)p 378 2615 V 21 w(text)k Fg(\()p Ft(const)14
+b(char)g(*text)p Fg(\))195 2670 y Fu(Insert)h Fk(text)h
Fu(in)o(to)f(the)h(line)g(at)f(the)g(curren)o(t)g(cursor)g(p)q
-(osition.)1762 2431 y(F)l(unction)-1861 b Fi(int)20 b
-Fh(rl)p 215 2431 V 21 w(delete)p 383 2431 V 22 w(text)k
-Fg(\()p Ft(int)14 b(start,)h(int)f(end)p Fg(\))195 2486
-y Fu(Delete)i(the)f(text)g(b)q(et)o(w)o(een)g Fk(start)g
-Fu(and)h Fk(end)h Fu(in)f(the)g(curren)o(t)f(line.)1762
-2615 y(F)l(unction)-1861 b Fi(char)20 b(*)f Fh(rl)p 286
-2615 V 21 w(cop)n(y)p 421 2615 V 21 w(text)24 b Fg(\()p
-Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 2670 y Fu(Return)g(a)g(cop)o
-(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i Fk(start)f
-Fu(and)g Fk(end)j Fu(in)e(the)f(curren)o(t)g(line.)p
-eop
+(osition.)p eop
%%Page: 32 34
32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)h(Library)1762
149 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 149
-18 3 v 21 w(kill)p 311 149 V 23 w(text)k Fg(\()p Ft(int)14
-b(start,)h(int)g(end)p Fg(\))195 204 y Fu(Cop)o(y)i(the)g(text)f(b)q
+18 3 v 21 w(delete)p 383 149 V 22 w(text)k Fg(\()p Ft(int)14
+b(start,)h(int)f(end)p Fg(\))195 204 y Fu(Delete)i(the)f(text)g(b)q(et)
+o(w)o(een)g Fk(start)g Fu(and)h Fk(end)h Fu(in)f(the)g(curren)o(t)f
+(line.)1762 321 y(F)l(unction)-1861 b Fi(char)20 b(*)f
+Fh(rl)p 286 321 V 21 w(cop)n(y)p 421 321 V 21 w(text)24
+b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p Fg(\))195
+376 y Fu(Return)g(a)g(cop)o(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i
+Fk(start)f Fu(and)g Fk(end)j Fu(in)e(the)f(curren)o(t)g(line.)1762
+494 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 494
+V 21 w(kill)p 311 494 V 23 w(text)k Fg(\()p Ft(int)14
+b(start,)h(int)g(end)p Fg(\))195 548 y Fu(Cop)o(y)i(the)g(text)f(b)q
(et)o(w)o(een)i Fk(start)f Fu(and)g Fk(end)i Fu(in)f(the)f(curren)o(t)g
-(line)i(to)e(the)g(kill)i(ring,)e(app)q(ending)195 259
+(line)i(to)e(the)g(kill)i(ring,)e(app)q(ending)195 603
y(or)f(prep)q(ending)k(to)c(the)h(last)g(kill)i(if)e(the)g(last)g
(command)g(w)o(as)f(a)h(kill)i(command.)25 b(The)17 b(text)f(is)195
-314 y(deleted.)26 b(If)17 b Fk(start)g Fu(is)g(less)g(than)g
+658 y(deleted.)26 b(If)17 b Fk(start)g Fu(is)g(less)g(than)g
Fk(end)p Fu(,)g(the)g(text)g(is)g(app)q(ended,)h(otherwise)f(prep)q
-(ended.)27 b(If)17 b(the)195 369 y(last)e(command)g(w)o(as)g(not)f(a)h
+(ended.)27 b(If)17 b(the)195 713 y(last)e(command)g(w)o(as)g(not)f(a)h
(kill,)i(a)e(new)g(kill)i(ring)f(slot)f(is)h(used.)1762
-478 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 478
-V 21 w(push)p 355 478 V 19 w(macro)p 529 478 V 19 w(input)k
-Fg(\()p Ft(char)14 b(*macro)p Fg(\))195 533 y Fu(Cause)g
+830 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 830
+V 21 w(push)p 355 830 V 19 w(macro)p 529 830 V 19 w(input)k
+Fg(\()p Ft(char)14 b(*macro)p Fg(\))195 885 y Fu(Cause)g
Fk(macro)i Fu(to)d(b)q(e)i(inserted)g(in)o(to)f(the)g(line,)i(as)e(if)g
(it)h(had)f(b)q(een)h(in)o(v)o(ok)o(ed)g(b)o(y)f(a)g(k)o(ey)g(b)q(ound)
-h(to)195 588 y(a)g(macro.)k(Not)c(esp)q(ecially)i(useful;)f(use)g
-Ft(rl_insert_text\(\))d Fu(instead.)75 696 y Fj(2.4.8)30
-b(Character)21 b(Input)1762 834 y Fu(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 834 V 21 w(read)p 346 834 V
-20 w(k)n(ey)k Fg(\()p Ft(void)p Fg(\))195 889 y Fu(Return)14
+h(to)195 940 y(a)g(macro.)k(Not)c(esp)q(ecially)i(useful;)f(use)g
+Ft(rl_insert_text\(\))d Fu(instead.)75 1052 y Fj(2.4.8)30
+b(Character)21 b(Input)1762 1198 y Fu(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1198 V 21 w(read)p 346 1198
+V 20 w(k)n(ey)k Fg(\()p Ft(void)p Fg(\))195 1253 y Fu(Return)14
b(the)h(next)g(c)o(haracter)f(a)o(v)m(ailable)i(from)e(Readline's)i
-(curren)o(t)f(input)g(stream.)k(This)d(han-)195 944 y(dles)f(input)g
-(inserted)f(in)o(to)g(the)g(input)h(stream)e(via)h Fk(rl)p
-1117 944 14 2 v 17 w(p)q(ending)p 1290 944 V 18 w(input)i
-Fu(\(see)e(Section)h(2.3)e([Read-)195 999 y(line)21 b(V)l(ariables],)g
-(page)f(22\))f(and)h Ft(rl_stuff_char\(\))p Fu(,)e(macros,)h(and)h(c)o
-(haracters)f(read)h(from)195 1053 y(the)d(k)o(eyb)q(oard.)25
-b(While)19 b(w)o(aiting)e(for)f(input,)j(this)e(function)h(will)h(call)
-f(an)o(y)e(function)i(assigned)195 1108 y(to)d(the)g
-Ft(rl_event_hook)e Fu(v)m(ariable.)1762 1218 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1218 18 3 v 21 w(getc)j Fg(\()p
-Ft(FILE)14 b(*stream)p Fg(\))195 1273 y Fu(Return)c(the)h(next)g(c)o
-(haracter)f(a)o(v)m(ailable)i(from)e Fk(stream)p Fu(,)g(whic)o(h)i(is)f
-(assumed)f(to)g(b)q(e)i(the)e(k)o(eyb)q(oard.)1762 1382
-y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1382 V
-21 w(stu\013)p 346 1382 V 20 w(c)n(har)j Fg(\()p Ft(int)15
-b(c)p Fg(\))195 1437 y Fu(Insert)i Fk(c)i Fu(in)o(to)d(the)h(Readline)h
-(input)f(stream.)23 b(It)16 b(will)i(b)q(e)f Ft(")p Fu(read)p
-Ft(")g Fu(b)q(efore)f(Readline)i(attempts)195 1492 y(to)d(read)g(c)o
-(haracters)f(from)h(the)g(terminal)h(with)f Ft(rl_read_key\(\))p
-Fu(.)1762 1602 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 1602 V 21 w(execute)p 423 1602 V 22 w(next)j Fg(\()p
-Ft(int)15 b(c)p Fg(\))195 1656 y Fu(Mak)o(e)i Fk(c)k
-Fu(b)q(e)d(the)g(next)g(command)g(to)f(b)q(e)i(executed)f(when)h
-Ft(rl_read_key\(\))d Fu(is)i(called.)29 b(This)195 1711
-y(sets)15 b Fk(rl)p 317 1711 14 2 v 17 w(p)q(ending)p
-490 1711 V 18 w(input)p Fu(.)1762 1821 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1821 18 3 v 21 w(clear)p 354
-1821 V 21 w(p)r(ending)p 575 1821 V 21 w(input)j Fg(\()p
-Ft(void)p Fg(\))195 1876 y Fu(Unset)f Fk(rl)p 365 1876
-14 2 v 16 w(p)q(ending)p 537 1876 V 19 w(input)p Fu(,)h(e\013ectiv)o
-(ely)g(negating)e(the)h(e\013ect)f(of)g(an)o(y)h(previous)g(call)h(to)d
-Ft(rl_)195 1930 y(execute_next\(\))p Fu(.)29 b(This)19
-b(w)o(orks)f(only)h(if)h(the)e(p)q(ending)j(input)f(has)f(not)f
-(already)h(b)q(een)h(read)195 1985 y(with)c Ft(rl_read_key\(\))p
-Fu(.)1762 2095 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 2095 18 3 v 21 w(set)p 307 2095 V 20 w(k)n(eyb)r(oard)p
-558 2095 V 21 w(input)p 712 2095 V 21 w(timeout)i Fg(\()p
-Ft(int)15 b(u)p Fg(\))195 2150 y Fu(While)21 b(w)o(aiting)g(for)e(k)o
-(eyb)q(oard)h(input)h(in)g Ft(rl_read_key\(\))p Fu(,)e(Readline)i(will)
-h(w)o(ait)e(for)f Fk(u)h Fu(mi-)195 2204 y(croseconds)h(for)e(input)j
-(b)q(efore)f(calling)h(an)o(y)e(function)h(assigned)g(to)f
-Ft(rl_event_hook)p Fu(.)34 b(The)195 2259 y(default)16
-b(w)o(aiting)f(p)q(erio)q(d)i(is)e(one-ten)o(th)h(of)e(a)h(second.)21
-b(Returns)14 b(the)i(old)f(timeout)h(v)m(alue.)75 2367
-y Fj(2.4.9)30 b(T)-5 b(erminal)20 b(Managemen)n(t)1762
-2506 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241
-2506 V 21 w(prep)p 376 2506 V 20 w(terminal)j Fg(\()p
-Ft(int)14 b(meta_flag)p Fg(\))195 2560 y Fu(Mo)q(dify)22
-b(the)f(terminal)h(settings)f(for)g(Readline's)h(use,)h(so)d
-Ft(readline\(\))g Fu(can)i(read)f(a)g(single)195 2615
-y(c)o(haracter)15 b(at)g(a)g(time)i(from)d(the)i(k)o(eyb)q(oard.)22
-b(The)16 b Fk(meta)p 1192 2615 14 2 v 15 w(\015ag)k Fu(argumen)o(t)15
-b(should)h(b)q(e)h(non-zero)195 2670 y(if)f(Readline)g(should)g(read)f
-(eigh)o(t-bit)i(input.)p eop
+(curren)o(t)f(input)g(stream.)k(This)d(han-)195 1308
+y(dles)f(input)g(inserted)f(in)o(to)g(the)g(input)h(stream)e(via)h
+Fk(rl)p 1117 1308 14 2 v 17 w(p)q(ending)p 1290 1308
+V 18 w(input)i Fu(\(see)e(Section)h(2.3)e([Read-)195
+1363 y(line)21 b(V)l(ariables],)g(page)f(22\))f(and)h
+Ft(rl_stuff_char\(\))p Fu(,)e(macros,)h(and)h(c)o(haracters)f(read)h
+(from)195 1417 y(the)d(k)o(eyb)q(oard.)25 b(While)19
+b(w)o(aiting)e(for)f(input,)j(this)e(function)h(will)h(call)f(an)o(y)e
+(function)i(assigned)195 1472 y(to)d(the)g Ft(rl_event_hook)e
+Fu(v)m(ariable.)1762 1589 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 1589 18 3 v 21 w(getc)j Fg(\()p Ft(FILE)14
+b(*stream)p Fg(\))195 1644 y Fu(Return)c(the)h(next)g(c)o(haracter)f(a)
+o(v)m(ailable)i(from)e Fk(stream)p Fu(,)g(whic)o(h)i(is)f(assumed)f(to)
+g(b)q(e)i(the)e(k)o(eyb)q(oard.)1762 1761 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1761 V 21 w(stu\013)p 346 1761
+V 20 w(c)n(har)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 1816
+y Fu(Insert)i Fk(c)i Fu(in)o(to)d(the)h(Readline)h(input)f(stream.)23
+b(It)16 b(will)i(b)q(e)f Ft(")p Fu(read)p Ft(")g Fu(b)q(efore)f
+(Readline)i(attempts)195 1871 y(to)d(read)g(c)o(haracters)f(from)h(the)
+g(terminal)h(with)f Ft(rl_read_key\(\))p Fu(.)1762 1988
+y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1988 V
+21 w(execute)p 423 1988 V 22 w(next)j Fg(\()p Ft(int)15
+b(c)p Fg(\))195 2043 y Fu(Mak)o(e)i Fk(c)k Fu(b)q(e)d(the)g(next)g
+(command)g(to)f(b)q(e)i(executed)f(when)h Ft(rl_read_key\(\))d
+Fu(is)i(called.)29 b(This)195 2098 y(sets)15 b Fk(rl)p
+317 2098 14 2 v 17 w(p)q(ending)p 490 2098 V 18 w(input)p
+Fu(.)1762 2215 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 2215 18 3 v 21 w(clear)p 354 2215 V 21 w(p)r(ending)p
+575 2215 V 21 w(input)j Fg(\()p Ft(void)p Fg(\))195 2270
+y Fu(Unset)f Fk(rl)p 365 2270 14 2 v 16 w(p)q(ending)p
+537 2270 V 19 w(input)p Fu(,)h(e\013ectiv)o(ely)g(negating)e(the)h
+(e\013ect)f(of)g(an)o(y)h(previous)g(call)h(to)d Ft(rl_)195
+2325 y(execute_next\(\))p Fu(.)29 b(This)19 b(w)o(orks)f(only)h(if)h
+(the)e(p)q(ending)j(input)f(has)f(not)f(already)h(b)q(een)h(read)195
+2380 y(with)c Ft(rl_read_key\(\))p Fu(.)1762 2497 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2497 18 3 v 21 w(set)p 307
+2497 V 20 w(k)n(eyb)r(oard)p 558 2497 V 21 w(input)p
+712 2497 V 21 w(timeout)i Fg(\()p Ft(int)15 b(u)p Fg(\))195
+2552 y Fu(While)21 b(w)o(aiting)g(for)e(k)o(eyb)q(oard)h(input)h(in)g
+Ft(rl_read_key\(\))p Fu(,)e(Readline)i(will)h(w)o(ait)e(for)f
+Fk(u)h Fu(mi-)195 2606 y(croseconds)h(for)e(input)j(b)q(efore)f
+(calling)h(an)o(y)e(function)h(assigned)g(to)f Ft(rl_event_hook)p
+Fu(.)34 b(The)195 2661 y(default)16 b(w)o(aiting)f(p)q(erio)q(d)i(is)e
+(one-ten)o(th)h(of)e(a)h(second.)21 b(Returns)14 b(the)i(old)f(timeout)
+h(v)m(alue.)p eop
%%Page: 33 35
33 34 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(33)1762 149 y(F)l(unction)-1861 b Fi(void)20
-b Fh(rl)p 241 149 18 3 v 21 w(deprep)p 434 149 V 20 w(terminal)j
-Fg(\()p Ft(void)p Fg(\))195 204 y Fu(Undo)16 b(the)g(e\013ects)f(of)h
-Ft(rl_prep_terminal\(\))p Fu(,)d(lea)o(ving)k(the)e(terminal)i(in)g
-(the)e(state)g(in)i(whic)o(h)195 259 y(it)e(w)o(as)g(b)q(efore)g(the)h
-(most)e(recen)o(t)h(call)i(to)d Ft(rl_prep_terminal\(\))p
-Fu(.)1762 379 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p
-241 379 V 21 w(tt)n(y)p 334 379 V 22 w(set)p 427 379
-V 20 w(default)p 620 379 V 21 w(bindings)k Fg(\()p Ft(Keymap)14
-b(kmap)p Fg(\))195 434 y Fu(Read)k(the)h(op)q(erating)f(system's)g
-(terminal)h(editing)h(c)o(haracters)e(\(as)f(w)o(ould)i(b)q(e)g(displa)
-o(y)o(ed)h(b)o(y)195 488 y Ft(stty)p Fu(\))14 b(to)h(their)h(Readline)g
-(equiv)m(alen)o(ts.)22 b(The)15 b(bindings)i(are)e(p)q(erformed)g(in)h
-Fk(kmap)p Fu(.)1762 608 y(F)l(unction)-1861 b Fi(int)20
-b Fh(rl)p 215 608 V 21 w(reset)p 357 608 V 20 w(terminal)j
-Fg(\()p Ft(const)15 b(char)f(*terminal_name)p Fg(\))195
-663 y Fu(Reinitialize)h(Readline's)e(idea)g(of)f(the)g(terminal)h
-(settings)g(using)g Fk(terminal)p 1491 663 14 2 v 17
-w(name)h Fu(as)e(the)h(termi-)195 718 y(nal)k(t)o(yp)q(e)f(\(e.g.,)f
-Ft(vt100)p Fu(\).)21 b(If)c Fk(terminal)p 878 718 V 17
-w(name)i Fu(is)d Ft(NULL)p Fu(,)g(the)g(v)m(alue)h(of)f(the)g
-Ft(TERM)g Fu(en)o(vironmen)o(t)195 773 y(v)m(ariable)h(is)e(used.)75
-886 y Fj(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1762
-1035 y Fu(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
-1035 18 3 v 21 w(extend)p 404 1035 V 21 w(line)p 513
-1035 V 22 w(bu\013er)j Fg(\()p Ft(int)15 b(len)p Fg(\))195
-1090 y Fu(Ensure)g(that)g Ft(rl_line_buffer)e Fu(has)i(enough)g(space)h
+(Readline)843 b(33)75 149 y Fj(2.4.9)30 b(T)-5 b(erminal)20
+b(Managemen)n(t)1762 290 y Fu(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 290 18 3 v 21 w(prep)p 376 290 V 20 w(terminal)j
+Fg(\()p Ft(int)14 b(meta_flag)p Fg(\))195 345 y Fu(Mo)q(dify)22
+b(the)f(terminal)h(settings)f(for)g(Readline's)h(use,)h(so)d
+Ft(readline\(\))g Fu(can)i(read)f(a)g(single)195 400
+y(c)o(haracter)15 b(at)g(a)g(time)i(from)d(the)i(k)o(eyb)q(oard.)22
+b(The)16 b Fk(meta)p 1192 400 14 2 v 15 w(\015ag)k Fu(argumen)o(t)15
+b(should)h(b)q(e)h(non-zero)195 454 y(if)f(Readline)g(should)g(read)f
+(eigh)o(t-bit)i(input.)1762 566 y(F)l(unction)-1861 b
+Fi(void)20 b Fh(rl)p 241 566 18 3 v 21 w(deprep)p 434
+566 V 20 w(terminal)j Fg(\()p Ft(void)p Fg(\))195 621
+y Fu(Undo)16 b(the)g(e\013ects)f(of)h Ft(rl_prep_terminal\(\))p
+Fu(,)d(lea)o(ving)k(the)e(terminal)i(in)g(the)e(state)g(in)i(whic)o(h)
+195 676 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i(to)
+d Ft(rl_prep_terminal\(\))p Fu(.)1762 787 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 787 V 21 w(tt)n(y)p 334 787
+V 22 w(set)p 427 787 V 20 w(default)p 620 787 V 21 w(bindings)k
+Fg(\()p Ft(Keymap)14 b(kmap)p Fg(\))195 842 y Fu(Read)k(the)h(op)q
+(erating)f(system's)g(terminal)h(editing)h(c)o(haracters)e(\(as)f(w)o
+(ould)i(b)q(e)g(displa)o(y)o(ed)h(b)o(y)195 897 y Ft(stty)p
+Fu(\))14 b(to)h(their)h(Readline)g(equiv)m(alen)o(ts.)22
+b(The)15 b(bindings)i(are)e(p)q(erformed)g(in)h Fk(kmap)p
+Fu(.)1762 1008 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 1008 V 21 w(reset)p 357 1008 V 20 w(terminal)j Fg(\()p
+Ft(const)15 b(char)f(*terminal_name)p Fg(\))195 1063
+y Fu(Reinitialize)h(Readline's)e(idea)g(of)f(the)g(terminal)h(settings)
+g(using)g Fk(terminal)p 1491 1063 14 2 v 17 w(name)h
+Fu(as)e(the)h(termi-)195 1118 y(nal)k(t)o(yp)q(e)f(\(e.g.,)f
+Ft(vt100)p Fu(\).)21 b(If)c Fk(terminal)p 878 1118 V
+17 w(name)i Fu(is)d Ft(NULL)p Fu(,)g(the)g(v)m(alue)h(of)f(the)g
+Ft(TERM)g Fu(en)o(vironmen)o(t)195 1173 y(v)m(ariable)h(is)e(used.)75
+1282 y Fj(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1762
+1422 y Fu(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
+1422 18 3 v 21 w(extend)p 404 1422 V 21 w(line)p 513
+1422 V 22 w(bu\013er)j Fg(\()p Ft(int)15 b(len)p Fg(\))195
+1477 y Fu(Ensure)g(that)g Ft(rl_line_buffer)e Fu(has)i(enough)g(space)h
(to)e(hold)i Fk(len)g Fu(c)o(haracters,)e(p)q(ossibly)i(real-)195
-1145 y(lo)q(cating)g(it)f(if)h(necessary)l(.)1762 1265
-y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1265 V
+1532 y(lo)q(cating)g(it)f(if)h(necessary)l(.)1762 1644
+y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1644 V
21 w(initiali)q(z)q(e)26 b Fg(\()p Ft(void)p Fg(\))195
-1320 y Fu(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o
+1698 y Fu(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o
(ternal)h(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call)
-195 1374 y(this;)d Ft(readline\(\))f Fu(calls)i(it)g(b)q(efore)f
-(reading)h(an)o(y)f(input.)1762 1494 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1494 V 21 w(ding)j Fg(\()p
-Ft(void)p Fg(\))195 1549 y Fu(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)
+195 1753 y(this;)d Ft(readline\(\))f Fu(calls)i(it)g(b)q(efore)f
+(reading)h(an)o(y)f(input.)1762 1865 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1865 V 21 w(ding)j Fg(\()p
+Ft(void)p Fg(\))195 1920 y Fu(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)
q(eying)f(the)g(setting)f(of)g Ft(bell-style)p Fu(.)1762
-1669 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1669
+2031 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2031
V 21 w(alphab)r(etic)k Fg(\()p Ft(int)14 b(c)p Fg(\))195
-1723 y Fu(Return)h(1)g(if)g Fk(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o
-(haracter.)1762 1843 y(F)l(unction)-1861 b Fi(void)20
-b Fh(rl)p 241 1843 V 21 w(displa)n(y)p 435 1843 V 22
-w(matc)n(h)p 611 1843 V 20 w(list)25 b Fg(\()p Ft(char)14
-b(**matches,)g(int)g(len,)h(int)g(max)p Fg(\))195 1898
+2086 y Fu(Return)h(1)g(if)g Fk(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o
+(haracter.)1762 2198 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 2198 V 21 w(displa)n(y)p 435 2198 V 22
+w(matc)n(h)p 611 2198 V 20 w(list)25 b Fg(\()p Ft(char)14
+b(**matches,)g(int)g(len,)h(int)g(max)p Fg(\))195 2252
y Fu(A)i(con)o(v)o(enience)i(function)f(for)f(displa)o(ying)i(a)e(list)
h(of)e(strings)h(in)i(columnar)e(format)f(on)h(Read-)195
-1953 y(line's)h(output)f(stream.)23 b Ft(matches)16 b
+2307 y(line's)h(output)f(stream.)23 b Ft(matches)16 b
Fu(is)h(the)g(list)h(of)e(strings,)h(in)g(argv)f(format,)g(suc)o(h)h
-(as)f(a)h(list)g(of)195 2008 y(completion)c(matc)o(hes.)19
+(as)f(a)h(list)g(of)195 2362 y(completion)c(matc)o(hes.)19
b Ft(len)11 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h
Ft(matches)p Fu(,)f(and)g Ft(max)g Fu(is)g(the)h(length)f(of)195
-2062 y(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)19
+2417 y(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)19
b(This)13 b(function)h(uses)f(the)h(setting)f(of)f Ft
-(print-completions-)195 2117 y(horizontally)k Fu(to)i(select)h(ho)o(w)e
+(print-completions-)195 2472 y(horizontally)k Fu(to)i(select)h(ho)o(w)e
(the)i(matc)o(hes)e(are)h(displa)o(y)o(ed)h(\(see)g(Section)g(1.3.1)d
-([Readline)195 2172 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137
-2266 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f
+([Readline)195 2526 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137
+2615 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f
(de\014ned)i(in)g Ft(chardefs.h)p Fu(.)k(Applications)d(should)75
-2321 y(refrain)d(from)g(using)h(them.)1762 2441 y(F)l(unction)-1861
-b Fi(int)p 176 2441 V 40 w Fh(rl)p 235 2441 V 21 w(upp)r(ercase)p
-506 2441 V 20 w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195
-2495 y Fu(Return)h(1)g(if)g Fk(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q
-(etic)f(c)o(haracter.)1762 2615 y(F)l(unction)-1861 b
-Fi(int)p 176 2615 V 40 w Fh(rl)p 235 2615 V 21 w(lo)n(w)n(ercase)p
-489 2615 V 23 w(p)22 b Fg(\()p Ft(int)15 b(c)p Fg(\))195
-2670 y Fu(Return)g(1)g(if)g Fk(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g
-(alphab)q(etic)i(c)o(haracter.)p eop
+2670 y(refrain)d(from)g(using)h(them.)p eop
%%Page: 34 36
34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)h(Library)1762
149 y(F)l(unction)-1861 b Fi(int)p 176 149 18 3 v 40
-w Fh(rl)p 235 149 V 21 w(digit)p 369 149 V 22 w(p)23
-b Fg(\()p Ft(int)14 b(c)p Fg(\))195 204 y Fu(Return)h(1)g(if)g
-Fk(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1762 360
-y(F)l(unction)-1861 b Fi(int)p 176 360 V 40 w Fh(rl)p
-235 360 V 21 w(to)p 307 360 V 21 w(upp)r(er)21 b Fg(\()p
-Ft(int)15 b(c)p Fg(\))195 415 y Fu(If)d Fk(c)j Fu(is)d(a)g(lo)o(w)o
+w Fh(rl)p 235 149 V 21 w(upp)r(ercase)p 506 149 V 20
+w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195 204 y Fu(Return)h(1)g(if)g
+Fk(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)f(c)o(haracter.)1762
+322 y(F)l(unction)-1861 b Fi(int)p 176 322 V 40 w Fh(rl)p
+235 322 V 21 w(lo)n(w)n(ercase)p 489 322 V 23 w(p)22
+b Fg(\()p Ft(int)15 b(c)p Fg(\))195 376 y Fu(Return)g(1)g(if)g
+Fk(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g(alphab)q(etic)i(c)o(haracter.)1762
+494 y(F)l(unction)-1861 b Fi(int)p 176 494 V 40 w Fh(rl)p
+235 494 V 21 w(digit)p 369 494 V 22 w(p)23 b Fg(\()p
+Ft(int)14 b(c)p Fg(\))195 549 y Fu(Return)h(1)g(if)g
+Fk(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1762 666
+y(F)l(unction)-1861 b Fi(int)p 176 666 V 40 w Fh(rl)p
+235 666 V 21 w(to)p 307 666 V 21 w(upp)r(er)21 b Fg(\()p
+Ft(int)15 b(c)p Fg(\))195 721 y Fu(If)d Fk(c)j Fu(is)d(a)g(lo)o(w)o
(ercase)f(alphab)q(etic)j(c)o(haracter,)d(return)h(the)g(corresp)q
-(onding)h(upp)q(ercase)g(c)o(haracter.)1762 571 y(F)l(unction)-1861
-b Fi(int)p 176 571 V 40 w Fh(rl)p 235 571 V 21 w(to)p
-307 571 V 21 w(lo)n(w)n(er)24 b Fg(\()p Ft(int)15 b(c)p
-Fg(\))195 626 y Fu(If)g Fk(c)i Fu(is)e(an)f(upp)q(ercase)i(alphab)q
+(onding)h(upp)q(ercase)g(c)o(haracter.)1762 838 y(F)l(unction)-1861
+b Fi(int)p 176 838 V 40 w Fh(rl)p 235 838 V 21 w(to)p
+307 838 V 21 w(lo)n(w)n(er)24 b Fg(\()p Ft(int)15 b(c)p
+Fg(\))195 893 y Fu(If)g Fk(c)i Fu(is)e(an)f(upp)q(ercase)i(alphab)q
(etic)g(c)o(haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o(w)o
-(ercase)f(c)o(harac-)195 680 y(ter.)1762 836 y(F)l(unction)-1861
-b Fi(int)p 176 836 V 40 w Fh(rl)p 235 836 V 21 w(digit)p
-369 836 V 22 w(v)m(alue)24 b Fg(\()p Ft(int)15 b(c)p
-Fg(\))195 891 y Fu(If)g Fk(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g(return)g
-(the)h(v)m(alue)g(it)g(represen)o(ts.)75 1029 y Fj(2.4.11)29
-b(Miscellaneous)22 b(F)-5 b(unctions)1762 1214 y Fu(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1214 V 21 w(macro)p 391 1214
+(ercase)f(c)o(harac-)195 948 y(ter.)1762 1065 y(F)l(unction)-1861
+b Fi(int)p 176 1065 V 40 w Fh(rl)p 235 1065 V 21 w(digit)p
+369 1065 V 22 w(v)m(alue)24 b Fg(\()p Ft(int)15 b(c)p
+Fg(\))195 1120 y Fu(If)g Fk(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g(return)g
+(the)h(v)m(alue)g(it)g(represen)o(ts.)75 1232 y Fj(2.4.11)29
+b(Miscellaneous)22 b(F)-5 b(unctions)1762 1379 y Fu(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1379 V 21 w(macro)p 391 1379
V 19 w(bind)j Fg(\()p Ft(const)14 b(char)g(*keyseq,)h(const)f(char)h
-(*macro,)283 1269 y(Keymap)f(map)p Fg(\))195 1324 y Fu(Bind)f(the)f(k)o
+(*macro,)283 1433 y(Keymap)f(map)p Fg(\))195 1488 y Fu(Bind)f(the)f(k)o
(ey)f(sequence)i Fk(k)o(eyseq)g Fu(to)e(in)o(v)o(ok)o(e)g(the)h(macro)f
Fk(macro)p Fu(.)18 b(The)12 b(binding)h(is)f(p)q(erformed)g(in)195
-1379 y Fk(map)p Fu(.)19 b(When)14 b Fk(k)o(eyseq)h Fu(is)f(in)o(v)o(ok)
+1543 y Fk(map)p Fu(.)19 b(When)14 b Fk(k)o(eyseq)h Fu(is)f(in)o(v)o(ok)
o(ed,)g(the)g Fk(macro)i Fu(will)f(b)q(e)f(inserted)h(in)o(to)f(the)g
-(line.)21 b(This)14 b(function)195 1433 y(is)i(deprecated;)f(use)h
-Ft(rl_generic_bind\(\))d Fu(instead.)1762 1589 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 1589 V 21 w(macro)p 417 1589
+(line.)21 b(This)14 b(function)195 1598 y(is)i(deprecated;)f(use)h
+Ft(rl_generic_bind\(\))d Fu(instead.)1762 1715 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 1715 V 21 w(macro)p 417 1715
V 19 w(dump)r(er)g Fg(\()p Ft(int)15 b(readable)p Fg(\))195
-1644 y Fu(Prin)o(t)f(the)f(k)o(ey)h(sequences)g(b)q(ound)h(to)e(macros)
+1770 y Fu(Prin)o(t)f(the)f(k)o(ey)h(sequences)g(b)q(ound)h(to)e(macros)
g(and)g(their)h(v)m(alues,)h(using)f(the)g(curren)o(t)g(k)o(eymap,)195
-1699 y(to)h Ft(rl_outstream)p Fu(.)k(If)d Fk(readable)j
+1825 y(to)h Ft(rl_outstream)p Fu(.)k(If)d Fk(readable)j
Fu(is)d(non-zero,)g(the)g(list)g(is)g(formatted)f(in)h(suc)o(h)g(a)f(w)
-o(a)o(y)g(that)g(it)195 1754 y(can)g(b)q(e)h(made)f(part)g(of)g(an)g
-Ft(inputrc)f Fu(\014le)i(and)g(re-read.)1762 1910 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1910 V 21 w(v)m(ariable)p 431
-1910 V 22 w(bind)j Fg(\()p Ft(const)14 b(char)g(*variable,)g(const)h
-(char)f(*value)p Fg(\))195 1964 y Fu(Mak)o(e)22 b(the)g(Readline)i(v)m
+o(a)o(y)g(that)g(it)195 1880 y(can)g(b)q(e)h(made)f(part)g(of)g(an)g
+Ft(inputrc)f Fu(\014le)i(and)g(re-read.)1762 1997 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1997 V 21 w(v)m(ariable)p 431
+1997 V 22 w(bind)j Fg(\()p Ft(const)14 b(char)g(*variable,)g(const)h
+(char)f(*value)p Fg(\))195 2052 y Fu(Mak)o(e)22 b(the)g(Readline)i(v)m
(ariable)g Fk(v)m(ariable)j Fu(ha)o(v)o(e)22 b Fk(v)m(alue)p
Fu(.)43 b(This)23 b(b)q(eha)o(v)o(es)g(as)f(if)h(the)f(readline)195
-2019 y(command)12 b(`)p Ft(set)j Fk(v)m(ariable)k(v)m(alue)s
+2106 y(command)12 b(`)p Ft(set)j Fk(v)m(ariable)k(v)m(alue)s
Fu(')12 b(had)h(b)q(een)g(executed)h(in)f(an)f Ft(inputrc)g
-Fu(\014le)h(\(see)f(Section)i(1.3.1)195 2074 y([Readline)i(Init)g(File)
-h(Syn)o(tax],)d(page)h(4\).)1762 2230 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 2230 V 21 w(v)m(ariable)p
-457 2230 V 22 w(dump)r(er)g Fg(\()p Ft(int)14 b(readable)p
-Fg(\))195 2285 y Fu(Prin)o(t)g(the)h(readline)h(v)m(ariable)f(names)g
+Fu(\014le)h(\(see)f(Section)i(1.3.1)195 2161 y([Readline)i(Init)g(File)
+h(Syn)o(tax],)d(page)h(4\).)1762 2279 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 2279 V 21 w(v)m(ariable)p
+457 2279 V 22 w(dump)r(er)g Fg(\()p Ft(int)14 b(readable)p
+Fg(\))195 2333 y Fu(Prin)o(t)g(the)h(readline)h(v)m(ariable)f(names)g
(and)f(their)h(curren)o(t)f(v)m(alues)i(to)d Ft(rl_outstream)p
-Fu(.)18 b(If)d Fk(read-)195 2340 y(able)20 b Fu(is)e(non-zero,)f(the)g
+Fu(.)18 b(If)d Fk(read-)195 2388 y(able)20 b Fu(is)e(non-zero,)f(the)g
(list)h(is)g(formatted)e(in)h(suc)o(h)h(a)e(w)o(a)o(y)g(that)h(it)g
-(can)g(b)q(e)h(made)f(part)f(of)h(an)195 2394 y Ft(inputrc)d
-Fu(\014le)i(and)g(re-read.)1762 2550 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 2550 V 21 w(set)p 307 2550
-V 20 w(paren)p 469 2550 V 20 w(blink)p 613 2550 V 23
-w(timeout)i Fg(\()p Ft(int)15 b(u)p Fg(\))195 2605 y
+(can)g(b)q(e)h(made)f(part)f(of)h(an)195 2443 y Ft(inputrc)d
+Fu(\014le)i(and)g(re-read.)1762 2560 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2560 V 21 w(set)p 307 2560
+V 20 w(paren)p 469 2560 V 20 w(blink)p 613 2560 V 23
+w(timeout)i Fg(\()p Ft(int)15 b(u)p Fg(\))195 2615 y
Fu(Set)e(the)f(time)h(in)o(terv)m(al)h(\(in)f(microseconds\))g(that)f
(Readline)i(w)o(aits)e(when)h(sho)o(wing)f(a)h(balancing)195
-2660 y(c)o(haracter)h(when)i Ft(blink-matching-paren)d
+2670 y(c)o(haracter)h(when)i Ft(blink-matching-paren)d
Fu(has)i(b)q(een)h(enabled.)p eop
%%Page: 35 37
35 36 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(35)75 149 y Fj(2.4.12)29 b(Alternate)21
-b(In)n(terface)137 245 y Fu(An)i(alternate)f(in)o(terface)h(is)g(a)o(v)
-m(ailable)h(to)d(plain)j Ft(readline\(\))p Fu(.)40 b(Some)22
-b(applications)i(need)g(to)75 300 y(in)o(terlea)o(v)o(e)15
-b(k)o(eyb)q(oard)f(I/O)h(with)g(\014le,)h(device,)f(or)f(windo)o(w)h
-(system)f(I/O,)h(t)o(ypically)h(b)o(y)e(using)h(a)g(main)75
-355 y(lo)q(op)f(to)g Ft(select\(\))e Fu(on)i(v)m(arious)g(\014le)h
-(descriptors.)20 b(T)l(o)14 b(accomo)q(date)f(this)h(need,)h(readline)g
-(can)f(also)g(b)q(e)75 409 y(in)o(v)o(ok)o(ed)i(as)f(a)g(`callbac)o(k')
-h(function)h(from)d(an)i(ev)o(en)o(t)f(lo)q(op.)22 b(There)16
-b(are)f(functions)h(a)o(v)m(ailable)i(to)c(mak)o(e)75
-464 y(this)i(easy)l(.)1762 577 y(F)l(unction)-1861 b
-Fi(void)20 b Fh(rl)p 241 577 18 3 v 21 w(callbac)n(k)p
-458 577 V 23 w(handler)p 670 577 V 21 w(install)25 b
-Fg(\()p Ft(const)14 b(char)h(*prompt,)283 632 y(rl_vcpfunc_t)e
-(*lhandler)p Fg(\))195 687 y Fu(Set)f(up)h(the)g(terminal)g(for)f
-(readline)i(I/O)f(and)f(displa)o(y)i(the)e(initial)j(expanded)e(v)m
-(alue)h(of)e Fk(prompt)p Fu(.)195 742 y(Sa)o(v)o(e)j(the)h(v)m(alue)h
-(of)f Fk(lhandler)21 b Fu(to)15 b(use)h(as)f(a)h(function)h(to)e(call)i
-(when)f(a)g(complete)g(line)i(of)d(input)195 797 y(has)g(b)q(een)h(en)o
-(tered.)21 b(The)15 b(function)h(tak)o(es)e(the)i(text)e(of)h(the)g
-(line)i(as)e(an)g(argumen)o(t.)1762 910 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 910 V 21 w(callbac)n(k)p 458
-910 V 23 w(read)p 591 910 V 20 w(c)n(har)j Fg(\()p Ft(void)p
-Fg(\))195 965 y Fu(Whenev)o(er)17 b(an)g(application)h(determines)g
+(Readline)843 b(35)1762 149 y(F)l(unction)-1861 b Fi(char)20
+b(*)f Fh(rl)p 286 149 18 3 v 21 w(get)p 384 149 V 21
+w(termcap)j Fg(\()p Ft(const)14 b(char)g(*cap)p Fg(\))195
+204 y Fu(Retriev)o(e)f(the)h(string)f(v)m(alue)i(of)e(the)h(termcap)f
+(capabilit)o(y)i Fk(cap)p Fu(.)k(Readline)c(fetc)o(hes)f(the)f(termcap)
+195 259 y(en)o(try)j(for)h(the)f(curren)o(t)h(terminal)h(name)e(and)h
+(uses)g(those)g(capabilities)i(to)d(mo)o(v)o(e)g(around)h(the)195
+314 y(screen)11 b(line)h(and)f(p)q(erform)f(other)g(terminal-sp)q
+(eci\014c)k(op)q(erations,)d(lik)o(e)h(erasing)e(a)h(line.)20
+b(Readline)195 369 y(do)q(es)e(not)f(use)h(all)g(of)f(a)g(terminal's)h
+(capabilities,)i(and)e(this)g(function)g(will)h(return)f(v)m(alues)h
+(for)195 423 y(only)d(those)f(capabilities)i(Readline)g(uses.)75
+537 y Fj(2.4.12)29 b(Alternate)21 b(In)n(terface)137
+634 y Fu(An)i(alternate)f(in)o(terface)h(is)g(a)o(v)m(ailable)h(to)d
+(plain)j Ft(readline\(\))p Fu(.)40 b(Some)22 b(applications)i(need)g
+(to)75 689 y(in)o(terlea)o(v)o(e)15 b(k)o(eyb)q(oard)f(I/O)h(with)g
+(\014le,)h(device,)f(or)f(windo)o(w)h(system)f(I/O,)h(t)o(ypically)h(b)
+o(y)e(using)h(a)g(main)75 744 y(lo)q(op)f(to)g Ft(select\(\))e
+Fu(on)i(v)m(arious)g(\014le)h(descriptors.)20 b(T)l(o)14
+b(accomo)q(date)f(this)h(need,)h(readline)g(can)f(also)g(b)q(e)75
+799 y(in)o(v)o(ok)o(ed)i(as)f(a)g(`callbac)o(k')h(function)h(from)d(an)
+i(ev)o(en)o(t)f(lo)q(op.)22 b(There)16 b(are)f(functions)h(a)o(v)m
+(ailable)i(to)c(mak)o(e)75 853 y(this)i(easy)l(.)1762
+973 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 973
+V 21 w(callbac)n(k)p 458 973 V 23 w(handler)p 670 973
+V 21 w(install)25 b Fg(\()p Ft(const)14 b(char)h(*prompt,)283
+1028 y(rl_vcpfunc_t)e(*lhandler)p Fg(\))195 1082 y Fu(Set)f(up)h(the)g
+(terminal)g(for)f(readline)i(I/O)f(and)f(displa)o(y)i(the)e(initial)j
+(expanded)e(v)m(alue)h(of)e Fk(prompt)p Fu(.)195 1137
+y(Sa)o(v)o(e)j(the)h(v)m(alue)h(of)f Fk(lhandler)21 b
+Fu(to)15 b(use)h(as)f(a)h(function)h(to)e(call)i(when)f(a)g(complete)g
+(line)i(of)d(input)195 1192 y(has)g(b)q(een)h(en)o(tered.)21
+b(The)15 b(function)h(tak)o(es)e(the)i(text)e(of)h(the)g(line)i(as)e
+(an)g(argumen)o(t.)1762 1312 y(F)l(unction)-1861 b Fi(void)20
+b Fh(rl)p 241 1312 V 21 w(callbac)n(k)p 458 1312 V 23
+w(read)p 591 1312 V 20 w(c)n(har)j Fg(\()p Ft(void)p
+Fg(\))195 1366 y Fu(Whenev)o(er)17 b(an)g(application)h(determines)g
(that)e(k)o(eyb)q(oard)h(input)h(is)f(a)o(v)m(ailable,)i(it)e(should)h
-(call)195 1019 y Ft(rl_callback_read_char\(\))p Fu(,)8
+(call)195 1421 y Ft(rl_callback_read_char\(\))p Fu(,)8
b(whic)o(h)k(will)g(read)f(the)g(next)g(c)o(haracter)f(from)g(the)h
-(curren)o(t)g(input)195 1074 y(source.)20 b(If)14 b(that)f(c)o
+(curren)o(t)g(input)195 1476 y(source.)20 b(If)14 b(that)f(c)o
(haracter)g(completes)i(the)f(line,)h Ft(rl_callback_read_char)c
-Fu(will)16 b(in)o(v)o(ok)o(e)e(the)195 1129 y Fk(lhandler)21
+Fu(will)16 b(in)o(v)o(ok)o(e)e(the)195 1531 y Fk(lhandler)21
b Fu(function)c(sa)o(v)o(ed)e(b)o(y)h Ft(rl_callback_handler_install)d
-Fu(to)i(pro)q(cess)h(the)g(line.)24 b Ft(EOF)195 1184
+Fu(to)i(pro)q(cess)h(the)g(line.)24 b Ft(EOF)195 1585
y Fu(is)16 b(indicated)h(b)o(y)e(calling)i Fk(lhandler)j
-Fu(with)15 b(a)g Ft(NULL)g Fu(line.)1762 1297 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 1297 V 21 w(callbac)n(k)p
-458 1297 V 23 w(handler)p 670 1297 V 21 w(remo)n(v)n(e)i
-Fg(\()p Ft(void)p Fg(\))195 1352 y Fu(Restore)c(the)g(terminal)i(to)d
+Fu(with)15 b(a)g Ft(NULL)g Fu(line.)1762 1705 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 1705 V 21 w(callbac)n(k)p
+458 1705 V 23 w(handler)p 670 1705 V 21 w(remo)n(v)n(e)i
+Fg(\()p Ft(void)p Fg(\))195 1760 y Fu(Restore)c(the)g(terminal)i(to)d
(its)i(initial)i(state)d(and)g(remo)o(v)o(e)g(the)h(line)h(handler.)31
-b(This)19 b(ma)o(y)f(b)q(e)195 1407 y(called)f(from)d(within)j(a)e
+b(This)19 b(ma)o(y)f(b)q(e)195 1815 y(called)f(from)d(within)j(a)e
(callbac)o(k)h(as)f(w)o(ell)h(as)f(indep)q(enden)o(tly)l(.)75
-1516 y Fj(2.4.13)29 b(A)21 b(Readline)g(Example)137 1612
+1928 y Fj(2.4.13)29 b(A)21 b(Readline)g(Example)137 2025
y Fu(Here)f(is)g(a)f(function)i(whic)o(h)f(c)o(hanges)f(lo)o(w)o
(ercase)h(c)o(haracters)e(to)h(their)h(upp)q(ercase)h(equiv)m(alen)o
-(ts,)75 1667 y(and)e(upp)q(ercase)i(c)o(haracters)d(to)h(lo)o(w)o
+(ts,)75 2080 y(and)e(upp)q(ercase)i(c)o(haracters)d(to)h(lo)o(w)o
(ercase.)31 b(If)20 b(this)f(function)h(w)o(as)f(b)q(ound)h(to)f(`)p
-Ft(M-c)p Fu(',)f(then)i(t)o(yping)75 1721 y(`)p Ft(M-c)p
+Ft(M-c)p Fu(',)f(then)i(t)o(yping)75 2135 y(`)p Ft(M-c)p
Fu(')12 b(w)o(ould)h(c)o(hange)h(the)f(case)g(of)g(the)g(c)o(haracter)g
(under)g(p)q(oin)o(t.)20 b(T)o(yping)14 b(`)p Ft(M-1)g(0)h(M-c)p
-Fu(')d(w)o(ould)i(c)o(hange)75 1776 y(the)h(case)g(of)g(the)h(follo)o
+Fu(')d(w)o(ould)i(c)o(hange)75 2190 y(the)h(case)g(of)g(the)h(follo)o
(wing)f(10)g(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)h
-(last)f(c)o(haracter)f(c)o(hanged.)195 1840 y Ft(/*)24
+(last)f(c)o(haracter)f(c)o(hanged.)195 2255 y Ft(/*)24
b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h
-(*/)195 1892 y(int)195 1944 y(invert_case_line)f(\(count,)h(key\))314
-1995 y(int)h(count,)f(key;)195 2047 y({)243 2099 y(register)f(int)i
-(start,)f(end,)g(i;)243 2203 y(start)g(=)h(rl_point;)243
-2307 y(if)f(\(rl_point)g(>=)h(rl_end\))290 2359 y(return)f(\(0\);)243
-2462 y(if)g(\(count)g(<)h(0\))290 2514 y({)338 2566 y(direction)f(=)h
-(-1;)338 2618 y(count)f(=)h(-count;)290 2670 y(})p eop
+(*/)195 2307 y(int)195 2359 y(invert_case_line)f(\(count,)h(key\))314
+2411 y(int)h(count,)f(key;)195 2462 y({)243 2514 y(register)f(int)i
+(start,)f(end,)g(i;)243 2618 y(start)g(=)h(rl_point;)p
+eop
%%Page: 36 38
36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)h(Library)243
-149 y Ft(else)290 201 y(direction)23 b(=)h(1;)243 305
-y(/*)f(Find)h(the)f(end)h(of)f(the)h(range)f(to)g(modify.)g(*/)243
-357 y(end)g(=)h(start)f(+)h(\(count)f(*)h(direction\);)243
-461 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g(*/)243
-513 y(if)g(\(end)h(>)f(rl_end\))290 565 y(end)h(=)g(rl_end;)243
-616 y(else)f(if)h(\(end)f(<)h(0\))290 668 y(end)g(=)g(0;)243
-772 y(if)f(\(start)g(==)h(end\))290 824 y(return)f(\(0\);)243
-928 y(if)g(\(start)g(>)h(end\))290 980 y({)338 1032 y(int)g(temp)f(=)h
-(start;)338 1083 y(start)f(=)h(end;)338 1135 y(end)g(=)f(temp;)290
-1187 y(})243 1291 y(/*)g(Tell)h(readline)e(that)i(we)f(are)h(modifying)
-e(the)i(line,)f(so)h(it)f(will)h(save)314 1343 y(the)g(undo)f
-(information.)f(*/)243 1395 y(rl_modifying)g(\(start,)h(end\);)243
-1499 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))290
-1550 y({)338 1602 y(if)h(\(_rl_uppercase_p)d(\(rl_line_buffer[i]\)\))
-386 1654 y(rl_line_buffer[i])g(=)j(_rl_to_lower)e
-(\(rl_line_buffer[i]\);)338 1706 y(else)h(if)h(\(_rl_lowercase_p)e
-(\(rl_line_buffer[i]\)\))386 1758 y(rl_line_buffer[i])f(=)j
-(_rl_to_upper)e(\(rl_line_buffer[i]\);)290 1810 y(})243
-1862 y(/*)h(Move)h(point)f(to)g(on)h(top)f(of)h(the)f(last)h(character)
-e(changed.)h(*/)243 1914 y(rl_point)f(=)i(\(direction)f(==)g(1\))h(?)g
-(end)f(-)h(1)g(:)f(start;)243 1966 y(return)g(\(0\);)195
-2017 y(})75 2217 y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137
-2341 y Fu(Signals)e(are)f(async)o(hronous)f(ev)o(en)o(ts)h(sen)o(t)f
-(to)h(a)f(pro)q(cess)h(b)o(y)g(the)g(Unix)h(k)o(ernel,)g(sometimes)f
-(on)75 2396 y(b)q(ehalf)g(of)e(another)h(pro)q(cess.)34
+149 y Ft(if)23 b(\(rl_point)g(>=)h(rl_end\))290 201 y(return)f(\(0\);)
+243 305 y(if)g(\(count)g(<)h(0\))290 357 y({)338 409
+y(direction)f(=)h(-1;)338 461 y(count)f(=)h(-count;)290
+513 y(})243 565 y(else)290 616 y(direction)f(=)h(1;)243
+720 y(/*)f(Find)h(the)f(end)h(of)f(the)h(range)f(to)g(modify.)g(*/)243
+772 y(end)g(=)h(start)f(+)h(\(count)f(*)h(direction\);)243
+876 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g(*/)243
+928 y(if)g(\(end)h(>)f(rl_end\))290 980 y(end)h(=)g(rl_end;)243
+1032 y(else)f(if)h(\(end)f(<)h(0\))290 1083 y(end)g(=)g(0;)243
+1187 y(if)f(\(start)g(==)h(end\))290 1239 y(return)f(\(0\);)243
+1343 y(if)g(\(start)g(>)h(end\))290 1395 y({)338 1447
+y(int)g(temp)f(=)h(start;)338 1499 y(start)f(=)h(end;)338
+1550 y(end)g(=)f(temp;)290 1602 y(})243 1706 y(/*)g(Tell)h(readline)e
+(that)i(we)f(are)h(modifying)e(the)i(line,)f(so)h(it)f(will)h(save)314
+1758 y(the)g(undo)f(information.)f(*/)243 1810 y(rl_modifying)g
+(\(start,)h(end\);)243 1914 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f
+(i++\))290 1966 y({)338 2017 y(if)h(\(_rl_uppercase_p)d
+(\(rl_line_buffer[i]\)\))386 2069 y(rl_line_buffer[i])g(=)j
+(_rl_to_lower)e(\(rl_line_buffer[i]\);)338 2121 y(else)h(if)h
+(\(_rl_lowercase_p)e(\(rl_line_buffer[i]\)\))386 2173
+y(rl_line_buffer[i])f(=)j(_rl_to_upper)e(\(rl_line_buffer[i]\);)290
+2225 y(})243 2277 y(/*)h(Move)h(point)f(to)g(on)h(top)f(of)h(the)f
+(last)h(character)e(changed.)h(*/)243 2329 y(rl_point)f(=)i
+(\(direction)f(==)g(1\))h(?)g(end)f(-)h(1)g(:)f(start;)243
+2381 y(return)g(\(0\);)195 2433 y(})p eop
+%%Page: 37 39
+37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(37)75 149 y Fs(2.5)33 b(Readline)23 b(Signal)h
+(Handling)137 253 y Fu(Signals)e(are)f(async)o(hronous)f(ev)o(en)o(ts)h
+(sen)o(t)f(to)h(a)f(pro)q(cess)h(b)o(y)g(the)g(Unix)h(k)o(ernel,)g
+(sometimes)f(on)75 308 y(b)q(ehalf)g(of)e(another)h(pro)q(cess.)34
b(They)20 b(are)g(in)o(tended)h(to)e(indicate)j(exceptional)f(ev)o(en)o
-(ts,)f(lik)o(e)h(a)f(user)75 2451 y(pressing)c(the)f(in)o(terrupt)g(k)o
+(ts,)f(lik)o(e)h(a)f(user)75 362 y(pressing)c(the)f(in)o(terrupt)g(k)o
(ey)g(on)g(his)h(terminal,)f(or)g(a)f(net)o(w)o(ork)g(connection)i(b)q
-(eing)g(brok)o(en.)k(There)15 b(is)75 2506 y(a)e(class)g(of)g(signals)h
+(eing)g(brok)o(en.)k(There)15 b(is)75 417 y(a)e(class)g(of)g(signals)h
(that)f(can)g(b)q(e)h(sen)o(t)f(to)f(the)i(pro)q(cess)f(curren)o(tly)h
-(reading)f(input)i(from)d(the)h(k)o(eyb)q(oard.)75 2560
+(reading)f(input)i(from)d(the)h(k)o(eyb)q(oard.)75 472
y(Since)i(Readline)f(c)o(hanges)g(the)f(terminal)h(attributes)f(when)h
(it)g(is)g(called,)h(it)e(needs)h(to)f(p)q(erform)g(sp)q(ecial)75
-2615 y(pro)q(cessing)i(when)f(suc)o(h)g(a)g(signal)g(is)g(receiv)o(ed)h
+527 y(pro)q(cessing)i(when)f(suc)o(h)g(a)g(signal)g(is)g(receiv)o(ed)h
(in)g(order)f(to)f(restore)g(the)h(terminal)g(to)f(a)h(sane)g(state,)e
-(or)75 2670 y(pro)o(vide)k(application)h(writers)e(with)g(functions)h
-(to)f(do)g(so)g(man)o(ually)l(.)p eop
-%%Page: 37 39
-37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(37)137 149 y(Readline)22 b(con)o(tains)e(an)g(in)o
-(ternal)h(signal)g(handler)g(that)f(is)h(installed)h(for)d(a)h(n)o(um)o
-(b)q(er)g(of)g(signals)75 204 y(\()p Ft(SIGINT)p Fu(,)h
-Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p Fu(,)g Ft(SIGALRM)p
-Fu(,)g Ft(SIGTSTP)p Fu(,)g Ft(SIGTTIN)p Fu(,)h(and)f
-Ft(SIGTTOU)p Fu(\).)36 b(When)21 b(one)g(of)75 259 y(these)16
-b(signals)h(is)f(receiv)o(ed,)h(the)f(signal)h(handler)f(will)i(reset)e
-(the)g(terminal)g(attributes)g(to)f(those)h(that)75 314
-y(w)o(ere)d(in)i(e\013ect)e(b)q(efore)h Ft(readline\(\))e
+(or)75 582 y(pro)o(vide)k(application)h(writers)e(with)g(functions)h
+(to)f(do)g(so)g(man)o(ually)l(.)137 656 y(Readline)22
+b(con)o(tains)e(an)g(in)o(ternal)h(signal)g(handler)g(that)f(is)h
+(installed)h(for)d(a)h(n)o(um)o(b)q(er)g(of)g(signals)75
+711 y(\()p Ft(SIGINT)p Fu(,)h Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p
+Fu(,)g Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p Fu(,)g Ft(SIGTTIN)p
+Fu(,)h(and)f Ft(SIGTTOU)p Fu(\).)36 b(When)21 b(one)g(of)75
+766 y(these)16 b(signals)h(is)f(receiv)o(ed,)h(the)f(signal)h(handler)f
+(will)i(reset)e(the)g(terminal)g(attributes)g(to)f(those)h(that)75
+820 y(w)o(ere)d(in)i(e\013ect)e(b)q(efore)h Ft(readline\(\))e
Fu(w)o(as)h(called,)i(reset)f(the)f(signal)i(handling)g(to)e(what)g(it)
-h(w)o(as)f(b)q(efore)75 369 y Ft(readline\(\))21 b Fu(w)o(as)h(called,)
+h(w)o(as)f(b)q(efore)75 875 y Ft(readline\(\))21 b Fu(w)o(as)h(called,)
j(and)e(resend)g(the)g(signal)g(to)f(the)h(calling)h(application.)44
-b(If)23 b(and)f(when)75 423 y(the)17 b(calling)i(application's)f
+b(If)23 b(and)f(when)75 930 y(the)17 b(calling)i(application's)f
(signal)g(handler)g(returns,)f(Readline)h(will)h(reinitialize)h(the)d
-(terminal)h(and)75 478 y(con)o(tin)o(ue)d(to)e(accept)i(input.)20
+(terminal)h(and)75 985 y(con)o(tin)o(ue)d(to)e(accept)i(input.)20
b(When)15 b(a)e Ft(SIGINT)h Fu(is)g(receiv)o(ed,)h(the)g(Readline)g
-(signal)g(handler)g(p)q(erforms)75 533 y(some)k(additional)i(w)o(ork,)e
-(whic)o(h)h(will)h(cause)f(an)o(y)f(partially-en)o(tered)i(line)g(to)d
-(b)q(e)i(ab)q(orted)g(\(see)f(the)75 588 y(description)e(of)d
-Ft(rl_free_line_state\(\))f Fu(b)q(elo)o(w\).)137 655
+(signal)g(handler)g(p)q(erforms)75 1040 y(some)k(additional)i(w)o(ork,)
+e(whic)o(h)h(will)h(cause)f(an)o(y)f(partially-en)o(tered)i(line)g(to)d
+(b)q(e)i(ab)q(orted)g(\(see)f(the)75 1094 y(description)e(of)d
+Ft(rl_free_line_state\(\))f Fu(b)q(elo)o(w\).)137 1169
y(There)g(is)f(an)g(additional)i(Readline)g(signal)f(handler,)g(for)f
Ft(SIGWINCH)p Fu(,)f(whic)o(h)i(the)f(k)o(ernel)h(sends)g(to)e(a)75
-710 y(pro)q(cess)k(whenev)o(er)g(the)f(terminal's)h(size)g(c)o(hanges)f
-(\(for)g(example,)h(if)g(a)f(user)h(resizes)g(an)f Ft(xterm)p
-Fu(\).)19 b(The)75 764 y(Readline)g Ft(SIGWINCH)e Fu(handler)i(up)q
+1224 y(pro)q(cess)k(whenev)o(er)g(the)f(terminal's)h(size)g(c)o(hanges)
+f(\(for)g(example,)h(if)g(a)f(user)h(resizes)g(an)f Ft(xterm)p
+Fu(\).)19 b(The)75 1278 y(Readline)g Ft(SIGWINCH)e Fu(handler)i(up)q
(dates)f(Readline's)h(in)o(ternal)f(screen)h(size)f(information,)h(and)
-f(then)75 819 y(calls)g(an)o(y)f Ft(SIGWINCH)e Fu(signal)j(handler)g
+f(then)75 1333 y(calls)g(an)o(y)f Ft(SIGWINCH)e Fu(signal)j(handler)g
(the)f(calling)i(application)f(has)f(installed.)27 b(Readline)18
-b(calls)g(the)75 874 y(application's)h Ft(SIGWINCH)d
+b(calls)g(the)75 1388 y(application's)h Ft(SIGWINCH)d
Fu(signal)j(handler)f(without)g(resetting)g(the)f(terminal)i(to)e(its)g
-(original)i(state.)75 929 y(If)d(the)g(application's)h(signal)g
+(original)i(state.)75 1443 y(If)d(the)g(application's)h(signal)g
(handler)g(do)q(es)g(more)e(than)h(up)q(date)h(its)f(idea)h(of)e(the)h
-(terminal)h(size)g(and)75 984 y(return)e(\(for)f(example,)h(a)f
+(terminal)h(size)g(and)75 1498 y(return)e(\(for)f(example,)h(a)f
Ft(longjmp)g Fu(bac)o(k)h(to)f(a)h(main)g(pro)q(cessing)g(lo)q(op\),)g
-(it)g Fl(must)20 b Fu(call)c Ft(rl_cleanup_)75 1038 y(after_signal\(\))
+(it)g Fl(must)20 b Fu(call)c Ft(rl_cleanup_)75 1552 y(after_signal\(\))
d Fu(\(describ)q(ed)k(b)q(elo)o(w\),)e(to)g(restore)f(the)h(terminal)h
-(state.)137 1105 y(Readline)g(pro)o(vides)f(t)o(w)o(o)e(v)m(ariables)i
+(state.)137 1627 y(Readline)g(pro)o(vides)f(t)o(w)o(o)e(v)m(ariables)i
(that)f(allo)o(w)g(application)i(writers)e(to)g(con)o(trol)g(whether)h
-(or)e(not)75 1160 y(it)k(will)h(catc)o(h)e(certain)h(signals)h(and)f
+(or)e(not)75 1681 y(it)k(will)h(catc)o(h)e(certain)h(signals)h(and)f
(act)f(on)g(them)h(when)g(they)f(are)h(receiv)o(ed.)25
-b(It)16 b(is)i(imp)q(ortan)o(t)e(that)75 1215 y(applications)k(c)o
+b(It)16 b(is)i(imp)q(ortan)o(t)e(that)75 1736 y(applications)k(c)o
(hange)e(the)h(v)m(alues)g(of)f(these)h(v)m(ariables)g(only)g(when)g
-(calling)h Ft(readline\(\))p Fu(,)d(not)h(in)h(a)75 1270
+(calling)h Ft(readline\(\))p Fu(,)d(not)h(in)h(a)75 1791
y(signal)d(handler,)g(so)f(Readline's)h(in)o(ternal)g(signal)g(state)e
-(is)i(not)f(corrupted.)1773 1385 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 1385 18 3 v 21 w(catc)n(h)p
-366 1385 V 22 w(signals)195 1440 y Fu(If)15 b(this)g(v)m(ariable)g(is)g
+(is)i(not)f(corrupted.)1773 1930 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 1930 18 3 v 21 w(catc)n(h)p
+366 1930 V 22 w(signals)195 1984 y Fu(If)15 b(this)g(v)m(ariable)g(is)g
(non-zero,)g(Readline)h(will)g(install)f(signal)h(handlers)f(for)f
-Ft(SIGINT)p Fu(,)f Ft(SIGQUIT)p Fu(,)195 1495 y Ft(SIGTERM)p
+Ft(SIGINT)p Fu(,)f Ft(SIGQUIT)p Fu(,)195 2039 y Ft(SIGTERM)p
Fu(,)h Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p Fu(,)f Ft(SIGTTIN)p
-Fu(,)h(and)i Ft(SIGTTOU)p Fu(.)195 1562 y(The)f(default)h(v)m(alue)h
-(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1773 1678 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 1678 V 21 w(catc)n(h)p 366
-1678 V 22 w(sigwinc)n(h)195 1732 y Fu(If)15 b(this)h(v)m(ariable)h(is)e
+Fu(,)h(and)i Ft(SIGTTOU)p Fu(.)195 2113 y(The)f(default)h(v)m(alue)h
+(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1773 2252 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 2252 V 21 w(catc)n(h)p 366
+2252 V 22 w(sigwinc)n(h)195 2307 y Fu(If)15 b(this)h(v)m(ariable)h(is)e
(non-zero,)g(Readline)i(will)g(install)f(a)f(signal)h(handler)h(for)d
-Ft(SIGWINCH)p Fu(.)195 1799 y(The)h(default)h(v)m(alue)h(of)d
-Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 1891 y(If)g(an)f(application)j
+Ft(SIGWINCH)p Fu(.)195 2381 y(The)h(default)h(v)m(alue)h(of)d
+Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 2487 y(If)g(an)f(application)j
(do)q(es)d(not)g(wish)i(to)d(ha)o(v)o(e)h(Readline)i(catc)o(h)f(an)o(y)
-f(signals,)h(or)f(to)f(handle)j(signals)75 1945 y(other)i(than)g(those)
+f(signals,)h(or)f(to)f(handle)j(signals)75 2542 y(other)i(than)g(those)
g(Readline)i(catc)o(hes)e(\()p Ft(SIGHUP)p Fu(,)g(for)g(example\),)h
-(Readline)h(pro)o(vides)e(con)o(v)o(enience)75 2000 y(functions)d(to)f
+(Readline)h(pro)o(vides)e(con)o(v)o(enience)75 2597 y(functions)d(to)f
(do)g(the)g(necessary)g(terminal)h(and)g(in)o(ternal)g(state)e(clean)o
-(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)1762 2116
-y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 2116 V
-21 w(clean)n(up)p 450 2116 V 22 w(after)p 590 2116 V
-20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 2171 y Fu(This)18
+(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)p eop
+%%Page: 38 40
+38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)h(Library)1762
+149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149
+18 3 v 21 w(clean)n(up)p 450 149 V 22 w(after)p 590 149
+V 20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 204 y Fu(This)18
b(function)f(will)i(reset)e(the)g(state)f(of)g(the)h(terminal)h(to)e
(what)h(it)g(w)o(as)f(b)q(efore)h Ft(readline\(\))195
-2226 y Fu(w)o(as)d(called,)i(and)f(remo)o(v)o(e)f(the)g(Readline)i
+259 y Fu(w)o(as)d(called,)i(and)f(remo)o(v)o(e)f(the)g(Readline)i
(signal)g(handlers)g(for)e(all)h(signals,)g(dep)q(ending)i(on)e(the)195
-2280 y(v)m(alues)h(of)f Ft(rl_catch_signals)e Fu(and)i
-Ft(rl_catch_sigwinch)p Fu(.)1762 2396 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 2396 V 21 w(free)p 356 2396
-V 20 w(line)p 464 2396 V 23 w(state)j Fg(\()p Ft(void)p
-Fg(\))195 2451 y Fu(This)d(will)h(free)f(an)o(y)f(partial)h(state)f
+314 y(v)m(alues)h(of)f Ft(rl_catch_signals)e Fu(and)i
+Ft(rl_catch_sigwinch)p Fu(.)1762 460 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 460 V 21 w(free)p 356 460
+V 20 w(line)p 464 460 V 23 w(state)j Fg(\()p Ft(void)p
+Fg(\))195 515 y Fu(This)d(will)h(free)f(an)o(y)f(partial)h(state)f
(asso)q(ciated)h(with)g(the)g(curren)o(t)f(input)i(line)g(\(undo)f
-(infor-)195 2506 y(mation,)i(an)o(y)f(partial)h(history)f(en)o(try)l(,)
-h(an)o(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)h(and)f(an)o
-(y)195 2560 y(partially-en)o(tered)k(n)o(umeric)g(argumen)o(t\).)45
+(infor-)195 570 y(mation,)i(an)o(y)f(partial)h(history)f(en)o(try)l(,)h
+(an)o(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)h(and)f(an)o
+(y)195 625 y(partially-en)o(tered)k(n)o(umeric)g(argumen)o(t\).)45
b(This)24 b(should)h(b)q(e)g(called)g(b)q(efore)g Ft(rl_cleanup_)195
-2615 y(after_signal\(\))p Fu(.)36 b(The)22 b(Readline)h(signal)f
+679 y(after_signal\(\))p Fu(.)36 b(The)22 b(Readline)h(signal)f
(handler)g(for)f Ft(SIGINT)f Fu(calls)j(this)e(to)g(ab)q(ort)g(the)195
-2670 y(curren)o(t)15 b(input)h(line.)p eop
-%%Page: 38 40
-38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)h(Library)1762
-149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149
-18 3 v 21 w(reset)p 383 149 V 20 w(after)p 521 149 V
-21 w(signal)j Fg(\()p Ft(void)p Fg(\))195 204 y Fu(This)15
-b(will)h(reinitialize)h(the)d(terminal)h(and)g(reinstall)h(an)o(y)d
-(Readline)j(signal)f(handlers,)g(dep)q(end-)195 259 y(ing)h(on)f(the)g
-(v)m(alues)i(of)d Ft(rl_catch_signals)f Fu(and)j Ft(rl_catch_sigwinch)p
-Fu(.)137 352 y(If)k(an)g(application)h(do)q(es)f(not)g(wish)g(Readline)
-h(to)e(catc)o(h)g Ft(SIGWINCH)p Fu(,)h(it)g(ma)o(y)f(call)h
-Ft(rl_resize_)75 407 y(terminal\(\))12 b Fu(or)h Ft
-(rl_set_screen_size\(\))e Fu(to)i(force)g(Readline)i(to)e(up)q(date)h
-(its)g(idea)g(of)g(the)f(terminal)75 461 y(size)j(when)g(a)f
-Ft(SIGWINCH)f Fu(is)h(receiv)o(ed.)1762 579 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 579 V 21 w(resize)p 401 579
-V 22 w(terminal)j Fg(\()p Ft(void)p Fg(\))195 634 y Fu(Up)q(date)16
-b(Readline's)g(in)o(ternal)g(screen)f(size)i(b)o(y)e(reading)g(v)m
-(alues)i(from)d(the)i(k)o(ernel.)1762 752 y(F)l(unction)-1861
-b Fi(void)20 b Fh(rl)p 241 752 V 21 w(set)p 333 752 V
-21 w(screen)p 510 752 V 20 w(size)k Fg(\()p Ft(int)15
-b(rows,)f(int)h(cols)p Fg(\))195 807 y Fu(Set)g(Readline's)h(idea)g(of)
-f(the)g(terminal)h(size)g(to)f Fk(ro)o(ws)h Fu(ro)o(ws)e(and)i
-Fk(cols)h Fu(columns.)137 899 y(If)g(an)g(application)h(do)q(es)f(not)f
-(w)o(an)o(t)g(to)g(install)i(a)f Ft(SIGWINCH)e Fu(handler,)j(but)f(is)g
-(still)h(in)o(terested)f(in)75 954 y(the)e(screen)h(dimensions,)g
-(Readline's)h(idea)e(of)g(the)h(screen)f(size)h(ma)o(y)f(b)q(e)h
-(queried.)1762 1072 y(F)l(unction)-1861 b Fi(void)20
-b Fh(rl)p 241 1072 V 21 w(get)p 339 1072 V 21 w(screen)p
-516 1072 V 20 w(size)k Fg(\()p Ft(int)15 b(*rows,)f(int)h(*cols)p
-Fg(\))195 1127 y Fu(Return)g(Readline's)h(idea)f(of)g(the)g(terminal's)
-g(size)h(in)g(the)f(v)m(ariables)i(p)q(oin)o(ted)f(to)e(b)o(y)h(the)g
-(argu-)195 1181 y(men)o(ts.)137 1274 y(The)h(follo)o(wing)g(functions)g
-(install)g(and)g(remo)o(v)o(e)e(Readline's)i(signal)g(handlers.)1762
-1392 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1392
-V 21 w(set)p 307 1392 V 20 w(signals)j Fg(\()p Ft(void)p
-Fg(\))195 1447 y Fu(Install)c(Readline's)f(signal)h(handler)f(for)f
+734 y(curren)o(t)15 b(input)h(line.)1762 881 y(F)l(unction)-1861
+b Fi(void)20 b Fh(rl)p 241 881 V 21 w(reset)p 383 881
+V 20 w(after)p 521 881 V 21 w(signal)j Fg(\()p Ft(void)p
+Fg(\))195 935 y Fu(This)15 b(will)h(reinitialize)h(the)d(terminal)h
+(and)g(reinstall)h(an)o(y)d(Readline)j(signal)f(handlers,)g(dep)q(end-)
+195 990 y(ing)h(on)f(the)g(v)m(alues)i(of)d Ft(rl_catch_signals)f
+Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)137 1102 y(If)k(an)g(application)h
+(do)q(es)f(not)g(wish)g(Readline)h(to)e(catc)o(h)g Ft(SIGWINCH)p
+Fu(,)h(it)g(ma)o(y)f(call)h Ft(rl_resize_)75 1157 y(terminal\(\))12
+b Fu(or)h Ft(rl_set_screen_size\(\))e Fu(to)i(force)g(Readline)i(to)e
+(up)q(date)h(its)g(idea)g(of)g(the)f(terminal)75 1211
+y(size)j(when)g(a)f Ft(SIGWINCH)f Fu(is)h(receiv)o(ed.)1762
+1358 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1358
+V 21 w(resize)p 401 1358 V 22 w(terminal)j Fg(\()p Ft(void)p
+Fg(\))195 1413 y Fu(Up)q(date)16 b(Readline's)g(in)o(ternal)g(screen)f
+(size)i(b)o(y)e(reading)g(v)m(alues)i(from)d(the)i(k)o(ernel.)1762
+1559 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1559
+V 21 w(set)p 333 1559 V 21 w(screen)p 510 1559 V 20 w(size)k
+Fg(\()p Ft(int)15 b(rows,)f(int)h(cols)p Fg(\))195 1614
+y Fu(Set)g(Readline's)h(idea)g(of)f(the)g(terminal)h(size)g(to)f
+Fk(ro)o(ws)h Fu(ro)o(ws)e(and)i Fk(cols)h Fu(columns.)137
+1725 y(If)g(an)g(application)h(do)q(es)f(not)f(w)o(an)o(t)g(to)g
+(install)i(a)f Ft(SIGWINCH)e Fu(handler,)j(but)f(is)g(still)h(in)o
+(terested)f(in)75 1780 y(the)e(screen)h(dimensions,)g(Readline's)h
+(idea)e(of)g(the)h(screen)f(size)h(ma)o(y)f(b)q(e)h(queried.)1762
+1927 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1927
+V 21 w(get)p 339 1927 V 21 w(screen)p 516 1927 V 20 w(size)k
+Fg(\()p Ft(int)15 b(*rows,)f(int)h(*cols)p Fg(\))195
+1981 y Fu(Return)g(Readline's)h(idea)f(of)g(the)g(terminal's)g(size)h
+(in)g(the)f(v)m(ariables)i(p)q(oin)o(ted)f(to)e(b)o(y)h(the)g(argu-)195
+2036 y(men)o(ts.)137 2148 y(The)h(follo)o(wing)g(functions)g(install)g
+(and)g(remo)o(v)o(e)e(Readline's)i(signal)g(handlers.)1762
+2294 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2294
+V 21 w(set)p 307 2294 V 20 w(signals)j Fg(\()p Ft(void)p
+Fg(\))195 2349 y Fu(Install)c(Readline's)f(signal)h(handler)f(for)f
Ft(SIGINT)p Fu(,)g Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p Fu(,)g
-Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)195 1502 y Ft(SIGTTIN)p
+Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)195 2404 y Ft(SIGTTIN)p
Fu(,)11 b Ft(SIGTTOU)p Fu(,)g(and)h Ft(SIGWINCH)p Fu(,)e(dep)q(ending)k
(on)e(the)f(v)m(alues)i(of)e Ft(rl_catch_signals)f Fu(and)195
-1556 y Ft(rl_catch_sigwinch)p Fu(.)1762 1674 y(F)l(unction)-1861
-b Fi(int)20 b Fh(rl)p 215 1674 V 21 w(clear)p 354 1674
-V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 1729 y Fu(Remo)o(v)o(e)14
+2459 y Ft(rl_catch_sigwinch)p Fu(.)1762 2605 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 2605 V 21 w(clear)p 354 2605
+V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 2660 y Fu(Remo)o(v)o(e)14
b(all)i(of)f(the)g(Readline)i(signal)f(handlers)g(installed)h(b)o(y)e
-Ft(rl_set_signals\(\))p Fu(.)75 1858 y Fs(2.6)33 b(Custom)21
-b(Completers)137 1955 y Fu(T)o(ypically)l(,)e(a)d(program)f(that)h
-(reads)h(commands)f(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g
-(disam)o(biguating)75 2010 y(commands)i(and)f(data.)27
-b(If)18 b(y)o(our)f(program)g(is)h(one)g(of)f(these,)i(then)f(it)g(can)
-f(pro)o(vide)i(completion)g(for)75 2065 y(commands,)14
-b(data,)g(or)g(b)q(oth.)20 b(The)15 b(follo)o(wing)g(sections)g
-(describ)q(e)h(ho)o(w)e(y)o(our)g(program)g(and)h(Readline)75
-2119 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75
-2232 y Fj(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137
-2329 y Fu(In)18 b(order)f(to)f(complete)i(some)f(text,)g(the)g(full)i
-(list)e(of)g(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o(v)m
-(ailable.)75 2383 y(That)e(is,)i(it)f(is)h(not)f(p)q(ossible)h(to)f
+Ft(rl_set_signals\(\))p Fu(.)p eop
+%%Page: 39 41
+39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(39)75 149 y Fs(2.6)33 b(Custom)21 b(Completers)137
+246 y Fu(T)o(ypically)l(,)e(a)d(program)f(that)h(reads)h(commands)f
+(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g(disam)o(biguating)75
+301 y(commands)i(and)f(data.)27 b(If)18 b(y)o(our)f(program)g(is)h(one)
+g(of)f(these,)i(then)f(it)g(can)f(pro)o(vide)i(completion)g(for)75
+356 y(commands,)14 b(data,)g(or)g(b)q(oth.)20 b(The)15
+b(follo)o(wing)g(sections)g(describ)q(e)h(ho)o(w)e(y)o(our)g(program)g
+(and)h(Readline)75 410 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h
+(service.)75 523 y Fj(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5
+b(orks)137 620 y Fu(In)18 b(order)f(to)f(complete)i(some)f(text,)g(the)
+g(full)i(list)e(of)g(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o
+(v)m(ailable.)75 675 y(That)e(is,)i(it)f(is)h(not)f(p)q(ossible)h(to)f
(accurately)g(expand)h(a)e(partial)i(w)o(ord)e(without)h(kno)o(wing)g
-(all)h(of)f(the)75 2438 y(p)q(ossible)i(w)o(ords)e(whic)o(h)h(mak)o(e)f
+(all)h(of)f(the)75 729 y(p)q(ossible)i(w)o(ords)e(whic)o(h)h(mak)o(e)f
(sense)h(in)h(that)d(con)o(text.)26 b(The)18 b(Readline)h(library)f
-(pro)o(vides)g(the)g(user)75 2493 y(in)o(terface)f(to)f(completion,)i
+(pro)o(vides)g(the)g(user)75 784 y(in)o(terface)f(to)f(completion,)i
(and)e(t)o(w)o(o)g(of)g(the)h(most)f(common)g(completion)i(functions:)
-23 b(\014lename)18 b(and)75 2548 y(username.)h(F)l(or)10
+23 b(\014lename)18 b(and)75 839 y(username.)h(F)l(or)10
b(completing)i(other)e(t)o(yp)q(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f
(write)h(y)o(our)f(o)o(wn)h(completion)g(function.)75
-2602 y(This)16 b(section)g(describ)q(es)g(exactly)g(what)f(suc)o(h)g
+894 y(This)16 b(section)g(describ)q(es)g(exactly)g(what)f(suc)o(h)g
(functions)h(m)o(ust)f(do,)f(and)i(pro)o(vides)f(an)h(example.)137
-2670 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q
-(erform)g(completion:)p eop
-%%Page: 39 41
-39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(39)100 149 y(1.)29 b(The)22 b(user-in)o(terface)g
+961 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q
+(erform)g(completion:)100 1029 y(1.)29 b(The)22 b(user-in)o(terface)g
(function)h Ft(rl_complete\(\))p Fu(.)37 b(This)22 b(function)h(is)f
-(called)h(with)f(the)g(same)165 204 y(argumen)o(ts)17
+(called)h(with)f(the)g(same)165 1084 y(argumen)o(ts)17
b(as)h(other)g(bindable)i(Readline)f(functions:)27 b
-Fk(coun)o(t)19 b Fu(and)f Fk(in)o(v)o(oking)p 1556 204
-14 2 v 17 w(k)o(ey)p Fu(.)28 b(It)19 b(isolates)165 259
+Fk(coun)o(t)19 b Fu(and)f Fk(in)o(v)o(oking)p 1556 1084
+14 2 v 17 w(k)o(ey)p Fu(.)28 b(It)19 b(isolates)165 1138
y(the)g(w)o(ord)f(to)g(b)q(e)i(completed)f(and)g(calls)h
Ft(rl_completion_matches\(\))c Fu(to)i(generate)g(a)h(list)g(of)165
-314 y(p)q(ossible)e(completions.)22 b(It)16 b(then)g(either)g(lists)g
+1193 y(p)q(ossible)e(completions.)22 b(It)16 b(then)g(either)g(lists)g
(the)g(p)q(ossible)h(completions,)g(inserts)f(the)f(p)q(ossible)165
-369 y(completions,)25 b(or)d(actually)i(p)q(erforms)e(the)g
+1248 y(completions,)25 b(or)d(actually)i(p)q(erforms)e(the)g
(completion,)k(dep)q(ending)e(on)f(whic)o(h)g(b)q(eha)o(vior)g(is)165
-423 y(desired.)100 489 y(2.)29 b(The)17 b(in)o(ternal)h(function)f
+1303 y(desired.)100 1370 y(2.)29 b(The)17 b(in)o(ternal)h(function)f
Ft(rl_completion_matches\(\))d Fu(uses)j(an)g(application-supplie)q(d)j
-Fk(gener-)165 544 y(ator)h Fu(function)e(to)f(generate)g(the)h(list)g
+Fk(gener-)165 1425 y(ator)h Fu(function)e(to)f(generate)g(the)h(list)g
(of)f(p)q(ossible)i(matc)o(hes,)f(and)f(then)h(returns)g(the)f(arra)o
-(y)f(of)165 599 y(these)j(matc)o(hes.)32 b(The)20 b(caller)g(should)h
+(y)f(of)165 1480 y(these)j(matc)o(hes.)32 b(The)20 b(caller)g(should)h
(place)f(the)g(address)f(of)h(its)f(generator)g(function)h(in)g
-Ft(rl_)165 653 y(completion_entry_function)p Fu(.)100
-719 y(3.)29 b(The)12 b(generator)e(function)i(is)g(called)h(rep)q
+Ft(rl_)165 1535 y(completion_entry_function)p Fu(.)100
+1602 y(3.)29 b(The)12 b(generator)e(function)i(is)g(called)h(rep)q
(eatedly)g(from)e Ft(rl_completion_matches\(\))p Fu(,)d(returning)165
-774 y(a)16 b(string)g(eac)o(h)h(time.)24 b(The)17 b(argumen)o(ts)e(to)h
-(the)g(generator)g(function)h(are)f Fk(text)h Fu(and)g
-Fk(state)p Fu(.)22 b Fk(text)165 828 y Fu(is)17 b(the)f(partial)g(w)o
+1657 y(a)16 b(string)g(eac)o(h)h(time.)24 b(The)17 b(argumen)o(ts)e(to)
+h(the)g(generator)g(function)h(are)f Fk(text)h Fu(and)g
+Fk(state)p Fu(.)22 b Fk(text)165 1712 y Fu(is)17 b(the)f(partial)g(w)o
(ord)f(to)h(b)q(e)h(completed.)23 b Fk(state)18 b Fu(is)e(zero)g(the)g
-(\014rst)g(time)g(the)g(function)h(is)g(called,)165 883
+(\014rst)g(time)g(the)g(function)h(is)g(called,)165 1766
y(allo)o(wing)23 b(the)f(generator)f(to)g(p)q(erform)h(an)o(y)g
(necessary)g(initialization,)k(and)c(a)g(p)q(ositiv)o(e)h(non-)165
-938 y(zero)14 b(in)o(teger)h(for)f(eac)o(h)h(subsequen)o(t)g(call.)21
+1821 y(zero)14 b(in)o(teger)h(for)f(eac)o(h)h(subsequen)o(t)g(call.)21
b(The)15 b(generator)e(function)j(returns)e Ft(\(char)h(*\)NULL)f
-Fu(to)165 993 y(inform)19 b Ft(rl_completion_matches\(\))d
+Fu(to)165 1876 y(inform)19 b Ft(rl_completion_matches\(\))d
Fu(that)i(there)h(are)g(no)g(more)g(p)q(ossibilities)j(left.)32
-b(Usually)165 1048 y(the)19 b(generator)g(function)h(computes)g(the)f
+b(Usually)165 1931 y(the)19 b(generator)g(function)h(computes)g(the)f
(list)h(of)f(p)q(ossible)i(completions)g(when)e Fk(state)j
-Fu(is)d(zero,)165 1102 y(and)13 b(returns)g(them)f(one)h(at)f(a)h(time)
+Fu(is)d(zero,)165 1986 y(and)13 b(returns)g(them)f(one)h(at)f(a)h(time)
g(on)g(subsequen)o(t)g(calls.)20 b(Eac)o(h)13 b(string)f(the)h
-(generator)f(function)165 1157 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)
+(generator)f(function)165 2040 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)
h(b)q(e)g(allo)q(cated)h(with)g Ft(malloc\(\))p Fu(;)d(Readline)k
-(frees)e(the)g(strings)f(when)165 1212 y(it)g(has)h(\014nished)g(with)g
-(them.)1762 1321 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
-215 1321 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
-(invoking_key)p Fg(\))195 1375 y Fu(Complete)h(the)f(w)o(ord)g(at)f(or)
+(frees)e(the)g(strings)f(when)165 2095 y(it)g(has)h(\014nished)g(with)g
+(them.)1762 2213 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p
+215 2213 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
+(invoking_key)p Fg(\))195 2268 y Fu(Complete)h(the)f(w)o(ord)g(at)f(or)
h(b)q(efore)h(p)q(oin)o(t.)21 b(Y)l(ou)15 b(ha)o(v)o(e)g(supplied)j
-(the)d(function)i(that)d(do)q(es)i(the)195 1430 y(initial)23
+(the)d(function)i(that)d(do)q(es)i(the)195 2323 y(initial)23
b(simple)f(matc)o(hing)e(selection)i(algorithm)f(\(see)f
-Ft(rl_completion_matches\(\))p Fu(\).)33 b(The)195 1485
+Ft(rl_completion_matches\(\))p Fu(\).)33 b(The)195 2378
y(default)16 b(is)f(to)g(do)g(\014lename)h(completion.)1773
-1594 y(V)l(ariable)-1861 b Fi(rl_compentry_func_t)22
-b(*)d Fh(rl)p 678 1594 V 21 w(completion)p 973 1594 V
-21 w(en)n(try)p 1126 1594 V 22 w(function)195 1648 y
+2496 y(V)l(ariable)-1861 b Fi(rl_compentry_func_t)22
+b(*)d Fh(rl)p 678 2496 V 21 w(completion)p 973 2496 V
+21 w(en)n(try)p 1126 2496 V 22 w(function)195 2550 y
Fu(This)i(is)f(a)g(p)q(oin)o(ter)g(to)f(the)h(generator)g(function)g
(for)g Ft(rl_completion_matches\(\))p Fu(.)31 b(If)20
-b(the)195 1703 y(v)m(alue)13 b(of)f Ft(rl_completion_entry_fun)o(ction)
+b(the)195 2605 y(v)m(alue)13 b(of)f Ft(rl_completion_entry_fun)o(ction)
d Fu(is)j Ft(NULL)f Fu(then)h(the)g(default)h(\014lename)g(generator)
-195 1758 y(function,)j Ft(rl_filename_completion_f)o(unction)o(\(\))p
-Fu(,)c(is)k(used.)75 1865 y Fj(2.6.2)30 b(Completion)20
-b(F)-5 b(unctions)137 1960 y Fu(Here)16 b(is)f(the)h(complete)g(list)g
-(of)e(callable)k(completion)e(functions)g(presen)o(t)f(in)h(Readline.)
-1762 2068 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215
-2068 V 21 w(complete)p 460 2068 V 21 w(in)n(ternal)k
-Fg(\()p Ft(int)15 b(what_to_do)p Fg(\))195 2123 y Fu(Complete)k(the)g
-(w)o(ord)f(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)31 b Fk(what)p
-1108 2123 14 2 v 16 w(to)p 1165 2123 V 16 w(do)21 b Fu(sa)o(ys)d(what)g
-(to)g(do)h(with)g(the)g(com-)195 2178 y(pletion.)j(A)16
-b(v)m(alue)h(of)e(`)p Ft(?)p Fu(')g(means)g(list)i(the)e(p)q(ossible)j
-(completions.)k(`)p Ft(TAB)p Fu(')14 b(means)i(do)f(standard)195
-2233 y(completion.)22 b(`)p Ft(*)p Fu(')15 b(means)g(insert)h(all)h(of)
-e(the)h(p)q(ossible)h(completions.)22 b(`)p Ft(!)p Fu(')15
-b(means)g(to)g(displa)o(y)i(all)195 2287 y(of)g(the)g(p)q(ossible)i
-(completions,)f(if)g(there)f(is)h(more)f(than)g(one,)g(as)g(w)o(ell)h
-(as)f(p)q(erforming)h(partial)195 2342 y(completion.)1762
-2451 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2451
-18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h
-(invoking_key)p Fg(\))195 2506 y Fu(Complete)21 b(the)g(w)o(ord)e(at)h
-(or)g(b)q(efore)h(p)q(oin)o(t.)37 b(Y)l(ou)21 b(ha)o(v)o(e)f(supplied)j
-(the)d(function)i(that)e(do)q(es)195 2560 y(the)d(initial)h(simple)g
-(matc)o(hing)f(selection)h(algorithm)e(\(see)g Ft
-(rl_completion_matches\(\))e Fu(and)195 2615 y Ft
-(rl_completion_entry_functi)o(on)p Fu(\).)25 b(The)18
+195 2660 y(function,)j Ft(rl_filename_completion_f)o(unction)o(\(\))p
+Fu(,)c(is)k(used.)p eop
+%%Page: 40 42
+40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fj(2.6.2)30 b(Completion)20 b(F)-5 b(unctions)137
+244 y Fu(Here)16 b(is)f(the)h(complete)g(list)g(of)e(callable)k
+(completion)e(functions)g(presen)o(t)f(in)h(Readline.)1762
+353 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 353
+18 3 v 21 w(complete)p 460 353 V 21 w(in)n(ternal)k Fg(\()p
+Ft(int)15 b(what_to_do)p Fg(\))195 408 y Fu(Complete)k(the)g(w)o(ord)f
+(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)31 b Fk(what)p 1108
+408 14 2 v 16 w(to)p 1165 408 V 16 w(do)21 b Fu(sa)o(ys)d(what)g(to)g
+(do)h(with)g(the)g(com-)195 463 y(pletion.)j(A)16 b(v)m(alue)h(of)e(`)p
+Ft(?)p Fu(')g(means)g(list)i(the)e(p)q(ossible)j(completions.)k(`)p
+Ft(TAB)p Fu(')14 b(means)i(do)f(standard)195 517 y(completion.)22
+b(`)p Ft(*)p Fu(')15 b(means)g(insert)h(all)h(of)e(the)h(p)q(ossible)h
+(completions.)22 b(`)p Ft(!)p Fu(')15 b(means)g(to)g(displa)o(y)i(all)
+195 572 y(of)g(the)g(p)q(ossible)i(completions,)f(if)g(there)f(is)h
+(more)f(than)g(one,)g(as)g(w)o(ell)h(as)f(p)q(erforming)h(partial)195
+627 y(completion.)1762 736 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 736 18 3 v 21 w(complete)j Fg(\()p Ft(int)14
+b(ignore,)g(int)h(invoking_key)p Fg(\))195 791 y Fu(Complete)21
+b(the)g(w)o(ord)e(at)h(or)g(b)q(efore)h(p)q(oin)o(t.)37
+b(Y)l(ou)21 b(ha)o(v)o(e)f(supplied)j(the)d(function)i(that)e(do)q(es)
+195 845 y(the)d(initial)h(simple)g(matc)o(hing)f(selection)h(algorithm)
+e(\(see)g Ft(rl_completion_matches\(\))e Fu(and)195 900
+y Ft(rl_completion_entry_functi)o(on)p Fu(\).)25 b(The)18
b(default)h(is)f(to)f(do)h(\014lename)h(completion.)29
-b(This)195 2670 y(calls)16 b Ft(rl_complete_internal\(\))c
+b(This)195 955 y(calls)16 b Ft(rl_complete_internal\(\))c
Fu(with)k(an)f(argumen)o(t)f(dep)q(ending)k(on)d Fk(in)o(v)o(oking)p
-1657 2670 14 2 v 17 w(k)o(ey)p Fu(.)p eop
-%%Page: 40 42
-40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)h(Library)1762
-149 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 149
-18 3 v 21 w(p)r(ossible)p 433 149 V 20 w(completions)j
-Fg(\()p Ft(int)15 b(count,)f(int)h(invoking_key)p Fg(\))195
-204 y Fu(List)21 b(the)f(p)q(ossible)i(completions.)36
-b(See)21 b(description)h(of)e Ft(rl_complete)13 b(\(\))p
-Fu(.)35 b(This)21 b(calls)g Ft(rl_)195 259 y(complete_internal\(\))13
-b Fu(with)i(an)g(argumen)o(t)g(of)f(`)p Ft(?)p Fu('.)1762
-371 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 371
-V 21 w(insert)p 378 371 V 21 w(completions)j Fg(\()p
-Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\))195 426
-y Fu(Insert)i(the)g(list)h(of)e(p)q(ossible)j(completions)e(in)o(to)g
-(the)g(line,)i(deleting)f(the)f(partially-completed)195
-481 y(w)o(ord.)k(See)c(description)g(of)e Ft(rl_complete\(\))p
+1657 955 14 2 v 17 w(k)o(ey)p Fu(.)1762 1064 y(F)l(unction)-1861
+b Fi(int)20 b Fh(rl)p 215 1064 18 3 v 21 w(p)r(ossible)p
+433 1064 V 20 w(completions)j Fg(\()p Ft(int)15 b(count,)f(int)h
+(invoking_key)p Fg(\))195 1119 y Fu(List)21 b(the)f(p)q(ossible)i
+(completions.)36 b(See)21 b(description)h(of)e Ft(rl_complete)13
+b(\(\))p Fu(.)35 b(This)21 b(calls)g Ft(rl_)195 1174
+y(complete_internal\(\))13 b Fu(with)i(an)g(argumen)o(t)g(of)f(`)p
+Ft(?)p Fu('.)1762 1282 y(F)l(unction)-1861 b Fi(int)20
+b Fh(rl)p 215 1282 V 21 w(insert)p 378 1282 V 21 w(completions)j
+Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\))195
+1337 y Fu(Insert)i(the)g(list)h(of)e(p)q(ossible)j(completions)e(in)o
+(to)g(the)g(line,)i(deleting)f(the)f(partially-completed)195
+1392 y(w)o(ord.)k(See)c(description)g(of)e Ft(rl_complete\(\))p
Fu(.)20 b(This)d(calls)g Ft(rl_complete_internal\(\))c
-Fu(with)195 535 y(an)i(argumen)o(t)g(of)f(`)p Ft(*)p
-Fu('.)1762 648 y(F)l(unction)-1861 b Fi(char)20 b(**)f
-Fh(rl)p 312 648 V 21 w(completion)p 607 648 V 21 w(matc)n(hes)j
-Fg(\()p Ft(const)15 b(char)f(*text,)283 702 y(rl_compentry_func_t)e
-(*entry_func)p Fg(\))195 757 y Fu(Returns)18 b(an)h(arra)o(y)f(of)g
+Fu(with)195 1447 y(an)i(argumen)o(t)g(of)f(`)p Ft(*)p
+Fu('.)1762 1556 y(F)l(unction)-1861 b Fi(char)20 b(**)f
+Fh(rl)p 312 1556 V 21 w(completion)p 607 1556 V 21 w(matc)n(hes)j
+Fg(\()p Ft(const)15 b(char)f(*text,)283 1611 y(rl_compentry_func_t)e
+(*entry_func)p Fg(\))195 1665 y Fu(Returns)18 b(an)h(arra)o(y)f(of)g
(strings)h(whic)o(h)h(is)g(a)e(list)i(of)e(completions)i(for)f
-Fk(text)p Fu(.)30 b(If)19 b(there)g(are)g(no)195 812
+Fk(text)p Fu(.)30 b(If)19 b(there)g(are)g(no)195 1720
y(completions,)f(returns)g Ft(NULL)p Fu(.)25 b(The)17
b(\014rst)g(en)o(try)g(in)h(the)f(returned)h(arra)o(y)e(is)i(the)f
-(substitution)195 867 y(for)c Fk(text)p Fu(.)18 b(The)c(remaining)g(en)
-o(tries)f(are)g(the)h(p)q(ossible)g(completions.)21 b(The)13
-b(arra)o(y)f(is)i(terminated)195 921 y(with)i(a)e Ft(NULL)h
-Fu(p)q(oin)o(ter.)195 988 y Fk(en)o(try)p 302 988 14
-2 v 16 w(func)h Fu(is)e(a)f(function)h(of)e(t)o(w)o(o)g(args,)g(and)i
-(returns)f(a)f Ft(char)j(*)p Fu(.)k(The)13 b(\014rst)g(argumen)o(t)f
-(is)i Fk(text)p Fu(.)195 1043 y(The)f(second)g(is)f(a)h(state)e
-(argumen)o(t;)h(it)h(is)g(zero)f(on)g(the)h(\014rst)f(call,)i(and)e
-(non-zero)h(on)f(subsequen)o(t)195 1097 y(calls.)20 b
-Fk(en)o(try)p 420 1097 V 16 w(func)15 b Fu(returns)e(a)e
-Ft(NULL)h Fu(p)q(oin)o(ter)h(to)e(the)i(caller)g(when)g(there)f(are)g
-(no)g(more)g(matc)o(hes.)1762 1209 y(F)l(unction)-1861
-b Fi(char)20 b(*)f Fh(rl)p 286 1209 18 3 v 21 w(\014lename)p
-515 1209 V 20 w(completion)p 809 1209 V 21 w(function)k
-Fg(\()p Ft(const)15 b(char)f(*text,)h(int)283 1264 y(state)p
-Fg(\))195 1319 y Fu(A)e(generator)f(function)h(for)g(\014lename)h
-(completion)f(in)h(the)f(general)g(case.)19 b Fk(text)14
-b Fu(is)f(a)g(partial)g(\014le-)195 1374 y(name.)20 b(The)15
-b(Bash)f(source)h(is)g(a)g(useful)g(reference)h(for)e(writing)h(custom)
-f(completion)i(functions)195 1429 y(\(the)f(Bash)g(completion)i
-(functions)e(call)i(this)e(and)h(other)f(Readline)h(functions\).)1762
-1541 y(F)l(unction)-1861 b Fi(char)20 b(*)f Fh(rl)p 286
-1541 V 21 w(username)p 547 1541 V 19 w(completion)p 840
-1541 V 21 w(function)k Fg(\()p Ft(const)14 b(char)g(*text,)283
-1595 y(int)g(state)p Fg(\))195 1650 y Fu(A)g(completion)i(generator)d
-(for)h(usernames.)19 b Fk(text)c Fu(con)o(tains)f(a)g(partial)h
-(username)f(preceded)i(b)o(y)195 1705 y(a)f(random)g(c)o(haracter)f
-(\(usually)j(`)p Ft(~)p Fu('\).)i(As)c(with)g(all)i(completion)f
-(generators,)e Fk(state)j Fu(is)f(zero)f(on)195 1760
-y(the)g(\014rst)g(call)h(and)g(non-zero)f(for)g(subsequen)o(t)h(calls.)
-75 1869 y Fj(2.6.3)30 b(Completion)20 b(V)-5 b(ariables)1773
-2010 y Fu(V)l(ariable)-1861 b Fi(rl_compentry_func_t)22
-b(*)d Fh(rl)p 678 2010 V 21 w(completion)p 973 2010 V
-21 w(en)n(try)p 1126 2010 V 22 w(function)195 2065 y
-Fu(A)e(p)q(oin)o(ter)g(to)f(the)h(generator)f(function)h(for)f
-Ft(rl_completion_matches\(\))p Fu(.)22 b Ft(NULL)16 b
-Fu(means)h(to)195 2120 y(use)f Ft(rl_filename_completion_)o(functio)o
-(n\(\))p Fu(,)c(the)j(default)h(\014lename)g(completer.)1773
-2232 y(V)l(ariable)-1861 b Fi(rl_completion_func_t)22
-b(*)d Fh(rl)p 704 2232 V 22 w(attempted)p 985 2232 V
-20 w(completion)p 1279 2232 V 21 w(function)195 2286
-y Fu(A)e(p)q(oin)o(ter)h(to)f(an)g(alternativ)o(e)h(function)g(to)f
-(create)g(matc)o(hes.)26 b(The)18 b(function)g(is)g(called)h(with)195
-2341 y Fk(text)p Fu(,)11 b Fk(start)p Fu(,)g(and)h Fk(end)p
-Fu(.)19 b Fk(start)11 b Fu(and)h Fk(end)i Fu(are)d(indices)i(in)g
-Ft(rl_line_buffer)c Fu(de\014ning)k(the)f(b)q(ound-)195
-2396 y(aries)h(of)g Fk(text)p Fu(,)f(whic)o(h)i(is)g(a)e(c)o(haracter)h
-(string.)19 b(If)13 b(this)g(function)h(exists)g(and)f(returns)g
-Ft(NULL)p Fu(,)f(or)g(if)195 2451 y(this)f(v)m(ariable)i(is)e(set)g(to)
-f Ft(NULL)p Fu(,)h(then)g Ft(rl_complete\(\))e Fu(will)k(call)f(the)f
-(v)m(alue)h(of)f Ft(rl_completion_)195 2506 y(entry_function)h
+(substitution)195 1775 y(for)c Fk(text)p Fu(.)18 b(The)c(remaining)g
+(en)o(tries)f(are)g(the)h(p)q(ossible)g(completions.)21
+b(The)13 b(arra)o(y)f(is)i(terminated)195 1830 y(with)i(a)e
+Ft(NULL)h Fu(p)q(oin)o(ter.)195 1895 y Fk(en)o(try)p
+302 1895 14 2 v 16 w(func)h Fu(is)e(a)f(function)h(of)e(t)o(w)o(o)g
+(args,)g(and)i(returns)f(a)f Ft(char)j(*)p Fu(.)k(The)13
+b(\014rst)g(argumen)o(t)f(is)i Fk(text)p Fu(.)195 1950
+y(The)f(second)g(is)f(a)h(state)e(argumen)o(t;)h(it)h(is)g(zero)f(on)g
+(the)h(\014rst)f(call,)i(and)e(non-zero)h(on)f(subsequen)o(t)195
+2005 y(calls.)20 b Fk(en)o(try)p 420 2005 V 16 w(func)15
+b Fu(returns)e(a)e Ft(NULL)h Fu(p)q(oin)o(ter)h(to)e(the)i(caller)g
+(when)g(there)f(are)g(no)g(more)g(matc)o(hes.)1762 2114
+y(F)l(unction)-1861 b Fi(char)20 b(*)f Fh(rl)p 286 2114
+18 3 v 21 w(\014lename)p 515 2114 V 20 w(completion)p
+809 2114 V 21 w(function)k Fg(\()p Ft(const)15 b(char)f(*text,)h(int)
+283 2169 y(state)p Fg(\))195 2223 y Fu(A)e(generator)f(function)h(for)g
+(\014lename)h(completion)f(in)h(the)f(general)g(case.)19
+b Fk(text)14 b Fu(is)f(a)g(partial)g(\014le-)195 2278
+y(name.)20 b(The)15 b(Bash)f(source)h(is)g(a)g(useful)g(reference)h
+(for)e(writing)h(custom)f(completion)i(functions)195
+2333 y(\(the)f(Bash)g(completion)i(functions)e(call)i(this)e(and)h
+(other)f(Readline)h(functions\).)1762 2442 y(F)l(unction)-1861
+b Fi(char)20 b(*)f Fh(rl)p 286 2442 V 21 w(username)p
+547 2442 V 19 w(completion)p 840 2442 V 21 w(function)k
+Fg(\()p Ft(const)14 b(char)g(*text,)283 2497 y(int)g(state)p
+Fg(\))195 2552 y Fu(A)g(completion)i(generator)d(for)h(usernames.)19
+b Fk(text)c Fu(con)o(tains)f(a)g(partial)h(username)f(preceded)i(b)o(y)
+195 2606 y(a)f(random)g(c)o(haracter)f(\(usually)j(`)p
+Ft(~)p Fu('\).)i(As)c(with)g(all)i(completion)f(generators,)e
+Fk(state)j Fu(is)f(zero)f(on)195 2661 y(the)g(\014rst)g(call)h(and)g
+(non-zero)f(for)g(subsequen)o(t)h(calls.)p eop
+%%Page: 41 43
+41 42 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(41)75 149 y Fj(2.6.3)30 b(Completion)20
+b(V)-5 b(ariables)1773 292 y Fu(V)l(ariable)-1861 b Fi
+(rl_compentry_func_t)22 b(*)d Fh(rl)p 678 292 18 3 v
+21 w(completion)p 973 292 V 21 w(en)n(try)p 1126 292
+V 22 w(function)195 347 y Fu(A)e(p)q(oin)o(ter)g(to)f(the)h(generator)f
+(function)h(for)f Ft(rl_completion_matches\(\))p Fu(.)22
+b Ft(NULL)16 b Fu(means)h(to)195 402 y(use)f Ft
+(rl_filename_completion_)o(functio)o(n\(\))p Fu(,)c(the)j(default)h
+(\014lename)g(completer.)1773 516 y(V)l(ariable)-1861
+b Fi(rl_completion_func_t)22 b(*)d Fh(rl)p 704 516 V
+22 w(attempted)p 985 516 V 20 w(completion)p 1279 516
+V 21 w(function)195 571 y Fu(A)e(p)q(oin)o(ter)h(to)f(an)g(alternativ)o
+(e)h(function)g(to)f(create)g(matc)o(hes.)26 b(The)18
+b(function)g(is)g(called)h(with)195 625 y Fk(text)p Fu(,)11
+b Fk(start)p Fu(,)g(and)h Fk(end)p Fu(.)19 b Fk(start)11
+b Fu(and)h Fk(end)i Fu(are)d(indices)i(in)g Ft(rl_line_buffer)c
+Fu(de\014ning)k(the)f(b)q(ound-)195 680 y(aries)h(of)g
+Fk(text)p Fu(,)f(whic)o(h)i(is)g(a)e(c)o(haracter)h(string.)19
+b(If)13 b(this)g(function)h(exists)g(and)f(returns)g
+Ft(NULL)p Fu(,)f(or)g(if)195 735 y(this)f(v)m(ariable)i(is)e(set)g(to)f
+Ft(NULL)p Fu(,)h(then)g Ft(rl_complete\(\))e Fu(will)k(call)f(the)f(v)m
+(alue)h(of)f Ft(rl_completion_)195 790 y(entry_function)h
Fu(to)i(generate)g(matc)o(hes,)f(otherwise)i(the)f(arra)o(y)f(of)h
-(strings)g(returned)g(will)i(b)q(e)195 2560 y(used.)j(If)12
+(strings)g(returned)g(will)i(b)q(e)195 845 y(used.)j(If)12
b(this)f(function)h(sets)f(the)g Ft(rl_attempted_completion_over)d
-Fu(v)m(ariable)k(to)f(a)g(non-zero)195 2615 y(v)m(alue,)18
+Fu(v)m(ariable)k(to)f(a)g(non-zero)195 899 y(v)m(alue,)18
b(Readline)h(will)f(not)f(p)q(erform)f(its)i(default)f(completion)h(ev)
-o(en)f(if)h(this)f(function)h(returns)195 2670 y(no)d(matc)o(hes.)p
-eop
-%%Page: 41 43
-41 42 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(41)1773 149 y(V)l(ariable)-1861 b Fi(rl_quote_func_t)21
-b(*)f Fh(rl)p 574 149 18 3 v 21 w(\014lename)p 803 149
-V 20 w(quoting)p 1012 149 V 21 w(function)195 204 y Fu(A)c(p)q(oin)o
-(ter)h(to)f(a)g(function)h(that)e(will)j(quote)e(a)g(\014lename)i(in)f
-(an)f(application-sp)q(eci\014)q(c)j(fashion.)195 259
-y(This)h(is)g(called)i(if)e(\014lename)g(completion)h(is)f(b)q(eing)h
-(attempted)e(and)h(one)g(of)f(the)h(c)o(haracters)195
-314 y(in)d Ft(rl_filename_quote_characters)c Fu(app)q(ears)k(in)g(a)g
-(completed)g(\014lename.)25 b(The)17 b(function)195 369
-y(is)i(called)i(with)e Fk(text)p Fu(,)g Fk(matc)o(h)p
-722 369 14 2 v 16 w(t)o(yp)q(e)p Fu(,)g(and)g Fk(quote)p
-1059 369 V 17 w(p)q(oin)o(ter)p Fu(.)31 b(The)19 b Fk(text)h
-Fu(is)f(the)g(\014lename)h(to)e(b)q(e)195 423 y(quoted.)39
-b(The)21 b Fk(matc)o(h)p 607 423 V 16 w(t)o(yp)q(e)j
-Fu(is)e(either)g Ft(SINGLE_MATCH)p Fu(,)f(if)h(there)f(is)h(only)g(one)
-g(completion)195 478 y(matc)o(h,)15 b(or)g Ft(MULT_MATCH)p
-Fu(.)20 b(Some)c(functions)g(use)g(this)g(to)f(decide)j(whether)e(or)f
-(not)g(to)g(insert)h(a)195 533 y(closing)c(quote)e(c)o(haracter.)18
-b(The)11 b Fk(quote)p 877 533 V 16 w(p)q(oin)o(ter)k
-Fu(is)c(a)f(p)q(oin)o(ter)i(to)e(an)o(y)g(op)q(ening)i(quote)f(c)o
-(haracter)195 588 y(the)k(user)h(t)o(yp)q(ed.)k(Some)15
-b(functions)h(c)o(ho)q(ose)f(to)g(reset)g(this)g(c)o(haracter.)1773
-690 y(V)l(ariable)-1861 b Fi(rl_dequote_func_t)22 b(*)d
-Fh(rl)p 626 690 18 3 v 21 w(\014lename)p 855 690 V 20
-w(dequoting)p 1122 690 V 21 w(function)195 744 y Fu(A)c(p)q(oin)o(ter)g
-(to)f(a)h(function)g(that)g(will)h(remo)o(v)o(e)e(application-sp)q
-(eci\014)q(c)k(quoting)d(c)o(haracters)f(from)195 799
-y(a)i(\014lename)h(b)q(efore)g(completion)g(is)g(attempted,)f(so)f
-(those)h(c)o(haracters)g(do)g(not)g(in)o(terfere)h(with)195
-854 y(matc)o(hing)i(the)g(text)g(against)f(names)h(in)h(the)f
-(\014lesystem.)33 b(It)19 b(is)g(called)i(with)e Fk(text)p
-Fu(,)g(the)g(text)195 909 y(of)i(the)g(w)o(ord)g(to)g(b)q(e)h
-(dequoted,)h(and)e Fk(quote)p 1009 909 14 2 v 17 w(c)o(har)p
+o(en)f(if)h(this)f(function)h(returns)195 954 y(no)d(matc)o(hes.)1773
+1068 y(V)l(ariable)-1861 b Fi(rl_quote_func_t)21 b(*)f
+Fh(rl)p 574 1068 V 21 w(\014lename)p 803 1068 V 20 w(quoting)p
+1012 1068 V 21 w(function)195 1123 y Fu(A)c(p)q(oin)o(ter)h(to)f(a)g
+(function)h(that)e(will)j(quote)e(a)g(\014lename)i(in)f(an)f
+(application-sp)q(eci\014)q(c)j(fashion.)195 1178 y(This)h(is)g(called)
+i(if)e(\014lename)g(completion)h(is)f(b)q(eing)h(attempted)e(and)h(one)
+g(of)f(the)h(c)o(haracters)195 1232 y(in)d Ft
+(rl_filename_quote_characters)c Fu(app)q(ears)k(in)g(a)g(completed)g
+(\014lename.)25 b(The)17 b(function)195 1287 y(is)i(called)i(with)e
+Fk(text)p Fu(,)g Fk(matc)o(h)p 722 1287 14 2 v 16 w(t)o(yp)q(e)p
+Fu(,)g(and)g Fk(quote)p 1059 1287 V 17 w(p)q(oin)o(ter)p
+Fu(.)31 b(The)19 b Fk(text)h Fu(is)f(the)g(\014lename)h(to)e(b)q(e)195
+1342 y(quoted.)39 b(The)21 b Fk(matc)o(h)p 607 1342 V
+16 w(t)o(yp)q(e)j Fu(is)e(either)g Ft(SINGLE_MATCH)p
+Fu(,)f(if)h(there)f(is)h(only)g(one)g(completion)195
+1397 y(matc)o(h,)15 b(or)g Ft(MULT_MATCH)p Fu(.)20 b(Some)c(functions)g
+(use)g(this)g(to)f(decide)j(whether)e(or)f(not)g(to)g(insert)h(a)195
+1452 y(closing)c(quote)e(c)o(haracter.)18 b(The)11 b
+Fk(quote)p 877 1452 V 16 w(p)q(oin)o(ter)k Fu(is)c(a)f(p)q(oin)o(ter)i
+(to)e(an)o(y)g(op)q(ening)i(quote)f(c)o(haracter)195
+1506 y(the)k(user)h(t)o(yp)q(ed.)k(Some)15 b(functions)h(c)o(ho)q(ose)f
+(to)g(reset)g(this)g(c)o(haracter.)1773 1620 y(V)l(ariable)-1861
+b Fi(rl_dequote_func_t)22 b(*)d Fh(rl)p 626 1620 18 3
+v 21 w(\014lename)p 855 1620 V 20 w(dequoting)p 1122
+1620 V 21 w(function)195 1675 y Fu(A)c(p)q(oin)o(ter)g(to)f(a)h
+(function)g(that)g(will)h(remo)o(v)o(e)e(application-sp)q(eci\014)q(c)k
+(quoting)d(c)o(haracters)f(from)195 1730 y(a)i(\014lename)h(b)q(efore)g
+(completion)g(is)g(attempted,)f(so)f(those)h(c)o(haracters)g(do)g(not)g
+(in)o(terfere)h(with)195 1785 y(matc)o(hing)i(the)g(text)g(against)f
+(names)h(in)h(the)f(\014lesystem.)33 b(It)19 b(is)g(called)i(with)e
+Fk(text)p Fu(,)g(the)g(text)195 1839 y(of)i(the)g(w)o(ord)g(to)g(b)q(e)
+h(dequoted,)h(and)e Fk(quote)p 1009 1839 14 2 v 17 w(c)o(har)p
Fu(,)h(whic)o(h)g(is)g(the)f(quoting)h(c)o(haracter)f(that)195
-964 y(delimits)d(the)e(\014lename)i(\(usually)f(`)p Ft(')p
-Fu(')f(or)f(`)p Ft(")p Fu('\).)22 b(If)17 b Fk(quote)p
-1187 964 V 16 w(c)o(har)i Fu(is)e(zero,)f(the)g(\014lename)i(w)o(as)d
-(not)195 1018 y(in)h(an)f(em)o(b)q(edded)i(string.)1773
-1120 y(V)l(ariable)-1861 b Fi(rl_linebuf_func_t)22 b(*)d
-Fh(rl)p 626 1120 18 3 v 21 w(c)n(har)p 754 1120 V 21
-w(is)p 813 1120 V 21 w(quoted)p 1005 1120 V 21 w(p)195
-1175 y Fu(A)f(p)q(oin)o(ter)h(to)f(a)g(function)h(to)f(call)i(that)d
+1894 y(delimits)d(the)e(\014lename)i(\(usually)f(`)p
+Ft(')p Fu(')f(or)f(`)p Ft(")p Fu('\).)22 b(If)17 b Fk(quote)p
+1187 1894 V 16 w(c)o(har)i Fu(is)e(zero,)f(the)g(\014lename)i(w)o(as)d
+(not)195 1949 y(in)h(an)f(em)o(b)q(edded)i(string.)1773
+2063 y(V)l(ariable)-1861 b Fi(rl_linebuf_func_t)22 b(*)d
+Fh(rl)p 626 2063 18 3 v 21 w(c)n(har)p 754 2063 V 21
+w(is)p 813 2063 V 21 w(quoted)p 1005 2063 V 21 w(p)195
+2118 y Fu(A)f(p)q(oin)o(ter)h(to)f(a)g(function)h(to)f(call)i(that)d
(determines)j(whether)e(or)g(not)g(a)g(sp)q(eci\014c)j(c)o(haracter)195
-1230 y(in)d(the)f(line)i(bu\013er)e(is)h(quoted,)g(according)f(to)g
+2173 y(in)d(the)f(line)i(bu\013er)e(is)h(quoted,)g(according)f(to)g
(whatev)o(er)f(quoting)i(mec)o(hanism)g(the)f(program)195
-1284 y(calling)d(Readline)g(uses.)19 b(The)13 b(function)g(is)g(called)
+2227 y(calling)d(Readline)g(uses.)19 b(The)13 b(function)g(is)g(called)
h(with)f(t)o(w)o(o)e(argumen)o(ts:)17 b Fk(text)p Fu(,)12
-b(the)h(text)f(of)g(the)195 1339 y(line,)17 b(and)e Fk(index)p
+b(the)h(text)f(of)g(the)195 2282 y(line,)17 b(and)e Fk(index)p
Fu(,)i(the)e(index)i(of)e(the)g(c)o(haracter)g(in)h(the)g(line.)22
-b(It)15 b(is)h(used)g(to)f(decide)i(whether)e(a)195 1394
+b(It)15 b(is)h(used)g(to)f(decide)i(whether)e(a)195 2337
y(c)o(haracter)f(found)i(in)g Ft(rl_completer_word_break_)o(charact)o
-(ers)c Fu(should)k(b)q(e)g(used)g(to)e(break)195 1449
-y(w)o(ords)g(for)h(the)g(completer.)1773 1551 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 1551 V 21 w(completion)p 510
-1551 V 21 w(query)p 673 1551 V 21 w(items)195 1605 y
+(ers)c Fu(should)k(b)q(e)g(used)g(to)e(break)195 2392
+y(w)o(ords)g(for)h(the)g(completer.)1773 2506 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 2506 V 21 w(completion)p 510
+2506 V 21 w(query)p 673 2506 V 21 w(items)195 2560 y
Fu(Up)e(to)g(this)g(man)o(y)g(items)g(will)i(b)q(e)f(displa)o(y)o(ed)g
(in)g(resp)q(onse)g(to)e(a)h(p)q(ossible-completions)j(call.)195
-1660 y(After)14 b(that,)f(w)o(e)h(ask)g(the)h(user)f(if)h(she)f(is)h
+2615 y(After)14 b(that,)f(w)o(e)h(ask)g(the)h(user)f(if)h(she)f(is)h
(sure)g(she)f(w)o(an)o(ts)f(to)h(see)h(them)f(all.)20
-b(The)15 b(default)g(v)m(alue)195 1715 y(is)h(100.)1773
-1817 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
-436 1817 V 21 w(basic)p 580 1817 V 21 w(w)n(ord)p 725
-1817 V 21 w(break)p 886 1817 V 20 w(c)n(haracters)195
-1872 y Fu(The)j(basic)h(list)g(of)f(c)o(haracters)f(that)g(signal)i(a)f
+b(The)15 b(default)g(v)m(alue)195 2670 y(is)h(100.)p
+eop
+%%Page: 42 44
+42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)h(Library)1773
+149 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
+436 149 18 3 v 21 w(basic)p 580 149 V 21 w(w)n(ord)p
+725 149 V 21 w(break)p 886 149 V 20 w(c)n(haracters)195
+204 y Fu(The)j(basic)h(list)g(of)f(c)o(haracters)f(that)g(signal)i(a)f
(break)g(b)q(et)o(w)o(een)g(w)o(ords)g(for)f(the)h(completer)195
-1926 y(routine.)30 b(The)19 b(default)g(v)m(alue)h(of)e(this)h(v)m
+259 y(routine.)30 b(The)19 b(default)g(v)m(alue)h(of)e(this)h(v)m
(ariable)h(is)f(the)g(c)o(haracters)f(whic)o(h)h(break)g(w)o(ords)f
-(for)195 1981 y(completion)e(in)g(Bash:)k Ft(")15 b
-(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1773 2083 y(V)l(ariable)-1861
-b Fi(const)20 b(char)g(*)f Fh(rl)p 436 2083 V 21 w(basic)p
-580 2083 V 21 w(quote)p 740 2083 V 21 w(c)n(haracters)195
-2138 y Fu(A)c(list)h(of)f(quote)g(c)o(haracters)f(whic)o(h)i(can)g
-(cause)f(a)g(w)o(ord)g(break.)1773 2239 y(V)l(ariable)-1861
-b Fi(const)20 b(char)g(*)f Fh(rl)p 436 2239 V 21 w(completer)p
-705 2239 V 21 w(w)n(ord)p 850 2239 V 20 w(break)p 1010
-2239 V 20 w(c)n(haracters)195 2294 y Fu(The)33 b(list)g(of)f(c)o
+(for)195 314 y(completion)e(in)g(Bash:)k Ft(")15 b
+(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1773 430 y(V)l(ariable)-1861
+b Fi(const)20 b(char)g(*)f Fh(rl)p 436 430 V 21 w(basic)p
+580 430 V 21 w(quote)p 740 430 V 21 w(c)n(haracters)195
+485 y Fu(A)c(list)h(of)f(quote)g(c)o(haracters)f(whic)o(h)i(can)g
+(cause)f(a)g(w)o(ord)g(break.)1773 601 y(V)l(ariable)-1861
+b Fi(const)20 b(char)g(*)f Fh(rl)p 436 601 V 21 w(completer)p
+705 601 V 21 w(w)n(ord)p 850 601 V 20 w(break)p 1010
+601 V 20 w(c)n(haracters)195 656 y Fu(The)33 b(list)g(of)f(c)o
(haracters)g(that)f(signal)j(a)e(break)g(b)q(et)o(w)o(een)h(w)o(ords)f
-(for)g Ft(rl_complete_)195 2349 y(internal\(\))p Fu(.)18
+(for)g Ft(rl_complete_)195 711 y(internal\(\))p Fu(.)18
b(The)e(default)g(list)g(is)f(the)h(v)m(alue)g(of)f Ft
-(rl_basic_word_break_chara)o(cters)p Fu(.)1773 2451 y(V)l(ariable)-1861
-b Fi(const)20 b(char)g(*)f Fh(rl)p 436 2451 V 21 w(completer)p
-705 2451 V 21 w(quote)p 865 2451 V 20 w(c)n(haracters)195
-2506 y Fu(A)e(list)h(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)g
-(used)h(to)e(quote)h(a)f(substring)h(of)g(the)g(line.)26
-b(Completion)195 2560 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)g
-(substring,)h(and)f(within)i(the)e(substring)g Ft
-(rl_completer_word_break_)195 2615 y(characters)j Fu(are)h(treated)g
-(as)h(an)o(y)f(other)g(c)o(haracter,)g(unless)i(they)e(also)h(app)q
-(ear)g(within)h(this)195 2670 y(list.)p eop
-%%Page: 42 44
-42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)h(Library)1773
-149 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
-436 149 18 3 v 21 w(\014lename)p 665 149 V 20 w(quote)p
-824 149 V 21 w(c)n(haracters)195 204 y Fu(A)e(list)h(of)e(c)o
-(haracters)g(that)g(cause)h(a)g(\014lename)h(to)e(b)q(e)i(quoted)e(b)o
-(y)h(the)g(completer)h(when)f(they)195 259 y(app)q(ear)e(in)h(a)f
-(completed)h(\014lename.)21 b(The)16 b(default)g(is)f(the)h(n)o(ull)g
-(string.)1773 376 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f
-Fh(rl)p 436 376 V 21 w(sp)r(ecial)p 623 376 V 22 w(pre\014xes)195
-431 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f
+(rl_basic_word_break_chara)o(cters)p Fu(.)1773 828 y(V)l(ariable)-1861
+b Fi(const)20 b(char)g(*)f Fh(rl)p 436 828 V 21 w(completer)p
+705 828 V 21 w(quote)p 865 828 V 20 w(c)n(haracters)195
+882 y Fu(A)e(list)h(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)g(used)
+h(to)e(quote)h(a)f(substring)h(of)g(the)g(line.)26 b(Completion)195
+937 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)g(substring,)h(and)f(within)i
+(the)e(substring)g Ft(rl_completer_word_break_)195 992
+y(characters)j Fu(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g
+(unless)i(they)e(also)h(app)q(ear)g(within)h(this)195
+1047 y(list.)1773 1163 y(V)l(ariable)-1861 b Fi(const)20
+b(char)g(*)f Fh(rl)p 436 1163 V 21 w(\014lename)p 665
+1163 V 20 w(quote)p 824 1163 V 21 w(c)n(haracters)195
+1218 y Fu(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g
+(\014lename)h(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f
+(they)195 1273 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21
+b(The)16 b(default)g(is)f(the)h(n)o(ull)g(string.)1773
+1389 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p
+436 1389 V 21 w(sp)r(ecial)p 623 1389 V 22 w(pre\014xes)195
+1444 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f
(break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g(in)h
-Fk(text)f Fu(when)195 486 y(it)f(is)f(passed)h(to)f(the)g(completion)h
+Fk(text)f Fu(when)195 1499 y(it)f(is)f(passed)h(to)f(the)g(completion)h
(function.)20 b(Programs)11 b(can)h(use)h(this)g(to)f(help)h(determine)
-h(what)195 541 y(kind)i(of)e(completing)i(to)e(do.)19
+h(what)195 1554 y(kind)i(of)e(completing)i(to)e(do.)19
b(F)l(or)14 b(instance,)i(Bash)e(sets)h(this)g(v)m(ariable)h(to)e
-Ft(")p Fu($)p Ft(@")g Fu(so)g(that)g(it)h(can)195 596
+Ft(")p Fu($)p Ft(@")g Fu(so)g(that)g(it)h(can)195 1608
y(complete)h(shell)h(v)m(ariables)f(and)g(hostnames.)1773
-713 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 713
-V 21 w(completion)p 510 713 V 21 w(app)r(end)p 715 713
-V 19 w(c)n(haracter)195 768 y Fu(When)d(a)f(single)i(completion)g
+1725 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1725
+V 21 w(completion)p 510 1725 V 21 w(app)r(end)p 715 1725
+V 19 w(c)n(haracter)195 1780 y Fu(When)d(a)f(single)i(completion)g
(alternativ)o(e)f(matc)o(hes)f(at)g(the)h(end)g(of)f(the)h(command)f
-(line,)j(this)195 823 y(c)o(haracter)10 b(is)h(app)q(ended)i(to)d(the)g
-(inserted)i(completion)g(text.)18 b(The)11 b(default)g(is)g(a)g(space)g
-(c)o(haracter)195 877 y(\(`)j('\).)19 b(Setting)14 b(this)f(to)g(the)g
-(n)o(ull)i(c)o(haracter)e(\(`)p Ft(\\0)p Fu('\))e(prev)o(en)o(ts)i(an)o
-(ything)h(b)q(eing)h(app)q(ended)f(auto-)195 932 y(matically)l(.)21
-b(This)15 b(can)f(b)q(e)h(c)o(hanged)g(in)g(custom)f(completion)i
-(functions)f(to)f(pro)o(vide)h(the)f(\\most)195 987 y(sensible)i(w)o
-(ord)c(separator)h(c)o(haracter")f(according)i(to)f(an)h
-(application-sp)q(eci\014c)j(command)c(line)195 1042
-y(syn)o(tax)h(sp)q(eci\014cation.)1773 1159 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 1159 V 21 w(ignore)p 391 1159
-V 20 w(completion)p 685 1159 V 21 w(duplicates)195 1214
+(line,)j(this)195 1834 y(c)o(haracter)10 b(is)h(app)q(ended)i(to)d(the)
+g(inserted)i(completion)g(text.)18 b(The)11 b(default)g(is)g(a)g(space)
+g(c)o(haracter)195 1889 y(\(`)j('\).)19 b(Setting)14
+b(this)f(to)g(the)g(n)o(ull)i(c)o(haracter)e(\(`)p Ft(\\0)p
+Fu('\))e(prev)o(en)o(ts)i(an)o(ything)h(b)q(eing)h(app)q(ended)f(auto-)
+195 1944 y(matically)l(.)21 b(This)15 b(can)f(b)q(e)h(c)o(hanged)g(in)g
+(custom)f(completion)i(functions)f(to)f(pro)o(vide)h(the)f(\\most)195
+1999 y(sensible)i(w)o(ord)c(separator)h(c)o(haracter")f(according)i(to)
+f(an)h(application-sp)q(eci\014c)j(command)c(line)195
+2054 y(syn)o(tax)h(sp)q(eci\014cation.)1773 2170 y(V)l(ariable)-1861
+b Fi(int)20 b Fh(rl)p 215 2170 V 21 w(ignore)p 391 2170
+V 20 w(completion)p 685 2170 V 21 w(duplicates)195 2225
y Fu(If)15 b(non-zero,)h(then)f(duplicates)i(in)f(the)f(matc)o(hes)g
(are)g(remo)o(v)o(ed.)k(The)d(default)g(is)f(1.)1773
-1331 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1331
-V 21 w(\014lename)p 444 1331 V 20 w(completion)p 738
-1331 V 21 w(desired)195 1386 y Fu(Non-zero)c(means)g(that)f(the)h
+2341 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2341
+V 21 w(\014lename)p 444 2341 V 20 w(completion)p 738
+2341 V 21 w(desired)195 2396 y Fu(Non-zero)c(means)g(that)f(the)h
(results)g(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(treated)e(as)g
-(\014lenames.)23 b(This)195 1441 y(is)14 b Fl(always)j
+(\014lenames.)23 b(This)195 2451 y(is)14 b Fl(always)j
Fu(zero)c(on)g(en)o(try)l(,)g(and)h(can)f(only)h(b)q(e)g(c)o(hanged)f
-(within)i(a)e(completion)h(en)o(try)f(generator)195 1496
+(within)i(a)e(completion)h(en)o(try)f(generator)195 2506
y(function.)38 b(If)21 b(it)g(is)g(set)g(to)f(a)g(non-zero)h(v)m(alue,)
i(directory)e(names)g(ha)o(v)o(e)g(a)f(slash)h(app)q(ended)195
-1551 y(and)d(Readline)h(attempts)d(to)h(quote)g(completed)i
+2560 y(and)d(Readline)h(attempts)d(to)h(quote)g(completed)i
(\014lenames)f(if)g(they)g(con)o(tain)g(an)o(y)f(c)o(haracters)195
-1605 y(in)f Ft(rl_filename_quote_character)o(s)d Fu(and)i
+2615 y(in)f Ft(rl_filename_quote_character)o(s)d Fu(and)i
Ft(rl_filename_quoting_desired)d Fu(is)k(set)f(to)f(a)195
-1660 y(non-zero)h(v)m(alue.)1773 1778 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 1778 V 21 w(\014lename)p 444
-1778 V 20 w(quoting)p 653 1778 V 21 w(desired)195 1832
-y Fu(Non-zero)14 b(means)g(that)f(the)i(results)f(of)g(the)g(matc)o
-(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h(double)g(quotes)195
-1887 y(\(or)c(an)h(application-sp)q(eci\014)q(c)j(quoting)d(mec)o
-(hanism\))g(if)h(the)f(completed)h(\014lename)g(con)o(tains)f(an)o(y)
-195 1942 y(c)o(haracters)i(in)i Ft(rl_filename_quote_chars)p
-Fu(.)h(This)f(is)f Fl(always)k Fu(non-zero)d(on)f(en)o(try)l(,)f(and)i
-(can)195 1997 y(only)c(b)q(e)g(c)o(hanged)g(within)h(a)f(completion)g
-(en)o(try)g(generator)e(function.)20 b(The)12 b(quoting)g(is)g
-(e\013ected)195 2052 y(via)j(a)g(call)i(to)d(the)i(function)g(p)q(oin)o
-(ted)g(to)e(b)o(y)h Ft(rl_filename_quoting_function)p
-Fu(.)1773 2169 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p
-215 2169 V 21 w(attempted)p 495 2169 V 20 w(completion)p
-789 2169 V 21 w(o)n(v)n(er)195 2224 y Fu(If)47 b(an)g(application-sp)q
-(eci\014)q(c)j(completion)e(function)g(assigned)f(to)g
-Ft(rl_attempted_)195 2279 y(completion_function)24 b
-Fu(sets)i(this)h(v)m(ariable)h(to)e(a)g(non-zero)h(v)m(alue,)j
-(Readline)e(will)g(not)195 2333 y(p)q(erform)15 b(its)g(default)g
-(\014lename)h(completion)g(ev)o(en)f(if)g(the)g(application's)h
-(completion)g(function)195 2388 y(returns)f(no)g(matc)o(hes.)20
-b(It)15 b(should)h(b)q(e)g(set)f(only)h(b)o(y)f(an)g(application's)h
-(completion)h(function.)1773 2506 y(V)l(ariable)-1861
-b Fi(int)20 b Fh(rl)p 215 2506 V 21 w(completion)p 510
-2506 V 21 w(t)n(yp)r(e)195 2560 y Fu(Set)e(to)e(a)i(c)o(haracter)f
-(describing)i(the)e(t)o(yp)q(e)h(of)f(completion)i(Readline)g(is)f
-(curren)o(tly)g(attempt-)195 2615 y(ing;)g(see)f(the)f(description)i
-(of)f Ft(rl_complete_internal\(\))c Fu(\(see)k(Section)h(2.6.2)d
-([Completion)195 2670 y(F)l(unctions],)g(page)g(39\))g(for)f(the)h
-(list)h(of)f(c)o(haracters.)p eop
+2670 y(non-zero)h(v)m(alue.)p eop
%%Page: 43 45
43 44 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
(Readline)843 b(43)1773 149 y(V)l(ariable)-1861 b Fi(int)20
-b Fh(rl)p 215 149 18 3 v 21 w(inhibit)p 399 149 V 23
-w(completion)195 204 y Fu(If)14 b(this)h(v)m(ariable)g(is)g(non-zero,)f
-(completion)i(is)e(inhibited.)22 b(The)15 b(completion)g(c)o(haracter)e
-(will)j(b)q(e)195 259 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to)
-e Ft(self-insert)p Fu(.)1773 376 y(V)l(ariable)-1861
-b Fi(rl_compignore_func_t)22 b(*)d Fh(rl)p 704 376 V
-22 w(ignore)p 881 376 V 20 w(some)p 1028 376 V 19 w(completions)p
-1344 376 V 21 w(function)195 431 y Fu(This)g(function,)i(if)e
+b Fh(rl)p 215 149 18 3 v 21 w(\014lename)p 444 149 V
+20 w(quoting)p 653 149 V 21 w(desired)195 204 y Fu(Non-zero)14
+b(means)g(that)f(the)i(results)f(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q
+(e)i(quoted)f(using)h(double)g(quotes)195 259 y(\(or)c(an)h
+(application-sp)q(eci\014)q(c)j(quoting)d(mec)o(hanism\))g(if)h(the)f
+(completed)h(\014lename)g(con)o(tains)f(an)o(y)195 314
+y(c)o(haracters)i(in)i Ft(rl_filename_quote_chars)p Fu(.)h(This)f(is)f
+Fl(always)k Fu(non-zero)d(on)f(en)o(try)l(,)f(and)i(can)195
+369 y(only)c(b)q(e)g(c)o(hanged)g(within)h(a)f(completion)g(en)o(try)g
+(generator)e(function.)20 b(The)12 b(quoting)g(is)g(e\013ected)195
+423 y(via)j(a)g(call)i(to)d(the)i(function)g(p)q(oin)o(ted)g(to)e(b)o
+(y)h Ft(rl_filename_quoting_function)p Fu(.)1773 524
+y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 524 V 21
+w(attempted)p 495 524 V 20 w(completion)p 789 524 V 21
+w(o)n(v)n(er)195 579 y Fu(If)47 b(an)g(application-sp)q(eci\014)q(c)j
+(completion)e(function)g(assigned)f(to)g Ft(rl_attempted_)195
+633 y(completion_function)24 b Fu(sets)i(this)h(v)m(ariable)h(to)e(a)g
+(non-zero)h(v)m(alue,)j(Readline)e(will)g(not)195 688
+y(p)q(erform)15 b(its)g(default)g(\014lename)h(completion)g(ev)o(en)f
+(if)g(the)g(application's)h(completion)g(function)195
+743 y(returns)f(no)g(matc)o(hes.)20 b(It)15 b(should)h(b)q(e)g(set)f
+(only)h(b)o(y)f(an)g(application's)h(completion)h(function.)1773
+844 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 844
+V 21 w(completion)p 510 844 V 21 w(t)n(yp)r(e)195 898
+y Fu(Set)e(to)e(a)i(c)o(haracter)f(describing)i(the)e(t)o(yp)q(e)h(of)f
+(completion)i(Readline)g(is)f(curren)o(tly)g(attempt-)195
+953 y(ing;)g(see)f(the)f(description)i(of)f Ft
+(rl_complete_internal\(\))c Fu(\(see)k(Section)h(2.6.2)d([Completion)
+195 1008 y(F)l(unctions],)g(page)g(40\))g(for)f(the)h(list)h(of)f(c)o
+(haracters.)1773 1108 y(V)l(ariable)-1861 b Fi(int)20
+b Fh(rl)p 215 1108 V 21 w(inhibit)p 399 1108 V 23 w(completion)195
+1163 y Fu(If)14 b(this)h(v)m(ariable)g(is)g(non-zero,)f(completion)i
+(is)e(inhibited.)22 b(The)15 b(completion)g(c)o(haracter)e(will)j(b)q
+(e)195 1218 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to)e
+Ft(self-insert)p Fu(.)1773 1318 y(V)l(ariable)-1861 b
+Fi(rl_compignore_func_t)22 b(*)d Fh(rl)p 704 1318 V 22
+w(ignore)p 881 1318 V 20 w(some)p 1028 1318 V 19 w(completions)p
+1344 1318 V 21 w(function)195 1373 y Fu(This)g(function,)i(if)e
(de\014ned,)i(is)e(called)h(b)o(y)f(the)g(completer)g(when)h(real)f
-(\014lename)h(completion)195 486 y(is)e(done,)f(after)f(all)i(the)f
+(\014lename)h(completion)195 1428 y(is)e(done,)f(after)f(all)i(the)f
(matc)o(hing)g(names)g(ha)o(v)o(e)g(b)q(een)h(generated.)25
-b(It)17 b(is)h(passed)f(a)g Ft(NULL)f Fu(ter-)195 540
+b(It)17 b(is)h(passed)f(a)g Ft(NULL)f Fu(ter-)195 1483
y(minated)g(arra)o(y)e(of)h(matc)o(hes.)20 b(The)c(\014rst)f(elemen)o
(t)h(\()p Ft(matches[0])p Fu(\))d(is)j(the)g(maximal)g(substring)195
-595 y(common)e(to)g(all)h(matc)o(hes.)k(This)c(function)g(can)g
+1538 y(common)e(to)g(all)h(matc)o(hes.)k(This)c(function)g(can)g
(re-arrange)f(the)g(list)h(of)f(matc)o(hes)g(as)g(required,)195
-650 y(but)h(eac)o(h)h(elemen)o(t)g(deleted)g(from)f(the)g(arra)o(y)f(m)
-o(ust)g(b)q(e)i(freed.)1773 767 y(V)l(ariable)-1861 b
-Fi(rl_icppfunc_t)21 b(*)e Fh(rl)p 521 767 V 21 w(directory)p
-769 767 V 22 w(completion)p 1065 767 V 21 w(ho)r(ok)195
-822 y Fu(This)k(function,)i(if)e(de\014ned,)j(is)d(allo)o(w)o(ed)g(to)f
-(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)f(\014lenames)195
-877 y(Readline)e(completes.)29 b(It)19 b(is)f(called)i(with)f(the)f
+1592 y(but)h(eac)o(h)h(elemen)o(t)g(deleted)g(from)f(the)g(arra)o(y)f
+(m)o(ust)g(b)q(e)i(freed.)1773 1693 y(V)l(ariable)-1861
+b Fi(rl_icppfunc_t)21 b(*)e Fh(rl)p 521 1693 V 21 w(directory)p
+769 1693 V 22 w(completion)p 1065 1693 V 21 w(ho)r(ok)195
+1748 y Fu(This)k(function,)i(if)e(de\014ned,)j(is)d(allo)o(w)o(ed)g(to)
+f(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)f(\014lenames)195
+1802 y(Readline)e(completes.)29 b(It)19 b(is)f(called)i(with)f(the)f
(address)h(of)e(a)h(string)h(\(the)f(curren)o(t)g(directory)195
-932 y(name\))g(as)g(an)h(argumen)o(t,)f(and)h(ma)o(y)f(mo)q(dify)h
+1857 y(name\))g(as)g(an)h(argumen)o(t,)f(and)h(ma)o(y)f(mo)q(dify)h
(that)f(string.)30 b(If)19 b(the)f(string)h(is)g(replaced)h(with)195
-986 y(a)g(new)g(string,)h(the)f(old)g(v)m(alue)h(should)g(b)q(e)g
+1912 y(a)g(new)g(string,)h(the)f(old)g(v)m(alue)h(should)g(b)q(e)g
(freed.)34 b(An)o(y)20 b(mo)q(di\014ed)i(directory)e(name)g(should)195
-1041 y(ha)o(v)o(e)14 b(a)g(trailing)i(slash.)k(The)15
+1967 y(ha)o(v)o(e)14 b(a)g(trailing)i(slash.)k(The)15
b(mo)q(di\014ed)h(v)m(alue)g(will)g(b)q(e)f(displa)o(y)o(ed)h(as)e
-(part)g(of)h(the)f(completion,)195 1096 y(replacing)h(the)g(directory)f
+(part)g(of)h(the)f(completion,)195 2022 y(replacing)h(the)g(directory)f
(p)q(ortion)g(of)g(the)g(pathname)g(the)h(user)f(t)o(yp)q(ed.)20
-b(It)14 b(returns)g(an)g(in)o(teger)195 1151 y(that)i(should)h(b)q(e)g
+b(It)14 b(returns)g(an)g(in)o(teger)195 2076 y(that)i(should)h(b)q(e)g
(non-zero)g(if)g(the)g(function)g(mo)q(di\014es)h(its)e(directory)h
-(argumen)o(t.)23 b(It)17 b(could)g(b)q(e)195 1205 y(used)f(to)e(expand)
+(argumen)o(t.)23 b(It)17 b(could)g(b)q(e)195 2131 y(used)f(to)e(expand)
i(sym)o(b)q(olic)h(links)f(or)f(shell)i(v)m(ariables)f(in)g(pathnames.)
-1773 1323 y(V)l(ariable)-1861 b Fi(rl_compdisp_func_t)22
-b(*)d Fh(rl)p 652 1323 V 21 w(completion)p 947 1323 V
-21 w(displa)n(y)p 1141 1323 V 22 w(matc)n(hes)p 1366
-1323 V 21 w(ho)r(ok)195 1377 y Fu(If)11 b(non-zero,)h(then)f(this)h(is)
+1773 2232 y(V)l(ariable)-1861 b Fi(rl_compdisp_func_t)22
+b(*)d Fh(rl)p 652 2232 V 21 w(completion)p 947 2232 V
+21 w(displa)n(y)p 1141 2232 V 22 w(matc)n(hes)p 1366
+2232 V 21 w(ho)r(ok)195 2286 y Fu(If)11 b(non-zero,)h(then)f(this)h(is)
f(the)g(address)g(of)g(a)g(function)g(to)g(call)h(when)f(completing)i
-(a)d(w)o(ord)h(w)o(ould)195 1432 y(normally)h(displa)o(y)g(the)f(list)h
+(a)d(w)o(ord)h(w)o(ould)195 2341 y(normally)h(displa)o(y)g(the)f(list)h
(of)f(p)q(ossible)h(matc)o(hes.)18 b(This)12 b(function)g(is)g(called)g
-(in)g(lieu)h(of)e(Readline)195 1487 y(displa)o(ying)21
+(in)g(lieu)h(of)e(Readline)195 2396 y(displa)o(ying)21
b(the)d(list.)32 b(It)19 b(tak)o(es)f(three)h(argumen)o(ts:)26
b(\()p Ft(char)14 b(**)p Fk(matc)o(hes)p Fu(,)19 b Ft(int)f
-Fk(n)o(um)p 1688 1487 14 2 v 17 w(matc)o(hes)p Fu(,)195
-1542 y Ft(int)13 b Fk(max)p 368 1542 V 16 w(length)p
+Fk(n)o(um)p 1688 2396 14 2 v 17 w(matc)o(hes)p Fu(,)195
+2451 y Ft(int)13 b Fk(max)p 368 2451 V 16 w(length)p
Fu(\))i(where)f Fk(matc)o(hes)h Fu(is)f(the)g(arra)o(y)f(of)g(matc)o
-(hing)h(strings,)g Fk(n)o(um)p 1578 1542 V 16 w(matc)o(hes)i
-Fu(is)e(the)195 1597 y(n)o(um)o(b)q(er)h(of)f(strings)h(in)h(that)e
-(arra)o(y)l(,)f(and)i Fk(max)p 1012 1597 V 16 w(length)h
+(hing)h(strings,)g Fk(n)o(um)p 1578 2451 V 16 w(matc)o(hes)i
+Fu(is)e(the)195 2506 y(n)o(um)o(b)q(er)h(of)f(strings)h(in)h(that)e
+(arra)o(y)l(,)f(and)i Fk(max)p 1012 2506 V 16 w(length)h
Fu(is)f(the)g(length)g(of)g(the)f(longest)h(string)g(in)195
-1651 y(that)e(arra)o(y)l(.)19 b(Readline)c(pro)o(vides)g(a)e(con)o(v)o
+2560 y(that)e(arra)o(y)l(.)19 b(Readline)c(pro)o(vides)g(a)e(con)o(v)o
(enience)j(function,)f Ft(rl_display_match_list)p Fu(,)c(that)195
-1706 y(tak)o(es)17 b(care)g(of)g(doing)h(the)f(displa)o(y)i(to)d
+2615 y(tak)o(es)17 b(care)g(of)g(doing)h(the)f(displa)o(y)i(to)d
(Readline's)j(output)e(stream.)26 b(That)16 b(function)j(ma)o(y)d(b)q
-(e)195 1761 y(called)h(from)d(this)i(ho)q(ok.)75 1873
-y Fj(2.6.4)30 b(A)21 b(Short)f(Completion)g(Example)137
-1969 y Fu(Here)11 b(is)f(a)g(small)h(application)h(demonstrating)e(the)
-g(use)h(of)e(the)i(GNU)f(Readline)h(library)l(.)19 b(It)11
-b(is)f(called)75 2024 y Ft(fileman)p Fu(,)17 b(and)h(the)g(source)g(co)
-q(de)g(resides)h(in)f(`)p Ft(examples/fileman.c)p Fu('.)25
-b(This)18 b(sample)g(application)75 2079 y(pro)o(vides)c(completion)g
+(e)195 2670 y(called)h(from)d(this)i(ho)q(ok.)p eop
+%%Page: 44 46
+44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)h(Library)75
+149 y Fj(2.6.4)30 b(A)21 b(Short)f(Completion)g(Example)137
+246 y Fu(Here)11 b(is)f(a)g(small)h(application)h(demonstrating)e(the)g
+(use)h(of)e(the)i(GNU)f(Readline)h(library)l(.)19 b(It)11
+b(is)f(called)75 301 y Ft(fileman)p Fu(,)17 b(and)h(the)g(source)g(co)q
+(de)g(resides)h(in)f(`)p Ft(examples/fileman.c)p Fu('.)25
+b(This)18 b(sample)g(application)75 355 y(pro)o(vides)c(completion)g
(of)e(command)h(names,)g(line)i(editing)g(features,)d(and)i(access)f
(to)f(the)h(history)h(list.)p eop
-%%Page: 44 46
-44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)h(Library)195
-149 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f(application)f(which)h
-(demonstrates)g(how)g(to)h(use)f(the)267 201 y(GNU)g(Readline)g
-(library.)46 b(This)24 b(application)e(interactively)g(allows)h(users)
-267 253 y(to)g(manipulate)g(files)g(and)g(their)g(modes.)h(*/)195
-357 y(#include)f(<stdio.h>)195 409 y(#include)g(<sys/types.h>)195
-461 y(#include)g(<sys/file.h>)195 513 y(#include)g(<sys/stat.h>)195
-565 y(#include)g(<sys/errno.h>)195 668 y(#include)g
-(<readline/readline.h>)195 720 y(#include)g(<readline/history.h>)195
-824 y(extern)g(char)g(*xmalloc)g(\(\);)195 928 y(/*)h(The)f(names)g(of)
-h(functions)e(that)i(actually)f(do)g(the)h(manipulation.)e(*/)195
-980 y(int)h(com_list)g(__P\(\(char)g(*\)\);)195 1032
-y(int)g(com_view)g(__P\(\(char)g(*\)\);)195 1083 y(int)g(com_rename)g
-(__P\(\(char)g(*\)\);)195 1135 y(int)g(com_stat)g(__P\(\(char)g(*\)\);)
-195 1187 y(int)g(com_pwd)g(__P\(\(char)g(*\)\);)195 1239
-y(int)g(com_delete)g(__P\(\(char)g(*\)\);)195 1291 y(int)g(com_help)g
-(__P\(\(char)g(*\)\);)195 1343 y(int)g(com_cd)g(__P\(\(char)g(*\)\);)
-195 1395 y(int)g(com_quit)g(__P\(\(char)g(*\)\);)195
-1499 y(/*)h(A)f(structure)g(which)g(contains)g(information)f(on)i(the)f
-(commands)g(this)g(program)267 1550 y(can)g(understand.)f(*/)195
-1654 y(typedef)h(struct)g({)243 1706 y(char)g(*name;)g(/*)h(User)f
-(printable)g(name)g(of)h(the)f(function.)g(*/)243 1758
-y(rl_icpfunc_t)f(*func;)h(/*)h(Function)e(to)i(call)f(to)h(do)f(the)h
-(job.)f(*/)243 1810 y(char)g(*doc;)g(/*)h(Documentation)e(for)h(this)h
-(function.)46 b(*/)195 1862 y(})24 b(COMMAND;)195 1966
-y(COMMAND)f(commands[])f(=)i({)243 2017 y({)f("cd",)h(com_cd,)f
-("Change)f(to)i(directory)f(DIR")g(},)243 2069 y({)g("delete",)g
-(com_delete,)f("Delete)h(FILE")h(},)243 2121 y({)f("help",)g(com_help,)
-g("Display)g(this)g(text")g(},)243 2173 y({)g("?",)h(com_help,)e
-("Synonym)h(for)h(`help'")f(},)243 2225 y({)g("list",)g(com_list,)g
-("List)g(files)g(in)h(DIR")f(},)243 2277 y({)g("ls",)h(com_list,)e
-("Synonym)h(for)g(`list'")g(},)243 2329 y({)g("pwd",)g(com_pwd,)g
-("Print)g(the)h(current)f(working)g(directory")f(},)243
-2381 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)243
-2433 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g
-(},)243 2484 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g
-(on)h(FILE")f(},)243 2536 y({)g("view",)g(com_view,)g("View)g(the)h
-(contents)e(of)i(FILE")f(},)243 2588 y({)g(\(char)h(*\)NULL,)f
-(\(rl_icpfunc_t)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195
-2640 y(};)p eop
%%Page: 45 47
45 46 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(45)195 201 y Ft(/*)24 b(Forward)e(declarations.)h(*/)
-195 253 y(char)g(*stripwhite)g(\(\);)195 305 y(COMMAND)g(*find_command)
-f(\(\);)195 409 y(/*)i(The)f(name)g(of)h(this)f(program,)g(as)h(taken)f
-(from)g(argv[0].)g(*/)195 461 y(char)g(*progname;)195
-565 y(/*)h(When)f(non-zero,)g(this)g(means)g(the)g(user)h(is)f(done)h
-(using)f(this)g(program.)g(*/)195 616 y(int)g(done;)195
-720 y(char)g(*)195 772 y(dupstr)g(\(s\))314 824 y(int)h(s;)195
-876 y({)243 928 y(char)f(*r;)243 1032 y(r)g(=)h(xmalloc)f(\(strlen)g
-(\(s\))g(+)h(1\);)243 1083 y(strcpy)f(\(r,)g(s\);)243
-1135 y(return)g(\(r\);)195 1187 y(})195 1291 y(main)g(\(argc,)g(argv\))
-314 1343 y(int)h(argc;)314 1395 y(char)g(**argv;)195
-1447 y({)243 1499 y(char)f(*line,)g(*s;)243 1602 y(progname)f(=)i
-(argv[0];)243 1706 y(initialize_readline)d(\(\);)i(/*)h(Bind)f(our)h
-(completer.)e(*/)243 1810 y(/*)h(Loop)h(reading)f(and)g(executing)g
-(lines)g(until)g(the)g(user)h(quits.)f(*/)243 1862 y(for)g(\()h(;)g
-(done)f(==)h(0;)f(\))290 1914 y({)338 1966 y(line)g(=)h(readline)f
-(\("FileMan:)f("\);)338 2069 y(if)i(\(!line\))386 2121
-y(break;)338 2225 y(/*)g(Remove)f(leading)g(and)g(trailing)g
-(whitespace)f(from)i(the)f(line.)410 2277 y(Then,)g(if)h(there)f(is)g
-(anything)g(left,)g(add)h(it)f(to)h(the)f(history)g(list)410
-2329 y(and)g(execute)g(it.)h(*/)338 2381 y(s)g(=)g(stripwhite)e
-(\(line\);)338 2484 y(if)i(\(*s\))386 2536 y({)434 2588
-y(add_history)e(\(s\);)434 2640 y(execute_line)g(\(s\);)p
-eop
+(Readline)843 b(45)195 149 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f
+(application)f(which)h(demonstrates)g(how)g(to)h(use)f(the)267
+201 y(GNU)g(Readline)g(library.)46 b(This)24 b(application)e
+(interactively)g(allows)h(users)267 253 y(to)g(manipulate)g(files)g
+(and)g(their)g(modes.)h(*/)195 357 y(#include)f(<stdio.h>)195
+409 y(#include)g(<sys/types.h>)195 461 y(#include)g(<sys/file.h>)195
+513 y(#include)g(<sys/stat.h>)195 565 y(#include)g(<sys/errno.h>)195
+668 y(#include)g(<readline/readline.h>)195 720 y(#include)g
+(<readline/history.h>)195 824 y(extern)g(char)g(*xmalloc)g(\(\);)195
+928 y(/*)h(The)f(names)g(of)h(functions)e(that)i(actually)f(do)g(the)h
+(manipulation.)e(*/)195 980 y(int)h(com_list)g(__P\(\(char)g(*\)\);)195
+1032 y(int)g(com_view)g(__P\(\(char)g(*\)\);)195 1083
+y(int)g(com_rename)g(__P\(\(char)g(*\)\);)195 1135 y(int)g(com_stat)g
+(__P\(\(char)g(*\)\);)195 1187 y(int)g(com_pwd)g(__P\(\(char)g(*\)\);)
+195 1239 y(int)g(com_delete)g(__P\(\(char)g(*\)\);)195
+1291 y(int)g(com_help)g(__P\(\(char)g(*\)\);)195 1343
+y(int)g(com_cd)g(__P\(\(char)g(*\)\);)195 1395 y(int)g(com_quit)g
+(__P\(\(char)g(*\)\);)195 1499 y(/*)h(A)f(structure)g(which)g(contains)
+g(information)f(on)i(the)f(commands)g(this)g(program)267
+1550 y(can)g(understand.)f(*/)195 1654 y(typedef)h(struct)g({)243
+1706 y(char)g(*name;)g(/*)h(User)f(printable)g(name)g(of)h(the)f
+(function.)g(*/)243 1758 y(rl_icpfunc_t)f(*func;)h(/*)h(Function)e(to)i
+(call)f(to)h(do)f(the)h(job.)f(*/)243 1810 y(char)g(*doc;)g(/*)h
+(Documentation)e(for)h(this)h(function.)46 b(*/)195 1862
+y(})24 b(COMMAND;)195 1966 y(COMMAND)f(commands[])f(=)i({)243
+2017 y({)f("cd",)h(com_cd,)f("Change)f(to)i(directory)f(DIR")g(},)243
+2069 y({)g("delete",)g(com_delete,)f("Delete)h(FILE")h(},)243
+2121 y({)f("help",)g(com_help,)g("Display)g(this)g(text")g(},)243
+2173 y({)g("?",)h(com_help,)e("Synonym)h(for)h(`help'")f(},)243
+2225 y({)g("list",)g(com_list,)g("List)g(files)g(in)h(DIR")f(},)243
+2277 y({)g("ls",)h(com_list,)e("Synonym)h(for)g(`list'")g(},)243
+2329 y({)g("pwd",)g(com_pwd,)g("Print)g(the)h(current)f(working)g
+(directory")f(},)243 2381 y({)h("quit",)g(com_quit,)g("Quit)g(using)g
+(Fileman")g(},)243 2433 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)
+h(to)f(NEWNAME")g(},)243 2484 y({)g("stat",)g(com_stat,)g("Print)g(out)
+g(statistics)g(on)h(FILE")f(},)243 2536 y({)g("view",)g(com_view,)g
+("View)g(the)h(contents)e(of)i(FILE")f(},)243 2588 y({)g(\(char)h
+(*\)NULL,)f(\(rl_icpfunc_t)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195
+2640 y(};)p eop
%%Page: 46 48
-46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)h(Library)386
-149 y Ft(})338 253 y(free)23 b(\(line\);)290 305 y(})243
-357 y(exit)g(\(0\);)195 409 y(})195 513 y(/*)h(Execute)e(a)i(command)f
-(line.)g(*/)195 565 y(int)195 616 y(execute_line)f(\(line\))314
-668 y(char)i(*line;)195 720 y({)243 772 y(register)e(int)i(i;)243
+46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)h(Library)195
+201 y Ft(/*)24 b(Forward)e(declarations.)h(*/)195 253
+y(char)g(*stripwhite)g(\(\);)195 305 y(COMMAND)g(*find_command)f(\(\);)
+195 409 y(/*)i(The)f(name)g(of)h(this)f(program,)g(as)h(taken)f(from)g
+(argv[0].)g(*/)195 461 y(char)g(*progname;)195 565 y(/*)h(When)f
+(non-zero,)g(this)g(means)g(the)g(user)h(is)f(done)h(using)f(this)g
+(program.)g(*/)195 616 y(int)g(done;)195 720 y(char)g(*)195
+772 y(dupstr)g(\(s\))314 824 y(int)h(s;)195 876 y({)243
+928 y(char)f(*r;)243 1032 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h
+(1\);)243 1083 y(strcpy)f(\(r,)g(s\);)243 1135 y(return)g(\(r\);)195
+1187 y(})195 1291 y(main)g(\(argc,)g(argv\))314 1343
+y(int)h(argc;)314 1395 y(char)g(**argv;)195 1447 y({)243
+1499 y(char)f(*line,)g(*s;)243 1602 y(progname)f(=)i(argv[0];)243
+1706 y(initialize_readline)d(\(\);)i(/*)h(Bind)f(our)h(completer.)e(*/)
+243 1810 y(/*)h(Loop)h(reading)f(and)g(executing)g(lines)g(until)g(the)
+g(user)h(quits.)f(*/)243 1862 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))290
+1914 y({)338 1966 y(line)g(=)h(readline)f(\("FileMan:)f("\);)338
+2069 y(if)i(\(!line\))386 2121 y(break;)338 2225 y(/*)g(Remove)f
+(leading)g(and)g(trailing)g(whitespace)f(from)i(the)f(line.)410
+2277 y(Then,)g(if)h(there)f(is)g(anything)g(left,)g(add)h(it)f(to)h
+(the)f(history)g(list)410 2329 y(and)g(execute)g(it.)h(*/)338
+2381 y(s)g(=)g(stripwhite)e(\(line\);)338 2484 y(if)i(\(*s\))386
+2536 y({)434 2588 y(add_history)e(\(s\);)434 2640 y(execute_line)g
+(\(s\);)p eop
+%%Page: 47 49
+47 48 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(47)386 149 y Ft(})338 253 y(free)23 b(\(line\);)290
+305 y(})243 357 y(exit)g(\(0\);)195 409 y(})195 513 y(/*)h(Execute)e(a)
+i(command)f(line.)g(*/)195 565 y(int)195 616 y(execute_line)f(\(line\))
+314 668 y(char)i(*line;)195 720 y({)243 772 y(register)e(int)i(i;)243
824 y(COMMAND)f(*command;)243 876 y(char)g(*word;)243
980 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 1032
y(i)g(=)h(0;)243 1083 y(while)f(\(line[i])g(&&)g(whitespace)g
@@ -4040,22 +4101,21 @@ y(i)g(=)h(0;)243 1083 y(while)f(\(line[i])g(&&)g(whitespace)g
(and)h(return)f(a)g(pointer)g(to)h(that)267 2588 y(command.)46
b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f
(name.)g(*/)195 2640 y(COMMAND)g(*)p eop
-%%Page: 47 49
-47 48 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(47)195 149 y Ft(find_command)22 b(\(name\))314
-201 y(char)i(*name;)195 253 y({)243 305 y(register)e(int)i(i;)243
-409 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
-461 y(if)i(\(strcmp)f(\(name,)g(commands[i].name\))f(==)h(0\))338
-513 y(return)g(\(&commands[i]\);)243 616 y(return)g(\(\(COMMAND)f
-(*\)NULL\);)195 668 y(})195 772 y(/*)i(Strip)f(whitespace)f(from)i(the)
-f(start)g(and)h(end)f(of)h(STRING.)46 b(Return)24 b(a)f(pointer)267
-824 y(into)g(STRING.)g(*/)195 876 y(char)g(*)195 928
-y(stripwhite)f(\(string\))314 980 y(char)i(*string;)195
-1032 y({)243 1083 y(register)e(char)i(*s,)f(*t;)243 1187
-y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))290
-1239 y(;)243 1343 y(if)g(\(*s)h(==)f(0\))290 1395 y(return)g(\(s\);)243
-1499 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)243 1550
-y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290
+%%Page: 48 50
+48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)h(Library)195
+149 y Ft(find_command)22 b(\(name\))314 201 y(char)i(*name;)195
+253 y({)243 305 y(register)e(int)i(i;)243 409 y(for)f(\(i)h(=)f(0;)h
+(commands[i].name;)e(i++\))290 461 y(if)i(\(strcmp)f(\(name,)g
+(commands[i].name\))f(==)h(0\))338 513 y(return)g(\(&commands[i]\);)243
+616 y(return)g(\(\(COMMAND)f(*\)NULL\);)195 668 y(})195
+772 y(/*)i(Strip)f(whitespace)f(from)i(the)f(start)g(and)h(end)f(of)h
+(STRING.)46 b(Return)24 b(a)f(pointer)267 824 y(into)g(STRING.)g(*/)195
+876 y(char)g(*)195 928 y(stripwhite)f(\(string\))314
+980 y(char)i(*string;)195 1032 y({)243 1083 y(register)e(char)i(*s,)f
+(*t;)243 1187 y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))
+290 1239 y(;)243 1343 y(if)g(\(*s)h(==)f(0\))290 1395
+y(return)g(\(s\);)243 1499 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)
+243 1550 y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290
1602 y(t--;)243 1654 y(*++t)h(=)h('\\0';)243 1758 y(return)f(s;)195
1810 y(})195 1914 y(/*)h(***********************)o(*******)o(********)o
(*******)o(*******)o(********)o(****)d(*/)195 1966 y(/*)1575
@@ -4072,11 +4132,11 @@ y(complete)f(on)i(command)f(names)g(if)h(this)f(is)h(the)f(first)g
(*/)195 2536 y(initialize_readline)d(\(\))195 2588 y({)243
2640 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h(~/.inputrc)e
(file.)h(*/)p eop
-%%Page: 48 50
-48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)h(Library)243
-149 y Ft(rl_readline_name)21 b(=)j("FileMan";)243 253
-y(/*)f(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack)f(first.)g
-(*/)243 305 y(rl_attempted_completion_)o(functio)o(n)e(=)j
+%%Page: 49 51
+49 50 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(49)243 149 y Ft(rl_readline_name)21 b(=)j("FileMan";)
+243 253 y(/*)f(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack)f
+(first.)g(*/)243 305 y(rl_attempted_completion_)o(functio)o(n)e(=)j
(fileman_completion;)195 357 y(})195 461 y(/*)g(Attempt)e(to)i
(complete)f(on)g(the)h(contents)f(of)g(TEXT.)47 b(START)23
b(and)h(END)267 513 y(bound)f(the)g(region)g(of)h(rl_line_buffer)e
@@ -4110,11 +4170,11 @@ y(includes)23 b(saving)g(the)h(length)f(of)g(TEXT)h(for)f(efficiency,)f
243 2381 y(if)g(\(!state\))290 2433 y({)338 2484 y(list_index)g(=)g(0;)
338 2536 y(len)h(=)f(strlen)g(\(text\);)290 2588 y(})p
eop
-%%Page: 49 51
-49 50 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(49)243 149 y Ft(/*)23 b(Return)g(the)h(next)f(name)g
-(which)h(partially)e(matches)h(from)g(the)314 201 y(command)g(list.)g
-(*/)243 253 y(while)g(\(name)g(=)h(commands[list_index].name)o(\))290
+%%Page: 50 52
+50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)h(Library)243
+149 y Ft(/*)23 b(Return)g(the)h(next)f(name)g(which)h(partially)e
+(matches)h(from)g(the)314 201 y(command)g(list.)g(*/)243
+253 y(while)g(\(name)g(=)h(commands[list_index].name)o(\))290
305 y({)338 357 y(list_index++;)338 461 y(if)g(\(strncmp)f(\(name,)g
(text,)g(len\))g(==)h(0\))386 513 y(return)f(\(dupstr\(name\)\);)290
565 y(})243 668 y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f
@@ -4138,19 +4198,20 @@ b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267
(arg\);)243 2329 y(return)g(\(system)g(\(syscom\)\);)195
2381 y(})195 2484 y(com_rename)f(\(arg\))314 2536 y(char)i(*arg;)195
2588 y({)243 2640 y(too_dangerous)e(\("rename"\);)p eop
-%%Page: 50 52
-50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)h(Library)243
-149 y Ft(return)23 b(\(1\);)195 201 y(})195 305 y(com_stat)g(\(arg\))
-314 357 y(char)h(*arg;)195 409 y({)243 461 y(struct)f(stat)g(finfo;)243
-565 y(if)g(\(!valid_argument)f(\("stat",)h(arg\)\))290
-616 y(return)g(\(1\);)243 720 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g
-(-1\))290 772 y({)338 824 y(perror)g(\(arg\);)338 876
-y(return)g(\(1\);)290 928 y(})243 1032 y(printf)g(\("Statistics)f(for)h
-(`\045s':\\n",)g(arg\);)243 1135 y(printf)g(\("\045s)g(has)h(\045d)f
-(link\045s,)g(and)g(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)
-434 1187 y(finfo.st_nlink,)434 1239 y(\(finfo.st_nlink)e(==)j(1\))g(?)f
-("")h(:)g("s",)434 1291 y(finfo.st_size,)434 1343 y(\(finfo.st_size)e
-(==)h(1\))h(?)f("")h(:)g("s"\);)243 1395 y(printf)f(\("Inode)g(Last)g
+%%Page: 51 53
+51 52 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(51)243 149 y Ft(return)23 b(\(1\);)195
+201 y(})195 305 y(com_stat)g(\(arg\))314 357 y(char)h(*arg;)195
+409 y({)243 461 y(struct)f(stat)g(finfo;)243 565 y(if)g
+(\(!valid_argument)f(\("stat",)h(arg\)\))290 616 y(return)g(\(1\);)243
+720 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g(-1\))290
+772 y({)338 824 y(perror)g(\(arg\);)338 876 y(return)g(\(1\);)290
+928 y(})243 1032 y(printf)g(\("Statistics)f(for)h(`\045s':\\n",)g
+(arg\);)243 1135 y(printf)g(\("\045s)g(has)h(\045d)f(link\045s,)g(and)g
+(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)434
+1187 y(finfo.st_nlink,)434 1239 y(\(finfo.st_nlink)e(==)j(1\))g(?)f("")
+h(:)g("s",)434 1291 y(finfo.st_size,)434 1343 y(\(finfo.st_size)e(==)h
+(1\))h(?)f("")h(:)g("s"\);)243 1395 y(printf)f(\("Inode)g(Last)g
(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243
1447 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f
(\(&finfo.st_atime\)\);)243 1499 y(printf)g(\(")95 b(Last)23
@@ -4165,20 +4226,20 @@ b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243
(0;)243 2484 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290
2536 y({)338 2588 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g
(commands[i].name\))f(==)i(0\)\))386 2640 y({)p eop
-%%Page: 51 53
-51 52 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
-(Readline)843 b(51)434 149 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e
-(commands[i].name,)h(commands[i].doc\);)434 201 y(printed++;)386
-253 y(})290 305 y(})243 409 y(if)h(\(!printed\))290 461
-y({)338 513 y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48
-b(Possibilties)22 b(are:\\n",)h(arg\);)338 616 y(for)h(\(i)f(=)h(0;)g
-(commands[i].name;)d(i++\))386 668 y({)434 720 y(/*)i(Print)g(in)h(six)
-f(columns.)g(*/)434 772 y(if)g(\(printed)g(==)h(6\))481
-824 y({)529 876 y(printed)f(=)h(0;)529 928 y(printf)f(\("\\n"\);)481
-980 y(})434 1083 y(printf)g(\("\045s\\t",)f(commands[i].name\);)434
-1135 y(printed++;)386 1187 y(})338 1291 y(if)i(\(printed\))386
-1343 y(printf)f(\("\\n"\);)290 1395 y(})243 1447 y(return)g(\(0\);)195
-1499 y(})195 1602 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195
+%%Page: 52 54
+52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)h(Library)434
+149 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e(commands[i].name,)h
+(commands[i].doc\);)434 201 y(printed++;)386 253 y(})290
+305 y(})243 409 y(if)h(\(!printed\))290 461 y({)338 513
+y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48 b(Possibilties)22
+b(are:\\n",)h(arg\);)338 616 y(for)h(\(i)f(=)h(0;)g(commands[i].name;)d
+(i++\))386 668 y({)434 720 y(/*)i(Print)g(in)h(six)f(columns.)g(*/)434
+772 y(if)g(\(printed)g(==)h(6\))481 824 y({)529 876 y(printed)f(=)h(0;)
+529 928 y(printf)f(\("\\n"\);)481 980 y(})434 1083 y(printf)g
+(\("\045s\\t",)f(commands[i].name\);)434 1135 y(printed++;)386
+1187 y(})338 1291 y(if)i(\(printed\))386 1343 y(printf)f(\("\\n"\);)290
+1395 y(})243 1447 y(return)g(\(0\);)195 1499 y(})195
+1602 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195
1654 y(com_cd)f(\(arg\))314 1706 y(char)h(*arg;)195 1758
y({)243 1810 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290
1862 y({)338 1914 y(perror)g(\(arg\);)338 1966 y(return)g(1;)290
@@ -4188,32 +4249,35 @@ y({)243 1810 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290
2433 y(char)h(*ignore;)195 2484 y({)243 2536 y(char)f(dir[1024],)g(*s;)
243 2640 y(s)g(=)h(getcwd)f(\(dir,)g(sizeof\(dir\))g(-)g(1\);)p
eop
-%%Page: 52 54
-52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)h(Library)243
-149 y Ft(if)23 b(\(s)h(==)f(0\))290 201 y({)338 253 y(printf)g
-(\("Error)g(getting)g(pwd:)g(\045s\\n",)g(dir\);)338
-305 y(return)g(1;)290 357 y(})243 461 y(printf)g(\("Current)f
-(directory)h(is)h(\045s\\n",)f(dir\);)243 513 y(return)g(0;)195
-565 y(})195 668 y(/*)h(The)f(user)g(wishes)g(to)h(quit)f(using)g(this)h
-(program.)46 b(Just)24 b(set)f(DONE)267 720 y(non-zero.)f(*/)195
-772 y(com_quit)h(\(arg\))314 824 y(char)h(*arg;)195 876
-y({)243 928 y(done)f(=)h(1;)243 980 y(return)f(\(0\);)195
-1032 y(})195 1135 y(/*)h(Function)e(which)i(tells)f(you)g(that)g(you)h
-(can't)f(do)h(this.)f(*/)195 1187 y(too_dangerous)f(\(caller\))314
-1239 y(char)i(*caller;)195 1291 y({)243 1343 y(fprintf)f(\(stderr,)457
-1395 y("\045s:)h(Too)f(dangerous)g(for)g(me)h(to)g(distribute.)46
-b(Write)23 b(it)h(yourself.\\n",)p 1987 1405 21 42 v
-457 1447 a(caller\);)195 1499 y(})195 1602 y(/*)g(Return)f(non-zero)f
-(if)i(ARG)f(is)h(a)g(valid)f(argument)g(for)g(CALLER,)g(else)g(print)
-267 1654 y(an)g(error)g(message)g(and)h(return)f(zero.)g(*/)195
-1706 y(int)195 1758 y(valid_argument)f(\(caller,)h(arg\))314
-1810 y(char)h(*caller,)e(*arg;)195 1862 y({)243 1914
-y(if)h(\(!arg)g(||)h(!*arg\))290 1966 y({)338 2017 y(fprintf)f
-(\(stderr,)g("\045s:)g(Argument)g(required.\\n",)f(caller\);)338
-2069 y(return)h(\(0\);)290 2121 y(})243 2225 y(return)g(\(1\);)195
-2277 y(})p eop
%%Page: 53 55
-53 54 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(53)75
+53 54 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g
+(Readline)843 b(53)243 149 y Ft(if)23 b(\(s)h(==)f(0\))290
+201 y({)338 253 y(printf)g(\("Error)g(getting)g(pwd:)g(\045s\\n",)g
+(dir\);)338 305 y(return)g(1;)290 357 y(})243 461 y(printf)g
+(\("Current)f(directory)h(is)h(\045s\\n",)f(dir\);)243
+513 y(return)g(0;)195 565 y(})195 668 y(/*)h(The)f(user)g(wishes)g(to)h
+(quit)f(using)g(this)h(program.)46 b(Just)24 b(set)f(DONE)267
+720 y(non-zero.)f(*/)195 772 y(com_quit)h(\(arg\))314
+824 y(char)h(*arg;)195 876 y({)243 928 y(done)f(=)h(1;)243
+980 y(return)f(\(0\);)195 1032 y(})195 1135 y(/*)h(Function)e(which)i
+(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)195
+1187 y(too_dangerous)f(\(caller\))314 1239 y(char)i(*caller;)195
+1291 y({)243 1343 y(fprintf)f(\(stderr,)457 1395 y("\045s:)h(Too)f
+(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23
+b(it)h(yourself.\\n",)p 1987 1405 21 42 v 457 1447 a(caller\);)195
+1499 y(})195 1602 y(/*)g(Return)f(non-zero)f(if)i(ARG)f(is)h(a)g(valid)
+f(argument)g(for)g(CALLER,)g(else)g(print)267 1654 y(an)g(error)g
+(message)g(and)h(return)f(zero.)g(*/)195 1706 y(int)195
+1758 y(valid_argument)f(\(caller,)h(arg\))314 1810 y(char)h(*caller,)e
+(*arg;)195 1862 y({)243 1914 y(if)h(\(!arg)g(||)h(!*arg\))290
+1966 y({)338 2017 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g
+(required.\\n",)f(caller\);)338 2069 y(return)h(\(0\);)290
+2121 y(})243 2225 y(return)g(\(1\);)195 2277 y(})p eop
+%%Page: 54 56
+54 55 bop 75 -58 a Fu(54)1299 b(GNU)15 b(Readline)h(Library)p
+eop
+%%Page: 55 57
+55 56 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(55)75
149 y Fq(Concept)27 b(Index)75 321 y Fs(C)75 382 y Ff(command)14
b(editing)e Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22
@@ -4243,12 +4307,12 @@ b Ff(4)1012 976 y Fs(Y)1012 1044 y Ff(y)o(anking)e(text)t
Fe(.)7 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17
b Ff(2)p eop
-%%Page: 54 56
-54 55 bop 75 -58 a Fu(54)1299 b(GNU)15 b(Readline)h(Library)p
+%%Page: 56 58
+56 57 bop 75 -58 a Fu(56)1299 b(GNU)15 b(Readline)h(Library)p
eop
-%%Page: 55 57
-55 56 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
-b(55)75 149 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
+%%Page: 57 59
+57 58 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(57)75 149 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26
b(Index)p 79 307 21 3 v 75 369 a Fd(_rl_digit_)o(p)7
b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
@@ -4256,7 +4320,7 @@ b Ff(34)75 415 y Fd(_rl_digit_)o(va)o(lue)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)20 b Ff(34)75 462 y Fd(_rl_lowerc)o(as)o(e_p)6
b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(33)75
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(34)75
508 y Fd(_rl_to_low)o(er)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
g(.)h(.)f(.)22 b Ff(34)75 554 y Fd(_rl_to_upp)o(er)6
@@ -4264,7 +4328,7 @@ b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
b Ff(34)75 600 y Fd(_rl_upperc)o(as)o(e_p)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)20 b Ff(33)75 733 y Fs(A)75 794 y
+(.)g(.)h(.)f(.)g(.)20 b Ff(34)75 733 y Fs(A)75 794 y
Fd(abort)11 b(\(C-g\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)17 b Ff(17)75 841 y Fd(accept-lin)o(e)10
@@ -4289,7 +4353,7 @@ b(\(C-a\))c Fe(.)t(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(12)75 1359 y(b)q(ell-st)o(yle)7
b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)20 b Ff(4)75 1490 y Fs(C)75 1552 y Fd(call-last-)o(kb)o(d-m)
+(.)g(.)g(.)20 b Ff(5)75 1490 y Fs(C)75 1552 y Fd(call-last-)o(kb)o(d-m)
o(ac)o(ro)9 b(\(C-x)j(e\))5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(17)75 1598 y Fd(capitalize)o(-w)o(ord)9
b(\(M-c\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
@@ -4345,74 +4409,79 @@ Fe(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(18)1012
307 y Fd(dump-variab)o(le)o(s)10 b(\(\))e Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)
g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)23 b Ff(18)1012 465 y Fs(E)1012 537 y Ff(editing-mo)q(de)12
+(.)g(.)23 b Ff(18)1012 457 y Fs(E)1012 525 y Ff(editing-mo)q(de)12
b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22
-b Ff(5)1012 587 y(enable-k)o(eypad)9 b Fe(.)g(.)d(.)h(.)f(.)g(.)g(.)g
+b Ff(5)1012 575 y(enable-k)o(eypad)9 b Fe(.)g(.)d(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(5)1012 638 y Fd(end-kbd-mac)o(ro)9
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(5)1012 624 y Fd(end-kbd-mac)o(ro)9
b(\(C-x)i(\)\))e Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 b Ff(16)1012 689
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 b Ff(16)1012 673
y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))d Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20
-b Ff(13)1012 740 y Fd(end-of-line)9 b(\(C-e\))e Fe(.)f(.)h(.)f(.)g(.)g
+b Ff(13)1012 723 y Fd(end-of-line)9 b(\(C-e\))e Fe(.)f(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)23 b Ff(12)1012 791 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)
+g(.)g(.)g(.)23 b Ff(12)1012 772 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)
o(rk)9 b(\(C-x)j(C-x\))c Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24
-b Ff(17)1012 842 y(expand-tilde)6 b Fe(.)j(.)d(.)g(.)h(.)f(.)g(.)g(.)g
+b Ff(17)1012 821 y(expand-tilde)6 b Fe(.)j(.)d(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 b Ff(5)1012 999 y
-Fs(F)1012 1070 y Fd(forward-bac)o(kw)o(ard)o(-d)o(ele)o(te)o(-ch)o(ar)9
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 b Ff(5)1012 970 y
+Fs(F)1012 1038 y Fd(forward-bac)o(kw)o(ard)o(-d)o(ele)o(te)o(-ch)o(ar)9
b(\(\))f Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
-b Ff(14)1012 1121 y Fd(forward-cha)o(r)10 b(\(C-f\))f
+b Ff(14)1012 1088 y Fd(forward-cha)o(r)10 b(\(C-f\))f
Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1172 y
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1137 y
Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 b(\(C-s\))e
Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
-b Ff(13)1012 1223 y Fd(forward-wor)o(d)10 b(\(M-f\))f
+b Ff(13)1012 1186 y Fd(forward-wor)o(d)10 b(\(M-f\))f
Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1373 y
-Fs(H)1012 1445 y Fd(history-sea)o(rc)o(h-b)o(ac)o(kwa)o(rd)9
-b(\(\))i Fe(.)c(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
-(.)25 b Ff(13)1012 1496 y Fd(history-sea)o(rc)o(h-f)o(or)o(war)o(d)10
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1328 y
+Fs(H)1012 1397 y Ff(history-preserv)o(e-p)q(oi)q(n)o(t)8
+b Fe(.)h(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 b Ff(5)1012 1446 y
+Fd(history-sea)o(rc)o(h-b)o(ac)o(kwa)o(rd)9 b(\(\))i
+Fe(.)c(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)25
+b Ff(13)1012 1496 y Fd(history-sea)o(rc)o(h-f)o(or)o(war)o(d)10
b(\(\))s Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)17 b Ff(13)1012 1546 y(horizon)o(tal-scrol)q(l-mo)r(de)6
+(.)g(.)g(.)17 b Ff(13)1012 1545 y(horizon)o(tal-scrol)q(l-mo)r(de)6
b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(5)1012 1697 y
-Fs(I)1012 1768 y Ff(input-meta)8 b Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(6)1012 1687 y
+Fs(I)1012 1755 y Ff(input-meta)8 b Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012 1819
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012 1805
y Fd(insert-comm)o(en)o(t)10 b(\(M-#\))d Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20
-b Ff(17)1012 1870 y Fd(insert-comp)o(le)o(tio)o(ns)9
+b Ff(17)1012 1854 y Fd(insert-comp)o(le)o(tio)o(ns)9
b(\(M-*\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)18 b Ff(16)1012 1921 y(isearc)o(h-terminators)t
+(.)g(.)g(.)g(.)g(.)18 b Ff(16)1012 1903 y(isearc)o(h-terminators)t
Fe(.)8 b(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)16 b Ff(6)1012
-2071 y Fs(K)1012 2143 y Ff(k)o(eymap)9 b Fe(.)e(.)f(.)h(.)f(.)g(.)g(.)g
+2046 y Fs(K)1012 2114 y Ff(k)o(eymap)9 b Fe(.)e(.)f(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22
-b Ff(6)1012 2194 y Fd(kill-line)10 b(\(C-k\))f Fe(.)d(.)g(.)g(.)g(.)g
+b Ff(6)1012 2163 y Fd(kill-line)10 b(\(C-k\))f Fe(.)d(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)24 b Ff(14)1012 2245 y Fd(kill-region)9
+g(.)g(.)h(.)f(.)g(.)24 b Ff(14)1012 2213 y Fd(kill-region)9
b(\(\))i Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
-b Ff(15)1012 2295 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))g
+b Ff(15)1012 2262 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))g
Fe(.)c(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(15)1012 2346 y
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(15)1012 2311 y
Fd(kill-word)10 b(\(M-d\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-24 b Ff(15)1012 2497 y Fs(M)1012 2568 y Ff(mark-mo)q(di\014ed-li)q(nes)
+24 b Ff(15)1012 2454 y Fs(M)1012 2522 y Ff(mark-mo)q(di\014ed-li)q(nes)
8 b Fe(.)h(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012
-2619 y Fd(menu-comple)o(te)9 b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)23 b Ff(16)1012 2670 y(meta-\015ag)t Fe(.)8 b(.)e(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18
-b Ff(6)p eop
-%%Page: 56 58
-56 57 bop 75 -58 a Fu(56)1299 b(GNU)15 b(Readline)h(Library)75
+2571 y(matc)o(h-hidden-\014l)q(es)14 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)24 b Ff(6)1012 2621 y Fd(menu-comple)o(te)9
+b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(16)1012
+2670 y(meta-\015ag)t Fe(.)8 b(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(6)p eop
+%%Page: 58 60
+58 59 bop 75 -58 a Fu(58)1299 b(GNU)15 b(Readline)h(Library)75
149 y Fs(N)75 212 y Fd(next-histo)o(ry)9 b(\(C-n\))g
Fe(.)t(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(12)75 258 y Fd(non-increm)o(en)o
@@ -4463,16 +4532,16 @@ h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(33)75 1678 y Fd(rl_already)o(_p)o(rom)o
(pt)o(ed)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(23)75
1724 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_f)o(unc)o(ti)o(on)t
-Fe(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(40)75
+Fe(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(41)75
1771 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_o)o(ver)6
b Fe(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20
-b Ff(42)75 1817 y Fd(rl_basic_q)o(uo)o(te_)o(ch)o(ara)o(cte)o(rs)8
+b Ff(43)75 1817 y Fd(rl_basic_q)o(uo)o(te_)o(ch)o(ara)o(cte)o(rs)8
b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-22 b Ff(41)75 1863 y Fd(rl_basic_w)o(or)o(d_b)o(re)o(ak_)o(cha)o(ra)o
+22 b Ff(42)75 1863 y Fd(rl_basic_w)o(or)o(d_b)o(re)o(ak_)o(cha)o(ra)o
(cte)o(rs)5 b Fe(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18
-b Ff(41)75 1910 y Fd(rl_begin_u)o(nd)o(o_g)o(ro)o(up)t
+b Ff(42)75 1910 y Fd(rl_begin_u)o(nd)o(o_g)o(ro)o(up)t
Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(29)75 1956 y Fd(rl_bind_ke)o(y)7
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(30)75 1956 y Fd(rl_bind_ke)o(y)7
b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
b Ff(27)75 2002 y Fd(rl_bind_ke)o(y_)o(in_)o(ma)o(p)5
@@ -4503,38 +4572,38 @@ b Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)24 b Ff(32)75 2512 y Fd(rl_clear_s)o(ig)o(nal)o(s)6
b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(38)1012
-149 y Fd(rl_complete)6 b Fe(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)24 b Ff(39)1012 196 y Fd(rl_complete)o(_i)o(nte)o(rn)o(al)s
+149 y Fd(rl_complete)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+20 b Ff(39,)13 b(40)1012 196 y Fd(rl_complete)o(_i)o(nte)o(rn)o(al)s
Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(39)1012 242 y Fd(rl_complete)o(r_)o
+g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(40)1012 242 y Fd(rl_complete)o(r_)o
(quo)o(te)o(_ch)o(ar)o(act)o(ers)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)20 b Ff(41)1012 288 y Fd(rl_complete)o(r_)o(wor)o
+(.)g(.)g(.)g(.)g(.)20 b Ff(42)1012 288 y Fd(rl_complete)o(r_)o(wor)o
(d_)o(bre)o(ak)o(_ch)o(ara)o(ct)o(ers)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)
-25 b Ff(41)1012 335 y Fd(rl_completi)o(on)o(_ap)o(pe)o(nd_)o(ch)o(ara)o
+25 b Ff(42)1012 335 y Fd(rl_completi)o(on)o(_ap)o(pe)o(nd_)o(ch)o(ara)o
(cte)o(r)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
b Ff(42)1012 381 y Fd(rl_completi)o(on)o(_di)o(sp)o(lay)o(_m)o(atc)o
(hes)o(_h)o(ook)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)25 b
Ff(43)1012 427 y Fd(rl_completi)o(on)o(_en)o(tr)o(y_f)o(un)o(cti)o(on)s
-Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(39,)c(40)1012
+Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(39,)c(41)1012
474 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8 b Fe(.)f(.)f(.)g(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
b Ff(40)1012 520 y Fd(rl_completi)o(on)o(_qu)o(er)o(y_i)o(te)o(ms)9
b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
23 b Ff(41)1012 566 y Fd(rl_completi)o(on)o(_ty)o(pe)t
Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(42)1012 613 y
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(43)1012 613 y
Fd(rl_copy_key)o(ma)o(p)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)21 b Ff(26)1012 659 y Fd(rl_copy_tex)o(t)6 b Fe(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(31)1012 705 y
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(32)1012 705 y
Fd(rl_crlf)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(30)1012 752 y Fd(rl_delete_t)o(ex)o(t)8
+f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(31)1012 752 y Fd(rl_delete_t)o(ex)o(t)8
b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
-Ff(31)1012 798 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7
+Ff(32)1012 798 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7
b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)24 b Ff(24)1012 844 y Fd(rl_deprep_t)o(er)o(min)o(al)t
Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
@@ -4563,12 +4632,12 @@ g(.)g(.)21 b Ff(26)1012 1261 y Fd(rl_end)5 b Fe(.)t(.)h(.)g(.)h(.)f(.)g
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18
b Ff(22)1012 1308 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b
Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(29)1012 1354
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(30)1012 1354
y Fd(rl_erase_em)o(pt)o(y_l)o(in)o(e)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18
b Ff(22)1012 1400 y Fd(rl_event_ho)o(ok)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(23)1012 1447 y Fd(rl_execute_)o(ne)o
+g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(24)1012 1447 y Fd(rl_execute_)o(ne)o
(xt)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
b Ff(32)1012 1493 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t
@@ -4580,7 +4649,7 @@ o(mac)o(ro)t Fe(.)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 Ff(31)1012 1632 y Fd(rl_explicit)o(_a)o(rg)7
b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(25)1012
+f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(26)1012
1678 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fe(.)f(.)f(.)g(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
b Ff(33)1012 1725 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o
@@ -4593,13 +4662,13 @@ b Ff(41)1012 1864 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o
(rs)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20
b Ff(42)1012 1910 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o
(d)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21
-b Ff(42)1012 1956 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o
+b Ff(43)1012 1956 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o
(on)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20
b Ff(41)1012 2003 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7
b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)23 b Ff(30)1012 2049 y Fd(rl_free_lin)o(e_)o(sta)o(te)t
Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(37)1012 2095
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(38)1012 2095
y Fd(rl_free_und)o(o_)o(lis)o(t)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
19 b Ff(30)1012 2142 y Fd(rl_function)o(_d)o(ump)o(er)t
@@ -4607,7 +4676,7 @@ Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(29)1012 2188
y Fd(rl_function)o(_o)o(f_k)o(ey)o(seq)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
-b Ff(28)1012 2234 y Fd(rl_funmap_n)o(am)o(es)7 b Fe(.)s(.)f(.)g(.)h(.)f
+b Ff(29)1012 2234 y Fd(rl_funmap_n)o(am)o(es)7 b Fe(.)s(.)f(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)21 b Ff(29)1012 2281 y Fd(rl_generic_)o(bi)o(nd)7
b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
@@ -4621,231 +4690,237 @@ h(.)f(.)g(.)22 b Ff(27)1012 2373 y Fd(rl_get_keym)o(ap)o(_by)o(_n)o
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(27)1012
2466 y Fd(rl_get_scre)o(en)o(_si)o(ze)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g
-(.)19 b Ff(38)1012 2512 y Fd(rl_getc)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b
-Ff(32)p eop
-%%Page: 57 59
-57 58 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
-b(57)75 149 y Fd(rl_getc_fu)o(nc)o(tio)o(n)6 b Fe(.)t(.)g(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)g(.)h(.)19 b Ff(24)75 195 y Fd(rl_gnu_rea)o(dl)o(ine)o(_p)5
+(.)19 b Ff(38)1012 2512 y Fd(rl_get_term)o(ca)o(p)8 b
+Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b Ff(35)p
+eop
+%%Page: 59 61
+59 60 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187
+b(59)75 149 y Fd(rl_getc)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(32)75 195
+y Fd(rl_getc_fu)o(nc)o(tio)o(n)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)19 b Ff(24)75 241 y Fd(rl_gnu_rea)o(dl)o(ine)o(_p)5
b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(23)75 241
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(23)75 286
y Fd(rl_ignore_)o(co)o(mpl)o(et)o(ion)o(_du)o(pl)o(ica)o(te)o(s)5
b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(42)75
-286 y Fd(rl_ignore_)o(so)o(me_)o(co)o(mpl)o(eti)o(on)o(s_f)o(un)o(cti)o
-(on)7 b Fe(.)g(.)f(.)g(.)g(.)g(.)24 b Ff(43)75 332 y
+332 y Fd(rl_ignore_)o(so)o(me_)o(co)o(mpl)o(eti)o(on)o(s_f)o(un)o(cti)o
+(on)7 b Fe(.)g(.)f(.)g(.)g(.)g(.)24 b Ff(43)75 378 y
Fd(rl_inhibit)o(_c)o(omp)o(le)o(tio)o(n)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
-b Ff(43)75 378 y Fd(rl_initial)o(iz)o(e)9 b Fe(.)s(.)d(.)g(.)g(.)h(.)f
+b Ff(43)75 424 y Fd(rl_initial)o(iz)o(e)9 b Fe(.)s(.)d(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(33)75 424 y Fd(rl_insert_)o(co)o(mpl)o
+h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(33)75 469 y Fd(rl_insert_)o(co)o(mpl)o
(et)o(ion)o(s)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(40)75 469 y Fd(rl_insert_)o(te)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(40)75 515 y Fd(rl_insert_)o(te)
o(xt)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(31)75 515 y Fd(rl_instrea)o(m)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g
+b Ff(31)75 561 y Fd(rl_instrea)o(m)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(23)75 561 y Fd(rl_invokin)o(g_)o
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(23)75 606 y Fd(rl_invokin)o(g_)o
(key)o(se)o(qs)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(28)75
-606 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(29)75
+652 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8
b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21
-b Ff(29)75 652 y Fd(rl_kill_te)o(xt)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+b Ff(29)75 698 y Fd(rl_kill_te)o(xt)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(32)75 698 y Fd(rl_last_fu)o(nc)6
+g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(32)75 743 y Fd(rl_last_fu)o(nc)6
b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Ff(23)75 743 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5
+b Ff(23)75 789 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5
b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(23)75 789 y Fd(rl_line_bu)o(ff)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(23)75 835 y Fd(rl_line_bu)o(ff)
o(er)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(22)75 835 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s
+b Ff(22)75 880 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s
Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(29)75 880 y Fd(rl_macro_b)o(in)o(d)9
+f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(29)75 926 y Fd(rl_macro_b)o(in)o(d)9
b Fe(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
-b Ff(34)75 926 y Fd(rl_macro_d)o(um)o(per)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)
+b Ff(34)75 972 y Fd(rl_macro_d)o(um)o(per)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)20 b Ff(34)75 972 y Fd(rl_make_ba)o(re)o(_ke)o(ym)o
+(.)g(.)h(.)f(.)g(.)20 b Ff(34)75 1017 y Fd(rl_make_ba)o(re)o(_ke)o(ym)o
(ap)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(26)75 1017
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(26)75 1063
y Fd(rl_make_ke)o(ym)o(ap)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)21 b Ff(26)75 1063 y Fd(rl_mark)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g
+(.)g(.)21 b Ff(27)75 1109 y Fd(rl_mark)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17
-b Ff(22)75 1109 y Fd(rl_message)7 b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+b Ff(22)75 1154 y Fd(rl_message)7 b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(31)75 1154 y Fd(rl_modifyi)o(ng)6
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(31)75 1200 y Fd(rl_modifyi)o(ng)6
b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Ff(30)75 1200 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fe(.)s(.)i(.)f(.)g
+b Ff(30)75 1246 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fe(.)s(.)i(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)19 b Ff(28)75 1246 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o
+g(.)g(.)g(.)g(.)19 b Ff(28)75 1291 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o
(ead)s Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(22)75 1291 y Fd(rl_numeric)o(_a)
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(22)75 1337 y Fd(rl_numeric)o(_a)
o(rg)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21
-b Ff(26)75 1337 y Fd(rl_on_new_)o(li)o(ne)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)
+b Ff(26)75 1383 y Fd(rl_on_new_)o(li)o(ne)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(30)75 1383 y Fd(rl_on_new_)o(li)o(ne_)o
+(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(30)75 1428 y Fd(rl_on_new_)o(li)o(ne_)o
(wi)o(th_)o(pro)o(mp)o(t)8 b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(30)75 1428 y Fd(rl_outstre)o(am)6
+(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(30)75 1474 y Fd(rl_outstre)o(am)6
b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Ff(23)75 1474 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fe(.)s(.)i(.)f(.)g
+b Ff(23)75 1520 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fe(.)s(.)i(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)19 b Ff(28)75 1520 y Fd(rl_pending)o(_i)o(npu)o(t)6
+g(.)g(.)g(.)g(.)19 b Ff(28)75 1565 y Fd(rl_pending)o(_i)o(npu)o(t)6
b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(22)75
-1565 y Fd(rl_point)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+1611 y Fd(rl_point)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(22)75 1611 y Fd(rl_possibl)o(e_)o
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(22)75 1657 y Fd(rl_possibl)o(e_)o
(com)o(pl)o(eti)o(ons)7 b Fe(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(40)75 1657 y
+h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(40)75 1702 y
Fd(rl_pre_inp)o(ut)o(_ho)o(ok)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Ff(23)75 1702 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9
+b Ff(24)75 1748 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9
b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)25 b Ff(24)75 1748 y Fd(rl_prep_te)o(rm)o(ina)o(l)6
+f(.)g(.)g(.)g(.)25 b Ff(24)75 1794 y Fd(rl_prep_te)o(rm)o(ina)o(l)6
b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(32)75
-1794 y Fd(rl_prompt)8 b Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(33)75
+1840 y Fd(rl_prompt)8 b Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)24 b Ff(22)75 1840 y Fd(rl_push_ma)o(cr)o(o_i)o(np)
+g(.)g(.)g(.)g(.)h(.)24 b Ff(23)75 1885 y Fd(rl_push_ma)o(cr)o(o_i)o(np)
o(ut)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(32)75 1885
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(32)75 1931
y Fd(rl_read_in)o(it)o(_fi)o(le)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-19 b Ff(28)75 1931 y Fd(rl_read_ke)o(y)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g
+19 b Ff(28)75 1977 y Fd(rl_read_ke)o(y)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(32)75 1977 y
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(32)75 2022 y
Fd(rl_readlin)o(e_)o(nam)o(e)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
-19 b Ff(23)75 2022 y Fd(rl_readlin)o(e_)o(sta)o(te)5
+19 b Ff(23)75 2068 y Fd(rl_readlin)o(e_)o(sta)o(te)5
b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(24)75 2068
-y Fd(rl_redispl)o(ay)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)22 b Ff(30)75 2114 y Fd(rl_redispl)o(ay)o(_fu)o(nc)o(tio)o(n)9
-b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)25 b Ff(24)75 2159 y Fd(rl_reset_a)o(ft)o(er_)o(si)o
-(gna)o(l)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(38)75 2205 y Fd(rl_reset_l)o(in)o
-(e_s)o(ta)o(te)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(30)75
-2251 y Fd(rl_reset_t)o(er)o(min)o(al)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)19 b Ff(33)75 2296 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5
-b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(38)75 2342 y
-Fd(rl_restore)o(_p)o(rom)o(pt)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Ff(31)75 2388 y Fd(rl_save_pr)o(om)o(pt)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(24)75 2114
+y Fd(rl_readlin)o(e_)o(ver)o(si)o(on)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17
+b Ff(23)75 2159 y Fd(rl_redispl)o(ay)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(30)75 2205 y Fd(rl_redispl)o(ay)o(_fu)o
+(nc)o(tio)o(n)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(24)75 2251 y
+Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
+b Ff(38)75 2296 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o(te)t
+Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(31)75 2342 y Fd(rl_reset_t)o(er)o
+(min)o(al)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b
+Ff(33)75 2388 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5 b
+Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(38)75 2433 y Fd(rl_restore)o(_p)
+o(rom)o(pt)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
+b Ff(31)75 2479 y Fd(rl_save_pr)o(om)o(pt)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(31)75 2433 y Fd(rl_set_key)7
+(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(31)75 2525 y Fd(rl_set_key)7
b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
-b Ff(28)75 2479 y Fd(rl_set_key)o(bo)o(ard)o(_i)o(npu)o(t_t)o(im)o(eou)
-o(t)6 b Fe(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
-b Ff(32)1012 149 y Fd(rl_set_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g
+b Ff(28)1012 149 y Fd(rl_set_keyb)o(oa)o(rd_)o(in)o(put)o(_t)o(ime)o
+(out)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20
+b Ff(32)1012 195 y Fd(rl_set_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g
(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(27)1012 195 y Fd(rl_set_pare)o(n_)o
+g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(27)1012 241 y Fd(rl_set_pare)o(n_)o
(bli)o(nk)o(_ti)o(me)o(out)7 b Fe(.)t(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(34)1012 241 y Fd(rl_set_prom)o(pt)8
+(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(34)1012 287 y Fd(rl_set_prom)o(pt)8
b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Ff(31)1012 287 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fe(.)t(.)6
+b Ff(31)1012 333 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fe(.)t(.)6
b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(38)1012 334 y Fd(rl_set_sign)o(al)o(s)8
+(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(38)1012 379 y Fd(rl_set_sign)o(al)o(s)8
b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
-Ff(38)1012 380 y Fd(rl_show_cha)o(r)6 b Fe(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+Ff(38)1012 426 y Fd(rl_show_cha)o(r)6 b Fe(.)g(.)h(.)f(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(31)1012 426 y Fd(rl_special_)o(pr)o
+g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(31)1012 472 y Fd(rl_special_)o(pr)o
(efi)o(xe)o(s)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(42)1012
-472 y Fd(rl_startup_)o(ho)o(ok)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
+518 y Fd(rl_startup_)o(ho)o(ok)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)21 b Ff(23)1012 518 y Fd(rl_stuff_ch)o(ar)8 b
+g(.)g(.)21 b Ff(23)1012 564 y Fd(rl_stuff_ch)o(ar)8 b
Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Ff(32)1012 564 y Fd(rl_terminal)o(_n)o(ame)6 b Fe(.)s(.)g(.)g(.)g(.)h
+b Ff(32)1012 610 y Fd(rl_terminal)o(_n)o(ame)6 b Fe(.)s(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)20 b Ff(23)1012 610 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o
+h(.)f(.)g(.)g(.)20 b Ff(23)1012 656 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o
(_bi)o(nd)o(ing)o(s)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)21 b Ff(33)1012 656 y Fd(rl_unbind_c)o(om)o(man)o(d_)o
+(.)h(.)f(.)g(.)21 b Ff(33)1012 702 y Fd(rl_unbind_c)o(om)o(man)o(d_)o
(in_)o(ma)o(p)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)23 b Ff(28)1012 702 y Fd(rl_unbind_f)o(un)o(cti)o
+g(.)g(.)g(.)h(.)f(.)23 b Ff(28)1012 748 y Fd(rl_unbind_f)o(un)o(cti)o
(on)o(_in)o(_m)o(ap)9 b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(28)1012 748 y Fd(rl_unbind_k)o(ey)8
+(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(28)1012 794 y Fd(rl_unbind_k)o(ey)8
b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Ff(27)1012 794 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s
+b Ff(28)1012 840 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s
Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(27)1012 840 y Fd(rl_username)o(_c)o
+g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(28)1012 886 y Fd(rl_username)o(_c)o
(omp)o(le)o(tio)o(n_)o(fun)o(cti)o(on)t Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)18 b Ff(40)1012 886 y Fd(rl_variable)o(_b)o(ind)6
+g(.)h(.)f(.)g(.)18 b Ff(40)1012 932 y Fd(rl_variable)o(_b)o(ind)6
b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(34)1012
-932 y Fd(rl_variable)o(_d)o(ump)o(er)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f
+978 y Fd(rl_variable)o(_d)o(ump)o(er)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-19 b Ff(34)1012 1063 y Fs(S)1012 1125 y Fd(self-insert)9
+19 b Ff(34)1012 1109 y Fs(S)1012 1170 y Fd(self-insert)9
b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o(\))6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1171 y Fd(set-mark)10
+h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1216 y Fd(set-mark)10
b(\(C-@\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
-b Ff(17)1012 1217 y(sho)o(w-all-if-am)o(bigu)q(ous)14
+b Ff(17)1012 1262 y(sho)o(w-all-if-am)o(bigu)q(ous)14
b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(6)1012 1263
+(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(7)1012 1308
y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c Fe(.)d(.)i(.)f(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22
-b Ff(16)1012 1386 y Fs(T)1012 1448 y Fd(tab-insert)9
-b(\(M-)1281 1446 y Fn(h)p 1292 1420 74 2 v 1292 1448
-a Fm(T)m(AB)p 1292 1456 V 1364 1446 a Fn(i)1379 1448
+b Ff(16)1012 1432 y Fs(T)1012 1494 y Fd(tab-insert)9
+b(\(M-)1281 1492 y Fn(h)p 1292 1466 74 2 v 1292 1494
+a Fm(T)m(AB)p 1292 1501 V 1364 1492 a Fn(i)1379 1494
y Fd(\))e Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(14)1012 1494
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(14)1012 1540
y Fd(tilde-expan)o(d)10 b(\(M-~\))f Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22
-b Ff(17)1012 1540 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d
+b Ff(17)1012 1586 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d
Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1586 y Fd(transpose-w)o(or)o(ds)9
+(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1632 y Fd(transpose-w)o(or)o(ds)9
b(\(M-t\))d Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1717 y
-Fs(U)1012 1779 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1763 y
+Fs(U)1012 1825 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c
Fe(.)t(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)1012 1825 y Fd(universal-a)o(rg)o
+(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)1012 1871 y Fd(universal-a)o(rg)o
(ume)o(nt)9 b(\(\))d Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(16)1012
-1871 y Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))5 b
+1917 y Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))5 b
Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)18 b Ff(15)1012 1917 y Fd(unix-word-r)o(ub)o(out)9
+(.)h(.)f(.)18 b Ff(15)1012 1963 y Fd(unix-word-r)o(ub)o(out)9
b(\(C-w\))d Fe(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)1012 1963 y Fd(upcase-word)9
+(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)1012 2009 y Fd(upcase-word)9
b(\(M-u\))e Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(14)1012
-2094 y Fs(V)1012 2156 y Ff(visible-stats)14 b Fe(.)6
+2140 y Fs(V)1012 2201 y Ff(visible-stats)14 b Fe(.)6
b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
-b Ff(6)1012 2279 y Fs(Y)1012 2341 y Fd(yank)12 b(\(C-y\))5
+b Ff(7)1012 2325 y Fs(Y)1012 2387 y Fd(yank)12 b(\(C-y\))5
b Fe(.)t(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Ff(15)1012 2387 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c
+b Ff(15)1012 2433 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c
Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
-b Ff(13)1012 2433 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d
+b Ff(13)1012 2479 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d
Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(13)1012 2479 y Fd(yank-pop)10
+(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(13)1012 2525 y Fd(yank-pop)10
b(\(M-y\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
b Ff(15)p eop
-%%Page: 58 60
-58 59 bop 75 -58 a Fu(58)1299 b(GNU)15 b(Readline)h(Library)p
+%%Page: 60 62
+60 61 bop 75 -58 a Fu(60)1299 b(GNU)15 b(Readline)h(Library)p
eop
-%%Page: -1 61
--1 60 bop 1862 -58 a Fu(i)75 149 y Fq(T)-7 b(able)27
+%%Page: -1 63
+-1 62 bop 1862 -58 a Fu(i)75 149 y Fq(T)-7 b(able)27
b(of)f(Con)n(ten)n(ts)75 320 y Fs(1)67 b(Command)22 b(Line)i(Editing)d
Fa(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h
(.)f(.)g(.)g(.)42 b Fs(1)224 389 y Fu(1.1)j(In)o(tro)q(duction)16
@@ -4946,7 +5021,7 @@ Fl(.)f(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)25
b Fu(32)374 2442 y(2.4.9)44 b(T)l(erminal)16 b(Managemen)o(t)11
b Fl(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)
-h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(32)374 2496 y(2.4.10)43
+h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(33)374 2496 y(2.4.10)43
b(Utilit)o(y)17 b(F)l(unctions)c Fl(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f
(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
f(.)h(.)f(.)28 b Fu(33)374 2551 y(2.4.11)43 b(Miscellaneous)18
@@ -4958,30 +5033,30 @@ b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f
y(2.4.13)43 b(A)16 b(Readline)g(Example)9 b Fl(.)f(.)f(.)h(.)f(.)h(.)g
(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)
h(.)f(.)24 b Fu(35)p eop
-%%Page: -2 62
--2 61 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)h(Library)224
+%%Page: -2 64
+-2 63 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)h(Library)224
42 y(2.5)45 b(Readline)16 b(Signal)h(Handling)12 b Fl(.)c(.)g(.)f(.)h
(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(36)224 96
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(37)224 96
y(2.6)45 b(Custom)14 b(Completers)f Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)
f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)28 b Fu(38)374
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)28 b Fu(39)374
151 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10
b Fl(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)
-f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(38)374 206 y(2.6.2)44
+f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(39)374 206 y(2.6.2)44
b(Completion)16 b(F)l(unctions)6 b Fl(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h
(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)
-21 b Fu(39)374 261 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c
+21 b Fu(40)374 261 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c
Fl(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f
-(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(40)374 315
+(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(41)374 315
y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b
Fl(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h
-(.)f(.)20 b Fu(43)75 437 y Fs(Concept)i(Index)10 b Fa(.)i(.)e(.)g(.)g
+(.)f(.)20 b Fu(44)75 437 y Fs(Concept)i(Index)10 b Fa(.)i(.)e(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(53)75 572
+g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(55)75 572
y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9
b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)32 b Fs(55)p eop
+g(.)32 b Fs(57)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
diff --git a/doc/readline_3.ps b/doc/readline_3.ps
index cba0c23..4049272 100644
--- a/doc/readline_3.ps
+++ b/doc/readline_3.ps
@@ -1,12 +1,12 @@
%!PS-Adobe-3.0
%%Creator: groff version 1.16.1
-%%CreationDate: Mon Mar 5 14:37:30 2001
+%%CreationDate: Tue Oct 9 15:08:13 2001
%%DocumentNeededResources: font Times-Roman
%%+ font Times-Bold
%%+ font Times-Italic
%%+ font Courier
%%DocumentSuppliedResources: procset grops 1.16 1
-%%Pages: 13
+%%Pages: 14
%%PageOrder: Ascend
%%Orientation: Portrait
%%EndComments
@@ -308,8 +308,8 @@ le is read, and the k)-5.359 F .658 -.15(ey b)-.1 H(ind-).15 E 1.083
(wn commands and bindings.)-.25 E -.15(Fo)108 669.6 S 2.5(re).15 G
(xample, placing)-2.65 E(M\255Control\255u: uni)144 686.4 Q -.15(ve)-.25
G(rsal\255ar).15 E(gument)-.18 E(or)108 698.4 Q(C\255Meta\255u: uni)144
-710.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(GNU Readline 4.2)
-72 768 Q(2001 Mar 5)135.96 E(1)205.67 E EP
+710.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(GNU Readline 4.2a)
+72 768 Q(2001 October 9)123.745 E(1)197.895 E EP
%%Page: 2 2
%%BeginPageSetup
BP
@@ -391,18 +391,19 @@ F2(\\f)144 612 Q F0(form feed)29.89 E F2(\\n)144 624 Q F0(ne)27.66 E
(wline)-.25 E F2(\\r)144 636 Q F0(carriage return)28.78 E F2(\\t)144 648
Q F0(horizontal tab)29.89 E F2(\\v)144 660 Q F0 -.15(ve)28.22 G
(rtical tab).15 E F2(\\)144 672 Q F1(nnn)A F0
-(the character whose ASCII code is the octal v)18.22 E(alue)-.25 E F1
-(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 684 Q F1(nnn)A F0
-(the character whose ASCII code is the he)13.22 E(xadecimal v)-.15 E
-(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E .74
-(When entering the te)108 700.8 R .74(xt of a macro, single or double q\
-uotes should be used to indicate a macro de\214nition.)-.15 F .089
-(Unquoted te)108 712.8 R .089(xt is assumed to be a function name.)-.15
-F .09(In the macro body)5.089 F 2.59(,t)-.65 G .09
-(he backslash escapes described abo)-2.59 F -.15(ve)-.15 G(are e)108
-724.8 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G
-(ther character in the macro te)-2.5 E(xt, including " and '.)-.15 E
-(GNU Readline 4.2)72 768 Q(2001 Mar 5)135.96 E(2)205.67 E EP
+(the eight-bit character whose v)18.22 E(alue is the octal v)-.25 E
+(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144
+684 Q F1(HH)A F0(the eight-bit character whose v)13.78 E(alue is the he)
+-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0(\(one or tw)2.5 E
+2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E .74(When entering the te)
+108 700.8 R .74(xt of a macro, single or double quotes should be used t\
+o indicate a macro de\214nition.)-.15 F .089(Unquoted te)108 712.8 R
+.089(xt is assumed to be a function name.)-.15 F .09(In the macro body)
+5.089 F 2.59(,t)-.65 G .09(he backslash escapes described abo)-2.59 F
+-.15(ve)-.15 G(are e)108 724.8 Q 2.5(xpanded. Backslash)-.15 F
+(will quote an)2.5 E 2.5(yo)-.15 G(ther character in the macro te)-2.5 E
+(xt, including " and '.)-.15 E(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(2)197.895 E EP
%%Page: 3 3
%%BeginPageSetup
BP
@@ -482,749 +483,775 @@ F .515 -.15(ey b)-.1 H .216(indings similar to emacs or vi.).15 F F1
-2.6 G(s.).15 E F1(expand\255tilde \(Off\))108 559.2 Q F0(If set to)144
571.2 Q F1(on)2.5 E F0 2.5(,t)C(ilde e)-2.5 E
(xpansion is performed when readline attempts w)-.15 E(ord completion.)
--.1 E F1(horizontal\255scr)108 583.2 Q(oll\255mode \(Off\))-.18 E F0
-.448(When set to)144 595.2 R F1(On)2.948 E F0 2.948(,m)C(ak)-2.948 E
+-.1 E F1(history-pr)108 583.2 Q(eser)-.18 E -.1(ve)-.1 G(-point).1 E F0
+1.492(If set to)144 595.2 R F1(on)3.992 E F0 3.992(,t)C 1.493(he histor\
+y code attempts to place point at the same location on each history lin\
+e)-3.992 F(retri)144 607.2 Q -.15(ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1
+(pr)2.5 E -.15(ev)-.18 G(ious-history).15 E F0(or)2.5 E F1(next-history)
+2.5 E F0(.)A F1(horizontal\255scr)108 619.2 Q(oll\255mode \(Off\))-.18 E
+F0 .449(When set to)144 631.2 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E
.448(es readline use a single line for display)-.1 F 2.948(,s)-.65 G
-.449(crolling the input horizontally on a)-2.948 F 1.194(single screen \
+.448(crolling the input horizontally on a)-2.948 F 1.194(single screen \
line when it becomes longer than the screen width rather than wrapping \
-to a ne)144 607.2 R(w)-.25 E(line.)144 619.2 Q F1(input\255meta \(Off\))
-108 631.2 Q F0 .367(If set to)144 643.2 R F1(On)2.867 E F0 2.867(,r)C
+to a ne)144 643.2 R(w)-.25 E(line.)144 655.2 Q F1(input\255meta \(Off\))
+108 667.2 Q F0 .367(If set to)144 679.2 R F1(On)2.867 E F0 2.867(,r)C
.367(eadline will enable eight-bit input \(that is, it will not clear t\
-he eighth bit in the char)-2.867 F(-)-.2 E .957(acters it reads\), re)
-144 655.2 R -.05(ga)-.15 G .956
-(rdless of what the terminal claims it can support.).05 F .956(The name)
-5.956 F F1(meta\255\215ag)3.456 E F0 .956(is a)3.456 F(synon)144 667.2 Q
-(ym for this v)-.15 E(ariable.)-.25 E F1(isear)108 679.2 Q
-(ch\255terminators \(`)-.18 E(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439
-(The string of characters that should terminate an incremental search w\
-ithout subsequently e)144 691.2 R -.15(xe)-.15 G(cut-).15 E .935
-(ing the character as a command.)144 703.2 R .935(If this v)5.935 F .935
-(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934
-(alue, the characters)-3.684 F F2(ESC)3.434 E F0(and)144 715.2 Q F2
-(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E
-(GNU Readline 4.2)72 768 Q(2001 Mar 5)135.96 E(3)205.67 E EP
+he eighth bit in the char)-2.867 F(-)-.2 E .956(acters it reads\), re)
+144 691.2 R -.05(ga)-.15 G .956
+(rdless of what the terminal claims it can support.).05 F .957(The name)
+5.956 F F1(meta\255\215ag)3.457 E F0 .957(is a)3.457 F(synon)144 703.2 Q
+(ym for this v)-.15 E(ariable.)-.25 E(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(3)197.895 E EP
%%Page: 4 4
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
-/Times-Bold@0 SF -.1(ke)108 84 S(ymap \(emacs\)).1 E F0 2.323
-(Set the current readline k)144 96 R -.15(ey)-.1 G 4.823(map. The).15 F
-2.323(set of le)4.823 F -.05(ga)-.15 G 4.823(lk).05 G -.15(ey)-4.923 G
-2.323(map names is).15 F/F2 10/Times-Italic@0 SF 2.324
-(emacs, emacs-standar)4.823 F(d,)-.37 E .809
-(emacs-meta, emacs-ctlx, vi, vi-mo)144 108 R(ve)-.1 E 3.308(,v)-.1 G
+/Times-Bold@0 SF(isear)108 84 Q(ch\255terminators \(`)-.18 E
+(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439(The string of characters tha\
+t should terminate an incremental search without subsequently e)144 96 R
+-.15(xe)-.15 G(cut-).15 E .934(ing the character as a command.)144 108 R
+.935(If this v)5.935 F .935(ariable has not been gi)-.25 F -.15(ve)-.25
+G 3.435(nav).15 G .935(alue, the characters)-3.685 F/F2 10
+/Times-Italic@0 SF(ESC)3.435 E F0(and)144 120 Q F2(C\255J)2.5 E F0
+(will terminate an incremental search.)2.5 E F1 -.1(ke)108 132 S
+(ymap \(emacs\)).1 E F0 2.323(Set the current readline k)144 144 R -.15
+(ey)-.1 G 4.823(map. The).15 F 2.323(set of le)4.823 F -.05(ga)-.15 G
+4.823(lk).05 G -.15(ey)-4.923 G 2.323(map names is).15 F F2 2.323
+(emacs, emacs-standar)4.823 F(d,)-.37 E .808
+(emacs-meta, emacs-ctlx, vi, vi-mo)144 156 R(ve)-.1 E 3.308(,v)-.1 G
(i-command)-3.308 E F0 3.308(,a)C(nd)-3.308 E F2(vi-insert)3.308 E F0(.)
-.68 E F2(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .808(lent to)
-.25 F F2(vi-command)3.308 E F0(;)A F2(emacs)144 120 Q F0 .697(is equi)
-3.196 F -.25(va)-.25 G .697(lent to).25 F F2(emacs-standar)3.197 E(d)
+.68 E F2(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .809(lent to)
+.25 F F2(vi-command)3.309 E F0(;)A F2(emacs)144 168 Q F0 .697(is equi)
+3.197 F -.25(va)-.25 G .697(lent to).25 F F2(emacs-standar)3.197 E(d)
-.37 E F0 5.697(.T)C .697(he def)-5.697 F .697(ault v)-.1 F .697
(alue is)-.25 F F2(emacs)3.197 E F0 5.697(.T).27 G .697(he v)-5.697 F
-.697(alue of)-.25 F F1(editing\255mode)3.197 E F0(also af)144 132 Q
+.697(alue of)-.25 F F1(editing\255mode)3.196 E F0(also af)144 180 Q
(fects the def)-.25 E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1
-(mark\255dir)108 144 Q(ectories \(On\))-.18 E F0(If set to)144 156 Q F1
+(mark\255dir)108 192 Q(ectories \(On\))-.18 E F0(If set to)144 204 Q F1
(On)2.5 E F0 2.5(,c)C(ompleted directory names ha)-2.5 E .3 -.15(ve a s)
-.2 H(lash appended.).15 E F1(mark\255modi\214ed\255lines \(Off\))108
-168 Q F0(If set to)144 180 Q F1(On)2.5 E F0 2.5(,h)C
+216 Q F0(If set to)144 228 Q F1(On)2.5 E F0 2.5(,h)C
(istory lines that ha)-2.5 E .3 -.15(ve b)-.2 H
(een modi\214ed are displayed with a preceding asterisk \().15 E F1(*)A
-F0(\).)A F1(output\255meta \(Off\))108 192 Q F0 .507(If set to)144 204 R
-F1(On)3.007 E F0 3.007(,r)C .507(eadline will display characters with t\
-he eighth bit set directly rather than as a meta-)-3.007 F(pre\214x)144
-216 Q(ed escape sequence.)-.15 E F1
-(print\255completions\255horizontally \(Off\))108 228 Q F0 1.318
-(If set to)144 240 R F1(On)3.818 E F0 3.818(,r)C 1.319(eadline will dis\
-play completions with matches sorted horizontally in alphabetical)-3.818
-F(order)144 252 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25
-E F1(sho)108 264 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F0 .478
-(This alters the def)144 276 R .478(ault beha)-.1 F .478
-(vior of the completion functions.)-.2 F .477(If set to)5.477 F F1(on)
-2.977 E F0 2.977(,w)C .477(ords which ha)-3.077 F .777 -.15(ve m)-.2 H
+F0(\).)A F1(match\255hidden\255\214les \(On\))108 240 Q F0 .192(This v)
+144 252 R .192(ariable, when set to)-.25 F F1(On)2.692 E F0 2.692(,c)C
+.192(auses readline to match \214les whose names be)-2.692 F .193
+(gin with a `.)-.15 F 2.693('\()-.7 G(hidden)-2.693 E 1.024
+(\214les\) when performing \214lename completion, unless the leading `.)
+144 264 R 3.523('i)-.7 G 3.523(ss)-3.523 G 1.023
+(upplied by the user in the)-3.523 F(\214lename to be completed.)144 276
+Q F1(output\255meta \(Off\))108 288 Q F0 .506(If set to)144 300 R F1(On)
+3.006 E F0 3.006(,r)C .507(eadline will display characters with the eig\
+hth bit set directly rather than as a meta-)-3.006 F(pre\214x)144 312 Q
+(ed escape sequence.)-.15 E F1
+(print\255completions\255horizontally \(Off\))108 324 Q F0 1.319
+(If set to)144 336 R F1(On)3.819 E F0 3.819(,r)C 1.318(eadline will dis\
+play completions with matches sorted horizontally in alphabetical)-3.819
+F(order)144 348 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25
+E F1(sho)108 360 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F0 .477
+(This alters the def)144 372 R .477(ault beha)-.1 F .477
+(vior of the completion functions.)-.2 F .478(If set to)5.478 F F1(on)
+2.978 E F0 2.978(,w)C .478(ords which ha)-3.078 F .778 -.15(ve m)-.2 H
(ore).15 E 1.264(than one possible completion cause the matches to be l\
-isted immediately instead of ringing the)144 288 R(bell.)144 300 Q F1
-(visible\255stats \(Off\))108 312 Q F0 .847(If set to)144 324 R F1(On)
+isted immediately instead of ringing the)144 384 R(bell.)144 396 Q F1
+(visible\255stats \(Off\))108 408 Q F0 .846(If set to)144 420 R F1(On)
3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346
(st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846
(\(2\) is appended to the \214lename)B
-(when listing possible completions.)144 336 Q F1(Conditional Constructs)
-87 352.8 Q F0 .05(Readline implements a f)108 364.8 R .05(acility simil\
+(when listing possible completions.)144 432 Q F1(Conditional Constructs)
+87 448.8 Q F0 .05(Readline implements a f)108 460.8 R .05(acility simil\
ar in spirit to the conditional compilation features of the C preproces\
-sor)-.1 F .097(which allo)108 376.8 R .097(ws k)-.25 F .396 -.15(ey b)
+sor)-.1 F .096(which allo)108 472.8 R .096(ws k)-.25 F .396 -.15(ey b)
-.1 H .096(indings and v).15 F .096
-(ariable settings to be performed as the result of tests.)-.25 F .096
-(There are four parser)5.096 F(directi)108 388.8 Q -.15(ve)-.25 G 2.5
-(su).15 G(sed.)-2.5 E F1($if)108 405.6 Q F0(The)24.89 E F1($if)2.962 E
-F0 .462(construct allo)2.962 F .463(ws bindings to be made based on the\
- editing mode, the terminal being used,)-.25 F .478
-(or the application using readline.)144 417.6 R .477(The te)5.477 F .477
+(ariable settings to be performed as the result of tests.)-.25 F .097
+(There are four parser)5.096 F(directi)108 484.8 Q -.15(ve)-.25 G 2.5
+(su).15 G(sed.)-2.5 E F1($if)108 501.6 Q F0(The)24.89 E F1($if)2.963 E
+F0 .463(construct allo)2.963 F .462(ws bindings to be made based on the\
+ editing mode, the terminal being used,)-.25 F .477
+(or the application using readline.)144 513.6 R .477(The te)5.477 F .477
(xt of the test e)-.15 F .477
(xtends to the end of the line; no characters)-.15 F
-(are required to isolate it.)144 429.6 Q F1(mode)144 446.4 Q F0(The)
-12.67 E F1(mode=)3.711 E F0 1.211(form of the)3.711 F F1($if)3.711 E F0
+(are required to isolate it.)144 525.6 Q F1(mode)144 542.4 Q F0(The)
+12.67 E F1(mode=)3.712 E F0 1.212(form of the)3.712 F F1($if)3.711 E F0
(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211
(sed to test whether readline is in emacs or vi)-3.711 F 3.065
-(mode. This)180 458.4 R .565(may be used in conjunction with the)3.065 F
+(mode. This)180 554.4 R .565(may be used in conjunction with the)3.065 F
F1 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to)
-3.065 F .029(set bindings in the)180 470.4 R F2(emacs-standar)2.529 E(d)
+3.065 F .03(set bindings in the)180 566.4 R F2(emacs-standar)2.529 E(d)
-.37 E F0(and)2.529 E F2(emacs-ctlx)2.529 E F0 -.1(ke)2.529 G .029
-(ymaps only if readline is starting out)-.05 F(in emacs mode.)180 482.4
-Q F1(term)144 499.2 Q F0(The)15.46 E F1(term=)3.197 E F0 .696
-(form may be used to include terminal-speci\214c k)3.197 F .996 -.15
-(ey b)-.1 H .696(indings, perhaps to bind).15 F .654(the k)180 511.2 R
+(ymaps only if readline is starting out)-.05 F(in emacs mode.)180 578.4
+Q F1(term)144 595.2 Q F0(The)15.46 E F1(term=)3.196 E F0 .696
+(form may be used to include terminal-speci\214c k)3.196 F .996 -.15
+(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 607.2 R
.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154
(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1
-(wo)3.154 G .654(rd on the right side of).1 F(the)180 523.2 Q F1(=)3.004
-E F0 .504(is tested ag)3.004 F .503(ainst the full name of the terminal\
+(wo)3.154 G .654(rd on the right side of).1 F(the)180 619.2 Q F1(=)3.003
+E F0 .503(is tested ag)3.003 F .504(ainst the full name of the terminal\
and the portion of the terminal name)-.05 F(before the \214rst)180
-535.2 Q F1<ad>2.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.5 E F0
+631.2 Q F1<ad>2.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.5 E F0
(to match both)2.5 E F2(sun)2.5 E F0(and)2.5 E F2(sun\255cmd)2.5 E F0
-2.5(,f).77 G(or instance.)-2.5 E F1(application)144 552 Q F0(The)180 564
+2.5(,f).77 G(or instance.)-2.5 E F1(application)144 648 Q F0(The)180 660
Q F1(application)3.003 E F0 .503
(construct is used to include application-speci\214c settings.)3.003 F
.503(Each program)5.503 F .114(using the readline library sets the)180
-576 R F2 .114(application name)2.614 F F0 2.614(,a)C .114
-(nd an initialization \214le can test for a)-2.614 F .5(particular v)180
-588 R 3(alue. This)-.25 F .501(could be used to bind k)3 F .801 -.15
-(ey s)-.1 H .501(equences to functions useful for a spe-).15 F .397
-(ci\214c program.)180 600 R -.15(Fo)5.397 G 2.896(ri).15 G .396
+672 R F2 .114(application name)2.614 F F0 2.614(,a)C .114
+(nd an initialization \214le can test for a)-2.614 F .501(particular v)
+180 684 R 3.001(alue. This)-.25 F .501(could be used to bind k)3.001 F
+.801 -.15(ey s)-.1 H .5(equences to functions useful for a spe-).15 F
+.396(ci\214c program.)180 696 R -.15(Fo)5.396 G 2.896(ri).15 G .396
(nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15
-(ey s)-.1 H .396(equence that quotes the).15 F(current or pre)180 612 Q
-(vious w)-.25 E(ord in Bash:)-.1 E F1($if)180 636 Q F0(Bash)2.5 E 2.5
-(#Q)180 648 S(uote the current or pre)-2.5 E(vious w)-.25 E(ord)-.1 E
-("\\C-xq": "\\eb\\"\\ef\\"")180 660 Q F1($endif)180 672 Q($endif)108
-688.8 Q F0(This command, as seen in the pre)9.33 E(vious e)-.25 E
-(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E F1($else)
-108 705.6 Q F0(Commands in this branch of the)15.45 E F1($if)2.5 E F0
-(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G
-(cuted if the test f).15 E(ails.)-.1 E(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(4)205.67 E EP
+(ey s)-.1 H .397(equence that quotes the).15 F(current or pre)180 708 Q
+(vious w)-.25 E(ord in Bash:)-.1 E(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(4)197.895 E EP
%%Page: 5 5
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
-/Times-Bold@0 SF($include)108 84 Q F0 .356(This directi)144 96 R .656
--.15(ve t)-.25 H(ak).15 E .356(es a single \214lename as an ar)-.1 F
-.357(gument and reads commands and bindings from that)-.18 F 2.5
-(\214le. F)144 108 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)
--.25 E .3 -.15(ve w)-.25 H(ould read).05 E/F2 10/Times-Italic@0 SF
-(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1($include)144 132 Q F2(/etc/inputr)
-5.833 E(c)-.37 E/F3 10.95/Times-Bold@0 SF(SEARCHING)72 148.8 Q F0 1.004
-(Readline pro)108 160.8 R 1.003(vides commands for searching through th\
-e command history for lines containing a speci\214ed)-.15 F 2.5
-(string. There)108 172.8 R(are tw)2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E
-F2(incr)2.5 E(emental)-.37 E F0(and)2.5 E F2(non-incr)2.5 E(emental)-.37
-E F0(.).51 E .697(Incremental searches be)108 189.6 R .697
+/Times-Bold@0 SF($if)180 84 Q F0(Bash)2.5 E 2.5(#Q)180 96 S
+(uote the current or pre)-2.5 E(vious w)-.25 E(ord)-.1 E
+("\\C-xq": "\\eb\\"\\ef\\"")180 108 Q F1($endif)180 120 Q($endif)108
+136.8 Q F0(This command, as seen in the pre)9.33 E(vious e)-.25 E
+(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E F1($else)
+108 153.6 Q F0(Commands in this branch of the)15.45 E F1($if)2.5 E F0
+(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G
+(cuted if the test f).15 E(ails.)-.1 E F1($include)108 170.4 Q F0 .357
+(This directi)144 182.4 R .657 -.15(ve t)-.25 H(ak).15 E .357
+(es a single \214lename as an ar)-.1 F .356
+(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F)
+144 194.4 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3
+-.15(ve w)-.25 H(ould read).05 E/F2 10/Times-Italic@0 SF(/etc/inputr)2.5
+E(c)-.37 E F0(:)A F1($include)144 218.4 Q F2(/etc/inputr)5.833 E(c)-.37
+E/F3 10.95/Times-Bold@0 SF(SEARCHING)72 235.2 Q F0 1.003(Readline pro)
+108 247.2 R 1.003(vides commands for searching through the command hist\
+ory for lines containing a speci\214ed)-.15 F 2.5(string. There)108
+259.2 R(are tw)2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.5 E
+(emental)-.37 E F0(and)2.5 E F2(non-incr)2.5 E(emental)-.37 E F0(.).51 E
+.698(Incremental searches be)108 276 R .698
(gin before the user has \214nished typing the search string.)-.15 F
-.698(As each character of the)5.698 F .113
-(search string is typed, readline displays the ne)108 201.6 R .112
+.697(As each character of the)5.697 F .112
+(search string is typed, readline displays the ne)108 288 R .112
(xt entry from the history matching the string typed so f)-.15 F(ar)-.1
-E 5.112(.A)-.55 G(n)-5.112 E .544
-(incremental search requires only as man)108 213.6 R 3.044(yc)-.15 G
-.544(haracters as needed to \214nd the desired history entry)-3.044 F
-5.545(.T)-.65 G 3.045(os)-6.345 G(earch)-3.045 E(backw)108 225.6 Q .181
+E 5.113(.A)-.55 G(n)-5.113 E .545
+(incremental search requires only as man)108 300 R 3.045(yc)-.15 G .544
+(haracters as needed to \214nd the desired history entry)-3.045 F 5.544
+(.T)-.65 G 3.044(os)-6.344 G(earch)-3.044 E(backw)108 312 Q .18
(ard in the history for a particular string, type)-.1 F F1(C\255r)2.681
-E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.68 E F0 .18(searches forw)
-2.68 F .18(ard through the history)-.1 F(.)-.65 E .354
-(The characters present in the v)108 237.6 R .354(alue of the)-.25 F F1
+E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.681 E F0 .181(searches forw)
+2.681 F .181(ard through the history)-.1 F(.)-.65 E .354
+(The characters present in the v)108 324 R .354(alue of the)-.25 F F1
(isear)2.854 E(ch-terminators)-.18 E F0 -.25(va)2.854 G .354
-(riable are used to terminate an incremen-).25 F .6(tal search.)108
-249.6 R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F
-.6(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6
-(characters will terminate an)3.1 F .122(incremental search.)108 261.6 R
-F1(C\255G)5.122 E F0 .122
-(will abort an incremental search and restore the original line.)2.622 F
-.123(When the search is)5.123 F(terminated, the history entry containin\
-g the search string becomes the current line.)108 273.6 Q 2.407 -.8
-(To \214)108 290.4 T .806
+(riable are used to terminate an incremen-).25 F .6(tal search.)108 336
+R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F .6
+(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6
+(characters will terminate an)3.1 F .123(incremental search.)108 348 R
+F1(C\255G)5.123 E F0 .123
+(will abort an incremental search and restore the original line.)2.623 F
+.122(When the search is)5.122 F(terminated, the history entry containin\
+g the search string becomes the current line.)108 360 Q 2.406 -.8
+(To \214)108 376.8 T .806
(nd other matching entries in the history list, type).8 F F1(C\255s)
3.306 E F0(or)3.306 E F1(C\255r)3.306 E F0 .806(as appropriate.)3.306 F
-.806(This will search back-)5.806 F -.1(wa)108 302.4 S 1.308(rd or forw)
+.807(This will search back-)5.806 F -.1(wa)108 388.8 S 1.309(rd or forw)
.1 F 1.309(ard in the history for the ne)-.1 F 1.309
(xt line matching the search string typed so f)-.15 F(ar)-.1 E 6.309(.A)
--.55 G 1.609 -.15(ny o)-6.309 H 1.309(ther k).15 F -.15(ey)-.1 G .317
+-.55 G 1.609 -.15(ny o)-6.309 H 1.308(ther k).15 F -.15(ey)-.1 G .317
(sequence bound to a readline command will terminate the search and e)
-108 314.4 R -.15(xe)-.15 G .317(cute that command.).15 F -.15(Fo)5.317 G
-2.817(ri).15 G(nstance,)-2.817 E 3.48(an)108 326.4 S -.25(ew)-3.48 G .98
-(line will terminate the search and accept the line, thereby e).25 F
--.15(xe)-.15 G .981(cuting the command from the history).15 F 3.062
-(list. A)108 338.4 R(mo)3.062 E -.15(ve)-.15 G .562
+108 400.8 R -.15(xe)-.15 G .318(cute that command.).15 F -.15(Fo)5.318 G
+2.818(ri).15 G(nstance,)-2.818 E 3.481(an)108 412.8 S -.25(ew)-3.481 G
+.981(line will terminate the search and accept the line, thereby e).25 F
+-.15(xe)-.15 G .98(cuting the command from the history).15 F 3.061
+(list. A)108 424.8 R(mo)3.061 E -.15(ve)-.15 G .562
(ment command will terminate the search, mak).15 F 3.062(et)-.1 G .562
(he last line found the current line, and be)-3.062 F(gin)-.15 E
-(editing.)108 350.4 Q .567(Non-incremental searches read the entire sea\
+(editing.)108 436.8 Q .567(Non-incremental searches read the entire sea\
rch string before starting to search for matching history lines.)108
-367.2 R(The search string may be typed by the user or be part of the co\
-ntents of the current line.)108 379.2 Q F3(EDITING COMMANDS)72 396 Q F0
-1.392(The follo)108 408 R 1.391
+453.6 R(The search string may be typed by the user or be part of the co\
+ntents of the current line.)108 465.6 Q F3(EDITING COMMANDS)72 482.4 Q
+F0 1.391(The follo)108 494.4 R 1.391
(wing is a list of the names of the commands and the def)-.25 F 1.391
(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F
-3.891(ya)-.15 G(re)-3.891 E 2.5(bound. Command)108 420 R
+3.892(ya)-.15 G(re)-3.892 E 2.5(bound. Command)108 506.4 R
(names without an accompan)2.5 E(ying k)-.15 E .3 -.15(ey s)-.1 H
-(equence are unbound by def).15 E(ault.)-.1 E .054(In the follo)108
-436.8 R .054(wing descriptions,)-.25 F F2(point)2.554 E F0 .055
-(refers to the current cursor position, and)2.554 F F2(mark)2.555 E F0
-.055(refers to a cursor position)2.555 F(sa)108 448.8 Q -.15(ve)-.2 G
+(equence are unbound by def).15 E(ault.)-.1 E .055(In the follo)108
+523.2 R .055(wing descriptions,)-.25 F F2(point)2.555 E F0 .055
+(refers to the current cursor position, and)2.555 F F2(mark)2.555 E F0
+.054(refers to a cursor position)2.554 F(sa)108 535.2 Q -.15(ve)-.2 G
2.5(db).15 G 2.5(yt)-2.5 G(he)-2.5 E F1(set\255mark)2.5 E F0 2.5
(command. The)2.5 F(te)2.5 E
(xt between the point and mark is referred to as the)-.15 E F2 -.37(re)
-2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 465.6 Q(or Mo)-.25 E(ving)-.1
-E(beginning\255of\255line \(C\255a\))108 477.6 Q F0(Mo)144 489.6 Q .3
--.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1
-(end\255of\255line \(C\255e\))108 501.6 Q F0(Mo)144 513.6 Q .3 -.15
-(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108
-525.6 S(rward\255char \(C\255f\)).25 E F0(Mo)144 537.6 Q .3 -.15(ve f)
--.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1
-(backward\255char \(C\255b\))108 549.6 Q F0(Mo)144 561.6 Q .3 -.15(ve b)
--.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 573.6 S(rward\255w)
-.25 E(ord \(M\255f\))-.1 E F0(Mo)144 585.6 Q .823 -.15(ve f)-.15 H(orw)
-.15 E .523(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W)
--.1 F .522(ords are composed of alphanumeric characters \(let-)-.8 F
-(ters and digits\).)144 597.6 Q F1(backward\255w)108 609.6 Q
-(ord \(M\255b\))-.1 E F0(Mo)144 621.6 Q 1.71 -.15(ve b)-.15 H 1.41
+2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 552 Q(or Mo)-.25 E(ving)-.1 E
+(beginning\255of\255line \(C\255a\))108 564 Q F0(Mo)144 576 Q .3 -.15
+(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1
+(end\255of\255line \(C\255e\))108 588 Q F0(Mo)144 600 Q .3 -.15(ve t)
+-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 612 S
+(rward\255char \(C\255f\)).25 E F0(Mo)144 624 Q .3 -.15(ve f)-.15 H(orw)
+.15 E(ard a character)-.1 E(.)-.55 E F1(backward\255char \(C\255b\))108
+636 Q F0(Mo)144 648 Q .3 -.15(ve b)-.15 H(ack a character).15 E(.)-.55 E
+F1 -.25(fo)108 660 S(rward\255w).25 E(ord \(M\255f\))-.1 E F0(Mo)144 672
+Q .822 -.15(ve f)-.15 H(orw).15 E .522(ard to the end of the ne)-.1 F
+.523(xt w)-.15 F 3.023(ord. W)-.1 F .523
+(ords are composed of alphanumeric characters \(let-)-.8 F
+(ters and digits\).)144 684 Q F1(backward\255w)108 696 Q(ord \(M\255b\))
+-.1 E F0(Mo)144 708 Q 1.71 -.15(ve b)-.15 H 1.41
(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91
(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F
-(characters \(letters and digits\).)144 633.6 Q F1(clear\255scr)108
-645.6 Q(een \(C\255l\))-.18 E F0 .993(Clear the screen lea)144 657.6 R
-.993(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993
-G .993(th an ar).4 F .993(gument, refresh the)-.18 F
-(current line without clearing the screen.)144 669.6 Q F1 -.18(re)108
-681.6 S(draw\255curr).18 E(ent\255line)-.18 E F0
-(Refresh the current line.)144 693.6 Q(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(5)205.67 E EP
+(characters \(letters and digits\).)144 720 Q(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(5)197.895 E EP
%%Page: 6 6
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
-/Times-Bold@0 SF(Commands f)87 84 Q(or Manipulating the History)-.25 E
-(accept\255line \(Newline, Retur)108 96 Q(n\))-.15 E F0 .364
-(Accept the line re)144 108 R -.05(ga)-.15 G .364
+/Times-Bold@0 SF(clear\255scr)108 84 Q(een \(C\255l\))-.18 E F0 .993
+(Clear the screen lea)144 96 R .993
+(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 G
+.993(th an ar).4 F .993(gument, refresh the)-.18 F
+(current line without clearing the screen.)144 108 Q F1 -.18(re)108 120
+S(draw\255curr).18 E(ent\255line)-.18 E F0(Refresh the current line.)144
+132 Q F1(Commands f)87 148.8 Q(or Manipulating the History)-.25 E
+(accept\255line \(Newline, Retur)108 160.8 Q(n\))-.15 E F0 .365
+(Accept the line re)144 172.8 R -.05(ga)-.15 G .364
(rdless of where the cursor is.).05 F .364(If this line is non-empty)
-5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G .365(ay be added to the)-2.864
-F .741(history list for future recall with)144 120 R F1(add_history\(\))
-3.241 E F0 5.741(.I)C 3.241(ft)-5.741 G .74
+5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G .364(ay be added to the)-2.864
+F .74(history list for future recall with)144 184.8 R F1
+(add_history\(\))3.24 E F0 5.741(.I)C 3.241(ft)-5.741 G .741
(he line is a modi\214ed history line, the history)-3.241 F
-(line is restored to its original state.)144 132 Q F1(pr)108 144 Q -.15
-(ev)-.18 G(ious\255history \(C\255p\)).15 E F0(Fetch the pre)144 156 Q
-(vious command from the history list, mo)-.25 E(ving back in the list.)
--.15 E F1(next\255history \(C\255n\))108 168 Q F0(Fetch the ne)144 180 Q
-(xt command from the history list, mo)-.15 E(ving forw)-.15 E
-(ard in the list.)-.1 E F1(beginning\255of\255history \(M\255<\))108 192
-Q F0(Mo)144 204 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G
-(he \214rst line in the history)-2.5 E(.)-.65 E F1
-(end\255of\255history \(M\255>\))108 216 Q F0(Mo)144 228 Q .3 -.15(ve t)
--.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5(,i)-.65 G
-(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18(re v)108
-240 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.47
-(Search backw)144 252 R 1.471(ard starting at the current line and mo)
--.1 F 1.471(ving `up' through the history as necessary)-.15 F(.)-.65 E
-(This is an incremental search.)144 264 Q F1 -.25(fo)108 276 S
-(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.132
-(Search forw)144 288 R 1.132(ard starting at the current line and mo)-.1
-F 1.131(ving `do)-.15 F 1.131(wn' through the history as necessary)-.25
-F(.)-.65 E(This is an incremental search.)144 300 Q F1(non\255incr)108
-312 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H(rse\255sear).15 E
-(ch\255history \(M\255p\))-.18 E F0 .164(Search backw)144 324 R .164(ar\
-d through the history starting at the current line using a non-incremen\
-tal search for)-.1 F 2.5(as)144 336 S(tring supplied by the user)-2.5 E
-(.)-.55 E F1(non\255incr)108 348 Q(emental\255f)-.18 E(orward\255sear)
--.25 E(ch\255history \(M\255n\))-.18 E F0 1.354(Search forw)144 360 R
-1.354(ard through the history using a non-incremental search for a stri\
-ng supplied by the)-.1 F(user)144 372 Q(.)-.55 E F1(history\255sear)108
-384 Q(ch\255f)-.18 E(orward)-.25 E F0 .248(Search forw)144 396 R .249(a\
-rd through the history for the string of characters between the start o\
-f the current line)-.1 F(and the current cursor position \(the)144 408 Q
-/F2 10/Times-Italic@0 SF(point)2.5 E F0 2.5(\). This)B
-(is a non-incremental search.)2.5 E F1(history\255sear)108 420 Q
-(ch\255backward)-.18 E F0 .951(Search backw)144 432 R .951(ard through \
-the history for the string of characters between the start of the curre\
-nt)-.1 F(line and the point.)144 444 Q
-(This is a non-incremental search.)5 E F1(yank\255nth\255ar)108 456 Q
-2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 468
-R .622(gument to the pre)-.18 F .622
+(line is restored to its original state.)144 196.8 Q F1(pr)108 208.8 Q
+-.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0(Fetch the pre)144
+220.8 Q(vious command from the history list, mo)-.25 E
+(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 232.8 Q
+F0(Fetch the ne)144 244.8 Q(xt command from the history list, mo)-.15 E
+(ving forw)-.15 E(ard in the list.)-.1 E F1
+(beginning\255of\255history \(M\255<\))108 256.8 Q F0(Mo)144 268.8 Q .3
+-.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.)
+-.65 E F1(end\255of\255history \(M\255>\))108 280.8 Q F0(Mo)144 292.8 Q
+.3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5
+(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18
+(re v)108 304.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0
+1.471(Search backw)144 316.8 R 1.471
+(ard starting at the current line and mo)-.1 F 1.47
+(ving `up' through the history as necessary)-.15 F(.)-.65 E
+(This is an incremental search.)144 328.8 Q F1 -.25(fo)108 340.8 S
+(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131
+(Search forw)144 352.8 R 1.131(ard starting at the current line and mo)
+-.1 F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary)
+-.25 F(.)-.65 E(This is an incremental search.)144 364.8 Q F1
+(non\255incr)108 376.8 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H
+(rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .165(Search backw)
+144 388.8 R .164(ard through the history starting at the current line u\
+sing a non-incremental search for)-.1 F 2.5(as)144 400.8 S
+(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 412.8 Q
+(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18
+E F0 1.353(Search forw)144 424.8 R 1.354(ard through the history using \
+a non-incremental search for a string supplied by the)-.1 F(user)144
+436.8 Q(.)-.55 E F1(history\255sear)108 448.8 Q(ch\255f)-.18 E(orward)
+-.25 E F0 .249(Search forw)144 460.8 R .249(ard through the history for\
+ the string of characters between the start of the current line)-.1 F
+(and the current cursor position \(the)144 472.8 Q/F2 10/Times-Italic@0
+SF(point)2.5 E F0 2.5(\). This)B(is a non-incremental search.)2.5 E F1
+(history\255sear)108 484.8 Q(ch\255backward)-.18 E F0 .95(Search backw)
+144 496.8 R .951(ard through the history for the string of characters b\
+etween the start of the current)-.1 F(line and the point.)144 508.8 Q
+(This is a non-incremental search.)5 E F1(yank\255nth\255ar)108 520.8 Q
+2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144
+532.8 R .622(gument to the pre)-.18 F .622
(vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F
-.622(vious line\))-.25 F .795(at point.)144 480 R -.4(Wi)5.795 G .794
+.622(vious line\))-.25 F .794(at point.)144 544.8 R -.4(Wi)5.794 G .794
(th an ar).4 F(gument)-.18 E F2(n)3.294 E F0 3.294(,i).24 G .794
(nsert the)-3.294 F F2(n)3.294 E F0 .794(th w)B .794(ord from the pre)
--.1 F .794(vious command \(the w)-.25 F .794(ords in the)-.1 F(pre)144
-492 Q .291(vious command be)-.25 F .291(gin with w)-.15 F .291(ord 0\).)
--.1 F 2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591 -.15(ve a)
--.25 H -.18(rg).15 G .291(ument inserts the).18 F F2(n)2.791 E F0 .291
-(th w)B .292(ord from the end of)-.1 F(the pre)144 504 Q(vious command.)
--.25 E F1(yank\255last\255ar)108 516 Q 2.5(g\()-.1 G -1.667(M\255. ,)
--2.5 F -1.667(M\255_ \))2.5 F F0 1.308(Insert the last ar)144 528 R
-1.308(gument to the pre)-.18 F 1.307(vious command \(the last w)-.25 F
-1.307(ord of the pre)-.1 F 1.307(vious history entry\).)-.25 F -.4(Wi)
-144 540 S .735(th an ar).4 F .735(gument, beha)-.18 F 1.035 -.15(ve ex)
--.2 H .735(actly lik).15 F(e)-.1 E F1(yank\255nth\255ar)3.235 E(g)-.1 E
-F0 5.736(.S)C(uccessi)-5.736 E 1.036 -.15(ve c)-.25 H .736(alls to).15 F
-F1(yank\255last\255ar)3.236 E(g)-.1 E F0(mo)3.236 E -.15(ve)-.15 G
-(back through the history list, inserting the last ar)144 552 Q
-(gument of each line in turn.)-.18 E F1(Commands f)87 568.8 Q
-(or Changing T)-.25 E(ext)-.92 E(delete\255char \(C\255d\))108 580.8 Q
-F0 .358(Delete the character at point.)144 592.8 R .358
+-.1 F .794(vious command \(the w)-.25 F .795(ords in the)-.1 F(pre)144
+556.8 Q .292(vious command be)-.25 F .292(gin with w)-.15 F .291
+(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591
+-.15(ve a)-.25 H -.18(rg).15 G .291(ument inserts the).18 F F2(n)2.791 E
+F0 .291(th w)B .291(ord from the end of)-.1 F(the pre)144 568.8 Q
+(vious command.)-.25 E F1(yank\255last\255ar)108 580.8 Q 2.5(g\()-.1 G
+-1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.307
+(Insert the last ar)144 592.8 R 1.307(gument to the pre)-.18 F 1.307
+(vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308
+(vious history entry\).)-.25 F -.4(Wi)144 604.8 S .736(th an ar).4 F
+.736(gument, beha)-.18 F 1.036 -.15(ve ex)-.2 H .736(actly lik).15 F(e)
+-.1 E F1(yank\255nth\255ar)3.235 E(g)-.1 E F0 5.735(.S)C(uccessi)-5.735
+E 1.035 -.15(ve c)-.25 H .735(alls to).15 F F1(yank\255last\255ar)3.235
+E(g)-.1 E F0(mo)3.235 E -.15(ve)-.15 G
+(back through the history list, inserting the last ar)144 616.8 Q
+(gument of each line in turn.)-.18 E F1(Commands f)87 633.6 Q
+(or Changing T)-.25 E(ext)-.92 E(delete\255char \(C\255d\))108 645.6 Q
+F0 .357(Delete the character at point.)144 657.6 R .358
(If point is at the be)5.358 F .358
(ginning of the line, there are no characters in the)-.15 F
-(line, and the last character typed w)144 604.8 Q(as not bound to)-.1 E
+(line, and the last character typed w)144 669.6 Q(as not bound to)-.1 E
F1(delete\255char)2.5 E F0 2.5(,t)C(hen return)-2.5 E/F3 9/Times-Bold@0
SF(EOF)2.5 E/F4 9/Times-Roman@0 SF(.)A F1
-(backward\255delete\255char \(Rubout\))108 616.8 Q F0 .552
-(Delete the character behind the cursor)144 628.8 R 5.553(.W)-.55 G .553
+(backward\255delete\255char \(Rubout\))108 681.6 Q F0 .553
+(Delete the character behind the cursor)144 693.6 R 5.553(.W)-.55 G .553
(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553(umeric ar)-3.053 F
-.553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553(he deleted te).15 F
-.553(xt on)-.15 F(the kill ring.)144 640.8 Q F1 -.25(fo)108 652.8 S
-(rward\255backward\255delete\255char).25 E F0 .474
-(Delete the character under the cursor)144 664.8 R 2.974(,u)-.4 G .474
-(nless the cursor is at the end of the line, in which case the)-2.974 F
-(character behind the cursor is deleted.)144 676.8 Q F1
-(quoted\255insert \(C\255q, C\255v\))108 688.8 Q F0 1.228(Add the ne)144
-700.8 R 1.228(xt character that you type to the line v)-.15 F 3.728
-(erbatim. This)-.15 F 1.228(is ho)3.728 F 3.729(wt)-.25 G 3.729(oi)
--3.729 G 1.229(nsert characters lik)-3.729 F(e)-.1 E F1(C\255q)144 712.8
-Q F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(6)205.67 E EP
+.552(gument, sa)-.18 F .852 -.15(ve t)-.2 H .552(he deleted te).15 F
+.552(xt on)-.15 F(the kill ring.)144 705.6 Q(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(6)197.895 E EP
%%Page: 7 7
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
-/Times-Bold@0 SF(tab\255insert \(M-T)108 84 Q(AB\))-.9 E F0
-(Insert a tab character)144 96 Q(.)-.55 E F1
-(self\255insert \(a, b, A, 1, !, ...\))108 108 Q F0
-(Insert the character typed.)144 120 Q F1(transpose\255chars \(C\255t\))
-108 132 Q F0 .322(Drag the character before point forw)144 144 R .321
+/Times-Bold@0 SF -.25(fo)108 84 S(rward\255backward\255delete\255char)
+.25 E F0 .473(Delete the character under the cursor)144 96 R 2.973(,u)
+-.4 G .474
+(nless the cursor is at the end of the line, in which case the)-2.973 F
+(character behind the cursor is deleted.)144 108 Q F1
+(quoted\255insert \(C\255q, C\255v\))108 120 Q F0 1.229(Add the ne)144
+132 R 1.228(xt character that you type to the line v)-.15 F 3.728
+(erbatim. This)-.15 F 1.228(is ho)3.728 F 3.728(wt)-.25 G 3.728(oi)
+-3.728 G 1.228(nsert characters lik)-3.728 F(e)-.1 E F1(C\255q)144 144 Q
+F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E F1(tab\255insert \(M-T)108 156 Q
+(AB\))-.9 E F0(Insert a tab character)144 168 Q(.)-.55 E F1
+(self\255insert \(a, b, A, 1, !, ...\))108 180 Q F0
+(Insert the character typed.)144 192 Q F1(transpose\255chars \(C\255t\))
+108 204 Q F0 .321(Drag the character before point forw)144 216 R .321
(ard o)-.1 F -.15(ve)-.15 G 2.821(rt).15 G .321
-(he character at point, mo)-2.821 F .321(ving point forw)-.15 F .321
+(he character at point, mo)-2.821 F .322(ving point forw)-.15 F .322
(ard as well.)-.1 F 1.182
-(If point is at the end of the line, then this transposes the tw)144 156
-R 3.683(oc)-.1 G 1.183(haracters before point.)-3.683 F(Ne)6.183 E -.05
-(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 168 Q(guments ha)-.18 E .3
+(If point is at the end of the line, then this transposes the tw)144 228
+R 3.682(oc)-.1 G 1.182(haracters before point.)-3.682 F(Ne)6.182 E -.05
+(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 240 Q(guments ha)-.18 E .3
-.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1
-(transpose\255w)108 180 Q(ords \(M\255t\))-.1 E F0(Drag the w)144 192 Q
-(ord before point past the w)-.1 E(ord after point, mo)-.1 E
-(ving point o)-.15 E -.15(ve)-.15 G 2.5(rt).15 G(hat w)-2.5 E
-(ord as well.)-.1 E F1(upcase\255w)108 204 Q(ord \(M\255u\))-.1 E F0
-1.699(Uppercase the current \(or follo)144 216 R 1.698(wing\) w)-.25 F
-4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.998
--.15(ve a)-.25 H -.18(rg).15 G 1.698(ument, uppercase the pre).18 F
-(vious)-.25 E -.1(wo)144 228 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15
-(ve p)-.15 H(oint.).15 E F1(do)108 240 Q(wncase\255w)-.1 E
-(ord \(M\255l\))-.1 E F0(Lo)144 252 Q 1.647
+(transpose\255w)108 252 Q(ords \(M\255t\))-.1 E F0 .023(Drag the w)144
+264 R .023(ord before point past the w)-.1 F .023(ord after point, mo)
+-.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.524(rt).15 G .024(hat w)
+-2.524 F .024(ord as well.)-.1 F .024(If point)5.024 F
+(is at the end of the line, this transposes the last tw)144 276 Q 2.5
+(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 288 Q
+(ord \(M\255u\))-.1 E F0 1.699(Uppercase the current \(or follo)144 300
+R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga)
+-.15 G(ti).05 E 1.998 -.15(ve a)-.25 H -.18(rg).15 G 1.698
+(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 312 S(rd, b).1 E
+(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 324 Q
+(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 336 Q 1.647
(wercase the current \(or follo)-.25 F 1.647(wing\) w)-.25 F 4.147
(ord. W)-.1 F 1.648(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.948 -.15
(ve a)-.25 H -.18(rg).15 G 1.648(ument, lo).18 F 1.648(wercase the pre)
--.25 F(vious)-.25 E -.1(wo)144 264 S(rd, b).1 E(ut do not mo)-.2 E .3
--.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 276 Q
-(ord \(M\255c\))-.1 E F0 1.975(Capitalize the current \(or follo)144 288
+-.25 F(vious)-.25 E -.1(wo)144 348 S(rd, b).1 E(ut do not mo)-.2 E .3
+-.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 360 Q
+(ord \(M\255c\))-.1 E F0 1.975(Capitalize the current \(or follo)144 372
R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga)
-.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.974
-(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 300 S(rd, b).1
+(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 384 S(rd, b).1
E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(Killing and Y)87
-316.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 328.8 Q F0
-(Kill the te)144 340.8 Q(xt from point to the end of the line.)-.15 E F1
-(backward\255kill\255line \(C\255x Rubout\))108 352.8 Q F0(Kill backw)
-144 364.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1
-(unix\255line\255discard \(C\255u\))108 376.8 Q F0(Kill backw)144 388.8
+400.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 412.8 Q F0
+(Kill the te)144 424.8 Q(xt from point to the end of the line.)-.15 E F1
+(backward\255kill\255line \(C\255x Rubout\))108 436.8 Q F0(Kill backw)
+144 448.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1
+(unix\255line\255discard \(C\255u\))108 460.8 Q F0(Kill backw)144 472.8
Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E
(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)
--2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 400.8 Q F0
+-2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 484.8 Q F0
(Kill all characters on the current line, no matter where point is.)144
-412.8 Q F1(kill\255w)108 424.8 Q(ord \(M\255d\))-.1 E F0 1.308
-(Kill from point the end of the current w)144 436.8 R 1.308
+496.8 Q F1(kill\255w)108 508.8 Q(ord \(M\255d\))-.1 E F0 1.308
+(Kill from point the end of the current w)144 520.8 R 1.308
(ord, or if between w)-.1 F 1.308(ords, to the end of the ne)-.1 F 1.308
-(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 448.8 S
+(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 532.8 S
(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G
-(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 460.8 Q
-(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 472.8 Q(ord behind point.)
+(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 544.8 Q
+(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 556.8 Q(ord behind point.)
-.1 E -.8(Wo)5 G(rd boundaries are the same as those used by).8 E F1
-(backward\255w)2.5 E(ord)-.1 E F0(.)A F1(unix\255w)108 484.8 Q
-(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 496.8 R .365
+(backward\255w)2.5 E(ord)-.1 E F0(.)A F1(unix\255w)108 568.8 Q
+(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 580.8 R .365
(ord behind point, using white space as a w)-.1 F .364(ord boundary)-.1
F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15
(ve)-.2 G 2.864(do).15 G 2.864(nt)-2.864 G(he)-2.864 E(kill-ring.)144
-508.8 Q F1(delete\255horizontal\255space \(M\255\\\))108 520.8 Q F0
-(Delete all spaces and tabs around point.)144 532.8 Q F1(kill\255r)108
-544.8 Q(egion)-.18 E F0 1.13(Kill the te)144 556.8 R 1.13
+592.8 Q F1(delete\255horizontal\255space \(M\255\\\))108 604.8 Q F0
+(Delete all spaces and tabs around point.)144 616.8 Q F1(kill\255r)108
+628.8 Q(egion)-.18 E F0 1.13(Kill the te)144 640.8 R 1.13
(xt between the point and)-.15 F/F2 10/Times-Italic@0 SF(mark)3.63 E F0
(\(sa)3.63 E -.15(ve)-.2 G 3.63(dc).15 G 1.13(ursor position\).)-3.63 F
1.13(This te)6.13 F 1.13(xt is referred to as the)-.15 F F2 -.37(re)144
-568.8 S(gion)-.03 E F0(.)A F1(copy\255r)108 580.8 Q(egion\255as\255kill)
--.18 E F0(Cop)144 592.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E
+652.8 S(gion)-.03 E F0(.)A F1(copy\255r)108 664.8 Q(egion\255as\255kill)
+-.18 E F0(Cop)144 676.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E
(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1
-(copy\255backward\255w)108 604.8 Q(ord)-.1 E F0(Cop)144 616.8 Q 4.801
+(copy\255backward\255w)108 688.8 Q(ord)-.1 E F0(Cop)144 700.8 Q 4.801
(yt)-.1 G 2.301(he w)-4.801 F 2.301(ord before point to the kill b)-.1 F
(uf)-.2 E(fer)-.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.3
-(ord boundaries are the same as)-.1 F F1(back-)4.8 E(ward\255w)144 628.8
-Q(ord)-.1 E F0(.)A F1(copy\255f)108 640.8 Q(orward\255w)-.25 E(ord)-.1 E
-F0(Cop)144 652.8 Q 4.507(yt)-.1 G 2.007(he w)-4.507 F 2.007(ord follo)
--.1 F 2.007(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.008
-(.T)-.55 G 2.008(he w)-7.008 F 2.008(ord boundaries are the same as)-.1
-F F1 -.25(fo)4.508 G -.37(r-).25 G(ward\255w)144 664.8 Q(ord)-.1 E F0(.)
-A F1(yank \(C\255y\))108 676.8 Q F0 -1(Ya)144 688.8 S
-(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25
-E F1(yank\255pop \(M\255y\))108 700.8 Q F0
-(Rotate the kill ring, and yank the ne)144 712.8 Q 2.5(wt)-.25 G 2.5
-(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E
-F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(7)205.67 E EP
+(ord boundaries are the same as)-.1 F F1(back-)4.8 E(ward\255w)144 712.8
+Q(ord)-.1 E F0(.)A(GNU Readline 4.2a)72 768 Q(2001 October 9)123.745 E
+(7)197.895 E EP
%%Page: 8 8
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
-/Times-Bold@0 SF(Numeric Ar)87 84 Q(guments)-.1 E(digit\255ar)108 96 Q
+/Times-Bold@0 SF(copy\255f)108 84 Q(orward\255w)-.25 E(ord)-.1 E F0(Cop)
+144 96 Q 4.507(yt)-.1 G 2.007(he w)-4.507 F 2.007(ord follo)-.1 F 2.007
+(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.008(.T)-.55 G
+2.008(he w)-7.008 F 2.008(ord boundaries are the same as)-.1 F F1 -.25
+(fo)4.508 G -.37(r-).25 G(ward\255w)144 108 Q(ord)-.1 E F0(.)A F1
+(yank \(C\255y\))108 120 Q F0 -1(Ya)144 132 S
+(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25
+E F1(yank\255pop \(M\255y\))108 144 Q F0
+(Rotate the kill ring, and yank the ne)144 156 Q 2.5(wt)-.25 G 2.5
+(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E
+F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 172.8 Q
+(guments)-.1 E(digit\255ar)108 184.8 Q
(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .642
-(Add this digit to the ar)144 108 R .641
+(Add this digit to the ar)144 196.8 R .641
(gument already accumulating, or start a ne)-.18 F 3.141(wa)-.25 G -.18
(rg)-3.141 G 3.141(ument. M\255\255).18 F .641(starts a ne)3.141 F(g-)
--.15 E(ati)144 120 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1
-(uni)108 132 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .778
-(This is another w)144 144 R .779(ay to specify an ar)-.1 F 3.279
+-.15 E(ati)144 208.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1
+(uni)108 220.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .778
+(This is another w)144 232.8 R .779(ay to specify an ar)-.1 F 3.279
(gument. If)-.18 F .779(this command is follo)3.279 F .779
(wed by one or more digits,)-.25 F 1.376
(optionally with a leading minus sign, those digits de\214ne the ar)144
-156 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144
-168 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni)
+244.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144
+256.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni)
3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17
(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other)
--.2 F(-)-.2 E .899(wise ignored.)144 180 R .898
+-.2 F(-)-.2 E .899(wise ignored.)144 268.8 R .898
(As a special case, if this command is immediately follo)5.899 F .898
(wed by a character that is)-.25 F .243
-(neither a digit or minus sign, the ar)144 192 R .243
+(neither a digit or minus sign, the ar)144 280.8 R .243
(gument count for the ne)-.18 F .243(xt command is multiplied by four)
--.15 F 5.243(.T)-.55 G(he)-5.243 E(ar)144 204 Q .378
+-.15 F 5.243(.T)-.55 G(he)-5.243 E(ar)144 292.8 Q .378
(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378
(cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F
-.378(gument count)-.18 F(four)144 216 Q 2.5(,as)-.4 G(econd time mak)
+.378(gument count)-.18 F(four)144 304.8 Q 2.5(,as)-.4 G(econd time mak)
-2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1
-(Completing)87 232.8 Q(complete \(T)108 244.8 Q(AB\))-.9 E F0 1.908
-(Attempt to perform completion on the te)144 256.8 R 1.908
+(Completing)87 321.6 Q(complete \(T)108 333.6 Q(AB\))-.9 E F0 1.908
+(Attempt to perform completion on the te)144 345.6 R 1.908
(xt before point.)-.15 F 1.909(The actual completion performed is)6.909
-F(application-speci\214c.)144 268.8 Q F1(Bash)5.518 E F0 3.018(,f)C .518
+F(application-speci\214c.)144 357.6 Q F1(Bash)5.518 E F0 3.018(,f)C .518
(or instance, attempts completion treating the te)-3.018 F .517
-(xt as a v)-.15 F .517(ariable \(if the)-.25 F(te)144 280.8 Q .656
+(xt as a v)-.15 F .517(ariable \(if the)-.25 F(te)144 369.6 Q .656
(xt be)-.15 F .656(gins with)-.15 F F1($)3.156 E F0 .656
(\), username \(if the te)B .656(xt be)-.15 F .656(gins with)-.15 F F1
(~)3.156 E F0 .656(\), hostname \(if the te)B .656(xt be)-.15 F .656
(gins with)-.15 F F1(@)3.157 E F0 .657(\), or)B .93
-(command \(including aliases and functions\) in turn.)144 292.8 R .929
+(command \(including aliases and functions\) in turn.)144 381.6 R .929
(If none of these produces a match, \214lename)5.929 F 1.273
-(completion is attempted.)144 304.8 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773
+(completion is attempted.)144 393.6 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773
(nt)-3.773 G 1.273(he other hand, allo)-3.773 F 1.273
-(ws completion of program functions and)-.25 F -.25(va)144 316.8 S(riab\
+(ws completion of program functions and)-.25 F -.25(va)144 405.6 S(riab\
les, and only attempts \214lename completion under certain circumstance\
-s.).25 E F1(possible\255completions \(M\255?\))108 328.8 Q F0
-(List the possible completions of the te)144 340.8 Q(xt before point.)
--.15 E F1(insert\255completions \(M\255*\))108 352.8 Q F0 .783
-(Insert all completions of the te)144 364.8 R .783
+s.).25 E F1(possible\255completions \(M\255?\))108 417.6 Q F0
+(List the possible completions of the te)144 429.6 Q(xt before point.)
+-.15 E F1(insert\255completions \(M\255*\))108 441.6 Q F0 .783
+(Insert all completions of the te)144 453.6 R .783
(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H
.783(een generated by).15 F F1(possible\255com-)3.282 E(pletions)144
-376.8 Q F0(.)A F1(menu\255complete)108 388.8 Q F0 .928(Similar to)144
-400.8 R F1(complete)3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628
+465.6 Q F0(.)A F1(menu\255complete)108 477.6 Q F0 .928(Similar to)144
+489.6 R F1(complete)3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628
F .929(ord to be completed with a single match from the list of)-.1 F
-1.194(possible completions.)144 412.8 R 1.194(Repeated e)6.194 F -.15
+1.194(possible completions.)144 501.6 R 1.194(Repeated e)6.194 F -.15
(xe)-.15 G 1.194(cution of).15 F F1(menu\255complete)3.694 E F0 1.193
(steps through the list of possible)3.694 F .828
-(completions, inserting each match in turn.)144 424.8 R .828
+(completions, inserting each match in turn.)144 513.6 R .828
(At the end of the list of completions, the bell is rung)5.828 F 1.927
-(\(subject to the setting of Bbell\255style)144 436.8 R F1 4.427(\)a)C
+(\(subject to the setting of Bbell\255style)144 525.6 R F1 4.427(\)a)C
1.927(nd the original text is r)-4.427 F(estor)-.18 E 4.426(ed. An)-.18
F(ar)4.426 E 1.926(gument of)-.1 F/F2 10/Times-Italic@0 SF(n)4.426 E F1
-(mo)144 448.8 Q -.1(ve)-.1 G(s).1 E F2(n)3.145 E F1 .645(positions f)
+(mo)144 537.6 Q -.1(ve)-.1 G(s).1 E F2(n)3.145 E F1 .645(positions f)
3.145 F .645(orward in the list of matches; a negati)-.25 F .845 -.1
(ve a)-.1 H -.1(rg).1 G .645(ument may be used to mo).1 F -.1(ve)-.1 G
-.666(backward thr)144 460.8 R .666(ough the list.)-.18 F .665
+.666(backward thr)144 549.6 R .666(ough the list.)-.18 F .665
(This command is intended to be bound to T)5.666 F .665(AB, b)-.9 F .665
-(ut is unbound)-.2 F(by default.)144 472.8 Q
-(delete\255char\255or\255list)108 484.8 Q F0 .373
-(Deletes the character under the cursor if not at the be)144 496.8 R
+(ut is unbound)-.2 F(by default.)144 561.6 Q
+(delete\255char\255or\255list)108 573.6 Q F0 .373
+(Deletes the character under the cursor if not at the be)144 585.6 R
.374(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete-char)
-2.874 E F0(\).)A(If at the end of the line, beha)144 508.8 Q -.15(ve)-.2
+2.874 E F0(\).)A(If at the end of the line, beha)144 597.6 Q -.15(ve)-.2
G 2.5(si).15 G(dentically to)-2.5 E F1(possible-completions)2.5 E F0(.)A
-F1 -.25(Ke)87 525.6 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr)
-108 537.6 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 549.6 Q
+F1 -.25(Ke)87 614.4 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr)
+108 626.4 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 638.4 Q
(gin sa)-.15 E(ving the characters typed into the current k)-.2 E -.15
-(ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 561.6 Q 2.5(o\()
--.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 573.6 Q
+(ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 650.4 Q 2.5(o\()
+-.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 662.4 Q
(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G
(board macro and store the de\214nition.).15 E F1
-(call\255last\255kbd\255macr)108 585.6 Q 2.5(o\()-.18 G(C\255x e\))-2.5
-E F0(Re-e)144 597.6 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1
+(call\255last\255kbd\255macr)108 674.4 Q 2.5(o\()-.18 G(C\255x e\))-2.5
+E F0(Re-e)144 686.4 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1
G .999(board macro de\214ned, by making the characters in the macro app\
-ear as if).15 F(typed at the k)144 609.6 Q -.15(ey)-.1 G(board.).15 E F1
-(Miscellaneous)87 626.4 Q -.18(re)108 638.4 S<ad72>.18 E
-(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776
-(Read in the contents of the)144 650.4 R F2(inputr)4.276 E(c)-.37 E F0
-1.777(\214le, and incorporate an)4.276 F 4.277(yb)-.15 G 1.777
-(indings or v)-4.277 F 1.777(ariable assignments)-.25 F(found there.)144
-662.4 Q F1(abort \(C\255g\))108 674.4 Q F0 3.249
-(Abort the current editing command and ring the terminal')144 686.4 R
-5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1
-(bell\255style)144 698.4 Q F0(\).)A(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(8)205.67 E EP
+ear as if).15 F(typed at the k)144 698.4 Q -.15(ey)-.1 G(board.).15 E
+(GNU Readline 4.2a)72 768 Q(2001 October 9)123.745 E(8)197.895 E EP
%%Page: 9 9
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10
-/Times-Bold@0 SF(do\255upper)108 84 Q(case\255v)-.18 E
-(ersion \(M\255a, M\255b, M\255)-.1 E/F2 10/Times-Italic@0 SF(x)A F1 2.5
-(,.)C(..\))-2.5 E F0 1.755(If the meta\214ed character)144 96 R F2(x)
-4.255 E F0 1.755(is lo)4.255 F 1.756
+/Times-Bold@0 SF(Miscellaneous)87 84 Q -.18(re)108 96 S<ad72>.18 E
+(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776
+(Read in the contents of the)144 108 R/F2 10/Times-Italic@0 SF(inputr)
+4.276 E(c)-.37 E F0 1.777(\214le, and incorporate an)4.276 F 4.277(yb)
+-.15 G 1.777(indings or v)-4.277 F 1.777(ariable assignments)-.25 F
+(found there.)144 120 Q F1(abort \(C\255g\))108 132 Q F0 3.249
+(Abort the current editing command and ring the terminal')144 144 R
+5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1
+(bell\255style)144 156 Q F0(\).)A F1(do\255upper)108 168 Q(case\255v)
+-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F2(x)A F1 2.5(,.)C(..\))-2.5
+E F0 1.755(If the meta\214ed character)144 180 R F2(x)4.255 E F0 1.755
+(is lo)4.255 F 1.756
(wercase, run the command that is bound to the corresponding)-.25 F
-(uppercase character)144 108 Q(.)-.55 E F1(pr)108 120 Q
-(e\214x\255meta \(ESC\))-.18 E F0(Metafy the ne)144 132 Q
+(uppercase character)144 192 Q(.)-.55 E F1(pr)108 204 Q
+(e\214x\255meta \(ESC\))-.18 E F0(Metafy the ne)144 216 Q
(xt character typed.)-.15 E/F3 9/Times-Bold@0 SF(ESC)5 E F1(f)2.25 E F0
(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1(Meta\255f)2.5 E F0(.)A F1
-(undo \(C\255_, C\255x C\255u\))108 144 Q F0
-(Incremental undo, separately remembered for each line.)144 156 Q F1
--2.29 -.18(re v)108 168 T(ert\255line \(M\255r\)).08 E F0 1.095
-(Undo all changes made to this line.)144 180 R 1.095(This is lik)6.095 F
+(undo \(C\255_, C\255x C\255u\))108 228 Q F0
+(Incremental undo, separately remembered for each line.)144 240 Q F1
+-2.29 -.18(re v)108 252 T(ert\255line \(M\255r\)).08 E F0 1.095
+(Undo all changes made to this line.)144 264 R 1.095(This is lik)6.095 F
3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E
F0 1.095(command enough times to)3.595 F
-(return the line to its initial state.)144 192 Q F1
-(tilde\255expand \(M\255&\))108 204 Q F0(Perform tilde e)144 216 Q
+(return the line to its initial state.)144 276 Q F1
+(tilde\255expand \(M\255&\))108 288 Q F0(Perform tilde e)144 300 Q
(xpansion on the current w)-.15 E(ord.)-.1 E F1
-(set\255mark \(C\255@, M\255<space>\))108 228 Q F0
-(Set the mark to the point.)144 240 Q(If a numeric ar)5 E
+(set\255mark \(C\255@, M\255<space>\))108 312 Q F0
+(Set the mark to the point.)144 324 Q(If a numeric ar)5 E
(gument is supplied, the mark is set to that position.)-.18 E F1
-(exchange\255point\255and\255mark \(C\255x C\255x\))108 252 Q F0(Sw)144
-264 Q .282(ap the point with the mark.)-.1 F .283
+(exchange\255point\255and\255mark \(C\255x C\255x\))108 336 Q F0(Sw)144
+348 Q .282(ap the point with the mark.)-.1 F .283
(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G
2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa)
-144 276 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1
-(character\255sear)108 288 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 300 S
+144 360 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1
+(character\255sear)108 372 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 384 S
.536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G 3.035(dt)
.15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535
(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05
(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre)
-144 312 Q(vious occurrences.)-.25 E F1(character\255sear)108 324 Q
-(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 336 S 1.043
+144 396 Q(vious occurrences.)-.25 E F1(character\255sear)108 408 Q
+(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 420 S 1.043
(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G
3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044
(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E
-.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G
-(count searches for subsequent occurrences.)144 348 Q F1
-(insert\255comment \(M\255#\))108 360 Q F0 .291(The v)144 372 R .291
+(count searches for subsequent occurrences.)144 432 Q F1
+(insert\255comment \(M\255#\))108 444 Q F0 .291(The v)144 456 R .291
(alue of the readline)-.25 F F1(comment\255begin)2.791 E F0 -.25(va)
2.791 G .291(riable is inserted at the be).25 F .29
(ginning of the current line,)-.15 F 1.277
-(and the line is accepted as if a ne)144 384 R 1.277
+(and the line is accepted as if a ne)144 468 R 1.277
(wline had been typed.)-.25 F 1.277(The def)6.277 F 1.277(ault v)-.1 F
-1.277(alue of)-.25 F F1(comment\255begin)3.777 E F0(mak)144 396 Q
-(es the current line a shell comment.)-.1 E F1(dump\255functions)108 408
-Q F0 .627(Print all of the functions and their k)144 420 R .927 -.15
+1.277(alue of)-.25 F F1(comment\255begin)3.777 E F0(mak)144 480 Q
+(es the current line a shell comment.)-.1 E F1(dump\255functions)108 492
+Q F0 .627(Print all of the functions and their k)144 504 R .927 -.15
(ey b)-.1 H .626(indings to the readline output stream.).15 F .626
(If a numeric ar)5.626 F(gu-)-.18 E
-(ment is supplied, the output is formatted in such a w)144 432 Q
+(ment is supplied, the output is formatted in such a w)144 516 Q
(ay that it can be made part of an)-.1 E F2(inputr)2.5 E(c)-.37 E F0
-(\214le.)2.5 E F1(dump\255v)108 444 Q(ariables)-.1 E F0 .283
-(Print all of the settable v)144 456 R .283(ariables and their v)-.25 F
+(\214le.)2.5 E F1(dump\255v)108 528 Q(ariables)-.1 E F0 .283
+(Print all of the settable v)144 540 R .283(ariables and their v)-.25 F
.283(alues to the readline output stream.)-.25 F .283(If a numeric ar)
5.283 F(gu-)-.18 E
-(ment is supplied, the output is formatted in such a w)144 468 Q
+(ment is supplied, the output is formatted in such a w)144 552 Q
(ay that it can be made part of an)-.1 E F2(inputr)2.5 E(c)-.37 E F0
-(\214le.)2.5 E F1(dump\255macr)108 480 Q(os)-.18 E F0 .756
-(Print all of the readline k)144 492 R 1.056 -.15(ey s)-.1 H .756
+(\214le.)2.5 E F1(dump\255macr)108 564 Q(os)-.18 E F0 .756
+(Print all of the readline k)144 576 R 1.056 -.15(ey s)-.1 H .756
(equences bound to macros and the strings the).15 F 3.256(yo)-.15 G
-3.256(uput. If)-3.256 F 3.255(an)3.255 G(umeric)-3.255 E(ar)144 504 Q
+3.256(uput. If)-3.256 F 3.255(an)3.255 G(umeric)-3.255 E(ar)144 588 Q
.528(gument is supplied, the output is formatted in such a w)-.18 F .528
(ay that it can be made part of an)-.1 F F2(inputr)3.028 E(c)-.37 E F0
-(\214le.)144 516 Q F1(emacs\255editing\255mode \(C\255e\))108 528 Q F0
-(When in)144 540 Q F1(vi)2.5 E F0(editing mode, this causes a switch to)
+(\214le.)144 600 Q F1(emacs\255editing\255mode \(C\255e\))108 612 Q F0
+(When in)144 624 Q F1(vi)2.5 E F0(editing mode, this causes a switch to)
2.5 E F1(emacs)2.5 E F0(editing mode.)2.5 E F1
-(vi\255editing\255mode \(M\255C\255j\))108 552 Q F0(When in)144 564 Q F1
+(vi\255editing\255mode \(M\255C\255j\))108 636 Q F0(When in)144 648 Q F1
(emacs)2.5 E F0(editing mode, this causes a switch to)2.5 E F1(vi)2.5 E
-F0(editing mode.)2.5 E/F4 10.95/Times-Bold@0 SF(DEF)72 580.8 Q -.548(AU)
+F0(editing mode.)2.5 E/F4 10.95/Times-Bold@0 SF(DEF)72 664.8 Q -.548(AU)
-.986 G 2.014 -1.007(LT K).548 H(EY BINDINGS)1.007 E F0 .065(The follo)
-108 592.8 R .065(wing is a list of the def)-.25 F .065
+108 676.8 R .065(wing is a list of the def)-.25 F .065
(ault emacs and vi bindings.)-.1 F .064
(Characters with the eighth bit set are written as)5.064 F .615
-(M\255<character>, and are referred to as)108 604.8 R F2(meta\214ed)
+(M\255<character>, and are referred to as)108 688.8 R F2(meta\214ed)
3.115 E F0 3.115(characters. The)3.115 F .616
(printable ASCII characters not mentioned)3.116 F 1.116
-(in the list of emacs standard bindings are bound to the)108 616.8 R F1
+(in the list of emacs standard bindings are bound to the)108 700.8 R F1
(self\255insert)3.615 E F0 1.115(function, which just inserts the gi)
3.615 F -.15(ve)-.25 G(n).15 E .945(character into the input line.)108
-628.8 R .945(In vi insertion mode, all characters not speci\214cally me\
-ntioned are bound to)5.945 F F1(self\255insert)108 640.8 Q F0 5.359(.C)C
+712.8 R .945(In vi insertion mode, all characters not speci\214cally me\
+ntioned are bound to)5.945 F F1(self\255insert)108 724.8 Q F0 5.359(.C)C
.359(haracters assigned to signal generation by)-5.359 F F2(stty)2.859 E
F0 .359(\(1\) or the terminal dri).32 F -.15(ve)-.25 G 1.159 -.4(r, s)
-.15 H .358(uch as C-Z or C-C,).4 F .187(retain that function.)108 652.8
-R .187(Upper and lo)5.187 F .188(wer case meta\214ed characters are bou\
-nd to the same function in the emacs)-.25 F .305(mode meta k)108 664.8 R
--.15(ey)-.1 G 2.805(map. The).15 F .305(remaining characters are unboun\
-d, which causes readline to ring the bell \(subject)2.805 F
-(to the setting of the)108 676.8 Q F1(bell\255style)2.5 E F0 -.25(va)2.5
-G(riable\).).25 E F1(Emacs Mode)87 693.6 Q F0(Emacs Standard bindings)
-151.2 705.6 Q 2.5("C-@" set-mark)151.2 729.6 R(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(9)205.67 E EP
+.15 H .358(uch as C-Z or C-C,).4 F(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(9)197.895 E EP
%%Page: 10 10
%%BeginPageSetup
BP
%%EndPageSetup
-/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5
-("C-A" be)151.2 84 R(ginning-of-line)-.15 E 2.5("C-B" backw)151.2 96 R
-(ard-char)-.1 E 2.5("C-D" delete-char)151.2 108 R 2.5("C-E" end-of-line)
-151.2 120 R 2.5("C-F" forw)151.2 132 R(ard-char)-.1 E 2.5("C-G" abort)
-151.2 144 R 2.5("C-H" backw)151.2 156 R(ard-delete-char)-.1 E 2.5
-("C-I" complete)151.2 168 R 2.5("C-J" accept-line)151.2 180 R 2.5
-("C-K" kill-line)151.2 192 R 2.5("C-L" clear)151.2 204 R(-screen)-.2 E
-2.5("C-M" accept-line)151.2 216 R 2.5("C-N" ne)151.2 228 R(xt-history)
--.15 E 2.5("C-P" pre)151.2 240 R(vious-history)-.25 E 2.5
-("C-Q" quoted-insert)151.2 252 R 2.5("C-R" re)151.2 264 R -.15(ve)-.25 G
-(rse-search-history).15 E 2.5("C-S" forw)151.2 276 R(ard-search-history)
--.1 E 2.5("C-T" transpose-chars)151.2 288 R 2.5("C-U" unix-line-discard)
-151.2 300 R 2.5("C-V" quoted-insert)151.2 312 R 2.5("C-W" unix-w)151.2
-324 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 336 R 2.5("C-]" character)
-151.2 348 R(-search)-.2 E 2.5("C-_" undo)151.2 360 R 3.333("")151.2 372
-S(to "/")-.833 E(self-insert)5 E 2.5("0" to)151.2 384 R 2.5
-("9" self-insert)2.5 F 2.5(":" to)151.2 396 R 2.5("~" self-insert)2.5 F
-2.5("C-?" backw)151.2 408 R(ard-delete-char)-.1 E(Emacs Meta bindings)
-151.2 424.8 Q 2.5("M-C-G" abort)151.2 448.8 R 2.5("M-C-H" backw)151.2
-460.8 R(ard-kill-w)-.1 E(ord)-.1 E 2.5("M-C-I" tab-insert)151.2 472.8 R
-2.5("M-C-J" vi-editing-mode)151.2 484.8 R 2.5("M-C-M" vi-editing-mode)
-151.2 496.8 R 2.5("M-C-R" re)151.2 508.8 R -.15(ve)-.25 G(rt-line).15 E
-2.5("M-C-Y" yank-nth-ar)151.2 520.8 R(g)-.18 E 2.5("M-C-[" complete)
-151.2 532.8 R 2.5("M-C-]" character)151.2 544.8 R(-search-backw)-.2 E
-(ard)-.1 E 2.5("M-space" set-mark)151.2 556.8 R 2.5
-("M-#" insert-comment)151.2 568.8 R 2.5("M-&" tilde-e)151.2 580.8 R
-(xpand)-.15 E 2.5("M-*" insert-completions)151.2 592.8 R 2.5
-("M--" digit-ar)151.2 604.8 R(gument)-.18 E 2.5("M-." yank-last-ar)151.2
-616.8 R(g)-.18 E 2.5("M-0" digit-ar)151.2 628.8 R(gument)-.18 E 2.5
-("M-1" digit-ar)151.2 640.8 R(gument)-.18 E 2.5("M-2" digit-ar)151.2
-652.8 R(gument)-.18 E 2.5("M-3" digit-ar)151.2 664.8 R(gument)-.18 E 2.5
-("M-4" digit-ar)151.2 676.8 R(gument)-.18 E 2.5("M-5" digit-ar)151.2
-688.8 R(gument)-.18 E 2.5("M-6" digit-ar)151.2 700.8 R(gument)-.18 E 2.5
-("M-7" digit-ar)151.2 712.8 R(gument)-.18 E 2.5("M-8" digit-ar)151.2
-724.8 R(gument)-.18 E(GNU Readline 4.2)72 768 Q(2001 Mar 5)135.96 E(10)
-200.67 E EP
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R .187
+(retain that function.)108 84 R .187(Upper and lo)5.187 F .188(wer case\
+ meta\214ed characters are bound to the same function in the emacs)-.25
+F .305(mode meta k)108 96 R -.15(ey)-.1 G 2.805(map. The).15 F .305(rem\
+aining characters are unbound, which causes readline to ring the bell \
+\(subject)2.805 F(to the setting of the)108 108 Q/F1 10/Times-Bold@0 SF
+(bell\255style)2.5 E F0 -.25(va)2.5 G(riable\).).25 E F1(Emacs Mode)87
+124.8 Q F0(Emacs Standard bindings)151.2 136.8 Q 2.5("C-@" set-mark)
+151.2 160.8 R 2.5("C-A" be)151.2 172.8 R(ginning-of-line)-.15 E 2.5
+("C-B" backw)151.2 184.8 R(ard-char)-.1 E 2.5("C-D" delete-char)151.2
+196.8 R 2.5("C-E" end-of-line)151.2 208.8 R 2.5("C-F" forw)151.2 220.8 R
+(ard-char)-.1 E 2.5("C-G" abort)151.2 232.8 R 2.5("C-H" backw)151.2
+244.8 R(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 256.8 R 2.5
+("C-J" accept-line)151.2 268.8 R 2.5("C-K" kill-line)151.2 280.8 R 2.5
+("C-L" clear)151.2 292.8 R(-screen)-.2 E 2.5("C-M" accept-line)151.2
+304.8 R 2.5("C-N" ne)151.2 316.8 R(xt-history)-.15 E 2.5("C-P" pre)151.2
+328.8 R(vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 340.8 R 2.5
+("C-R" re)151.2 352.8 R -.15(ve)-.25 G(rse-search-history).15 E 2.5
+("C-S" forw)151.2 364.8 R(ard-search-history)-.1 E 2.5
+("C-T" transpose-chars)151.2 376.8 R 2.5("C-U" unix-line-discard)151.2
+388.8 R 2.5("C-V" quoted-insert)151.2 400.8 R 2.5("C-W" unix-w)151.2
+412.8 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 424.8 R 2.5
+("C-]" character)151.2 436.8 R(-search)-.2 E 2.5("C-_" undo)151.2 448.8
+R 3.333("")151.2 460.8 S(to "/")-.833 E(self-insert)5 E 2.5("0" to)151.2
+472.8 R 2.5("9" self-insert)2.5 F 2.5(":" to)151.2 484.8 R 2.5
+("~" self-insert)2.5 F 2.5("C-?" backw)151.2 496.8 R(ard-delete-char)-.1
+E(Emacs Meta bindings)151.2 513.6 Q 2.5("M-C-G" abort)151.2 537.6 R 2.5
+("M-C-H" backw)151.2 549.6 R(ard-kill-w)-.1 E(ord)-.1 E 2.5
+("M-C-I" tab-insert)151.2 561.6 R 2.5("M-C-J" vi-editing-mode)151.2
+573.6 R 2.5("M-C-M" vi-editing-mode)151.2 585.6 R 2.5("M-C-R" re)151.2
+597.6 R -.15(ve)-.25 G(rt-line).15 E 2.5("M-C-Y" yank-nth-ar)151.2 609.6
+R(g)-.18 E 2.5("M-C-[" complete)151.2 621.6 R 2.5("M-C-]" character)
+151.2 633.6 R(-search-backw)-.2 E(ard)-.1 E 2.5("M-space" set-mark)151.2
+645.6 R 2.5("M-#" insert-comment)151.2 657.6 R 2.5("M-&" tilde-e)151.2
+669.6 R(xpand)-.15 E 2.5("M-*" insert-completions)151.2 681.6 R 2.5
+("M--" digit-ar)151.2 693.6 R(gument)-.18 E 2.5("M-." yank-last-ar)151.2
+705.6 R(g)-.18 E 2.5("M-0" digit-ar)151.2 717.6 R(gument)-.18 E 2.5
+("M-1" digit-ar)151.2 729.6 R(gument)-.18 E(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(10)192.895 E EP
%%Page: 11 11
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5
-("M-9" digit-ar)151.2 84 R(gument)-.18 E 2.5("M-<" be)151.2 96 R
-(ginning-of-history)-.15 E 2.5("M-=" possible-completions)151.2 108 R
-2.5("M->" end-of-history)151.2 120 R 2.5("M-?" possible-completions)
-151.2 132 R 2.5("M-B" backw)151.2 144 R(ard-w)-.1 E(ord)-.1 E 2.5
-("M-C" capitalize-w)151.2 156 R(ord)-.1 E 2.5("M-D" kill-w)151.2 168 R
-(ord)-.1 E 2.5("M-F" forw)151.2 180 R(ard-w)-.1 E(ord)-.1 E 2.5
-("M-L" do)151.2 192 R(wncase-w)-.25 E(ord)-.1 E 2.5
-("M-N" non-incremental-forw)151.2 204 R(ard-search-history)-.1 E 2.5
-("M-P" non-incremental-re)151.2 216 R -.15(ve)-.25 G(rse-search-history)
-.15 E 2.5("M-R" re)151.2 228 R -.15(ve)-.25 G(rt-line).15 E 2.5
-("M-T" transpose-w)151.2 240 R(ords)-.1 E 2.5("M-U" upcase-w)151.2 252 R
-(ord)-.1 E 2.5("M-Y" yank-pop)151.2 264 R 2.5
-("M-\\" delete-horizontal-space)151.2 276 R 2.5("M-~" tilde-e)151.2 288
-R(xpand)-.15 E 2.5("M-C-?" backw)151.2 300 R(ard-kill-w)-.1 E(ord)-.1 E
-2.5("M-_" yank-last-ar)151.2 312 R(g)-.18 E(Emacs Control-X bindings)
-151.2 328.8 Q 2.5("C-XC-G" abort)151.2 352.8 R 2.5
-("C-XC-R" re-read-init-\214le)151.2 364.8 R 2.5("C-XC-U" undo)151.2
-376.8 R 2.5("C-XC-X" e)151.2 388.8 R(xchange-point-and-mark)-.15 E 2.5
-("C-X\(" start-kbd-macro)151.2 400.8 R 2.5("C-X\)" end-kbd-macro)151.2
-412.8 R 2.5("C-XE" call-last-kbd-macro)151.2 424.8 R 2.5("C-XC-?" backw)
-151.2 436.8 R(ard-kill-line)-.1 E/F1 10/Times-Bold@0 SF
-(VI Mode bindings)87 465.6 Q F0(VI Insert Mode functions)151.2 477.6 Q
-2.5("C-D" vi-eof-maybe)151.2 501.6 R 2.5("C-H" backw)151.2 513.6 R
-(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 525.6 R 2.5
-("C-J" accept-line)151.2 537.6 R 2.5("C-M" accept-line)151.2 549.6 R 2.5
-("C-R" re)151.2 561.6 R -.15(ve)-.25 G(rse-search-history).15 E 2.5
-("C-S" forw)151.2 573.6 R(ard-search-history)-.1 E 2.5
-("C-T" transpose-chars)151.2 585.6 R 2.5("C-U" unix-line-discard)151.2
-597.6 R 2.5("C-V" quoted-insert)151.2 609.6 R 2.5("C-W" unix-w)151.2
-621.6 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 633.6 R 2.5("C-[" vi-mo)
-151.2 645.6 R -.15(ve)-.15 G(ment-mode).15 E 2.5("C-_" undo)151.2 657.6
-R 3.333("")151.2 669.6 S(to "~")-.833 E(self-insert)5 E 2.5("C-?" backw)
-151.2 681.6 R(ard-delete-char)-.1 E(VI Command Mode functions)151.2
-698.4 Q 2.5("C-D" vi-eof-maybe)151.2 722.4 R(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(11)200.67 E EP
+("M-2" digit-ar)151.2 84 R(gument)-.18 E 2.5("M-3" digit-ar)151.2 96 R
+(gument)-.18 E 2.5("M-4" digit-ar)151.2 108 R(gument)-.18 E 2.5
+("M-5" digit-ar)151.2 120 R(gument)-.18 E 2.5("M-6" digit-ar)151.2 132 R
+(gument)-.18 E 2.5("M-7" digit-ar)151.2 144 R(gument)-.18 E 2.5
+("M-8" digit-ar)151.2 156 R(gument)-.18 E 2.5("M-9" digit-ar)151.2 168 R
+(gument)-.18 E 2.5("M-<" be)151.2 180 R(ginning-of-history)-.15 E 2.5
+("M-=" possible-completions)151.2 192 R 2.5("M->" end-of-history)151.2
+204 R 2.5("M-?" possible-completions)151.2 216 R 2.5("M-B" backw)151.2
+228 R(ard-w)-.1 E(ord)-.1 E 2.5("M-C" capitalize-w)151.2 240 R(ord)-.1 E
+2.5("M-D" kill-w)151.2 252 R(ord)-.1 E 2.5("M-F" forw)151.2 264 R(ard-w)
+-.1 E(ord)-.1 E 2.5("M-L" do)151.2 276 R(wncase-w)-.25 E(ord)-.1 E 2.5
+("M-N" non-incremental-forw)151.2 288 R(ard-search-history)-.1 E 2.5
+("M-P" non-incremental-re)151.2 300 R -.15(ve)-.25 G(rse-search-history)
+.15 E 2.5("M-R" re)151.2 312 R -.15(ve)-.25 G(rt-line).15 E 2.5
+("M-T" transpose-w)151.2 324 R(ords)-.1 E 2.5("M-U" upcase-w)151.2 336 R
+(ord)-.1 E 2.5("M-Y" yank-pop)151.2 348 R 2.5
+("M-\\" delete-horizontal-space)151.2 360 R 2.5("M-~" tilde-e)151.2 372
+R(xpand)-.15 E 2.5("M-C-?" backw)151.2 384 R(ard-kill-w)-.1 E(ord)-.1 E
+2.5("M-_" yank-last-ar)151.2 396 R(g)-.18 E(Emacs Control-X bindings)
+151.2 412.8 Q 2.5("C-XC-G" abort)151.2 436.8 R 2.5
+("C-XC-R" re-read-init-\214le)151.2 448.8 R 2.5("C-XC-U" undo)151.2
+460.8 R 2.5("C-XC-X" e)151.2 472.8 R(xchange-point-and-mark)-.15 E 2.5
+("C-X\(" start-kbd-macro)151.2 484.8 R 2.5("C-X\)" end-kbd-macro)151.2
+496.8 R 2.5("C-XE" call-last-kbd-macro)151.2 508.8 R 2.5("C-XC-?" backw)
+151.2 520.8 R(ard-kill-line)-.1 E/F1 10/Times-Bold@0 SF
+(VI Mode bindings)87 549.6 Q F0(VI Insert Mode functions)151.2 561.6 Q
+2.5("C-D" vi-eof-maybe)151.2 585.6 R 2.5("C-H" backw)151.2 597.6 R
+(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 609.6 R 2.5
+("C-J" accept-line)151.2 621.6 R 2.5("C-M" accept-line)151.2 633.6 R 2.5
+("C-R" re)151.2 645.6 R -.15(ve)-.25 G(rse-search-history).15 E 2.5
+("C-S" forw)151.2 657.6 R(ard-search-history)-.1 E 2.5
+("C-T" transpose-chars)151.2 669.6 R 2.5("C-U" unix-line-discard)151.2
+681.6 R 2.5("C-V" quoted-insert)151.2 693.6 R 2.5("C-W" unix-w)151.2
+705.6 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 717.6 R 2.5("C-[" vi-mo)
+151.2 729.6 R -.15(ve)-.15 G(ment-mode).15 E(GNU Readline 4.2a)72 768 Q
+(2001 October 9)123.745 E(11)192.895 E EP
%%Page: 12 12
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5
-("C-E" emacs-editing-mode)151.2 84 R 2.5("C-G" abort)151.2 96 R 2.5
-("C-H" backw)151.2 108 R(ard-char)-.1 E 2.5("C-J" accept-line)151.2 120
-R 2.5("C-K" kill-line)151.2 132 R 2.5("C-L" clear)151.2 144 R(-screen)
--.2 E 2.5("C-M" accept-line)151.2 156 R 2.5("C-N" ne)151.2 168 R
-(xt-history)-.15 E 2.5("C-P" pre)151.2 180 R(vious-history)-.25 E 2.5
-("C-Q" quoted-insert)151.2 192 R 2.5("C-R" re)151.2 204 R -.15(ve)-.25 G
-(rse-search-history).15 E 2.5("C-S" forw)151.2 216 R(ard-search-history)
--.1 E 2.5("C-T" transpose-chars)151.2 228 R 2.5("C-U" unix-line-discard)
-151.2 240 R 2.5("C-V" quoted-insert)151.2 252 R 2.5("C-W" unix-w)151.2
-264 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 276 R 2.5("C-_" vi-undo)
-151.2 288 R -4.166 3.333("" f)151.2 300 T(orw)-3.333 E(ard-char)-.1 E
-2.5("#" insert-comment)151.2 312 R 2.5("$" end-of-line)151.2 324 R 2.5
-("%" vi-match)151.2 336 R 2.5("&" vi-tilde-e)151.2 348 R(xpand)-.15 E
-2.5("*" vi-complete)151.2 360 R 2.5("+" ne)151.2 372 R(xt-history)-.15 E
-2.5("," vi-char)151.2 384 R(-search)-.2 E 2.5("-" pre)151.2 396 R
-(vious-history)-.25 E 2.5("." vi-redo)151.2 408 R 2.5("/" vi-search)
-151.2 420 R 2.5("0" be)151.2 432 R(ginning-of-line)-.15 E("1" to "9")
-151.2 444 Q(vi-ar)5 E(g-digit)-.18 E 2.5(";" vi-char)151.2 456 R
-(-search)-.2 E 2.5("=" vi-complete)151.2 468 R 2.5("?" vi-search)151.2
-480 R 2.5("A" vi-append-eol)151.2 492 R 2.5("B" vi-pre)151.2 504 R(v-w)
--.25 E(ord)-.1 E 2.5("C" vi-change-to)151.2 516 R 2.5("D" vi-delete-to)
-151.2 528 R 2.5("E" vi-end-w)151.2 540 R(ord)-.1 E 2.5("F" vi-char)151.2
-552 R(-search)-.2 E 2.5("G" vi-fetch-history)151.2 564 R 2.5
-("I" vi-insert-be)151.2 576 R(g)-.15 E 2.5("N" vi-search-ag)151.2 588 R
-(ain)-.05 E 2.5("P" vi-put)151.2 600 R 2.5("R" vi-replace)151.2 612 R
-2.5("S" vi-subst)151.2 624 R 2.5("T" vi-char)151.2 636 R(-search)-.2 E
-2.5("U" re)151.2 648 R -.15(ve)-.25 G(rt-line).15 E 2.5("W" vi-ne)151.2
-660 R(xt-w)-.15 E(ord)-.1 E 2.5("X" backw)151.2 672 R(ard-delete-char)
--.1 E 2.5("Y" vi-yank-to)151.2 684 R 2.5("\\" vi-complete)151.2 696 R
-2.5("^" vi-\214rst-print)151.2 708 R 2.5("_" vi-yank-ar)151.2 720 R(g)
--.18 E(GNU Readline 4.2)72 768 Q(2001 Mar 5)135.96 E(12)200.67 E EP
+("C-_" undo)151.2 84 R 3.333("")151.2 96 S(to "~")-.833 E(self-insert)5
+E 2.5("C-?" backw)151.2 108 R(ard-delete-char)-.1 E
+(VI Command Mode functions)151.2 124.8 Q 2.5("C-D" vi-eof-maybe)151.2
+148.8 R 2.5("C-E" emacs-editing-mode)151.2 160.8 R 2.5("C-G" abort)151.2
+172.8 R 2.5("C-H" backw)151.2 184.8 R(ard-char)-.1 E 2.5
+("C-J" accept-line)151.2 196.8 R 2.5("C-K" kill-line)151.2 208.8 R 2.5
+("C-L" clear)151.2 220.8 R(-screen)-.2 E 2.5("C-M" accept-line)151.2
+232.8 R 2.5("C-N" ne)151.2 244.8 R(xt-history)-.15 E 2.5("C-P" pre)151.2
+256.8 R(vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 268.8 R 2.5
+("C-R" re)151.2 280.8 R -.15(ve)-.25 G(rse-search-history).15 E 2.5
+("C-S" forw)151.2 292.8 R(ard-search-history)-.1 E 2.5
+("C-T" transpose-chars)151.2 304.8 R 2.5("C-U" unix-line-discard)151.2
+316.8 R 2.5("C-V" quoted-insert)151.2 328.8 R 2.5("C-W" unix-w)151.2
+340.8 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 352.8 R 2.5("C-_" vi-undo)
+151.2 364.8 R -4.166 3.333("" f)151.2 376.8 T(orw)-3.333 E(ard-char)-.1
+E 2.5("#" insert-comment)151.2 388.8 R 2.5("$" end-of-line)151.2 400.8 R
+2.5("%" vi-match)151.2 412.8 R 2.5("&" vi-tilde-e)151.2 424.8 R(xpand)
+-.15 E 2.5("*" vi-complete)151.2 436.8 R 2.5("+" ne)151.2 448.8 R
+(xt-history)-.15 E 2.5("," vi-char)151.2 460.8 R(-search)-.2 E 2.5
+("-" pre)151.2 472.8 R(vious-history)-.25 E 2.5("." vi-redo)151.2 484.8
+R 2.5("/" vi-search)151.2 496.8 R 2.5("0" be)151.2 508.8 R
+(ginning-of-line)-.15 E("1" to "9")151.2 520.8 Q(vi-ar)5 E(g-digit)-.18
+E 2.5(";" vi-char)151.2 532.8 R(-search)-.2 E 2.5("=" vi-complete)151.2
+544.8 R 2.5("?" vi-search)151.2 556.8 R 2.5("A" vi-append-eol)151.2
+568.8 R 2.5("B" vi-pre)151.2 580.8 R(v-w)-.25 E(ord)-.1 E 2.5
+("C" vi-change-to)151.2 592.8 R 2.5("D" vi-delete-to)151.2 604.8 R 2.5
+("E" vi-end-w)151.2 616.8 R(ord)-.1 E 2.5("F" vi-char)151.2 628.8 R
+(-search)-.2 E 2.5("G" vi-fetch-history)151.2 640.8 R 2.5
+("I" vi-insert-be)151.2 652.8 R(g)-.15 E 2.5("N" vi-search-ag)151.2
+664.8 R(ain)-.05 E 2.5("P" vi-put)151.2 676.8 R 2.5("R" vi-replace)151.2
+688.8 R 2.5("S" vi-subst)151.2 700.8 R 2.5("T" vi-char)151.2 712.8 R
+(-search)-.2 E 2.5("U" re)151.2 724.8 R -.15(ve)-.25 G(rt-line).15 E
+(GNU Readline 4.2a)72 768 Q(2001 October 9)123.745 E(12)192.895 E EP
%%Page: 13 13
%%BeginPageSetup
BP
%%EndPageSetup
/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5
-("`" vi-goto-mark)151.2 84 R 2.5("a" vi-append-mode)151.2 96 R 2.5
-("b" vi-pre)151.2 108 R(v-w)-.25 E(ord)-.1 E 2.5("c" vi-change-to)151.2
-120 R 2.5("d" vi-delete-to)151.2 132 R 2.5("e" vi-end-w)151.2 144 R(ord)
--.1 E 2.5("f" vi-char)151.2 156 R(-search)-.2 E 2.5("h" backw)151.2 168
-R(ard-char)-.1 E 2.5("i" vi-insertion-mode)151.2 180 R 2.5("j" ne)151.2
-192 R(xt-history)-.15 E 2.5("k" pre)151.2 204 R(v-history)-.25 E 2.5
-("l" forw)151.2 216 R(ard-char)-.1 E 2.5("m" vi-set-mark)151.2 228 R 2.5
-("n" vi-search-ag)151.2 240 R(ain)-.05 E 2.5("p" vi-put)151.2 252 R 2.5
-("r" vi-change-char)151.2 264 R 2.5("s" vi-subst)151.2 276 R 2.5
-("t" vi-char)151.2 288 R(-search)-.2 E 2.5("u" vi-undo)151.2 300 R 2.5
-("w" vi-ne)151.2 312 R(xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2 324
-R 2.5("y" vi-yank-to)151.2 336 R 2.5("|" vi-column)151.2 348 R 2.5
-("~" vi-change-case)151.2 360 R/F1 10.95/Times-Bold@0 SF(SEE ALSO)72
-376.8 Q/F2 10/Times-Italic@0 SF(The Gnu Readline Libr)108 388.8 Q(ary)
+("W" vi-ne)151.2 84 R(xt-w)-.15 E(ord)-.1 E 2.5("X" backw)151.2 96 R
+(ard-delete-char)-.1 E 2.5("Y" vi-yank-to)151.2 108 R 2.5
+("\\" vi-complete)151.2 120 R 2.5("^" vi-\214rst-print)151.2 132 R 2.5
+("_" vi-yank-ar)151.2 144 R(g)-.18 E 2.5("`" vi-goto-mark)151.2 156 R
+2.5("a" vi-append-mode)151.2 168 R 2.5("b" vi-pre)151.2 180 R(v-w)-.25 E
+(ord)-.1 E 2.5("c" vi-change-to)151.2 192 R 2.5("d" vi-delete-to)151.2
+204 R 2.5("e" vi-end-w)151.2 216 R(ord)-.1 E 2.5("f" vi-char)151.2 228 R
+(-search)-.2 E 2.5("h" backw)151.2 240 R(ard-char)-.1 E 2.5
+("i" vi-insertion-mode)151.2 252 R 2.5("j" ne)151.2 264 R(xt-history)
+-.15 E 2.5("k" pre)151.2 276 R(v-history)-.25 E 2.5("l" forw)151.2 288 R
+(ard-char)-.1 E 2.5("m" vi-set-mark)151.2 300 R 2.5("n" vi-search-ag)
+151.2 312 R(ain)-.05 E 2.5("p" vi-put)151.2 324 R 2.5
+("r" vi-change-char)151.2 336 R 2.5("s" vi-subst)151.2 348 R 2.5
+("t" vi-char)151.2 360 R(-search)-.2 E 2.5("u" vi-undo)151.2 372 R 2.5
+("w" vi-ne)151.2 384 R(xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2 396
+R 2.5("y" vi-yank-to)151.2 408 R 2.5("|" vi-column)151.2 420 R 2.5
+("~" vi-change-case)151.2 432 R/F1 10.95/Times-Bold@0 SF(SEE ALSO)72
+448.8 Q/F2 10/Times-Italic@0 SF(The Gnu Readline Libr)108 460.8 Q(ary)
-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2
-(The Gnu History Libr)108 400.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E
-(ox and Chet Rame)-.15 E(y)-.15 E F2(bash)108 412.8 Q F0(\(1\))A F1
-(FILES)72 429.6 Q F2(~/.inputr)109.666 441.6 Q(c)-.37 E F0(Indi)144
-453.6 Q(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E
-F0(initialization \214le)2.5 E F1 -.548(AU)72 470.4 S(THORS).548 E F0
-(Brian F)108 482.4 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E
-(bfox@gnu.or)108 494.4 Q(g)-.18 E(Chet Rame)108 511.2 Q 1.3 -.65(y, C)
+(The Gnu History Libr)108 472.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E
+(ox and Chet Rame)-.15 E(y)-.15 E F2(bash)108 484.8 Q F0(\(1\))A F1
+(FILES)72 501.6 Q F2(~/.inputr)109.666 513.6 Q(c)-.37 E F0(Indi)144
+525.6 Q(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E
+F0(initialization \214le)2.5 E F1 -.548(AU)72 542.4 S(THORS).548 E F0
+(Brian F)108 554.4 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E
+(bfox@gnu.or)108 566.4 Q(g)-.18 E(Chet Rame)108 583.2 Q 1.3 -.65(y, C)
-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)
--.25 G(rsity).15 E(chet@ins.CWR)108 523.2 Q(U.Edu)-.4 E F1 -.11(BU)72
-540 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .69(If you \214nd a b)
-108 552 R .69(ug in)-.2 F F3 -.18(re)3.19 G(adline,).18 E F0 .69
+-.25 G(rsity).15 E(chet@ins.CWR)108 595.2 Q(U.Edu)-.4 E F1 -.11(BU)72
+612 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .69(If you \214nd a b)
+108 624 R .69(ug in)-.2 F F3 -.18(re)3.19 G(adline,).18 E F0 .69
(you should report it.)3.19 F .691(But \214rst, you should mak)5.69 F
3.191(es)-.1 G .691(ure that it really is a b)-3.191 F(ug,)-.2 E
-(and that it appears in the latest v)108 564 Q(ersion of the)-.15 E F3
+(and that it appears in the latest v)108 636 Q(ersion of the)-.15 E F3
-.18(re)2.5 G(adline).18 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.)
-.15 E .705(Once you ha)108 580.8 R 1.005 -.15(ve d)-.2 H .705
+.15 E .705(Once you ha)108 652.8 R 1.005 -.15(ve d)-.2 H .705
(etermined that a b).15 F .704(ug actually e)-.2 F .704(xists, mail a b)
-.15 F .704(ug report to)-.2 F F2 -.2(bu)3.204 G(g\255r).2 E(eadline)
-.37 E F0(@)A F2(gnu.or)A(g)-.37 E F0 5.704(.I)C 3.204(fy)-5.704 G(ou)
--3.204 E(ha)108 592.8 Q 1.809 -.15(ve a \214)-.2 H 1.509
+-3.204 E(ha)108 664.8 Q 1.809 -.15(ve a \214)-.2 H 1.509
(x, you are welcome to mail that as well!).15 F 1.51
(Suggestions and `philosophical' b)6.51 F 1.51(ug reports may be)-.2 F
-(mailed to)108 604.8 Q F2 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F2
+(mailed to)108 676.8 Q F2 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F2
(gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3
-(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 621.6 Q
+(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 693.6 Q
(ug reports concerning this manual page should be directed to)-.2 E F2
--.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E F1
--.11(BU)72 638.4 S(GS).11 E F0(It')108 650.4 Q 2.5(st)-.55 G
-(oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 4.2)72 768 Q
-(2001 Mar 5)135.96 E(13)200.67 E EP
+-.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E
+(GNU Readline 4.2a)72 768 Q(2001 October 9)123.745 E(13)192.895 E EP
+%%Page: 14 14
+%%BeginPageSetup
+BP
+%%EndPageSetup
+/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1
+10.95/Times-Bold@0 SF -.11(BU)72 84 S(GS).11 E F0(It')108 96 Q 2.5(st)
+-.55 G(oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 4.2a)72 768
+Q(2001 October 9)123.745 E(14)192.895 E EP
%%Trailer
end
%%EOF
diff --git a/doc/rltech.texinfo b/doc/rltech.texinfo
index acc8d4d..be9f662 100644
--- a/doc/rltech.texinfo
+++ b/doc/rltech.texinfo
@@ -176,6 +176,16 @@ in any file that uses Readline's features. Since some of the definitions
in @code{readline.h} use the @code{stdio} library, the file
@code{<stdio.h>} should be included before @code{readline.h}.
+@code{readline.h} defines a C preprocessor variable that should
+be treated as an integer, @code{RL_READLINE_VERSION}, which may
+be used to conditionally compile application code depending on
+the installed Readline version. The value is a hexadecimal
+encoding of the major and minor version numbers of the library,
+of the form 0x@var{MMmm}. @var{MM} is the two-digit major
+version number; @var{mm} is the two-digit minor version number.
+For Readline 4.2, for example, the value of
+@code{RL_READLINE_VERSION} would be @code{0x0402}.
+
@menu
* Readline Typedefs:: C declarations to make code readable.
* Function Writing:: Variables and calling conventions.
@@ -348,6 +358,14 @@ never sets it.
The version number of this revision of the library.
@end deftypevar
+@deftypevar int rl_readline_version
+An integer encoding the current version of the library. The encoding is
+of the form 0x@var{MMmm}, where @var{MM} is the two-digit major version
+number, and @var{mm} is the two-digit minor version number.
+For example, for Readline-4.2, @code{rl_readline_version} would have the
+value 0x0402.
+@end deftypevar
+
@deftypevar {int} rl_gnu_readline_p
Always set to 1, denoting that this is @sc{gnu} readline rather than some
emulation.
@@ -1076,6 +1094,15 @@ Set the time interval (in microseconds) that Readline waits when showing
a balancing character when @code{blink-matching-paren} has been enabled.
@end deftypefun
+@deftypefun {char *} rl_get_termcap (const char *cap)
+Retrieve the string value of the termcap capability @var{cap}.
+Readline fetches the termcap entry for the current terminal name and
+uses those capabilities to move around the screen line and perform other
+terminal-specific operations, like erasing a line. Readline does not
+use all of a terminal's capabilities, and this function will return
+values for only those capabilities Readline uses.
+@end deftypefun
+
@node Alternate Interface
@subsection Alternate Interface
diff --git a/doc/rluser.texinfo b/doc/rluser.texinfo
index e5bf54d..e4e56ff 100644
--- a/doc/rluser.texinfo
+++ b/doc/rluser.texinfo
@@ -10,7 +10,7 @@ use these features. There is a document entitled "readline.texinfo"
which contains both end-user and programmer documentation for the
GNU Readline Library.
-Copyright (C) 1988-2000 Free Software Foundation, Inc.
+Copyright (C) 1988-2001 Free Software Foundation, Inc.
Authored by Brian Fox and Chet Ramey.
@@ -235,7 +235,7 @@ words, to the end of the next word.
Word boundaries are the same as those used by @kbd{M-f}.
@item M-@key{DEL}
-Kill from the cursor the start of the previous word, or, if between
+Kill from the cursor the start of the current word, or, if between
words, to the start of the previous word.
Word boundaries are the same as those used by @kbd{M-b}.
@@ -312,6 +312,10 @@ the line, thereby executing the command from the history list.
A movement command will terminate the search, make the last line found
the current line, and begin editing.
+Readline remembers the last incremental search string. If two
+@kbd{C-r}s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+
Non-incremental searches read the entire search string before starting
to search for matching history lines. The search string may be
typed by the user or be part of the contents of the current line.
@@ -452,6 +456,11 @@ arrow keys. The default is @samp{off}.
If set to @samp{on}, tilde expansion is performed when Readline
attempts word completion. The default is @samp{off}.
+@vindex history-preserve-point
+If set to @samp{on}, the history code attempts to place point at the
+same location on each history line retrived with @code{previous-history}
+or @code{next-history}.
+
@item horizontal-scroll-mode
@vindex horizontal-scroll-mode
This variable can be set to either @samp{on} or @samp{off}. Setting it
@@ -503,6 +512,14 @@ This variable, when set to @samp{on}, causes Readline to display an
asterisk (@samp{*}) at the start of history lines which have been modified.
This variable is @samp{off} by default.
+@item match-hidden-files
+@vindex match-hidden-files
+This variable, when set to @samp{on}, causes Readline to match files whose
+names begin with a @samp{.} (hidden files) when performing filename
+completion, unless the leading @samp{.} is
+supplied by the user in the filename to be completed.
+This variable is @samp{on} by default.
+
@item output-meta
@vindex output-meta
If set to @samp{on}, Readline will display characters with the
@@ -644,11 +661,11 @@ horizontal tab
@item \v
vertical tab
@item \@var{nnn}
-the character whose @sc{ascii} code is the octal value @var{nnn}
-(one to three digits)
-@item \x@var{nnn}
-the character whose @sc{ascii} code is the hexadecimal value @var{nnn}
+the eight-bit character whose value is the octal value @var{nnn}
(one to three digits)
+@item \x@var{HH}
+the eight-bit character whose value is the hexadecimal value @var{HH}
+(one or two hex digits)
@end table
When entering the text of a macro, single or double quotes must
@@ -1021,6 +1038,8 @@ Negative arguments have no effect.
@item transpose-words (M-t)
Drag the word before point past the word after point,
moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
@item upcase-word (M-u)
Uppercase the current (or following) word. With a negative argument,
@@ -1534,7 +1553,7 @@ matches were generated.
@item complete
@btindex complete
@example
-@code{complete [-abcdefjkvu] [-o @var{comp-option}] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
+@code{complete [-abcdefgjkvu] [-o @var{comp-option}] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}]
[-P @var{prefix}] [-S @var{suffix}] [-X @var{filterpat}] [-F @var{function}]
[-C @var{command}] @var{name} [@var{name} @dots{}]}
@code{complete -pr [@var{name} @dots{}]}
@@ -1617,6 +1636,9 @@ File names. May also be specified as @option{-f}.
@item function
Names of shell functions.
+@item group
+Group names. May also be specified as @option{-g}.
+
@item helptopic
Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}).
diff --git a/doc/rluserman.dvi b/doc/rluserman.dvi
index 8c46047..5346db7 100644
--- a/doc/rluserman.dvi
+++ b/doc/rluserman.dvi
Binary files differ
diff --git a/doc/rluserman.html b/doc/rluserman.html
index 76b05d3..93bfe63 100644
--- a/doc/rluserman.html
+++ b/doc/rluserman.html
@@ -1,126 +1,107 @@
<HTML>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<!-- Created on October, 9 2001 by texi2html 1.64 -->
+<!--
+Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
+
+-->
<HEAD>
-<!-- This HTML file has been created by texi2html 1.52
- from /usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo on 16 April 2001 -->
+<TITLE>GNU Readline Library: </TITLE>
+
+<META NAME="description" CONTENT="GNU Readline Library: ">
+<META NAME="keywords" CONTENT="GNU Readline Library: ">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="texi2html 1.64">
-<TITLE>GNU Readline Library</TITLE>
</HEAD>
-<BODY>
-<H1>GNU Readline Library User Interface</H1>
-<H2>Edition 4.2, for <CODE>Readline Library</CODE> Version 4.2.</H2>
-<H2>Apr 2001</H2>
-<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS>
-<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS>
-<P>
-<P><HR><P>
-<H1>Table of Contents</H1>
-<UL>
-<LI><A NAME="TOC1" HREF="rluserman.html#SEC1">Command Line Editing</A>
-<UL>
-<LI><A NAME="TOC2" HREF="rluserman.html#SEC2">Introduction to Line Editing</A>
-<LI><A NAME="TOC3" HREF="rluserman.html#SEC3">Readline Interaction</A>
-<UL>
-<LI><A NAME="TOC4" HREF="rluserman.html#SEC4">Readline Bare Essentials</A>
-<LI><A NAME="TOC5" HREF="rluserman.html#SEC5">Readline Movement Commands</A>
-<LI><A NAME="TOC6" HREF="rluserman.html#SEC6">Readline Killing Commands</A>
-<LI><A NAME="TOC7" HREF="rluserman.html#SEC7">Readline Arguments</A>
-<LI><A NAME="TOC8" HREF="rluserman.html#SEC8">Searching for Commands in the History</A>
-</UL>
-<LI><A NAME="TOC9" HREF="rluserman.html#SEC9">Readline Init File</A>
-<UL>
-<LI><A NAME="TOC10" HREF="rluserman.html#SEC10">Readline Init File Syntax</A>
-<LI><A NAME="TOC11" HREF="rluserman.html#SEC11">Conditional Init Constructs</A>
-<LI><A NAME="TOC12" HREF="rluserman.html#SEC12">Sample Init File</A>
-</UL>
-<LI><A NAME="TOC13" HREF="rluserman.html#SEC13">Bindable Readline Commands</A>
-<UL>
-<LI><A NAME="TOC14" HREF="rluserman.html#SEC14">Commands For Moving</A>
-<LI><A NAME="TOC15" HREF="rluserman.html#SEC15">Commands For Manipulating The History</A>
-<LI><A NAME="TOC16" HREF="rluserman.html#SEC16">Commands For Changing Text</A>
-<LI><A NAME="TOC17" HREF="rluserman.html#SEC17">Killing And Yanking</A>
-<LI><A NAME="TOC18" HREF="rluserman.html#SEC18">Specifying Numeric Arguments</A>
-<LI><A NAME="TOC19" HREF="rluserman.html#SEC19">Letting Readline Type For You</A>
-<LI><A NAME="TOC20" HREF="rluserman.html#SEC20">Keyboard Macros</A>
-<LI><A NAME="TOC21" HREF="rluserman.html#SEC21">Some Miscellaneous Commands</A>
-</UL>
-<LI><A NAME="TOC22" HREF="rluserman.html#SEC22">Readline vi Mode</A>
-</UL>
-</UL>
-<P><HR><P>
-<P>
+<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
+
+<A NAME="SEC_Top"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>GNU Readline Library</H1></P><P>
+
This document describes the end user interface of the GNU Readline Library,
a utility which aids in the consistency of user interface across discrete
programs that need to provide a command line interface.
+</P><P>
-</P>
-<P>
-Published by the Free Software Foundation <BR>
-59 Temple Place, Suite 330, <BR>
-Boston, MA 02111 USA
-
-</P>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC1">1. Command Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR>
+</TABLE></BLOCKQUOTE>
<P>
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-</P>
+<HR SIZE=1>
+<A NAME="SEC1"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<A NAME="Command Line Editing"></A>
+<H1> 1. Command Line Editing </H1>
+<!--docid::SEC1::-->
<P>
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-</P>
-<P>
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that this permission notice may be stated in a translation approved
-by the Free Software Foundation.
-
-</P>
-<P>
-Copyright (C) 1988-2001 Free Software Foundation, Inc.
-
-</P>
-
-
-
-<H1><A NAME="SEC1" HREF="rluserman.html#TOC1">Command Line Editing</A></H1>
-
-<P>
This chapter describes the basic features of the GNU
command line editing interface.
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC3">1.2 Readline Interaction</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC9">1.3 Readline Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands
+ available for binding</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline
+ behave like the vi editor.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
-</P>
-
-<UL>
-<LI><A HREF="rluserman.html#SEC2">Introduction and Notation</A>: Notation used in this text.
-<LI><A HREF="rluserman.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line.
-<LI><A HREF="rluserman.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view.
-<LI><A HREF="rluserman.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands
- available for binding
-<LI><A HREF="rluserman.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline
- behave like the vi editor.
-</UL>
-
-
-
-<H2><A NAME="SEC2" HREF="rluserman.html#TOC2">Introduction to Line Editing</A></H2>
-
+<A NAME="Introduction and Notation"></A>
+<HR SIZE="6">
+<A NAME="SEC2"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.1 Introduction to Line Editing </H2>
+<!--docid::SEC2::-->
<P>
+
The following paragraphs describe the notation used to represent
keystrokes.
+</P><P>
-</P>
-<P>
The text <KBD>C-k</KBD> is read as `Control-K' and describes the character
produced when the <KBD>k</KBD> key is pressed while the Control key
is depressed.
+</P><P>
-</P>
-<P>
The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character
produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD>
key is pressed.
@@ -131,39 +112,46 @@ work as a Meta key.
The <KBD>ALT</KBD> key on the right may also be configured to work as a
Meta key or may be configured as some other modifier, such as a
Compose key for typing accented characters.
+</P><P>
-</P>
-<P>
If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as
a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD>
<EM>first</EM>, and then typing <KBD>k</KBD>.
Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key.
+</P><P>
-</P>
-<P>
The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the
character produced by <EM>metafying</EM> <KBD>C-k</KBD>.
+</P><P>
-</P>
-<P>
In addition, several keys have their own names. Specifically,
<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all
stand for themselves when seen in this text, or in an init file
-(see section <A HREF="rluserman.html#SEC9">Readline Init File</A>).
+(see section <A HREF="rluserman.html#SEC9">1.3 Readline Init File</A>).
If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will
produce the desired character.
The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on
some keyboards.
-
-</P>
-
-
-<H2><A NAME="SEC3" HREF="rluserman.html#TOC3">Readline Interaction</A></H2>
+</P><P>
+
+<A NAME="Readline Interaction"></A>
+<HR SIZE="6">
+<A NAME="SEC3"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.2 Readline Interaction </H2>
+<!--docid::SEC3::-->
<P>
-<A NAME="IDX1"></A>
-</P>
-<P>
Often during an interactive session you type in a long line of text,
only to notice that the first word on the line is misspelled. The
Readline library gives you a set of commands for manipulating the text
@@ -174,209 +162,234 @@ insert the text of the corrections. Then, when you are satisfied with
the line, you simply press <KBD>RET</KBD>. You do not have to be at the
end of the line to press <KBD>RET</KBD>; the entire line is accepted
regardless of the location of the cursor within the line.
-
-</P>
-
-<UL>
-<LI><A HREF="rluserman.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline.
-<LI><A HREF="rluserman.html#SEC5">Readline Movement Commands</A>: Moving about the input line.
-<LI><A HREF="rluserman.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back!
-<LI><A HREF="rluserman.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands.
-<LI><A HREF="rluserman.html#SEC8">Searching</A>: Searching through previous lines.
-</UL>
-
-
-
-<H3><A NAME="SEC4" HREF="rluserman.html#TOC4">Readline Bare Essentials</A></H3>
+</P><P>
+
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR>
+</TABLE></BLOCKQUOTE>
<P>
-<A NAME="IDX2"></A>
-<A NAME="IDX3"></A>
-<A NAME="IDX4"></A>
-</P>
+<A NAME="Readline Bare Essentials"></A>
+<HR SIZE="6">
+<A NAME="SEC4"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.1 Readline Bare Essentials </H3>
+<!--docid::SEC4::-->
<P>
+
In order to enter characters into the line, simply type them. The typed
character appears where the cursor was, and then the cursor moves one
space to the right. If you mistype a character, you can use your
erase character to back up and delete the mistyped character.
+</P><P>
-</P>
-<P>
Sometimes you may mistype a character, and
not notice the error until you have typed several other characters. In
that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then
correct your mistake. Afterwards, you can move the cursor to the right
with <KBD>C-f</KBD>.
+</P><P>
-</P>
-<P>
When you add text in the middle of a line, you will notice that characters
to the right of the cursor are `pushed over' to make room for the text
that you have inserted. Likewise, when you delete text behind the cursor,
characters to the right of the cursor are `pulled back' to fill in the
blank space created by the removal of the text. A list of the bare
essentials for editing the text of an input line follows.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-b</KBD>
-<DD>
-Move back one character.
+<DD>Move back one character.
<DT><KBD>C-f</KBD>
-<DD>
-Move forward one character.
+<DD>Move forward one character.
<DT><KBD>DEL</KBD> or <KBD>Backspace</KBD>
-<DD>
-Delete the character to the left of the cursor.
+<DD>Delete the character to the left of the cursor.
<DT><KBD>C-d</KBD>
-<DD>
-Delete the character underneath the cursor.
+<DD>Delete the character underneath the cursor.
<DT>Printing characters
-<DD>
-Insert the character into the line at the cursor.
+<DD>Insert the character into the line at the cursor.
<DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD>
-<DD>
-Undo the last editing command. You can undo all the way back to an
+<DD>Undo the last editing command. You can undo all the way back to an
empty line.
</DL>
-
<P>
+
(Depending on your configuration, the <KBD>Backspace</KBD> key be set to
delete the character to the left of the cursor and the <KBD>DEL</KBD> key set
to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather
than the character to the left of the cursor.)
-
-</P>
-
-
-<H3><A NAME="SEC5" HREF="rluserman.html#TOC5">Readline Movement Commands</A></H3>
-
+</P><P>
+
+<A NAME="Readline Movement Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC5"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.2 Readline Movement Commands </H3>
+<!--docid::SEC5::-->
<P>
+
The above table describes the most basic keystrokes that you need
in order to do editing of the input line. For your convenience, many
other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>,
<KBD>C-d</KBD>, and <KBD>DEL</KBD>. Here are some commands for moving more rapidly
about the line.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-a</KBD>
-<DD>
-Move to the start of the line.
+<DD>Move to the start of the line.
<DT><KBD>C-e</KBD>
-<DD>
-Move to the end of the line.
+<DD>Move to the end of the line.
<DT><KBD>M-f</KBD>
-<DD>
-Move forward a word, where a word is composed of letters and digits.
+<DD>Move forward a word, where a word is composed of letters and digits.
<DT><KBD>M-b</KBD>
-<DD>
-Move backward a word.
+<DD>Move backward a word.
<DT><KBD>C-l</KBD>
-<DD>
-Clear the screen, reprinting the current line at the top.
+<DD>Clear the screen, reprinting the current line at the top.
</DL>
-
<P>
+
Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves
forward a word. It is a loose convention that control keystrokes
operate on characters while meta keystrokes operate on words.
-
-</P>
-
-
-<H3><A NAME="SEC6" HREF="rluserman.html#TOC6">Readline Killing Commands</A></H3>
-
+</P><P>
+
+<A NAME="Readline Killing Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC6"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.3 Readline Killing Commands </H3>
+<!--docid::SEC6::-->
<P>
-<A NAME="IDX5"></A>
-<A NAME="IDX6"></A>
-</P>
-<P>
+<A NAME="IDX1"></A>
+<A NAME="IDX2"></A>
+</P><P>
+
<EM>Killing</EM> text means to delete the text from the line, but to save
it away for later use, usually by <EM>yanking</EM> (re-inserting)
it back into the line.
(`Cut' and `paste' are more recent jargon for `kill' and `yank'.)
+</P><P>
-</P>
-<P>
If the description for a command says that it `kills' text, then you can
be sure that you can get the text back in a different (or the same)
place later.
+</P><P>
-</P>
-<P>
When you use a kill command, the text is saved in a <EM>kill-ring</EM>.
Any number of consecutive kills save all of the killed text together, so
that when you yank it back, you get it all. The kill
ring is not line specific; the text that you killed on a previously
typed line is available to be yanked back later, when you are typing
another line.
-<A NAME="IDX7"></A>
+<A NAME="IDX3"></A>
+</P><P>
-</P>
-<P>
Here is the list of commands for killing text.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-k</KBD>
-<DD>
-Kill the text from the current cursor position to the end of the line.
+<DD>Kill the text from the current cursor position to the end of the line.
+<P>
<DT><KBD>M-d</KBD>
-<DD>
-Kill from the cursor to the end of the current word, or, if between
+<DD>Kill from the cursor to the end of the current word, or, if between
words, to the end of the next word.
Word boundaries are the same as those used by <KBD>M-f</KBD>.
+<P>
<DT><KBD>M-<KBD>DEL</KBD></KBD>
-<DD>
-Kill from the cursor the start of the previous word, or, if between
+<DD>Kill from the cursor the start of the current word, or, if between
words, to the start of the previous word.
Word boundaries are the same as those used by <KBD>M-b</KBD>.
+<P>
<DT><KBD>C-w</KBD>
-<DD>
-Kill from the cursor to the previous whitespace. This is different than
+<DD>Kill from the cursor to the previous whitespace. This is different than
<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ.
+<P>
</DL>
-
<P>
+
Here is how to <EM>yank</EM> the text back into the line. Yanking
means to copy the most-recently-killed text from the kill buffer.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><KBD>C-y</KBD>
-<DD>
-Yank the most recently killed text back into the buffer at the cursor.
+<DD>Yank the most recently killed text back into the buffer at the cursor.
+<P>
<DT><KBD>M-y</KBD>
-<DD>
-Rotate the kill-ring, and yank the new top. You can only do this if
+<DD>Rotate the kill-ring, and yank the new top. You can only do this if
the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>.
</DL>
+<P>
-
-
-<H3><A NAME="SEC7" HREF="rluserman.html#TOC7">Readline Arguments</A></H3>
-
+<A NAME="Readline Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC7"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.4 Readline Arguments </H3>
+<!--docid::SEC7::-->
<P>
+
You can pass numeric arguments to Readline commands. Sometimes the
argument acts as a repeat count, other times it is the <I>sign</I> of the
argument that is significant. If you pass a negative argument to a
command which normally acts in a forward direction, that command will
act in a backward direction. For example, to kill text back to the
start of the line, you might type <SAMP>`M-- C-k'</SAMP>.
+</P><P>
-</P>
-<P>
The general way to pass numeric arguments to a command is to type meta
digits before the command. If the first `digit' typed is a minus
sign (<SAMP>`-'</SAMP>), then the sign of the argument will be negative. Once
@@ -384,19 +397,31 @@ you have typed one meta digit to get the argument started, you can type
the remainder of the digits, and then the command. For example, to give
the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>,
which will delete the next ten characters on the input line.
-
-</P>
-
-
-<H3><A NAME="SEC8" HREF="rluserman.html#TOC8">Searching for Commands in the History</A></H3>
-
+</P><P>
+
+<A NAME="Searching"></A>
+<HR SIZE="6">
+<A NAME="SEC8"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.2.5 Searching for Commands in the History </H3>
+<!--docid::SEC8::-->
<P>
+
Readline provides commands for searching through the command history
for lines containing a specified string.
There are two search modes: <EM>incremental</EM> and <EM>non-incremental</EM>.
+</P><P>
-</P>
-<P>
Incremental searches begin before the user has finished typing the
search string.
As each character of the search string is typed, Readline displays
@@ -412,9 +437,8 @@ If that variable has not been assigned a value, the <KBD>ESC</KBD> and
<KBD>C-g</KBD> will abort an incremental search and restore the original line.
When the search is terminated, the history entry containing the
search string becomes the current line.
+</P><P>
-</P>
-<P>
To find other matching entries in the history list, type <KBD>C-r</KBD> or
<KBD>C-s</KBD> as appropriate.
This will search backward or forward in the history for the next
@@ -425,121 +449,149 @@ For instance, a <KBD>RET</KBD> will terminate the search and accept
the line, thereby executing the command from the history list.
A movement command will terminate the search, make the last line found
the current line, and begin editing.
+</P><P>
+
+Readline remembers the last incremental search string. If two
+<KBD>C-r</KBD>s are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+</P><P>
-</P>
-<P>
Non-incremental searches read the entire search string before starting
to search for matching history lines. The search string may be
typed by the user or be part of the contents of the current line.
-
-</P>
-
-
-<H2><A NAME="SEC9" HREF="rluserman.html#TOC9">Readline Init File</A></H2>
+</P><P>
+
+<A NAME="Readline Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC9"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.3 Readline Init File </H2>
+<!--docid::SEC9::-->
<P>
-<A NAME="IDX8"></A>
-</P>
-<P>
Although the Readline library comes with a set of Emacs-like
keybindings installed by default, it is possible to use a different set
of keybindings.
Any user can customize programs that use Readline by putting
commands in an <EM>inputrc</EM> file, conventionally in his home directory.
The name of this
-file is taken from the value of the environment variable @env{INPUTRC}. If
+file is taken from the value of the environment variable <CODE>INPUTRC</CODE>. If
that variable is unset, the default is <TT>`~/.inputrc'</TT>.
+</P><P>
-</P>
-<P>
When a program which uses the Readline library starts up, the
init file is read, and the key bindings are set.
+</P><P>
-</P>
-<P>
In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus
incorporating any changes that you might have made to it.
+</P><P>
-</P>
-
-<UL>
-<LI><A HREF="rluserman.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file.
-
-<LI><A HREF="rluserman.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file.
-
-<LI><A HREF="rluserman.html#SEC12">Sample Init File</A>: An example inputrc file.
-</UL>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR>
+</TABLE>
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR>
+</TABLE>
+<br>
+<TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR>
+</TABLE></BLOCKQUOTE>
+<P>
-<H3><A NAME="SEC10" HREF="rluserman.html#TOC10">Readline Init File Syntax</A></H3>
-
+<A NAME="Readline Init File Syntax"></A>
+<HR SIZE="6">
+<A NAME="SEC10"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.1 Readline Init File Syntax </H3>
+<!--docid::SEC10::-->
<P>
+
There are only a few basic constructs allowed in the
Readline init file. Blank lines are ignored.
Lines beginning with a <SAMP>`#'</SAMP> are comments.
Lines beginning with a <SAMP>`$'</SAMP> indicate conditional
-constructs (see section <A HREF="rluserman.html#SEC11">Conditional Init Constructs</A>). Other lines
+constructs (see section <A HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A>). Other lines
denote variable settings and key bindings.
+</P><P>
-</P>
<DL COMPACT>
-
<DT>Variable Settings
-<DD>
-You can modify the run-time behavior of Readline by
+<DD>You can modify the run-time behavior of Readline by
altering the values of variables in Readline
using the <CODE>set</CODE> command within the init file.
The syntax is simple:
+<P>
-
-<PRE>
-set <VAR>variable</VAR> <VAR>value</VAR>
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR>
+</pre></td></tr></table></P><P>
Here, for example, is how to
change from the default Emacs-like key binding to use
<CODE>vi</CODE> line editing commands:
+</P><P>
-
-<PRE>
-set editing-mode vi
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>set editing-mode vi
+</pre></td></tr></table></P><P>
Variable names and values, where appropriate, are recognized without regard
to case.
+</P><P>
A great deal of run-time behavior is changeable with the following
variables.
+</P><P>
-<A NAME="IDX9"></A>
+<A NAME="IDX4"></A>
<DL COMPACT>
<DT><CODE>bell-style</CODE>
-<DD>
-<A NAME="IDX10"></A>
+<DD><A NAME="IDX5"></A>
Controls what happens when Readline wants to ring the terminal bell.
If set to <SAMP>`none'</SAMP>, Readline never rings the bell. If set to
<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available.
If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring
the terminal's bell.
+<P>
<DT><CODE>comment-begin</CODE>
-<DD>
-<A NAME="IDX11"></A>
+<DD><A NAME="IDX6"></A>
The string to insert at the beginning of the line when the
<CODE>insert-comment</CODE> command is executed. The default value
is <CODE>"#"</CODE>.
+<P>
<DT><CODE>completion-ignore-case</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
+<DD>If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion
in a case-insensitive fashion.
The default value is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>completion-query-items</CODE>
-<DD>
-<A NAME="IDX12"></A>
+<DD><A NAME="IDX7"></A>
The number of possible completions that determines when the user is
asked whether he wants to see the list of possibilities. If the
number of possible completions is greater than this value,
@@ -547,73 +599,79 @@ Readline will ask the user whether or not he wishes to view
them; otherwise, they are simply listed.
This variable must be set to an integer value greater than or equal to 0.
The default limit is <CODE>100</CODE>.
+<P>
<DT><CODE>convert-meta</CODE>
-<DD>
-<A NAME="IDX13"></A>
+<DD><A NAME="IDX8"></A>
If set to <SAMP>`on'</SAMP>, Readline will convert characters with the
eighth bit set to an ASCII key sequence by stripping the eighth
bit and prefixing an <KBD>ESC</KBD> character, converting them to a
meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>.
+<P>
<DT><CODE>disable-completion</CODE>
-<DD>
-<A NAME="IDX14"></A>
+<DD><A NAME="IDX9"></A>
If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion.
Completion characters will be inserted into the line as if they had
been mapped to <CODE>self-insert</CODE>. The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>editing-mode</CODE>
-<DD>
-<A NAME="IDX15"></A>
+<DD><A NAME="IDX10"></A>
The <CODE>editing-mode</CODE> variable controls which default set of
key bindings is used. By default, Readline starts up in Emacs editing
mode, where the keystrokes are most similar to Emacs. This variable can be
set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>.
+<P>
<DT><CODE>enable-keypad</CODE>
-<DD>
-<A NAME="IDX16"></A>
+<DD><A NAME="IDX11"></A>
When set to <SAMP>`on'</SAMP>, Readline will try to enable the application
keypad when it is called. Some systems need this to enable the
arrow keys. The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>expand-tilde</CODE>
-<DD>
-<A NAME="IDX17"></A>
+<DD><A NAME="IDX12"></A>
If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline
attempts word completion. The default is <SAMP>`off'</SAMP>.
+<P>
+
+<A NAME="IDX13"></A>
+If set to <SAMP>`on'</SAMP>, the history code attempts to place point at the
+same location on each history line retrived with <CODE>previous-history</CODE>
+or <CODE>next-history</CODE>.
+</P><P>
<DT><CODE>horizontal-scroll-mode</CODE>
-<DD>
-<A NAME="IDX18"></A>
+<DD><A NAME="IDX14"></A>
This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. Setting it
to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll
horizontally on a single screen line when they are longer than the width
of the screen, instead of wrapping onto a new screen line. By default,
this variable is set to <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>input-meta</CODE>
-<DD>
-<A NAME="IDX19"></A>
-<A NAME="IDX20"></A>
+<DD><A NAME="IDX15"></A>
+<A NAME="IDX16"></A>
If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it
will not clear the eighth bit in the characters it reads),
regardless of what the terminal claims it can support. The
default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a
synonym for this variable.
+<P>
<DT><CODE>isearch-terminators</CODE>
-<DD>
-<A NAME="IDX21"></A>
+<DD><A NAME="IDX17"></A>
The string of characters that should terminate an incremental search without
-subsequently executing the character as a command (see section <A HREF="rluserman.html#SEC8">Searching for Commands in the History</A>).
+subsequently executing the character as a command (see section <A HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A>).
If this variable has not been given a value, the characters <KBD>ESC</KBD> and
<KBD>C-J</KBD> will terminate an incremental search.
+<P>
<DT><CODE>keymap</CODE>
-<DD>
-<A NAME="IDX22"></A>
+<DD><A NAME="IDX18"></A>
Sets Readline's idea of the current keymap for key binding commands.
Acceptable <CODE>keymap</CODE> names are
<CODE>emacs</CODE>,
@@ -628,57 +686,68 @@ Acceptable <CODE>keymap</CODE> names are
equivalent to <CODE>emacs-standard</CODE>. The default value is <CODE>emacs</CODE>.
The value of the <CODE>editing-mode</CODE> variable also affects the
default keymap.
+<P>
<DT><CODE>mark-directories</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, completed directory names have a slash
+<DD>If set to <SAMP>`on'</SAMP>, completed directory names have a slash
appended. The default is <SAMP>`on'</SAMP>.
+<P>
<DT><CODE>mark-modified-lines</CODE>
-<DD>
-<A NAME="IDX23"></A>
+<DD><A NAME="IDX19"></A>
This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an
asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified.
This variable is <SAMP>`off'</SAMP> by default.
+<P>
+
+<DT><CODE>match-hidden-files</CODE>
+<DD><A NAME="IDX20"></A>
+This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose
+names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename
+completion, unless the leading <SAMP>`.'</SAMP> is
+supplied by the user in the filename to be completed.
+This variable is <SAMP>`on'</SAMP> by default.
+<P>
<DT><CODE>output-meta</CODE>
-<DD>
-<A NAME="IDX24"></A>
+<DD><A NAME="IDX21"></A>
If set to <SAMP>`on'</SAMP>, Readline will display characters with the
eighth bit set directly rather than as a meta-prefixed escape
sequence. The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>print-completions-horizontally</CODE>
-<DD>
-If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
+<DD>If set to <SAMP>`on'</SAMP>, Readline will display completions with matches
sorted horizontally in alphabetical order, rather than down the screen.
The default is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>show-all-if-ambiguous</CODE>
-<DD>
-<A NAME="IDX25"></A>
+<DD><A NAME="IDX22"></A>
This alters the default behavior of the completion functions. If
set to <SAMP>`on'</SAMP>,
words which have more than one possible completion cause the
matches to be listed immediately instead of ringing the bell.
The default value is <SAMP>`off'</SAMP>.
+<P>
<DT><CODE>visible-stats</CODE>
-<DD>
-<A NAME="IDX26"></A>
+<DD><A NAME="IDX23"></A>
If set to <SAMP>`on'</SAMP>, a character denoting a file's type
is appended to the filename when listing possible
completions. The default is <SAMP>`off'</SAMP>.
+<P>
</DL>
+<P>
<DT>Key Bindings
-<DD>
-The syntax for controlling key bindings in the init file is
+<DD>The syntax for controlling key bindings in the init file is
simple. First you need to find the name of the command that you
want to change. The following sections contain tables of the command
name, the default keybinding, if any, and a short description of what
the command does.
+<P>
Once you know the name of the command, simply place on a line
in the init file the name of the key
@@ -686,21 +755,19 @@ you wish to bind the command to, a colon, and then the name of the
command. The name of the key
can be expressed in different ways, depending on what you find most
comfortable.
+</P><P>
In addition to command names, readline allows keys to be bound
to a string that is inserted when the key is pressed (a <VAR>macro</VAR>).
+</P><P>
<DL COMPACT>
-
<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyname</VAR> is the name of a key spelled out in English. For example:
-
-<PRE>
-Control-u: universal-argument
+<DD><VAR>keyname</VAR> is the name of a key spelled out in English. For example:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "&#62; output"
-</PRE>
+</pre></td></tr></table><P>
In the above example, <KBD>C-u</KBD> is bound to the function
<CODE>universal-argument</CODE>,
@@ -708,6 +775,7 @@ In the above example, <KBD>C-u</KBD> is bound to the function
<KBD>C-o</KBD> is bound to run the macro
expressed on the right hand side (that is, to insert the text
<SAMP>`&#62; output'</SAMP> into the line).
+</P><P>
A number of symbolic character names are recognized while
processing this key binding syntax:
@@ -723,93 +791,80 @@ processing this key binding syntax:
<VAR>SPC</VAR>,
and
<VAR>TAB</VAR>.
+</P><P>
<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR>
-<DD>
-<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
+<DD><VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings
denoting an entire key sequence can be specified, by placing
the key sequence in double quotes. Some GNU Emacs style key
escapes can be used, as in the following example, but the
special character names are not recognized.
+<P>
-
-<PRE>
-"\C-u": universal-argument
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"
-</PRE>
+</pre></td></tr></table></P><P>
In the above example, <KBD>C-u</KBD> is again bound to the function
<CODE>universal-argument</CODE> (just as it was in the first example),
<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>,
and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert
the text <SAMP>`Function Key 1'</SAMP>.
+</P><P>
</DL>
+<P>
The following GNU Emacs style escape sequences are available when
specifying key sequences:
+</P><P>
<DL COMPACT>
-
<DT><CODE><KBD>\C-</KBD></CODE>
-<DD>
-control prefix
+<DD>control prefix
<DT><CODE><KBD>\M-</KBD></CODE>
-<DD>
-meta prefix
+<DD>meta prefix
<DT><CODE><KBD>\e</KBD></CODE>
-<DD>
-an escape character
+<DD>an escape character
<DT><CODE><KBD>\\</KBD></CODE>
-<DD>
-backslash
+<DD>backslash
<DT><CODE><KBD>\"</KBD></CODE>
-<DD>
-<KBD>"</KBD>, a double quotation mark
+<DD><KBD>"</KBD>, a double quotation mark
<DT><CODE><KBD>\'</KBD></CODE>
-<DD>
-<KBD>'</KBD>, a single quote or apostrophe
+<DD><KBD>'</KBD>, a single quote or apostrophe
</DL>
+<P>
In addition to the GNU Emacs style escape sequences, a second
set of backslash escapes is available:
+</P><P>
<DL COMPACT>
-
<DT><CODE>\a</CODE>
-<DD>
-alert (bell)
+<DD>alert (bell)
<DT><CODE>\b</CODE>
-<DD>
-backspace
+<DD>backspace
<DT><CODE>\d</CODE>
-<DD>
-delete
+<DD>delete
<DT><CODE>\f</CODE>
-<DD>
-form feed
+<DD>form feed
<DT><CODE>\n</CODE>
-<DD>
-newline
+<DD>newline
<DT><CODE>\r</CODE>
-<DD>
-carriage return
+<DD>carriage return
<DT><CODE>\t</CODE>
-<DD>
-horizontal tab
+<DD>horizontal tab
<DT><CODE>\v</CODE>
-<DD>
-vertical tab
+<DD>vertical tab
<DT><CODE>\<VAR>nnn</VAR></CODE>
-<DD>
-the character whose ASCII code is the octal value <VAR>nnn</VAR>
-(one to three digits)
-<DT><CODE>\x<VAR>nnn</VAR></CODE>
-<DD>
-the character whose ASCII code is the hexadecimal value <VAR>nnn</VAR>
+<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR>
(one to three digits)
+<DT><CODE>\x<VAR>HH</VAR></CODE>
+<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR>
+(one or two hex digits)
</DL>
+<P>
When entering the text of a macro, single or double quotes must
be used to indicate a macro definition.
@@ -819,107 +874,120 @@ Backslash will quote any other character in the macro text,
including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>.
For example, the following binding will make <SAMP>`<KBD>C-x</KBD> \'</SAMP>
insert a single <SAMP>`\'</SAMP> into the line:
-
-<PRE>
-"\C-x\\": "\\"
-</PRE>
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>"\C-x\\": "\\"
+</pre></td></tr></table></P><P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC11" HREF="rluserman.html#TOC11">Conditional Init Constructs</A></H3>
-
+<A NAME="Conditional Init Constructs"></A>
+<HR SIZE="6">
+<A NAME="SEC11"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.2 Conditional Init Constructs </H3>
+<!--docid::SEC11::-->
<P>
+
Readline implements a facility similar in spirit to the conditional
compilation features of the C preprocessor which allows key
bindings and variable settings to be performed as the result
of tests. There are four parser directives used.
+</P><P>
-</P>
<DL COMPACT>
-
<DT><CODE>$if</CODE>
-<DD>
-The <CODE>$if</CODE> construct allows bindings to be made based on the
+<DD>The <CODE>$if</CODE> construct allows bindings to be made based on the
editing mode, the terminal being used, or the application using
Readline. The text of the test extends to the end of the line;
no characters are required to isolate it.
+<P>
<DL COMPACT>
-
<DT><CODE>mode</CODE>
-<DD>
-The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
+<DD>The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test
whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode.
This may be used in conjunction
with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in
the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if
Readline is starting out in <CODE>emacs</CODE> mode.
+<P>
<DT><CODE>term</CODE>
-<DD>
-The <CODE>term=</CODE> form may be used to include terminal-specific
+<DD>The <CODE>term=</CODE> form may be used to include terminal-specific
key bindings, perhaps to bind the key sequences output by the
terminal's function keys. The word on the right side of the
<SAMP>`='</SAMP> is tested against both the full name of the terminal and
the portion of the terminal name before the first <SAMP>`-'</SAMP>. This
allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>,
for instance.
+<P>
<DT><CODE>application</CODE>
-<DD>
-The <VAR>application</VAR> construct is used to include
+<DD>The <VAR>application</VAR> construct is used to include
application-specific settings. Each program using the Readline
library sets the <VAR>application name</VAR>, and you can test for
a particular value.
This could be used to bind key sequences to functions useful for
a specific program. For instance, the following command adds a
key sequence that quotes the current or previous word in Bash:
-
-<PRE>
-$if Bash
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
-</PRE>
-
-</DL>
+</pre></td></tr></table></DL>
+<P>
<DT><CODE>$endif</CODE>
-<DD>
-This command, as seen in the previous example, terminates an
+<DD>This command, as seen in the previous example, terminates an
<CODE>$if</CODE> command.
+<P>
<DT><CODE>$else</CODE>
-<DD>
-Commands in this branch of the <CODE>$if</CODE> directive are executed if
+<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if
the test fails.
+<P>
<DT><CODE>$include</CODE>
-<DD>
-This directive takes a single filename as an argument and reads commands
+<DD>This directive takes a single filename as an argument and reads commands
and bindings from that file.
For example, the following directive reads from <TT>`/etc/inputrc'</TT>:
+<TABLE><tr><td>&nbsp;</td><td class=example><pre>$include /etc/inputrc
+</pre></td></tr></table></DL>
+<P>
-<PRE>
-$include /etc/inputrc
-</PRE>
-
-</DL>
-
-
-
-<H3><A NAME="SEC12" HREF="rluserman.html#TOC12">Sample Init File</A></H3>
-
+<A NAME="Sample Init File"></A>
+<HR SIZE="6">
+<A NAME="SEC12"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.3.3 Sample Init File </H3>
+<!--docid::SEC12::-->
<P>
+
Here is an example of an <VAR>inputrc</VAR> file. This illustrates key
binding, variable assignment, and conditional syntax.
+</P><P>
-</P>
-
-<PRE>
-# This file controls the behaviour of line input editing for
+<TABLE><tr><td>&nbsp;</td><td class=example><pre># This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library. Existing programs
# include FTP, Bash, and Gdb.
#
@@ -1016,368 +1084,497 @@ $if Ftp
"\C-xt": "put \M-?"
"\M-.": yank-last-arg
$endif
-</PRE>
-
-
-
-<H2><A NAME="SEC13" HREF="rluserman.html#TOC13">Bindable Readline Commands</A></H2>
-
-
-<UL>
-<LI><A HREF="rluserman.html#SEC14">Commands For Moving</A>: Moving about the line.
-<LI><A HREF="rluserman.html#SEC15">Commands For History</A>: Getting at previous lines.
-<LI><A HREF="rluserman.html#SEC16">Commands For Text</A>: Commands for changing text.
-<LI><A HREF="rluserman.html#SEC17">Commands For Killing</A>: Commands for killing and yanking.
-<LI><A HREF="rluserman.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts.
-<LI><A HREF="rluserman.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you.
-<LI><A HREF="rluserman.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters
-<LI><A HREF="rluserman.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands.
-</UL>
+</pre></td></tr></table></P><P>
+
+<A NAME="Bindable Readline Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC13"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.4 Bindable Readline Commands </H2>
+<!--docid::SEC13::-->
+<P>
+<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR>
+<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR>
+</TABLE></BLOCKQUOTE>
<P>
+
This section describes Readline commands that may be bound to key
sequences.
Command names without an accompanying key sequence are unbound by default.
+</P><P>
-</P>
-<P>
In the following descriptions, <EM>point</EM> refers to the current cursor
position, and <EM>mark</EM> refers to a cursor position saved by the
<CODE>set-mark</CODE> command.
The text between the point and mark is referred to as the <EM>region</EM>.
-
-</P>
-
-
-<H3><A NAME="SEC14" HREF="rluserman.html#TOC14">Commands For Moving</A></H3>
+</P><P>
+
+<A NAME="Commands For Moving"></A>
+<HR SIZE="6">
+<A NAME="SEC14"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.1 Commands For Moving </H3>
+<!--docid::SEC14::-->
<DL COMPACT>
-
+<A NAME="IDX24"></A>
<DT><CODE>beginning-of-line (C-a)</CODE>
-<DD>
-<A NAME="IDX27"></A>
+<DD><A NAME="IDX25"></A>
Move to the start of the current line.
+<P>
+<A NAME="IDX26"></A>
<DT><CODE>end-of-line (C-e)</CODE>
-<DD>
-<A NAME="IDX28"></A>
+<DD><A NAME="IDX27"></A>
Move to the end of the line.
+<P>
+<A NAME="IDX28"></A>
<DT><CODE>forward-char (C-f)</CODE>
-<DD>
-<A NAME="IDX29"></A>
+<DD><A NAME="IDX29"></A>
Move forward a character.
+<P>
-<DT><CODE>backward-char (C-b)</CODE>
-<DD>
<A NAME="IDX30"></A>
+<DT><CODE>backward-char (C-b)</CODE>
+<DD><A NAME="IDX31"></A>
Move back a character.
+<P>
+<A NAME="IDX32"></A>
<DT><CODE>forward-word (M-f)</CODE>
-<DD>
-<A NAME="IDX31"></A>
+<DD><A NAME="IDX33"></A>
Move forward to the end of the next word. Words are composed of
letters and digits.
+<P>
+<A NAME="IDX34"></A>
<DT><CODE>backward-word (M-b)</CODE>
-<DD>
-<A NAME="IDX32"></A>
+<DD><A NAME="IDX35"></A>
Move back to the start of the current or previous word. Words are
composed of letters and digits.
+<P>
+<A NAME="IDX36"></A>
<DT><CODE>clear-screen (C-l)</CODE>
-<DD>
-<A NAME="IDX33"></A>
+<DD><A NAME="IDX37"></A>
Clear the screen and redraw the current line,
leaving the current line at the top of the screen.
+<P>
+<A NAME="IDX38"></A>
<DT><CODE>redraw-current-line ()</CODE>
-<DD>
-<A NAME="IDX34"></A>
+<DD><A NAME="IDX39"></A>
Refresh the current line. By default, this is unbound.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC15" HREF="rluserman.html#TOC15">Commands For Manipulating The History</A></H3>
+<A NAME="Commands For History"></A>
+<HR SIZE="6">
+<A NAME="SEC15"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.2 Commands For Manipulating The History </H3>
+<!--docid::SEC15::-->
+<P>
<DL COMPACT>
-
+<A NAME="IDX40"></A>
<DT><CODE>accept-line (Newline or Return)</CODE>
-<DD>
-<A NAME="IDX35"></A>
+<DD><A NAME="IDX41"></A>
Accept the line regardless of where the cursor is.
If this line is
non-empty, it may be added to the history list for future recall with
<CODE>add_history()</CODE>.
If this line is a modified history line, the history line is restored
to its original state.
+<P>
+<A NAME="IDX42"></A>
<DT><CODE>previous-history (C-p)</CODE>
-<DD>
-<A NAME="IDX36"></A>
+<DD><A NAME="IDX43"></A>
Move `back' through the history list, fetching the previous command.
+<P>
+<A NAME="IDX44"></A>
<DT><CODE>next-history (C-n)</CODE>
-<DD>
-<A NAME="IDX37"></A>
+<DD><A NAME="IDX45"></A>
Move `forward' through the history list, fetching the next command.
+<P>
+<A NAME="IDX46"></A>
<DT><CODE>beginning-of-history (M-&#60;)</CODE>
-<DD>
-<A NAME="IDX38"></A>
+<DD><A NAME="IDX47"></A>
Move to the first line in the history.
+<P>
+<A NAME="IDX48"></A>
<DT><CODE>end-of-history (M-&#62;)</CODE>
-<DD>
-<A NAME="IDX39"></A>
+<DD><A NAME="IDX49"></A>
Move to the end of the input history, i.e., the line currently
being entered.
+<P>
+<A NAME="IDX50"></A>
<DT><CODE>reverse-search-history (C-r)</CODE>
-<DD>
-<A NAME="IDX40"></A>
+<DD><A NAME="IDX51"></A>
Search backward starting at the current line and moving `up' through
the history as necessary. This is an incremental search.
+<P>
+<A NAME="IDX52"></A>
<DT><CODE>forward-search-history (C-s)</CODE>
-<DD>
-<A NAME="IDX41"></A>
+<DD><A NAME="IDX53"></A>
Search forward starting at the current line and moving `down' through
the the history as necessary. This is an incremental search.
+<P>
+<A NAME="IDX54"></A>
<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE>
-<DD>
-<A NAME="IDX42"></A>
+<DD><A NAME="IDX55"></A>
Search backward starting at the current line and moving `up'
through the history as necessary using a non-incremental search
for a string supplied by the user.
+<P>
+<A NAME="IDX56"></A>
<DT><CODE>non-incremental-forward-search-history (M-n)</CODE>
-<DD>
-<A NAME="IDX43"></A>
+<DD><A NAME="IDX57"></A>
Search forward starting at the current line and moving `down'
through the the history as necessary using a non-incremental search
for a string supplied by the user.
+<P>
+<A NAME="IDX58"></A>
<DT><CODE>history-search-forward ()</CODE>
-<DD>
-<A NAME="IDX44"></A>
+<DD><A NAME="IDX59"></A>
Search forward through the history for the string of characters
between the start of the current line and the point.
This is a non-incremental search.
By default, this command is unbound.
+<P>
+<A NAME="IDX60"></A>
<DT><CODE>history-search-backward ()</CODE>
-<DD>
-<A NAME="IDX45"></A>
+<DD><A NAME="IDX61"></A>
Search backward through the history for the string of characters
between the start of the current line and the point. This
is a non-incremental search. By default, this command is unbound.
+<P>
+<A NAME="IDX62"></A>
<DT><CODE>yank-nth-arg (M-C-y)</CODE>
-<DD>
-<A NAME="IDX46"></A>
+<DD><A NAME="IDX63"></A>
Insert the first argument to the previous command (usually
the second word on the previous line) at point.
With an argument <VAR>n</VAR>,
insert the <VAR>n</VAR>th word from the previous command (the words
in the previous command begin with word 0). A negative argument
inserts the <VAR>n</VAR>th word from the end of the previous command.
+<P>
+<A NAME="IDX64"></A>
<DT><CODE>yank-last-arg (M-. or M-_)</CODE>
-<DD>
-<A NAME="IDX47"></A>
+<DD><A NAME="IDX65"></A>
Insert last argument to the previous command (the last word of the
previous history entry). With an
argument, behave exactly like <CODE>yank-nth-arg</CODE>.
Successive calls to <CODE>yank-last-arg</CODE> move back through the history
list, inserting the last argument of each line in turn.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC16" HREF="rluserman.html#TOC16">Commands For Changing Text</A></H3>
+<A NAME="Commands For Text"></A>
+<HR SIZE="6">
+<A NAME="SEC16"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.3 Commands For Changing Text </H3>
+<!--docid::SEC16::-->
+<P>
<DL COMPACT>
-
+<A NAME="IDX66"></A>
<DT><CODE>delete-char (C-d)</CODE>
-<DD>
-<A NAME="IDX48"></A>
+<DD><A NAME="IDX67"></A>
Delete the character at point. If point is at the
beginning of the line, there are no characters in the line, and
the last character typed was not bound to <CODE>delete-char</CODE>, then
return EOF.
+<P>
+<A NAME="IDX68"></A>
<DT><CODE>backward-delete-char (Rubout)</CODE>
-<DD>
-<A NAME="IDX49"></A>
+<DD><A NAME="IDX69"></A>
Delete the character behind the cursor. A numeric argument means
to kill the characters instead of deleting them.
+<P>
+<A NAME="IDX70"></A>
<DT><CODE>forward-backward-delete-char ()</CODE>
-<DD>
-<A NAME="IDX50"></A>
+<DD><A NAME="IDX71"></A>
Delete the character under the cursor, unless the cursor is at the
end of the line, in which case the character behind the cursor is
deleted. By default, this is not bound to a key.
+<P>
+<A NAME="IDX72"></A>
<DT><CODE>quoted-insert (C-q or C-v)</CODE>
-<DD>
-<A NAME="IDX51"></A>
+<DD><A NAME="IDX73"></A>
Add the next character typed to the line verbatim. This is
how to insert key sequences like <KBD>C-q</KBD>, for example.
+<P>
+<A NAME="IDX74"></A>
<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE>
-<DD>
-<A NAME="IDX52"></A>
+<DD><A NAME="IDX75"></A>
Insert a tab character.
+<P>
-<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE>
-<DD>
-<A NAME="IDX53"></A>
+<A NAME="IDX76"></A>
+<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE>
+<DD><A NAME="IDX77"></A>
Insert yourself.
+<P>
+<A NAME="IDX78"></A>
<DT><CODE>transpose-chars (C-t)</CODE>
-<DD>
-<A NAME="IDX54"></A>
+<DD><A NAME="IDX79"></A>
Drag the character before the cursor forward over
the character at the cursor, moving the
cursor forward as well. If the insertion point
is at the end of the line, then this
transposes the last two characters of the line.
Negative arguments have no effect.
+<P>
+<A NAME="IDX80"></A>
<DT><CODE>transpose-words (M-t)</CODE>
-<DD>
-<A NAME="IDX55"></A>
+<DD><A NAME="IDX81"></A>
Drag the word before point past the word after point,
moving point past that word as well.
+If the insertion point is at the end of the line, this transposes
+the last two words on the line.
+<P>
+<A NAME="IDX82"></A>
<DT><CODE>upcase-word (M-u)</CODE>
-<DD>
-<A NAME="IDX56"></A>
+<DD><A NAME="IDX83"></A>
Uppercase the current (or following) word. With a negative argument,
uppercase the previous word, but do not move the cursor.
+<P>
+<A NAME="IDX84"></A>
<DT><CODE>downcase-word (M-l)</CODE>
-<DD>
-<A NAME="IDX57"></A>
+<DD><A NAME="IDX85"></A>
Lowercase the current (or following) word. With a negative argument,
lowercase the previous word, but do not move the cursor.
+<P>
+<A NAME="IDX86"></A>
<DT><CODE>capitalize-word (M-c)</CODE>
-<DD>
-<A NAME="IDX58"></A>
+<DD><A NAME="IDX87"></A>
Capitalize the current (or following) word. With a negative argument,
capitalize the previous word, but do not move the cursor.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC17" HREF="rluserman.html#TOC17">Killing And Yanking</A></H3>
+<A NAME="Commands For Killing"></A>
+<HR SIZE="6">
+<A NAME="SEC17"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.4 Killing And Yanking </H3>
+<!--docid::SEC17::-->
+<P>
<DL COMPACT>
+<A NAME="IDX88"></A>
<DT><CODE>kill-line (C-k)</CODE>
-<DD>
-<A NAME="IDX59"></A>
+<DD><A NAME="IDX89"></A>
Kill the text from point to the end of the line.
+<P>
+<A NAME="IDX90"></A>
<DT><CODE>backward-kill-line (C-x Rubout)</CODE>
-<DD>
-<A NAME="IDX60"></A>
+<DD><A NAME="IDX91"></A>
Kill backward to the beginning of the line.
+<P>
+<A NAME="IDX92"></A>
<DT><CODE>unix-line-discard (C-u)</CODE>
-<DD>
-<A NAME="IDX61"></A>
+<DD><A NAME="IDX93"></A>
Kill backward from the cursor to the beginning of the current line.
+<P>
+<A NAME="IDX94"></A>
<DT><CODE>kill-whole-line ()</CODE>
-<DD>
-<A NAME="IDX62"></A>
+<DD><A NAME="IDX95"></A>
Kill all characters on the current line, no matter where point is.
By default, this is unbound.
+<P>
+<A NAME="IDX96"></A>
<DT><CODE>kill-word (M-d)</CODE>
-<DD>
-<A NAME="IDX63"></A>
+<DD><A NAME="IDX97"></A>
Kill from point to the end of the current word, or if between
words, to the end of the next word.
Word boundaries are the same as <CODE>forward-word</CODE>.
+<P>
+<A NAME="IDX98"></A>
<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE>
-<DD>
-<A NAME="IDX64"></A>
+<DD><A NAME="IDX99"></A>
Kill the word behind point.
Word boundaries are the same as <CODE>backward-word</CODE>.
+<P>
+<A NAME="IDX100"></A>
<DT><CODE>unix-word-rubout (C-w)</CODE>
-<DD>
-<A NAME="IDX65"></A>
+<DD><A NAME="IDX101"></A>
Kill the word behind point, using white space as a word boundary.
The killed text is saved on the kill-ring.
+<P>
+<A NAME="IDX102"></A>
<DT><CODE>delete-horizontal-space ()</CODE>
-<DD>
-<A NAME="IDX66"></A>
+<DD><A NAME="IDX103"></A>
Delete all spaces and tabs around point. By default, this is unbound.
+<P>
+<A NAME="IDX104"></A>
<DT><CODE>kill-region ()</CODE>
-<DD>
-<A NAME="IDX67"></A>
+<DD><A NAME="IDX105"></A>
Kill the text in the current region.
By default, this command is unbound.
+<P>
+<A NAME="IDX106"></A>
<DT><CODE>copy-region-as-kill ()</CODE>
-<DD>
-<A NAME="IDX68"></A>
+<DD><A NAME="IDX107"></A>
Copy the text in the region to the kill buffer, so it can be yanked
right away. By default, this command is unbound.
+<P>
+<A NAME="IDX108"></A>
<DT><CODE>copy-backward-word ()</CODE>
-<DD>
-<A NAME="IDX69"></A>
+<DD><A NAME="IDX109"></A>
Copy the word before point to the kill buffer.
The word boundaries are the same as <CODE>backward-word</CODE>.
By default, this command is unbound.
+<P>
+<A NAME="IDX110"></A>
<DT><CODE>copy-forward-word ()</CODE>
-<DD>
-<A NAME="IDX70"></A>
+<DD><A NAME="IDX111"></A>
Copy the word following point to the kill buffer.
The word boundaries are the same as <CODE>forward-word</CODE>.
By default, this command is unbound.
+<P>
+<A NAME="IDX112"></A>
<DT><CODE>yank (C-y)</CODE>
-<DD>
-<A NAME="IDX71"></A>
+<DD><A NAME="IDX113"></A>
Yank the top of the kill ring into the buffer at point.
+<P>
+<A NAME="IDX114"></A>
<DT><CODE>yank-pop (M-y)</CODE>
-<DD>
-<A NAME="IDX72"></A>
+<DD><A NAME="IDX115"></A>
Rotate the kill-ring, and yank the new top. You can only do this if
the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>.
</DL>
+<P>
-
-
-<H3><A NAME="SEC18" HREF="rluserman.html#TOC18">Specifying Numeric Arguments</A></H3>
+<A NAME="Numeric Arguments"></A>
+<HR SIZE="6">
+<A NAME="SEC18"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.5 Specifying Numeric Arguments </H3>
+<!--docid::SEC18::-->
<DL COMPACT>
-<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, ... <KBD>M--</KBD>)</CODE>
-<DD>
-<A NAME="IDX73"></A>
+<A NAME="IDX116"></A>
+<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE>
+<DD><A NAME="IDX117"></A>
Add this digit to the argument already accumulating, or start a new
argument. <KBD>M--</KBD> starts a negative argument.
+<P>
+<A NAME="IDX118"></A>
<DT><CODE>universal-argument ()</CODE>
-<DD>
-<A NAME="IDX74"></A>
+<DD><A NAME="IDX119"></A>
This is another way to specify an argument.
If this command is followed by one or more digits, optionally with a
leading minus sign, those digits define the argument.
@@ -1391,34 +1588,51 @@ first time makes the argument count four, a second time makes the
argument count sixteen, and so on.
By default, this is not bound to a key.
</DL>
+<P>
-
-
-<H3><A NAME="SEC19" HREF="rluserman.html#TOC19">Letting Readline Type For You</A></H3>
+<A NAME="Commands For Completion"></A>
+<HR SIZE="6">
+<A NAME="SEC19"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.6 Letting Readline Type For You </H3>
+<!--docid::SEC19::-->
+<P>
<DL COMPACT>
-
+<A NAME="IDX120"></A>
<DT><CODE>complete (<KBD>TAB</KBD>)</CODE>
-<DD>
-<A NAME="IDX75"></A>
+<DD><A NAME="IDX121"></A>
Attempt to perform completion on the text before point.
The actual completion performed is application-specific.
The default is filename completion.
+<P>
+<A NAME="IDX122"></A>
<DT><CODE>possible-completions (M-?)</CODE>
-<DD>
-<A NAME="IDX76"></A>
+<DD><A NAME="IDX123"></A>
List the possible completions of the text before point.
+<P>
+<A NAME="IDX124"></A>
<DT><CODE>insert-completions (M-*)</CODE>
-<DD>
-<A NAME="IDX77"></A>
+<DD><A NAME="IDX125"></A>
Insert all completions of the text before point that would have
been generated by <CODE>possible-completions</CODE>.
+<P>
+<A NAME="IDX126"></A>
<DT><CODE>menu-complete ()</CODE>
-<DD>
-<A NAME="IDX78"></A>
+<DD><A NAME="IDX127"></A>
Similar to <CODE>complete</CODE>, but replaces the word to be completed
with a single match from the list of possible completions.
Repeated execution of <CODE>menu-complete</CODE> steps through the list
@@ -1431,178 +1645,485 @@ of matches; a negative argument may be used to move backward
through the list.
This command is intended to be bound to <KBD>TAB</KBD>, but is unbound
by default.
+<P>
+<A NAME="IDX128"></A>
<DT><CODE>delete-char-or-list ()</CODE>
-<DD>
-<A NAME="IDX79"></A>
+<DD><A NAME="IDX129"></A>
Deletes the character under the cursor if not at the beginning or
end of the line (like <CODE>delete-char</CODE>).
If at the end of the line, behaves identically to
<CODE>possible-completions</CODE>.
This command is unbound by default.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC20" HREF="rluserman.html#TOC20">Keyboard Macros</A></H3>
+<A NAME="Keyboard Macros"></A>
+<HR SIZE="6">
+<A NAME="SEC20"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.7 Keyboard Macros </H3>
+<!--docid::SEC20::-->
<DL COMPACT>
+<A NAME="IDX130"></A>
<DT><CODE>start-kbd-macro (C-x ()</CODE>
-<DD>
-<A NAME="IDX80"></A>
+<DD><A NAME="IDX131"></A>
Begin saving the characters typed into the current keyboard macro.
+<P>
+<A NAME="IDX132"></A>
<DT><CODE>end-kbd-macro (C-x ))</CODE>
-<DD>
-<A NAME="IDX81"></A>
+<DD><A NAME="IDX133"></A>
Stop saving the characters typed into the current keyboard macro
and save the definition.
+<P>
+<A NAME="IDX134"></A>
<DT><CODE>call-last-kbd-macro (C-x e)</CODE>
-<DD>
-<A NAME="IDX82"></A>
+<DD><A NAME="IDX135"></A>
Re-execute the last keyboard macro defined, by making the characters
in the macro appear as if typed at the keyboard.
+<P>
</DL>
+<P>
-
-
-<H3><A NAME="SEC21" HREF="rluserman.html#TOC21">Some Miscellaneous Commands</A></H3>
+<A NAME="Miscellaneous Commands"></A>
+<HR SIZE="6">
+<A NAME="SEC21"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &lt;&lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> &gt;&gt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H3> 1.4.8 Some Miscellaneous Commands </H3>
+<!--docid::SEC21::-->
<DL COMPACT>
+<A NAME="IDX136"></A>
<DT><CODE>re-read-init-file (C-x C-r)</CODE>
-<DD>
-<A NAME="IDX83"></A>
+<DD><A NAME="IDX137"></A>
Read in the contents of the <VAR>inputrc</VAR> file, and incorporate
any bindings or variable assignments found there.
+<P>
+<A NAME="IDX138"></A>
<DT><CODE>abort (C-g)</CODE>
-<DD>
-<A NAME="IDX84"></A>
+<DD><A NAME="IDX139"></A>
Abort the current editing command and
ring the terminal's bell (subject to the setting of
<CODE>bell-style</CODE>).
+<P>
-<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE>
-<DD>
-<A NAME="IDX85"></A>
+<A NAME="IDX140"></A>
+<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE>
+<DD><A NAME="IDX141"></A>
If the metafied character <VAR>x</VAR> is lowercase, run the command
that is bound to the corresponding uppercase character.
+<P>
+<A NAME="IDX142"></A>
<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE>
-<DD>
-<A NAME="IDX86"></A>
+<DD><A NAME="IDX143"></A>
Metafy the next character typed. This is for keyboards
without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing
<KBD>M-f</KBD>.
+<P>
+<A NAME="IDX144"></A>
<DT><CODE>undo (C-_ or C-x C-u)</CODE>
-<DD>
-<A NAME="IDX87"></A>
+<DD><A NAME="IDX145"></A>
Incremental undo, separately remembered for each line.
+<P>
+<A NAME="IDX146"></A>
<DT><CODE>revert-line (M-r)</CODE>
-<DD>
-<A NAME="IDX88"></A>
+<DD><A NAME="IDX147"></A>
Undo all changes made to this line. This is like executing the <CODE>undo</CODE>
command enough times to get back to the beginning.
+<P>
+<A NAME="IDX148"></A>
<DT><CODE>tilde-expand (M-~)</CODE>
-<DD>
-<A NAME="IDX89"></A>
+<DD><A NAME="IDX149"></A>
Perform tilde expansion on the current word.
+<P>
+<A NAME="IDX150"></A>
<DT><CODE>set-mark (C-@)</CODE>
-<DD>
-<A NAME="IDX90"></A>
+<DD><A NAME="IDX151"></A>
Set the mark to the point. If a
numeric argument is supplied, the mark is set to that position.
+<P>
+<A NAME="IDX152"></A>
<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE>
-<DD>
-<A NAME="IDX91"></A>
+<DD><A NAME="IDX153"></A>
Swap the point with the mark. The current cursor position is set to
the saved position, and the old cursor position is saved as the mark.
+<P>
+<A NAME="IDX154"></A>
<DT><CODE>character-search (C-])</CODE>
-<DD>
-<A NAME="IDX92"></A>
+<DD><A NAME="IDX155"></A>
A character is read and point is moved to the next occurrence of that
character. A negative count searches for previous occurrences.
+<P>
+<A NAME="IDX156"></A>
<DT><CODE>character-search-backward (M-C-])</CODE>
-<DD>
-<A NAME="IDX93"></A>
+<DD><A NAME="IDX157"></A>
A character is read and point is moved to the previous occurrence
of that character. A negative count searches for subsequent
occurrences.
+<P>
+<A NAME="IDX158"></A>
<DT><CODE>insert-comment (M-#)</CODE>
-<DD>
-<A NAME="IDX94"></A>
+<DD><A NAME="IDX159"></A>
The value of the <CODE>comment-begin</CODE>
variable is inserted at the beginning of the current line,
and the line is accepted as if a newline had been typed.
+<P>
+<A NAME="IDX160"></A>
<DT><CODE>dump-functions ()</CODE>
-<DD>
-<A NAME="IDX95"></A>
+<DD><A NAME="IDX161"></A>
Print all of the functions and their key bindings to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
+<P>
+<A NAME="IDX162"></A>
<DT><CODE>dump-variables ()</CODE>
-<DD>
-<A NAME="IDX96"></A>
+<DD><A NAME="IDX163"></A>
Print all of the settable variables and their values to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
+<P>
+<A NAME="IDX164"></A>
<DT><CODE>dump-macros ()</CODE>
-<DD>
-<A NAME="IDX97"></A>
+<DD><A NAME="IDX165"></A>
Print all of the Readline key sequences bound to macros and the
strings they output. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an <VAR>inputrc</VAR> file. This command is unbound by default.
+<P>
</DL>
+<P>
-
-
-<H2><A NAME="SEC22" HREF="rluserman.html#TOC22">Readline vi Mode</A></H2>
-
+<A NAME="Readline vi Mode"></A>
+<HR SIZE="6">
+<A NAME="SEC22"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> &lt; </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[ &lt;&lt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[ &gt;&gt; ]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT"> &nbsp; <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H2> 1.5 Readline vi Mode </H2>
+<!--docid::SEC22::-->
<P>
+
While the Readline library does not have a full set of <CODE>vi</CODE>
editing functions, it does contain enough to allow simple editing
of the line. The Readline <CODE>vi</CODE> mode behaves as specified in
the POSIX 1003.2 standard.
+</P><P>
-</P>
-<P>
In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE>
editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode
when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> mode).
The Readline default is <CODE>emacs</CODE> mode.
+</P><P>
-</P>
-<P>
When you enter a line in <CODE>vi</CODE> mode, you are already placed in
`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>. Pressing <KBD>ESC</KBD>
switches you into `command' mode, where you can edit the text of the
line with the standard <CODE>vi</CODE> movement keys, move to previous
history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and
so forth.
+</P><P>
+
+<HR SIZE="6">
+<A NAME="SEC_Contents"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Table of Contents</H1>
+<UL>
+<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A>
+<BR>
+<UL>
+<A NAME="TOC2" HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A>
+<BR>
+<A NAME="TOC3" HREF="rluserman.html#SEC3">1.2 Readline Interaction</A>
+<BR>
+<UL>
+<A NAME="TOC4" HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A>
+<BR>
+<A NAME="TOC5" HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A>
+<BR>
+<A NAME="TOC6" HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A>
+<BR>
+<A NAME="TOC7" HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A>
+<BR>
+<A NAME="TOC8" HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A>
+<BR>
+</UL>
+<A NAME="TOC9" HREF="rluserman.html#SEC9">1.3 Readline Init File</A>
+<BR>
+<UL>
+<A NAME="TOC10" HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A>
+<BR>
+<A NAME="TOC11" HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A>
+<BR>
+<A NAME="TOC12" HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A>
+<BR>
+</UL>
+<A NAME="TOC13" HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A>
+<BR>
+<UL>
+<A NAME="TOC14" HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A>
+<BR>
+<A NAME="TOC15" HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A>
+<BR>
+<A NAME="TOC16" HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A>
+<BR>
+<A NAME="TOC17" HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A>
+<BR>
+<A NAME="TOC18" HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A>
+<BR>
+<A NAME="TOC19" HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A>
+<BR>
+<A NAME="TOC20" HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A>
+<BR>
+<A NAME="TOC21" HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A>
+<BR>
+</UL>
+<A NAME="TOC22" HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A>
+<BR>
+</UL>
+</UL>
+<HR SIZE=1>
+<A NAME="SEC_OVERVIEW"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
+</TR></TABLE>
+<H1>Short Table of Contents</H1>
+<BLOCKQUOTE>
+<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A>
+<BR>
+
+</BLOCKQUOTE>
+<HR SIZE=1>
+<A NAME="SEC_About"></A>
+<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
+<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD>
+<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD>
+<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, 9 2001</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
+<P></P>
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt; ] </TD>
+<TD ALIGN="CENTER">
+Back
+</TD>
+<TD>
+previous section in reading order
+</TD>
+<TD>
+1.2.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt; ] </TD>
+<TD ALIGN="CENTER">
+Forward
+</TD>
+<TD>
+next section in reading order
+</TD>
+<TD>
+1.2.4
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &lt;&lt; ] </TD>
+<TD ALIGN="CENTER">
+FastBack
+</TD>
+<TD>
+previous or up-and-previous section
+</TD>
+<TD>
+1.1
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ Up ] </TD>
+<TD ALIGN="CENTER">
+Up
+</TD>
+<TD>
+up section
+</TD>
+<TD>
+1.2
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ &gt;&gt; ] </TD>
+<TD ALIGN="CENTER">
+FastForward
+</TD>
+<TD>
+next or up-and-next section
+</TD>
+<TD>
+1.3
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Top] </TD>
+<TD ALIGN="CENTER">
+Top
+</TD>
+<TD>
+cover (top) of document
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Contents] </TD>
+<TD ALIGN="CENTER">
+Contents
+</TD>
+<TD>
+table of contents
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [Index] </TD>
+<TD ALIGN="CENTER">
+Index
+</TD>
+<TD>
+concept index
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+<TR>
+<TD ALIGN="CENTER">
+ [ ? ] </TD>
+<TD ALIGN="CENTER">
+About
+</TD>
+<TD>
+this page
+</TD>
+<TD>
+ &nbsp;
+</TD>
+</TR>
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
-</P>
+<HR SIZE=1>
+<BR>
+<FONT SIZE="-1">
+This document was generated
+by <I>Chet Ramey</I> on <I>October, 9 2001</I>
+using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
+"><I>texi2html</I></A>
-<P><HR><P>
-This document was generated on 16 April 2001 using the
-<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>
-translator version 1.52.</P>
</BODY>
</HTML>
diff --git a/doc/rluserman.info b/doc/rluserman.info
index 1d94c93..63ccdf0 100644
--- a/doc/rluserman.info
+++ b/doc/rluserman.info
@@ -232,7 +232,7 @@ available to be yanked back later, when you are typing another line.
as those used by `M-f'.
`M-<DEL>'
- Kill from the cursor the start of the previous word, or, if between
+ Kill from the cursor the start of the current word, or, if between
words, to the start of the previous word. Word boundaries are the
same as those used by `M-b'.
@@ -305,6 +305,10 @@ the search and accept the line, thereby executing the command from the
history list. A movement command will terminate the search, make the
last line found the current line, and begin editing.
+ Readline remembers the last incremental search string. If two
+`C-r's are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+
Non-incremental searches read the entire search string before
starting to search for matching history lines. The search string may be
typed by the user or be part of the contents of the current line.
@@ -419,6 +423,10 @@ Variable Settings
If set to `on', tilde expansion is performed when Readline
attempts word completion. The default is `off'.
+ If set to `on', the history code attempts to place point at
+ the same location on each history line retrived with
+ `previous-history' or `next-history'.
+
`horizontal-scroll-mode'
This variable can be set to either `on' or `off'. Setting it
to `on' means that the text of the lines being edited will
@@ -458,6 +466,13 @@ Variable Settings
asterisk (`*') at the start of history lines which have been
modified. This variable is `off' by default.
+ `match-hidden-files'
+ This variable, when set to `on', causes Readline to match
+ files whose names begin with a `.' (hidden files) when
+ performing filename completion, unless the leading `.' is
+ supplied by the user in the filename to be completed. This
+ variable is `on' by default.
+
`output-meta'
If set to `on', Readline will display characters with the
eighth bit set directly rather than as a meta-prefixed escape
@@ -578,13 +593,13 @@ Key Bindings
vertical tab
`\NNN'
- the character whose ASCII code is the octal value NNN (one to
- three digits)
-
- `\xNNN'
- the character whose ASCII code is the hexadecimal value NNN
+ the eight-bit character whose value is the octal value NNN
(one to three digits)
+ `\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
+
When entering the text of a macro, single or double quotes must be
used to indicate a macro definition. Unquoted text is assumed to
be a function name. In the macro body, the backslash escapes
@@ -928,7 +943,8 @@ Commands For Changing Text
`transpose-words (M-t)'
Drag the word before point past the word after point, moving point
- past that word as well.
+ past that word as well. If the insertion point is at the end of
+ the line, this transposes the last two words on the line.
`upcase-word (M-u)'
Uppercase the current (or following) word. With a negative
@@ -1185,21 +1201,21 @@ Node: Readline Interaction3837
Node: Readline Bare Essentials5025
Node: Readline Movement Commands6807
Node: Readline Killing Commands7765
-Node: Readline Arguments9676
-Node: Searching10713
-Node: Readline Init File12670
-Node: Readline Init File Syntax13732
-Node: Conditional Init Constructs23655
-Node: Sample Init File26181
-Node: Bindable Readline Commands29352
-Node: Commands For Moving30403
-Node: Commands For History31253
-Node: Commands For Text34112
-Node: Commands For Killing36100
-Node: Numeric Arguments38052
-Node: Commands For Completion39181
-Node: Keyboard Macros40714
-Node: Miscellaneous Commands41274
-Node: Readline vi Mode44068
+Node: Readline Arguments9675
+Node: Searching10712
+Node: Readline Init File12856
+Node: Readline Init File Syntax13918
+Node: Conditional Init Constructs24369
+Node: Sample Init File26895
+Node: Bindable Readline Commands30066
+Node: Commands For Moving31117
+Node: Commands For History31967
+Node: Commands For Text34826
+Node: Commands For Killing36918
+Node: Numeric Arguments38870
+Node: Commands For Completion39999
+Node: Keyboard Macros41532
+Node: Miscellaneous Commands42092
+Node: Readline vi Mode44886

End Tag Table
diff --git a/doc/rluserman.ps b/doc/rluserman.ps
index 705766a..c6b807e 100644
--- a/doc/rluserman.ps
+++ b/doc/rluserman.ps
@@ -8,7 +8,7 @@
%DVIPSWebPage: (www.radicaleye.com)
%DVIPSCommandLine: dvips -D 300 -t letter -o rluserman.ps rluserman.dvi
%DVIPSParameters: dpi=300, compressed
-%DVIPSSource: TeX output 2001.04.16:1105
+%DVIPSSource: TeX output 2001.10.09:1508
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -163,8 +163,8 @@ D<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00
005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B
1370EA68E0EA7FC0001FC8FC1D237F9720>I E
%EndDVIPSBitmapFont
-%DVIPSBitmapFont: Fc cmsl10 10.95 39
-/Fc 39 122 df<EAFFF0A20C027E8A0F>45 D<1408140C141C143CA2147C147E149EA2EB
+%DVIPSBitmapFont: Fc cmsl10 10.95 40
+/Fc 40 122 df<EAFFF0A20C027E8A0F>45 D<1408140C141C143CA2147C147E149EA2EB
011EA21302801304A21308A20110138014071320A2EB7FFF90384007C0EB8003A2EA0100
A21202EC01E01206001F130339FF801FFE1F207F9F22>65 D<0007B5FC3900F803C09038
7801E0EC00F04913F8A515F03801E001EC03E015C0EC0F809038FFFE009038E00F803903
@@ -177,62 +177,64 @@ C003C0EC01E015F0A21400A2485A1401A215E01403EC07C0390F000F80EC3E00B512F01D
04A414043901E00800A31438EBFFF8EBE0383803C010A4EC00081510485AA21520A21560
15C0380F00011407B612801E1F7E9E1F>I<0007B512F83900F800780178133815185B15
08A53901E00800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D
-1F7E9E1E>I<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7FEAFFF011
-1F7E9E10>73 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC14021408
-48485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E811407
-81140381380F00016D487E39FFF00FFE231F7E9E23>75 D<3807FFE0D800FCC7FC1378A2
-5BA6485AA6485AA41580EC0100EA0780A25C14021406140E380F001E147CB512FC191F7E
-9E1C>I<D807F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83C0D8
-01035BEB01E0A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A2140100
-0C5C001E1300B47E221F7E9E22>78 D<EB01FCEB0E0790383801C090387000E0484813F0
-48481378485A153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01F0
-007C14E01403003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F801F
-217C9F23>I<0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC01
-E0EC03C0EC0F00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807FF
-FE3900F8078090387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EB
-FFF03803C03880141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078CC7
-EA01F020207E9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C00061304120E
-A3000F1300A27FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA200401338
-A3143000601370146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512F0
-383C078000301430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383FFF
-E01C1F7A9E21>I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A6485B
-A600705BA25CA200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFFF0
-7FF81FF03B1F000FC007C0001E903907800380001FED01006C1502140F5EEC17C002135B
-142301805C000713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C415
-F2EBC80015F4EA01F015F85B5D5B15605B000014402C207A9E2F>87
-D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A313
-1EEB2E2038784F40381F878014147D9317>97 D<1207123F120F7EA2120EA65A137CEA1D
-83381E0180001C13C0EB00E05A14F0A5387001E0A214C013031480EB0700EAE80EEACC38
-EA83E014207B9F19>I<13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5B
-EA70026C5AEA1C18EA07E011147D9314>I<13F8EA070EEA0E07381C0380123812781270
-12F0B5FC00F0C7FCA25AA46C5AEA7002EA3004EA1C18EA07E011147D9314>101
-D<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA3FFCEA0380A448C7FCA6120E
-A65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801C1C2380381E0EA0780130112
-0FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C014E0381800F0481330
-5A5AA3006013606C13C0381C0700EA07FC181F809417>I<EA01C0EA03E0A213C0EA0180
-C7FCA6EA0380121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>105
-D<13E0120712011200A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338
-137C131C120E7FA2130F7F1480EA1C03381E07C038FF8FF016207E9F18>107
-D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C
->I<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB0070A5000E
-EBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07
-A03803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014147E9319
->I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0130300F0
-138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807EC383801F01C6C487E14
-0F48487E1580A53903800F00A2140E141E141C5C38074070EB61C0011FC7FC90C8FCA312
-0EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E01E0123C003813C01278
-12F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA0007A3130EA4131EEBFF
-C0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120EA65A121E
-EAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802EA3C00121F13F0EA07FC
-EA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>I<1380EA01
-00A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<
-381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F801114
-7B9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075BA25BEA03
-9013A013E05B5B120190C7FC15147C9318>I<381FF0FF3803C0780001137014403800E0
-C0EBE180EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03
-E038FE07FC18147F9318>120 D<390FF83F803901E00E00EBC00C140813E000005B1430
-14205C13705CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000
-F1C8FC12E61278191D809318>I E
+1F7E9E1E>I<3A07FF83FFC03A00F8007C000178133CA2495BA648485BA490B5FCEBE000
+4848485AA64848485AA64848485A01807F39FFF07FF8221F7E9E22>72
+D<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7FEAFFF0111F7E9E10>
+I<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C1460
+14F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381380F
+00016D487E39FFF00FFE231F7E9E23>75 D<3807FFE0D800FCC7FC1378A25BA6485AA648
+5AA41580EC0100EA0780A25C14021406140E380F001E147CB512FC191F7E9E1C>I<D807
+F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83C0D801035BEB01E0
+A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A21401000C5C001E1300
+B47E221F7E9E22>78 D<EB01FCEB0E0790383801C090387000E0484813F048481378485A
+153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01F0007C14E01403
+003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F801F217C9F23>I<
+0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC01E0EC03C0EC0F
+00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807FFFE3900F80780
+90387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EBFFF03803C038
+80141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078CC7EA01F020207E
+9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C00061304120EA3000F1300A2
+7FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA200401338A31430006013
+70146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512F0383C07800030
+1430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383FFFE01C1F7A9E21
+>I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A6485BA600705BA25C
+A200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFFF07FF81FF03B1F
+000FC007C0001E903907800380001FED01006C1502140F5EEC17C002135B142301805C00
+0713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C415F2EBC80015F4
+EA01F015F85B5D5B15605B000014402C207A9E2F>87 D<EA07F8EA0C0CEA1E061307121C
+1200A313FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F87801414
+7D9317>97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14
+F0A5387001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA03
+83380E0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D
+9314>I<13F8EA070EEA0E07381C038012381278127012F0B5FC00F0C7FCA25AA46C5AEA
+7002EA3004EA1C18EA07E011147D9314>101 D<EB07C0EB1C60EB30F01360EBE0E0EBC0
+001201A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB
+3E11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FC
+A21218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC
+181F809417>I<EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6
+120EA65A121EEAFF800B1F7F9E0C>105 D<13E0120712011200A2485AA6485AEB81FCEB
+80F014C0EB81801400EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07
+C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A612
+0EA65A121EEAFF800B207F9F0C>I<390387C07C391F9861863907A072073903C03403EB
+80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E93
+26>I<38038F80381F90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380
+001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012
+F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3
+E03807EC383801F01C6C487E140F48487E1580A53903800F00A2140E141E141C5C380740
+70EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA07
+02381E01E0123C003813C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA
+07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300
+EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301
+EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA
+87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2
+EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4
+131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E0001C13C01480121E380E
+01005B13025B12075BA25BEA039013A013E05B5B120190C7FC15147C9318>I<381FF0FF
+3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E134E1387EA0107
+380203801204380C01C0383C03E038FE07FC18147F9318>120 D<390FF83F803901E00E
+00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C13381318
+1310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I
+E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fd cmti10 10.95 8
/Fd 8 117 df<EC3FE0ECE010903801803801031378A290380700301500A3130EA390B5
@@ -767,9 +769,9 @@ letter
%%EndSetup
%%Page: 1 1
1 0 bop 75 659 a Fn(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p
-75 709 1800 17 v 936 757 a Fm(Edition)17 b(4.2,)c(for)i
-Fl(Readline)f(Library)g Fm(V)l(ersion)i(4.2.)1692 811
-y(Apr)f(2001)75 2467 y Fk(Brian)23 b(F)-6 b(o)n(x,)23
+75 709 1800 17 v 891 757 a Fm(Edition)16 b(4.2a,)e(for)g
+Fl(Readline)g(Library)h Fm(V)l(ersion)h(4.2a.)1608 811
+y(Octob)q(er)g(2001)75 2467 y Fk(Brian)23 b(F)-6 b(o)n(x,)23
b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75
2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23
b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop
@@ -1003,12 +1005,12 @@ e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q
(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f
Fg(M-f)p Fm(.)75 668 y Fg(M-)123 666 y Ff(h)p 135 640
73 2 v 135 668 a Fe(DEL)p 135 675 V 206 666 a Ff(i)315
-668 y Fm(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h(the)g
-(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f(to)315
-723 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19
-b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g
-(b)o(y)315 777 y Fg(M-b)p Fm(.)75 855 y Fg(C-w)168 b
-Fm(Kill)18 b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22
+668 y Fm(Kill)i(from)e(the)g(cursor)g(the)h(start)e(of)h(the)g(curren)o
+(t)g(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)e(to)h(the)315
+723 y(start)j(of)h(the)g(previous)h(w)o(ord.)31 b(W)l(ord)19
+b(b)q(oundaries)h(are)f(the)h(same)e(as)h(those)g(used)h(b)o(y)315
+777 y Fg(M-b)p Fm(.)75 855 y Fg(C-w)168 b Fm(Kill)18
+b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22
b(This)16 b(is)g(di\013eren)o(t)g(than)f Fg(M-)1777 853
y Ff(h)p 1789 827 V 1789 855 a Fe(DEL)p 1789 863 V 1860
853 a Ff(i)315 910 y Fm(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h
@@ -1076,358 +1078,374 @@ b Fg(C-g)21 b Fm(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f
(and)g(restore)g(the)75 204 y(original)16 b(line.)21
b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o
(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259
-y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 324 y(T)l(o)g(\014nd)i
+y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 325 y(T)l(o)g(\014nd)i
(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o
(yp)q(e)f Fg(C-r)g Fm(or)g Fg(C-s)g Fm(as)h(appropriate.)k(This)75
-379 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i
+380 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i
(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g
(searc)o(h)g(string)75 434 y(t)o(yp)q(ed)19 b(so)g(far.)30
b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)
h(command)e(will)j(terminate)e(the)75 489 y(searc)o(h)10
b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063
487 y Ff(h)p 1076 461 76 2 v 1076 489 a Fe(RET)p 1076
-496 V 1149 487 a Ff(i)1174 489 y Fm(will)g(terminate)f(the)g(searc)o(h)
-f(and)h(accept)75 543 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g
+497 V 1149 487 a Ff(i)1174 489 y Fm(will)g(terminate)f(the)g(searc)o(h)
+f(and)h(accept)75 544 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g
(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f
-(command)g(will)75 598 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g
+(command)g(will)75 599 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g
(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g
-(editing.)137 664 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the)f
-(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o
-(h)i(for)75 718 y(matc)o(hing)d(history)h(lines.)39 b(The)22
+(editing.)137 665 y(Readline)j(remem)o(b)q(ers)e(the)h(last)f(incremen)
+o(tal)i(searc)o(h)e(string.)27 b(If)17 b(t)o(w)o(o)f
+Fg(C-r)p Fm(s)h(are)g(t)o(yp)q(ed)h(without)75 719 y(an)o(y)g(in)o
+(terv)o(ening)h(c)o(haracters)f(de\014ning)h(a)f(new)h(searc)o(h)f
+(string,)g(an)o(y)g(remem)o(b)q(ered)h(searc)o(h)f(string)g(is)75
+774 y(used.)137 840 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the)
+f(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o
+(h)i(for)75 895 y(matc)o(hing)d(history)h(lines.)39 b(The)22
b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h(t)o(yp)q(ed)f(b)o(y)h(the)f
-(user)h(or)e(b)q(e)i(part)f(of)g(the)75 773 y(con)o(ten)o(ts)15
-b(of)f(the)i(curren)o(t)f(line.)75 896 y Fk(1.3)33 b(Readline)23
-b(Init)h(File)137 990 y Fm(Although)f(the)g(Readline)h(library)f(comes)
-g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75
-1045 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e(use)i(a)e
-(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39 b(An)o(y)20
-b(user)h(can)g(customize)75 1100 y(programs)15 b(that)h(use)g(Readline)
-i(b)o(y)e(putting)g(commands)g(in)i(an)e Fc(inputrc)k
-Fm(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75 1155
-y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g(is)g
-(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g(v)m
-(ariable)75 1209 y Fl(INPUTRC)p Fm(.)i(If)c(that)g(v)m(ariable)h(is)g
-(unset,)f(the)g(default)h(is)g(`)p Fl(~/.inputrc)p Fm('.)137
-1275 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline)h(library)
-g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75
-1329 y(k)o(ey)g(bindings)i(are)e(set.)137 1395 y(In)f(addition,)h(the)e
-Fl(C-x)i(C-r)e Fm(command)g(re-reads)h(this)g(init)g(\014le,)h(th)o(us)
-e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 1450 y(that)h(y)o(ou)h
-(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1556 y Fb(1.3.1)30
-b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1650 y Fm(There)c(are)g
-(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)o(ed)i(in)f(the)g
-(Readline)h(init)g(\014le.)26 b(Blank)18 b(lines)g(are)75
-1705 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p
-Fl(#)p Fm(')e(are)h(commen)o(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e
-(a)f(`)p Fl($)p Fm(')f(indicate)75 1760 y(conditional)c(constructs)f
-(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h
-(8\).)k(Other)c(lines)75 1814 y(denote)h(v)m(ariable)i(settings)e(and)h
-(k)o(ey)f(bindings.)75 1890 y(V)l(ariable)h(Settings)315
-1945 y(Y)l(ou)k(can)h(mo)q(dify)g(the)f(run-time)h(b)q(eha)o(vior)g(of)
-e(Readline)j(b)o(y)e(altering)h(the)f(v)m(alues)h(of)315
-2000 y(v)m(ariables)d(in)g(Readline)g(using)f(the)g Fl(set)g
-Fm(command)f(within)i(the)f(init)h(\014le.)26 b(The)17
-b(syn)o(tax)315 2055 y(is)f(simple:)435 2117 y Fl(set)23
-b Fc(v)m(ariable)28 b(v)m(alue)315 2182 y Fm(Here,)14
-b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f(the)h(default)
-g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315 2237 y(use)g
-Fl(vi)e Fm(line)j(editing)g(commands:)435 2299 y Fl(set)23
-b(editing-mode)g(vi)315 2365 y Fm(V)l(ariable)c(names)e(and)h(v)m
-(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without)e(regard)
-315 2419 y(to)e(case.)315 2485 y(A)g(great)g(deal)g(of)g(run-time)h(b)q
-(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m
-(ariables.)315 2560 y Fl(bell-style)555 2615 y Fm(Con)o(trols)21
-b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f
-(termi-)555 2670 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
-Fl(none)p Fm(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32
-b(If)19 b(set)g(to)p eop
+(user)h(or)e(b)q(e)i(part)f(of)g(the)75 950 y(con)o(ten)o(ts)15
+b(of)f(the)i(curren)o(t)f(line.)75 1074 y Fk(1.3)33 b(Readline)23
+b(Init)h(File)137 1169 y Fm(Although)f(the)g(Readline)h(library)f
+(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g
+(installed)75 1224 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e
+(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39
+b(An)o(y)20 b(user)h(can)g(customize)75 1278 y(programs)15
+b(that)h(use)g(Readline)i(b)o(y)e(putting)g(commands)g(in)i(an)e
+Fc(inputrc)k Fm(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75
+1333 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g
+(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g
+(v)m(ariable)75 1388 y Fl(INPUTRC)p Fm(.)i(If)c(that)g(v)m(ariable)h
+(is)g(unset,)f(the)g(default)h(is)g(`)p Fl(~/.inputrc)p
+Fm('.)137 1454 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline)
+h(library)g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g
+(the)75 1509 y(k)o(ey)g(bindings)i(are)e(set.)137 1574
+y(In)f(addition,)h(the)e Fl(C-x)i(C-r)e Fm(command)g(re-reads)h(this)g
+(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75
+1629 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75
+1737 y Fb(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137
+1832 y Fm(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)
+o(ed)i(in)f(the)g(Readline)h(init)g(\014le.)26 b(Blank)18
+b(lines)g(are)75 1886 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d
+(a)h(`)p Fl(#)p Fm(')e(are)h(commen)o(ts.)35 b(Lines)22
+b(b)q(eginning)h(with)e(a)f(`)p Fl($)p Fm(')f(indicate)75
+1941 y(conditional)c(constructs)f(\(see)g(Section)g(1.3.2)f
+([Conditional)h(Init)h(Constructs],)e(page)h(8\).)k(Other)c(lines)75
+1996 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75
+2073 y(V)l(ariable)h(Settings)315 2128 y(Y)l(ou)k(can)h(mo)q(dify)g
+(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)j(b)o(y)e(altering)h
+(the)f(v)m(alues)h(of)315 2182 y(v)m(ariables)d(in)g(Readline)g(using)f
+(the)g Fl(set)g Fm(command)f(within)i(the)f(init)h(\014le.)26
+b(The)17 b(syn)o(tax)315 2237 y(is)f(simple:)435 2300
+y Fl(set)23 b Fc(v)m(ariable)28 b(v)m(alue)315 2366 y
+Fm(Here,)14 b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f
+(the)h(default)g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315
+2421 y(use)g Fl(vi)e Fm(line)j(editing)g(commands:)435
+2484 y Fl(set)23 b(editing-mode)g(vi)315 2549 y Fm(V)l(ariable)c(names)
+e(and)h(v)m(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without)
+e(regard)315 2604 y(to)e(case.)315 2670 y(A)g(great)g(deal)g(of)g
+(run-time)h(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o
+(wing)f(v)m(ariables.)p eop
%%Page: 5 7
5 6 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(5)555 149 y(`)p Fl(visible)p Fm(',)15 b(Readline)i(uses)g(a)f
-(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
-b(If)16 b(set)h(to)555 204 y(`)p Fl(audible)p Fm(')g(\(the)h
+b(5)315 149 y Fl(bell-style)555 204 y Fm(Con)o(trols)21
+b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f
+(termi-)555 259 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p
+Fl(none)p Fm(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32
+b(If)19 b(set)g(to)555 314 y(`)p Fl(visible)p Fm(',)c(Readline)i(uses)g
+(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26
+b(If)16 b(set)h(to)555 369 y(`)p Fl(audible)p Fm(')g(\(the)h
(default\),)i(Readline)g(attempts)e(to)g(ring)h(the)g(terminal's)555
-259 y(b)q(ell.)315 338 y Fl(comment-begin)555 393 y Fm(The)c(string)f
+423 y(b)q(ell.)315 504 y Fl(comment-begin)555 559 y Fm(The)c(string)f
(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g
-Fl(insert-)555 448 y(comment)f Fm(command)h(is)h(executed.)21
+Fl(insert-)555 614 y(comment)f Fm(command)h(is)h(executed.)21
b(The)15 b(default)h(v)m(alue)g(is)g Fl("#")p Fm(.)315
-527 y Fl(completion-ignore-case)555 582 y Fm(If)e(set)f(to)g(`)p
+694 y Fl(completion-ignore-case)555 749 y Fm(If)e(set)f(to)g(`)p
Fl(on)p Fm(',)g(Readline)i(p)q(erforms)e(\014lename)i(matc)o(hing)f
-(and)g(completion)555 637 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k
+(and)g(completion)555 804 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k
(The)15 b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)315
-716 y Fl(completion-query-items)555 770 y Fm(The)d(n)o(um)o(b)q(er)h
+884 y Fl(completion-query-items)555 939 y Fm(The)d(n)o(um)o(b)q(er)h
(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f
-(user)555 825 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i
+(user)555 994 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i
(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21
-b(the)555 880 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f
+b(the)555 1049 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f
(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555
-935 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f
-(view)h(them;)f(otherwise,)555 990 y(they)f(are)g(simply)i(listed.)20
+1104 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)
+f(view)h(them;)f(otherwise,)555 1158 y(they)f(are)g(simply)i(listed.)20
b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger)
-h(v)m(alue)555 1044 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d
-(default)f(limit)i(is)f Fl(100)p Fm(.)315 1124 y Fl(convert-meta)555
-1178 y Fm(If)11 b(set)g(to)g(`)p Fl(on)p Fm(',)f(Readline)i(will)h(con)
+h(v)m(alue)555 1213 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d
+(default)f(limit)i(is)f Fl(100)p Fm(.)315 1294 y Fl(convert-meta)555
+1348 y Fm(If)11 b(set)g(to)g(`)p Fl(on)p Fm(',)f(Readline)i(will)h(con)
o(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555
-1233 y(to)f(an)h Fh(asci)q(i)e Fm(k)o(ey)i(sequence)g(b)o(y)g
+1403 y(to)f(an)h Fh(asci)q(i)e Fm(k)o(ey)i(sequence)g(b)o(y)g
(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555
-1286 y Ff(h)p 567 1260 70 2 v 567 1288 a Fe(ESC)p 567
-1296 V 634 1286 a Ff(i)666 1288 y Fm(c)o(haracter,)k(con)o(v)o(erting)h
+1456 y Ff(h)p 567 1430 70 2 v 567 1458 a Fe(ESC)p 567
+1466 V 634 1456 a Ff(i)666 1458 y Fm(c)o(haracter,)k(con)o(v)o(erting)h
(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555
-1343 y(The)e(default)h(v)m(alue)h(is)e(`)p Fl(on)p Fm('.)315
-1422 y Fl(disable-completion)555 1477 y Fm(If)k(set)f(to)f(`)p
+1513 y(The)e(default)h(v)m(alue)h(is)e(`)p Fl(on)p Fm('.)315
+1593 y Fl(disable-completion)555 1648 y Fm(If)k(set)f(to)f(`)p
Fl(On)p Fm(',)h(Readline)i(will)g(inhibit)g(w)o(ord)e(completion.)30
-b(Completion)555 1531 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g
+b(Completion)555 1703 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g
(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555
-1586 y(to)h Fl(self-insert)p Fm(.)j(The)d(default)h(is)g(`)p
-Fl(off)p Fm('.)315 1665 y Fl(editing-mode)555 1720 y
+1758 y(to)h Fl(self-insert)p Fm(.)j(The)d(default)h(is)g(`)p
+Fl(off)p Fm('.)315 1838 y Fl(editing-mode)555 1893 y
Fm(The)f Fl(editing-mode)d Fm(v)m(ariable)k(con)o(trols)e(whic)o(h)h
-(default)g(set)f(of)g(k)o(ey)g(bind-)555 1775 y(ings)f(is)g(used.)20
+(default)g(set)f(of)g(k)o(ey)g(bind-)555 1948 y(ings)f(is)g(used.)20
b(By)12 b(default,)i(Readline)f(starts)f(up)h(in)g(Emacs)f(editing)i
-(mo)q(de,)555 1830 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g
+(mo)q(de,)555 2003 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g
(similar)i(to)d(Emacs.)20 b(This)15 b(v)m(ariable)h(can)555
-1885 y(b)q(e)g(set)f(to)f(either)i(`)p Fl(emacs)p Fm(')e(or)h(`)p
-Fl(vi)p Fm('.)315 1964 y Fl(enable-keypad)555 2019 y
+2058 y(b)q(e)g(set)f(to)f(either)i(`)p Fl(emacs)p Fm(')e(or)h(`)p
+Fl(vi)p Fm('.)315 2138 y Fl(enable-keypad)555 2193 y
Fm(When)d(set)f(to)h(`)p Fl(on)p Fm(',)e(Readline)j(will)h(try)d(to)g
-(enable)i(the)f(application)h(k)o(eypad)555 2073 y(when)h(it)f(is)h
+(enable)i(the)f(application)h(k)o(eypad)555 2248 y(when)h(it)f(is)h
(called.)21 b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g
-(arro)o(w)e(k)o(eys.)555 2128 y(The)j(default)h(is)g(`)p
-Fl(off)p Fm('.)315 2207 y Fl(expand-tilde)555 2262 y
+(arro)o(w)e(k)o(eys.)555 2303 y(The)j(default)h(is)g(`)p
+Fl(off)p Fm('.)315 2383 y Fl(expand-tilde)555 2438 y
Fm(If)e(set)g(to)f(`)p Fl(on)p Fm(',)f(tilde)k(expansion)e(is)h(p)q
-(erformed)f(when)g(Readline)h(attempts)555 2317 y(w)o(ord)g
+(erformed)f(when)g(Readline)h(attempts)555 2493 y(w)o(ord)g
(completion.)21 b(The)15 b(default)h(is)f(`)p Fl(off)p
-Fm('.)315 2396 y Fl(horizontal-scroll-mode)555 2451 y
-Fm(This)k(v)m(ariable)g(can)f(b)q(e)g(set)g(to)f(either)i(`)p
-Fl(on)p Fm(')e(or)g(`)p Fl(off)p Fm('.)27 b(Setting)19
-b(it)f(to)f(`)p Fl(on)p Fm(')555 2506 y(means)c(that)f(the)i(text)e(of)
-h(the)g(lines)i(b)q(eing)f(edited)g(will)h(scroll)f(horizon)o(tally)555
-2560 y(on)i(a)f(single)i(screen)g(line)g(when)g(they)f(are)f(longer)h
-(than)g(the)g(width)g(of)g(the)555 2615 y(screen,)e(instead)f(of)g
-(wrapping)g(on)o(to)f(a)h(new)g(screen)h(line.)21 b(By)13
-b(default,)h(this)555 2670 y(v)m(ariable)j(is)e(set)g(to)g(`)p
-Fl(off)p Fm('.)p eop
+Fm('.)555 2560 y(If)g(set)g(to)f(`)p Fl(on)p Fm(',)g(the)g(history)h
+(co)q(de)h(attempts)e(to)g(place)i(p)q(oin)o(t)f(at)f(the)h(same)555
+2615 y(lo)q(cation)20 b(on)f(eac)o(h)g(history)h(line)g(retriv)o(ed)g
+(with)f Fl(previous-history)e Fm(or)555 2670 y Fl(next-history)p
+Fm(.)p eop
%%Page: 6 8
6 7 bop 75 -58 a Fm(6)1322 b(GNU)15 b(Readline)h(Library)315
-149 y Fl(input-meta)555 204 y Fm(If)g(set)f(to)g(`)p
+149 y Fl(horizontal-scroll-mode)555 204 y Fm(This)j(v)m(ariable)g(can)f
+(b)q(e)g(set)g(to)f(either)i(`)p Fl(on)p Fm(')e(or)g(`)p
+Fl(off)p Fm('.)27 b(Setting)19 b(it)f(to)f(`)p Fl(on)p
+Fm(')555 259 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q(eing)
+f(edited)g(will)h(scroll)f(horizon)o(tally)555 314 y(on)i(a)f(single)i
+(screen)g(line)g(when)g(they)f(are)f(longer)h(than)g(the)g(width)g(of)g
+(the)555 369 y(screen,)e(instead)f(of)g(wrapping)g(on)o(to)f(a)h(new)g
+(screen)h(line.)21 b(By)13 b(default,)h(this)555 423
+y(v)m(ariable)j(is)e(set)g(to)g(`)p Fl(off)p Fm('.)315
+506 y Fl(input-meta)555 560 y Fm(If)h(set)f(to)g(`)p
Fl(on)p Fm(',)f(Readline)j(will)h(enable)e(eigh)o(t-bit)h(input)f(\(it)
-g(will)h(not)e(clear)555 259 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c)
+g(will)h(not)e(clear)555 615 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c)
o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)555
-314 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20
+670 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20
b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)33 b(The)555
-369 y(name)15 b Fl(meta-flag)f Fm(is)i(a)f(synon)o(ym)g(for)f(this)i(v)
-m(ariable.)315 448 y Fl(isearch-terminators)555 503 y
+725 y(name)15 b Fl(meta-flag)f Fm(is)i(a)f(synon)o(ym)g(for)f(this)i(v)
+m(ariable.)315 807 y Fl(isearch-terminators)555 862 y
Fm(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i(terminate)f
-(an)g(incremen)o(tal)555 557 y(searc)o(h)12 b(without)h(subsequen)o
+(an)g(incremen)o(tal)555 917 y(searc)o(h)12 b(without)h(subsequen)o
(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555
-612 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40
-b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 667 y(b)q(een)17
+971 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40
+b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 1026 y(b)q(een)17
b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247
-665 y Ff(h)p 1259 639 70 2 v 1259 667 a Fe(ESC)p 1259
-675 V 1326 665 a Ff(i)1357 667 y Fm(and)g Fg(C-J)f Fm(will)i(terminate)
-f(an)555 722 y(incremen)o(tal)g(searc)o(h.)315 801 y
-Fl(keymap)96 b Fm(Sets)19 b(Readline's)i(idea)f(of)f(the)g(curren)o(t)h
-(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555 856 y(mands.)41
-b(Acceptable)23 b Fl(keymap)f Fm(names)g(are)f Fl(emacs)p
-Fm(,)i Fl(emacs-standard)p Fm(,)555 910 y Fl(emacs-meta)p
-Fm(,)49 b Fl(emacs-ctlx)p Fm(,)g Fl(vi)p Fm(,)h Fl(vi-move)p
-Fm(,)f Fl(vi-command)p Fm(,)g(and)555 965 y Fl(vi-insert)p
-Fm(.)31 b Fl(vi)20 b Fm(is)g(equiv)m(alen)o(t)h(to)e
-Fl(vi-command)p Fm(;)g Fl(emacs)g Fm(is)h(equiv)m(alen)o(t)555
-1020 y(to)15 b Fl(emacs-standard)p Fm(.)20 b(The)d(default)f(v)m(alue)h
+1024 y Ff(h)p 1259 998 70 2 v 1259 1026 a Fe(ESC)p 1259
+1034 V 1326 1024 a Ff(i)1357 1026 y Fm(and)g Fg(C-J)f
+Fm(will)i(terminate)f(an)555 1081 y(incremen)o(tal)g(searc)o(h.)315
+1163 y Fl(keymap)96 b Fm(Sets)19 b(Readline's)i(idea)f(of)f(the)g
+(curren)o(t)h(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555
+1218 y(mands.)41 b(Acceptable)23 b Fl(keymap)f Fm(names)g(are)f
+Fl(emacs)p Fm(,)i Fl(emacs-standard)p Fm(,)555 1273 y
+Fl(emacs-meta)p Fm(,)49 b Fl(emacs-ctlx)p Fm(,)g Fl(vi)p
+Fm(,)h Fl(vi-move)p Fm(,)f Fl(vi-command)p Fm(,)g(and)555
+1328 y Fl(vi-insert)p Fm(.)31 b Fl(vi)20 b Fm(is)g(equiv)m(alen)o(t)h
+(to)e Fl(vi-command)p Fm(;)g Fl(emacs)g Fm(is)h(equiv)m(alen)o(t)555
+1382 y(to)15 b Fl(emacs-standard)p Fm(.)20 b(The)d(default)f(v)m(alue)h
(is)g Fl(emacs)p Fm(.)k(The)16 b(v)m(alue)h(of)f(the)555
-1075 y Fl(editing-mode)e Fm(v)m(ariable)i(also)f(a\013ects)g(the)g
-(default)h(k)o(eymap.)315 1154 y Fl(mark-directories)555
-1209 y Fm(If)j(set)g(to)g(`)p Fl(on)p Fm(',)f(completed)i(directory)g
-(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1264
-y(The)15 b(default)h(is)g(`)p Fl(on)p Fm('.)315 1343
-y Fl(mark-modified-lines)555 1398 y Fm(This)j(v)m(ariable,)g(when)g
+1437 y Fl(editing-mode)e Fm(v)m(ariable)i(also)f(a\013ects)g(the)g
+(default)h(k)o(eymap.)315 1519 y Fl(mark-directories)555
+1574 y Fm(If)j(set)g(to)g(`)p Fl(on)p Fm(',)f(completed)i(directory)g
+(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1629
+y(The)15 b(default)h(is)g(`)p Fl(on)p Fm('.)315 1711
+y Fl(mark-modified-lines)555 1766 y Fm(This)j(v)m(ariable,)g(when)g
(set)e(to)h(`)p Fl(on)p Fm(',)f(causes)h(Readline)h(to)e(displa)o(y)i
-(an)f(as-)555 1452 y(terisk)f(\(`)p Fl(*)p Fm('\))e(at)i(the)f(start)g
+(an)f(as-)555 1821 y(terisk)f(\(`)p Fl(*)p Fm('\))e(at)i(the)f(start)g
(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q
-(di\014ed.)555 1507 y(This)e(v)m(ariable)g(is)g(`)p Fl(off)p
-Fm(')e(b)o(y)h(default.)315 1586 y Fl(output-meta)555
-1641 y Fm(If)j(set)f(to)g(`)p Fl(on)p Fm(',)g(Readline)i(will)h(displa)
+(di\014ed.)555 1875 y(This)e(v)m(ariable)g(is)g(`)p Fl(off)p
+Fm(')e(b)o(y)h(default.)315 1958 y Fl(match-hidden-files)555
+2012 y Fm(This)d(v)m(ariable,)h(when)e(set)g(to)g(`)p
+Fl(on)p Fm(',)f(causes)h(Readline)i(to)d(matc)o(h)h(\014les)h(whose)555
+2067 y(names)22 b(b)q(egin)h(with)g(a)e(`)p Fl(.)p Fm(')h(\(hidden)h
+(\014les\))g(when)f(p)q(erforming)h(\014lename)555 2122
+y(completion,)g(unless)f(the)f(leading)h(`)p Fl(.)p Fm(')e(is)h
+(supplied)i(b)o(y)e(the)f(user)h(in)h(the)555 2177 y(\014lename)16
+b(to)f(b)q(e)h(completed.)21 b(This)15 b(v)m(ariable)i(is)f(`)p
+Fl(on)p Fm(')e(b)o(y)h(default.)315 2259 y Fl(output-meta)555
+2314 y Fm(If)j(set)f(to)g(`)p Fl(on)p Fm(',)g(Readline)i(will)h(displa)
o(y)f(c)o(haracters)d(with)j(the)e(eigh)o(th)h(bit)555
-1696 y(set)g(directly)i(rather)d(than)h(as)g(a)g(meta-pre\014xed)h
-(escap)q(e)g(sequence.)30 b(The)555 1751 y(default)16
-b(is)f(`)p Fl(off)p Fm('.)315 1830 y Fl(print-completions-horizont)o
-(ally)555 1885 y Fm(If)d(set)g(to)f(`)p Fl(on)p Fm(',)h(Readline)h
+2369 y(set)g(directly)i(rather)d(than)h(as)g(a)g(meta-pre\014xed)h
+(escap)q(e)g(sequence.)30 b(The)555 2423 y(default)16
+b(is)f(`)p Fl(off)p Fm('.)315 2506 y Fl(print-completions-horizont)o
+(ally)555 2560 y Fm(If)d(set)g(to)f(`)p Fl(on)p Fm(',)h(Readline)h
(will)g(displa)o(y)h(completions)f(with)f(matc)o(hes)f(sorted)555
-1939 y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e
-(than)g(do)o(wn)h(the)g(screen.)555 1994 y(The)15 b(default)h(is)g(`)p
-Fl(off)p Fm('.)315 2073 y Fl(show-all-if-ambiguous)555
-2128 y Fm(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h
-(completion)h(functions.)21 b(If)15 b(set)555 2183 y(to)e(`)p
-Fl(on)p Fm(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h
-(p)q(ossible)i(completion)f(cause)555 2238 y(the)20 b(matc)o(hes)f(to)f
-(b)q(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q
-(ell.)555 2293 y(The)c(default)h(v)m(alue)h(is)e(`)p
-Fl(off)p Fm('.)315 2372 y Fl(visible-stats)555 2426 y
-Fm(If)h(set)g(to)f(`)p Fl(on)p Fm(',)g(a)h(c)o(haracter)f(denoting)h(a)
-g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555
-2481 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c
-(default)g(is)f(`)p Fl(off)p Fm('.)75 2560 y(Key)h(Bindings)315
-2615 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h
-(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20
-b(y)o(ou)315 2670 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f
-(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19
-b(The)14 b(follo)o(wing)p eop
+2615 y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e
+(than)g(do)o(wn)h(the)g(screen.)555 2670 y(The)15 b(default)h(is)g(`)p
+Fl(off)p Fm('.)p eop
%%Page: 7 9
7 8 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(7)315 149 y(sections)18 b(con)o(tain)h(tables)f(of)f(the)h(command)g
-(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315
-204 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q
-(es.)315 273 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g
+b(7)315 149 y Fl(show-all-if-ambiguous)555 204 y Fm(This)16
+b(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h(completion)h
+(functions.)21 b(If)15 b(set)555 259 y(to)e(`)p Fl(on)p
+Fm(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h(p)q
+(ossible)i(completion)f(cause)555 314 y(the)20 b(matc)o(hes)f(to)f(b)q
+(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q(ell.)555
+369 y(The)c(default)h(v)m(alue)h(is)e(`)p Fl(off)p Fm('.)315
+448 y Fl(visible-stats)555 502 y Fm(If)h(set)g(to)f(`)p
+Fl(on)p Fm(',)g(a)h(c)o(haracter)f(denoting)h(a)g(\014le's)h(t)o(yp)q
+(e)f(is)g(app)q(ended)i(to)d(the)555 557 y(\014lename)h(when)g(listing)
+h(p)q(ossible)g(completions.)j(The)c(default)g(is)f(`)p
+Fl(off)p Fm('.)75 636 y(Key)h(Bindings)315 691 y(The)21
+b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h(in)g(the)f
+(init)h(\014le)g(is)g(simple.)39 b(First)20 b(y)o(ou)315
+746 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f(command)h(that)f
+(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 b(The)14 b(follo)o(wing)315
+801 y(sections)k(con)o(tain)h(tables)f(of)f(the)h(command)g(name,)g
+(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315
+855 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q
+(es.)315 922 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g
(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315
-328 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e
+977 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e
(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315
-382 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g
+1032 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g
(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315
-437 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)e
-(comfortable.)315 506 y(In)19 b(addition)g(to)e(command)h(names,)g
+1087 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)
+e(comfortable.)315 1154 y(In)19 b(addition)g(to)e(command)h(names,)g
(readline)i(allo)o(ws)e(k)o(eys)g(to)f(b)q(e)i(b)q(ound)g(to)e(a)h
-(string)315 561 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h
-(pressed)g(\(a)e Fc(macro)r Fm(\).)315 643 y Fc(k)o(eyname)s
-Fm(:)19 b Fc(function-name)g Fm(or)c Fc(macro)555 698
+(string)315 1208 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h
+(pressed)g(\(a)e Fc(macro)r Fm(\).)315 1288 y Fc(k)o(eyname)s
+Fm(:)19 b Fc(function-name)g Fm(or)c Fc(macro)555 1342
y(k)o(eyname)i Fm(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j(out)
-d(in)h(English.)21 b(F)l(or)13 b(example:)675 764 y Fl(Control-u:)22
-b(universal-argument)675 816 y(Meta-Rubout:)g(backward-kill-word)675
-867 y(Control-o:)g(">)i(output")555 936 y Fm(In)c(the)f(ab)q(o)o(v)o(e)
-g(example,)i Fg(C-u)e Fm(is)h(b)q(ound)g(to)f(the)g(function)h
-Fl(universal-)555 991 y(argument)p Fm(,)e Fg(M-DEL)h
-Fm(is)g(b)q(ound)h(to)e(the)h(function)h Fl(backward-kill-word)p
-Fm(,)555 1046 y(and)g Fg(C-o)f Fm(is)h(b)q(ound)g(to)f(run)h(the)f
-(macro)g(expressed)h(on)g(the)f(righ)o(t)h(hand)555 1101
-y(side)c(\(that)e(is,)i(to)e(insert)i(the)f(text)g(`)p
-Fl(>)f(output)p Fm(')g(in)o(to)i(the)f(line\).)555 1169
-y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e(names)g
-(are)g(recognized)i(while)g(pro-)555 1224 y(cessing)13
+d(in)h(English.)21 b(F)l(or)13 b(example:)675 1406 y
+Fl(Control-u:)22 b(universal-argument)675 1458 y(Meta-Rubout:)g
+(backward-kill-word)675 1510 y(Control-o:)g(">)i(output")555
+1577 y Fm(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i Fg(C-u)e
+Fm(is)h(b)q(ound)g(to)f(the)g(function)h Fl(universal-)555
+1632 y(argument)p Fm(,)e Fg(M-DEL)h Fm(is)g(b)q(ound)h(to)e(the)h
+(function)h Fl(backward-kill-word)p Fm(,)555 1687 y(and)g
+Fg(C-o)f Fm(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g
+(the)f(righ)o(t)h(hand)555 1741 y(side)c(\(that)e(is,)i(to)e(insert)i
+(the)f(text)g(`)p Fl(>)f(output)p Fm(')g(in)o(to)i(the)f(line\).)555
+1808 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e
+(names)g(are)g(recognized)i(while)g(pro-)555 1863 y(cessing)13
b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fc(DEL)p
Fm(,)11 b Fc(ESC)p Fm(,)h Fc(ESCAPE)p Fm(,)f Fc(LFD)p
-Fm(,)g Fc(NEW-)555 1279 y(LINE)p Fm(,)16 b Fc(RET)p Fm(,)e
+Fm(,)g Fc(NEW-)555 1918 y(LINE)p Fm(,)16 b Fc(RET)p Fm(,)e
Fc(RETURN)p Fm(,)f Fc(R)o(UBOUT)p Fm(,)i Fc(SP)l(A)o(CE)p
-Fm(,)g Fc(SPC)p Fm(,)f(and)i Fc(T)l(AB)p Fm(.)315 1361
+Fm(,)g Fc(SPC)p Fm(,)f(and)i Fc(T)l(AB)p Fm(.)315 1997
y Fl(")p Fc(k)o(eyseq)q Fl(")p Fm(:)k Fc(function-name)e
-Fm(or)d Fc(macro)555 1416 y(k)o(eyseq)i Fm(di\013ers)e(from)g
+Fm(or)d Fc(macro)555 2052 y(k)o(eyseq)i Fm(di\013ers)e(from)g
Fc(k)o(eyname)j Fm(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g
-(an)f(en-)555 1471 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q
+(an)f(en-)555 2107 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q
(eci\014ed,)i(b)o(y)e(placing)h(the)f(k)o(ey)g(sequence)h(in)555
-1526 y(double)e(quotes.)j(Some)c Fh(gnu)g Fm(Emacs)f(st)o(yle)h(k)o(ey)
-g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)555 1580 y(in)j(the)f(follo)o
+2161 y(double)e(quotes.)j(Some)c Fh(gnu)g Fm(Emacs)f(st)o(yle)h(k)o(ey)
+g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)555 2216 y(in)j(the)f(follo)o
(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are)
-f(not)555 1635 y(recognized.)675 1701 y Fl("\\C-u":)23
-b(universal-argument)675 1753 y("\\C-x\\C-r":)f(re-read-init-file)675
-1805 y("\\e[11~":)h("Function)f(Key)i(1")555 1873 y Fm(In)33
+f(not)555 2271 y(recognized.)675 2335 y Fl("\\C-u":)23
+b(universal-argument)675 2387 y("\\C-x\\C-r":)f(re-read-init-file)675
+2439 y("\\e[11~":)h("Function)f(Key)i(1")555 2506 y Fm(In)33
b(the)f(ab)q(o)o(v)o(e)g(example,)37 b Fg(C-u)32 b Fm(is)h(again)f(b)q
-(ound)h(to)f(the)g(function)555 1928 y Fl(universal-argument)19
+(ound)h(to)f(the)g(function)555 2560 y Fl(universal-argument)19
b Fm(\(just)j(as)f(it)h(w)o(as)f(in)i(the)f(\014rst)f(example\),)j(`)p
-Fg(C-x)555 1983 y(C-r)p Fm(')c(is)h(b)q(ound)g(to)f(the)h(function)g
-Fl(re-read-init-file)p Fm(,)f(and)g(`)1731 1981 y Ff(h)p
-1743 1955 70 2 v 1743 1983 a Fe(ESC)p 1743 1991 V 1810
-1981 a Ff(i)15 b(h)p 1852 1955 10 2 v 1852 1983 a Fe([)p
-1852 1991 V 1860 1981 a Ff(i)555 2036 y(h)p 567 2010
-18 2 v 567 2038 a Fe(1)p 567 2045 V 583 2036 a Ff(i)g(h)p
-625 2010 V 625 2038 a Fe(1)p 625 2045 V 640 2036 a Ff(i)g(h)p
-683 2010 24 2 v 683 2038 a Fl(~)p 683 2045 V 704 2036
-a Ff(i)719 2038 y Fm(')g(is)h(b)q(ound)g(to)e(insert)i(the)f(text)g(`)p
-Fl(Function)f(Key)g(1)p Fm('.)315 2120 y(The)h(follo)o(wing)h
-Fh(gnu)e Fm(Emacs)h(st)o(yle)g(escap)q(e)h(sequences)g(are)e(a)o(v)m
-(ailable)j(when)e(sp)q(ecifying)315 2175 y(k)o(ey)g(sequences:)315
-2258 y Fg(\\C-)168 b Fm(con)o(trol)15 b(pre\014x)315
-2340 y Fg(\\M-)168 b Fm(meta)15 b(pre\014x)315 2423 y
-Fg(\\e)192 b Fm(an)15 b(escap)q(e)h(c)o(haracter)315
-2505 y Fg(\\\\)192 b Fm(bac)o(kslash)315 2587 y Fg(\\)p
-Fl(")555 2585 y Ff(h)p 567 2559 V 567 2587 a Fl(")p 567
-2595 V 589 2585 a Ff(i)604 2587 y Fm(,)15 b(a)f(double)j(quotation)e
-(mark)315 2670 y Fg(\\')555 2668 y Ff(h)p 567 2642 10
-2 v 567 2670 a Fe(')p 567 2678 V 575 2668 a Ff(i)590
-2670 y Fm(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)p
-eop
+Fg(C-x)555 2615 y(C-r)p Fm(')c(is)h(b)q(ound)g(to)f(the)h(function)g
+Fl(re-read-init-file)p Fm(,)f(and)g(`)1731 2613 y Ff(h)p
+1743 2587 70 2 v 1743 2615 a Fe(ESC)p 1743 2623 V 1810
+2613 a Ff(i)15 b(h)p 1852 2587 10 2 v 1852 2615 a Fe([)p
+1852 2623 V 1860 2613 a Ff(i)555 2668 y(h)p 567 2642
+18 2 v 567 2670 a Fe(1)p 567 2678 V 583 2668 a Ff(i)g(h)p
+625 2642 V 625 2670 a Fe(1)p 625 2678 V 640 2668 a Ff(i)g(h)p
+683 2642 24 2 v 683 2670 a Fl(~)p 683 2678 V 704 2668
+a Ff(i)719 2670 y Fm(')g(is)h(b)q(ound)g(to)e(insert)i(the)f(text)g(`)p
+Fl(Function)f(Key)g(1)p Fm('.)p eop
%%Page: 8 10
8 9 bop 75 -58 a Fm(8)1322 b(GNU)15 b(Readline)h(Library)315
-149 y(In)e(addition)h(to)f(the)f Fh(gnu)h Fm(Emacs)g(st)o(yle)f(escap)q
-(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315
-204 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 286 y Fl(\\a)192
-b Fm(alert)15 b(\(b)q(ell\))315 368 y Fl(\\b)192 b Fm(bac)o(kspace)315
-449 y Fl(\\d)g Fm(delete)315 531 y Fl(\\f)g Fm(form)14
-b(feed)315 613 y Fl(\\n)192 b Fm(newline)315 694 y Fl(\\r)g
-Fm(carriage)15 b(return)315 776 y Fl(\\t)192 b Fm(horizon)o(tal)16
-b(tab)315 858 y Fl(\\v)192 b Fm(v)o(ertical)16 b(tab)315
-940 y Fl(\\)p Fc(nnn)141 b Fm(the)14 b(c)o(haracter)f(whose)h
-Fh(asci)q(i)e Fm(co)q(de)j(is)f(the)g(o)q(ctal)g(v)m(alue)h
-Fc(nnn)f Fm(\(one)g(to)f(three)555 994 y(digits\))315
-1076 y Fl(\\x)p Fc(nnn)117 b Fm(the)16 b(c)o(haracter)f(whose)h
-Fh(asci)q(i)f Fm(co)q(de)i(is)f(the)h(hexadecimal)g(v)m(alue)g
-Fc(nnn)g Fm(\(one)555 1131 y(to)e(three)g(digits\))315
-1213 y(When)k(en)o(tering)g(the)g(text)f(of)g(a)h(macro,)f(single)i(or)
-e(double)i(quotes)f(m)o(ust)f(b)q(e)h(used)h(to)315 1267
+149 y(The)f(follo)o(wing)h Fh(gnu)e Fm(Emacs)h(st)o(yle)g(escap)q(e)h
+(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)315
+204 y(k)o(ey)g(sequences:)315 287 y Fg(\\C-)168 b Fm(con)o(trol)15
+b(pre\014x)315 370 y Fg(\\M-)168 b Fm(meta)15 b(pre\014x)315
+453 y Fg(\\e)192 b Fm(an)15 b(escap)q(e)h(c)o(haracter)315
+536 y Fg(\\\\)192 b Fm(bac)o(kslash)315 619 y Fg(\\)p
+Fl(")555 617 y Ff(h)p 567 591 24 2 v 567 619 a Fl(")p
+567 627 V 589 617 a Ff(i)604 619 y Fm(,)15 b(a)f(double)j(quotation)e
+(mark)315 702 y Fg(\\')555 700 y Ff(h)p 567 674 10 2
+v 567 702 a Fe(')p 567 710 V 575 700 a Ff(i)590 702 y
+Fm(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315 785
+y(In)f(addition)h(to)f(the)f Fh(gnu)h Fm(Emacs)g(st)o(yle)f(escap)q(e)i
+(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315
+840 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 923 y Fl(\\a)192
+b Fm(alert)15 b(\(b)q(ell\))315 1006 y Fl(\\b)192 b Fm(bac)o(kspace)315
+1089 y Fl(\\d)g Fm(delete)315 1172 y Fl(\\f)g Fm(form)14
+b(feed)315 1255 y Fl(\\n)192 b Fm(newline)315 1338 y
+Fl(\\r)g Fm(carriage)15 b(return)315 1421 y Fl(\\t)192
+b Fm(horizon)o(tal)16 b(tab)315 1504 y Fl(\\v)192 b Fm(v)o(ertical)16
+b(tab)315 1587 y Fl(\\)p Fc(nnn)141 b Fm(the)17 b(eigh)o(t-bit)h(c)o
+(haracter)f(whose)g(v)m(alue)i(is)e(the)h(o)q(ctal)f(v)m(alue)i
+Fc(nnn)f Fm(\(one)f(to)555 1642 y(three)e(digits\))315
+1725 y Fl(\\x)p Fc(HH)124 b Fm(the)20 b(eigh)o(t-bit)g(c)o(haracter)f
+(whose)h(v)m(alue)h(is)f(the)g(hexadecimal)h(v)m(alue)g
+Fc(HH)555 1780 y Fm(\(one)15 b(or)g(t)o(w)o(o)f(hex)h(digits\))315
+1863 y(When)k(en)o(tering)g(the)g(text)f(of)g(a)h(macro,)f(single)i(or)
+e(double)i(quotes)f(m)o(ust)f(b)q(e)h(used)h(to)315 1917
y(indicate)12 b(a)f(macro)f(de\014nition.)20 b(Unquoted)11
b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)f(function)i(name.)18
-b(In)315 1322 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o(kslash)g
+b(In)315 1972 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o(kslash)g
(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)g(expanded.)20
-b(Bac)o(kslash)315 1377 y(will)i(quote)d(an)o(y)h(other)g(c)o(haracter)
+b(Bac)o(kslash)315 2027 y(will)i(quote)d(an)o(y)h(other)g(c)o(haracter)
f(in)i(the)f(macro)f(text,)h(including)j(`)p Fl(")p Fm(')c(and)h(`)p
-Fl(')p Fm('.)34 b(F)l(or)315 1432 y(example,)14 b(the)f(follo)o(wing)g
+Fl(')p Fm('.)34 b(F)l(or)315 2082 y(example,)14 b(the)f(follo)o(wing)g
(binding)i(will)g(mak)o(e)d(`)p Fg(C-x)i Fl(\\)p Fm(')f(insert)g(a)g
(single)h(`)p Fl(\\)p Fm(')e(in)o(to)h(the)g(line:)435
-1497 y Fl("\\C-x\\\\":)23 b("\\\\")75 1613 y Fb(1.3.2)30
-b(Conditional)20 b(Init)g(Constructs)137 1712 y Fm(Readline)f(implemen)
+2148 y Fl("\\C-x\\\\":)23 b("\\\\")75 2267 y Fb(1.3.2)30
+b(Conditional)20 b(Init)g(Constructs)137 2366 y Fm(Readline)f(implemen)
o(ts)g(a)f(facilit)o(y)g(similar)h(in)g(spirit)f(to)f(the)h
-(conditional)h(compilation)g(features)75 1766 y(of)e(the)g(C)g(prepro)q
+(conditional)h(compilation)g(features)75 2421 y(of)e(the)g(C)g(prepro)q
(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g(bindings)i(and)f(v)m(ariable)
-g(settings)f(to)g(b)q(e)h(p)q(erformed)f(as)75 1821 y(the)e(result)h
+g(settings)f(to)g(b)q(e)h(p)q(erformed)f(as)75 2476 y(the)e(result)h
(of)f(tests.)k(There)c(are)g(four)g(parser)g(directiv)o(es)h(used.)75
-1904 y Fl($if)168 b Fm(The)16 b Fl($if)f Fm(construct)g(allo)o(ws)h
+2560 y Fl($if)168 b Fm(The)16 b Fl($if)f Fm(construct)g(allo)o(ws)h
(bindings)i(to)d(b)q(e)h(made)g(based)g(on)f(the)h(editing)h(mo)q(de,)f
-(the)315 1959 y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i
+(the)315 2615 y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i
(using)e(Readline.)33 b(The)19 b(text)g(of)f(the)i(test)315
-2013 y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o
-(haracters)f(are)h(required)i(to)d(isolate)i(it.)315
-2095 y Fl(mode)144 b Fm(The)11 b Fl(mode=)e Fm(form)h(of)g(the)h
+2670 y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o
+(haracters)f(are)h(required)i(to)d(isolate)i(it.)p eop
+%%Page: 9 11
+9 10 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
+b(9)315 149 y Fl(mode)144 b Fm(The)11 b Fl(mode=)e Fm(form)h(of)g(the)h
Fl($if)f Fm(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)
-555 2150 y(is)k(in)h Fl(emacs)e Fm(or)g Fl(vi)g Fm(mo)q(de.)20
+555 204 y(is)k(in)h Fl(emacs)e Fm(or)g Fl(vi)g Fm(mo)q(de.)20
b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555
-2205 y(`)p Fl(set)f(keymap)p Fm(')f(command,)g(for)h(instance,)g(to)f
-(set)h(bindings)h(in)g(the)f Fl(emacs-)555 2260 y(standard)d
+259 y(`)p Fl(set)f(keymap)p Fm(')f(command,)g(for)h(instance,)g(to)f
+(set)h(bindings)h(in)g(the)f Fl(emacs-)555 314 y(standard)d
Fm(and)i Fl(emacs-ctlx)e Fm(k)o(eymaps)h(only)i(if)f(Readline)g(is)g
-(starting)f(out)555 2314 y(in)k Fl(emacs)f Fm(mo)q(de.)315
-2396 y Fl(term)144 b Fm(The)14 b Fl(term=)e Fm(form)h(ma)o(y)g(b)q(e)h
+(starting)f(out)555 369 y(in)k Fl(emacs)f Fm(mo)q(de.)315
+448 y Fl(term)144 b Fm(The)14 b Fl(term=)e Fm(form)h(ma)o(y)g(b)q(e)h
(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555
-2451 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
-(output)e(b)o(y)g(the)g(terminal's)555 2506 y(function)13
+503 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j
+(output)e(b)o(y)g(the)g(terminal's)555 558 y(function)13
b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g
-(the)g(`)p Fl(=)p Fm(')f(is)h(tested)g(against)555 2560
+(the)g(`)p Fl(=)p Fm(')f(is)h(tested)g(against)555 613
y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q
-(ortion)h(of)e(the)h(terminal)555 2615 y(name)i(b)q(efore)g(the)g
+(ortion)h(of)e(the)h(terminal)555 667 y(name)i(b)q(efore)g(the)g
(\014rst)f(`)p Fl(-)p Fm('.)24 b(This)17 b(allo)o(ws)g
Fl(sun)f Fm(to)g(matc)o(h)h(b)q(oth)f Fl(sun)h Fm(and)555
-2670 y Fl(sun-cmd)p Fm(,)d(for)g(instance.)p eop
-%%Page: 9 11
-9 10 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077
-b(9)315 149 y Fl(application)555 204 y Fm(The)11 b Fc(application)i
-Fm(construct)e(is)g(used)h(to)e(include)j(application-sp)q(eci)q(\014c)
-h(set-)555 259 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e
-(Readline)i(library)f(sets)f(the)g Fc(application)555
-314 y(name)p Fm(,)g(and)g(y)o(ou)f(can)h(test)f(for)g(a)g(particular)h
-(v)m(alue.)20 b(This)12 b(could)h(b)q(e)f(used)h(to)555
-369 y(bind)18 b(k)o(ey)e(sequences)i(to)d(functions)j(useful)f(for)f(a)
-g(sp)q(eci\014c)i(program.)23 b(F)l(or)555 423 y(instance,)17
-b(the)g(follo)o(wing)g(command)g(adds)f(a)g(k)o(ey)h(sequence)g(that)f
-(quotes)555 478 y(the)f(curren)o(t)g(or)g(previous)h(w)o(ord)e(in)j
-(Bash:)675 543 y Fl($if)23 b(Bash)675 594 y(#)h(Quote)f(the)g(current)g
-(or)h(previous)f(word)675 646 y("\\C-xq":)g("\\eb\\"\\ef\\"")675
-698 y($endif)75 778 y($endif)96 b Fm(This)16 b(command,)e(as)h(seen)h
-(in)g(the)f(previous)h(example,)g(terminates)f(an)g Fl($if)f
-Fm(command.)75 858 y Fl($else)120 b Fm(Commands)15 b(in)h(this)f(branc)
-o(h)h(of)e(the)i Fl($if)e Fm(directiv)o(e)j(are)e(executed)h(if)g(the)f
-(test)g(fails.)75 937 y Fl($include)48 b Fm(This)22 b(directiv)o(e)h
-(tak)o(es)e(a)h(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h
-(reads)f(commands)315 992 y(and)e(bindings)j(from)c(that)h(\014le.)33
+722 y Fl(sun-cmd)p Fm(,)d(for)g(instance.)315 802 y Fl(application)555
+857 y Fm(The)d Fc(application)i Fm(construct)e(is)g(used)h(to)e
+(include)j(application-sp)q(eci)q(\014c)h(set-)555 912
+y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)i(library)f
+(sets)f(the)g Fc(application)555 966 y(name)p Fm(,)g(and)g(y)o(ou)f
+(can)h(test)f(for)g(a)g(particular)h(v)m(alue.)20 b(This)12
+b(could)h(b)q(e)f(used)h(to)555 1021 y(bind)18 b(k)o(ey)e(sequences)i
+(to)d(functions)j(useful)f(for)f(a)g(sp)q(eci\014c)i(program.)23
+b(F)l(or)555 1076 y(instance,)17 b(the)g(follo)o(wing)g(command)g(adds)
+f(a)g(k)o(ey)h(sequence)g(that)f(quotes)555 1131 y(the)f(curren)o(t)g
+(or)g(previous)h(w)o(ord)e(in)j(Bash:)675 1195 y Fl($if)23
+b(Bash)675 1247 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)675
+1299 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 1351 y($endif)75
+1430 y($endif)96 b Fm(This)16 b(command,)e(as)h(seen)h(in)g(the)f
+(previous)h(example,)g(terminates)f(an)g Fl($if)f Fm(command.)75
+1510 y Fl($else)120 b Fm(Commands)15 b(in)h(this)f(branc)o(h)h(of)e
+(the)i Fl($if)e Fm(directiv)o(e)j(are)e(executed)h(if)g(the)f(test)g
+(fails.)75 1590 y Fl($include)48 b Fm(This)22 b(directiv)o(e)h(tak)o
+(es)e(a)h(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h(reads)f
+(commands)315 1645 y(and)e(bindings)j(from)c(that)h(\014le.)33
b(F)l(or)19 b(example,)i(the)e(follo)o(wing)h(directiv)o(e)h(reads)e
-(from)315 1047 y(`)p Fl(/etc/inputrc)p Fm(':)435 1111
-y Fl($include)k(/etc/inputrc)75 1223 y Fb(1.3.3)30 b(Sample)20
-b(Init)h(File)137 1320 y Fm(Here)16 b(is)g(an)f(example)h(of)f(an)g
+(from)315 1699 y(`)p Fl(/etc/inputrc)p Fm(':)435 1764
+y Fl($include)k(/etc/inputrc)75 1876 y Fb(1.3.3)30 b(Sample)20
+b(Init)h(File)137 1972 y Fm(Here)16 b(is)g(an)f(example)h(of)f(an)g
Fc(inputrc)k Fm(\014le.)i(This)16 b(illustrates)g(k)o(ey)f(binding,)i
-(v)m(ariable)f(assignmen)o(t,)75 1374 y(and)f(conditional)i(syn)o(tax.)
+(v)m(ariable)f(assignmen)o(t,)75 2027 y(and)f(conditional)i(syn)o(tax.)
p eop
%%Page: 10 12
10 11 bop 75 -58 a Fm(10)1299 b(GNU)15 b(Readline)h(Library)195
@@ -1605,48 +1623,51 @@ g(at)e(the)i(b)q(eginning)i(of)d(the)g(line,)j(there)315
259 y(are)c(no)h(c)o(haracters)e(in)j(the)e(line,)j(and)e(the)f(last)h
(c)o(haracter)e(t)o(yp)q(ed)i(w)o(as)f(not)g(b)q(ound)i(to)315
314 y Fl(delete-char)p Fm(,)13 b(then)j(return)f Fh(eof)p
-Fm(.)75 406 y Fl(backward-delete-char)d(\(Rubout\))315
-460 y Fm(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c
+Fm(.)75 401 y Fl(backward-delete-char)d(\(Rubout\))315
+456 y Fm(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c
(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315
-515 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
-607 y Fl(forward-backward-delete-ch)o(ar)12 b(\(\))315
-662 y Fm(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
+511 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75
+598 y Fl(forward-backward-delete-ch)o(ar)12 b(\(\))315
+653 y Fm(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h
(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315
-717 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
+707 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h
(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315
-771 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 863
-y Fl(quoted-insert)e(\(C-q)i(or)g(C-v\))315 918 y Fm(Add)j(the)f(next)g
+762 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 850
+y Fl(quoted-insert)e(\(C-q)i(or)g(C-v\))315 904 y Fm(Add)j(the)f(next)g
(c)o(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26
-b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 973
+b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 959
y(sequences)f(lik)o(e)h Fg(C-q)p Fm(,)d(for)h(example.)75
-1065 y Fl(tab-insert)f(\(M-)401 1063 y Ff(h)p 412 1037
-74 2 v 412 1065 a Fe(T)m(AB)p 412 1072 V 484 1063 a Ff(i)499
-1065 y Fl(\))315 1119 y Fm(Insert)h(a)g(tab)g(c)o(haracter.)75
-1211 y Fl(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315
-1266 y Fm(Insert)g(y)o(ourself.)75 1358 y Fl(transpose-chars)e(\(C-t\))
-315 1413 y Fm(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e
+1046 y Fl(tab-insert)f(\(M-)401 1044 y Ff(h)p 412 1018
+74 2 v 412 1046 a Fe(T)m(AB)p 412 1054 V 484 1044 a Ff(i)499
+1046 y Fl(\))315 1101 y Fm(Insert)h(a)g(tab)g(c)o(haracter.)75
+1188 y Fl(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315
+1243 y Fm(Insert)g(y)o(ourself.)75 1330 y Fl(transpose-chars)e(\(C-t\))
+315 1385 y Fm(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e
(forw)o(ard)g(o)o(v)o(er)g(the)h(c)o(haracter)f(at)h(the)g(cursor,)315
-1467 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28
+1440 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28
b(If)18 b(the)g(insertion)h(p)q(oin)o(t)f(is)g(at)f(the)h(end)h(of)e
-(the)315 1522 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o
+(the)315 1495 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o
(w)o(o)f(c)o(haracters)g(of)h(the)g(line.)20 b(Negativ)o(e)11
-b(argumen)o(ts)315 1577 y(ha)o(v)o(e)k(no)g(e\013ect.)75
-1669 y Fl(transpose-words)e(\(M-t\))315 1724 y Fm(Drag)i(the)h(w)o(ord)
+b(argumen)o(ts)315 1550 y(ha)o(v)o(e)k(no)g(e\013ect.)75
+1637 y Fl(transpose-words)e(\(M-t\))315 1692 y Fm(Drag)i(the)h(w)o(ord)
g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o
-(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1778
-y(w)o(ord)f(as)f(w)o(ell.)75 1870 y Fl(upcase-word)g(\(M-u\))315
-1925 y Fm(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o
-(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315
-1980 y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f
-(the)i(cursor.)75 2072 y Fl(downcase-word)d(\(M-l\))315
-2126 y Fm(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h
-(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o
-(ercase)315 2181 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o
-(v)o(e)f(the)h(cursor.)75 2273 y Fl(capitalize-word)e(\(M-c\))315
-2328 y Fm(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
+(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1746
+y(w)o(ord)d(as)h(w)o(ell.)21 b(If)14 b(the)g(insertion)i(p)q(oin)o(t)e
+(is)h(at)f(the)g(end)h(of)e(the)i(line,)g(this)g(transp)q(oses)f(the)
+315 1801 y(last)h(t)o(w)o(o)f(w)o(ords)g(on)i(the)f(line.)75
+1888 y Fl(upcase-word)f(\(M-u\))315 1943 y Fm(Upp)q(ercase)j(the)f
+(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o(ord.)22 b(With)16
+b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315 1998
+y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f(the)
+i(cursor.)75 2085 y Fl(downcase-word)d(\(M-l\))315 2140
+y Fm(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o
+(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o(ercase)
+315 2195 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)75 2282 y Fl(capitalize-word)e(\(M-c\))315
+2337 y Fm(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o
(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315
-2383 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
-(the)h(cursor.)75 2494 y Fb(1.4.4)30 b(Killing)20 b(And)h(Y)-5
+2392 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f
+(the)h(cursor.)75 2499 y Fb(1.4.4)30 b(Killing)20 b(And)h(Y)-5
b(anking)75 2615 y Fl(kill-line)14 b(\(C-k\))315 2670
y Fm(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f
(the)g(line.)p eop
diff --git a/doc/texi2dvi b/doc/texi2dvi
index 43f652d..5439e08 100755
--- a/doc/texi2dvi
+++ b/doc/texi2dvi
@@ -1,8 +1,8 @@
#! /bin/sh
-# texi2dvi --- smartly produce DVI files from texinfo sources
-# $Id: texi2dvi,v 0.8 1998/02/26 21:13:13 karl Exp $
+# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources.
+# $Id: texi2dvi,v 0.43 1999/09/28 19:36:53 karl Exp $
#
-# Copyright (C) 1992, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
+# Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -19,344 +19,550 @@
# program's maintainer or write to: The Free Software Foundation,
# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA.
#
-# Commentary:
-#
-# Author: Noah Friedman <friedman@gnu.org>
+# Original author: Noah Friedman <friedman@gnu.org>.
#
# Please send bug reports, etc. to bug-texinfo@gnu.org.
# If possible, please send a copy of the output of the script called with
# the `--debug' option when making a bug report.
-#
-# In the interest of general portability, some common bourne shell
-# constructs were avoided because they weren't guaranteed to be available
-# in some earlier implementations. I've tried to make this program as
-# portable as possible. Welcome to unix, where the lowest common
-# denominator is rapidly diminishing.
-#
-# Among the more interesting lossages I noticed among Bourne shells:
-# * No shell functions.
-# * No `unset' builtin.
-# * `shift' cannot take a numeric argument, and signals an error if
-# there are no arguments to shift.
-#
-# Code:
-
-# Name by which this script was invoked.
-progname=`echo "$0" | sed -e 's/[^\/]*\///g'`
# This string is expanded by rcs automatically when this file is checked out.
-rcs_revision='$Revision: 0.8 $'
-version=`set - $rcs_revision; echo $2`
-
-# To prevent hairy quoting and escaping later.
-bq='`'
-eq="'"
+rcs_revision='$Revision: 0.43 $'
+rcs_version=`set - $rcs_revision; echo $2`
+program=`echo $0 | sed -e 's!.*/!!'`
+version="texi2dvi (GNU Texinfo 4.0) $rcs_version
-usage="Usage: $0 [OPTION]... FILE...
-Run a Texinfo document through TeX.
+Copyright (C) 1999 Free Software Foundation, Inc.
+There is NO warranty. You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
-Options:
--b, --batch No interaction (\nonstopmode in TeX).
--c, --clean Remove all auxiliary files.
--D, --debug Turn on shell debugging ($bq${bq}set -x$eq$eq).
--t, --texinfo CMD Insert CMD after @setfilename before running TeX.
---verbose Report on what is done.
--h, --help Display this help and exit.
--v, --version Display version information and exit.
+usage="Usage: $program [OPTION]... FILE...
-The values of the TEX, TEXINDEX, and MAKEINFO environment variables are
-used to run those commands, if they are set.
+Run each Texinfo or LaTeX FILE through TeX in turn until all
+cross-references are resolved, building all indices. The directory
+containing each FILE is searched for included files. The suffix of FILE
+is used to determine its language (LaTeX or Texinfo).
-Email bug reports to bug-texinfo@gnu.org."
+Makeinfo is used to perform Texinfo macro expansion before running TeX
+when needed.
-# Initialize variables.
+Options:
+ -@ Use @input instead of \input; for preloaded Texinfo.
+ -b, --batch No interaction.
+ -c, --clean Remove all auxiliary files.
+ -D, --debug Turn on shell debugging (set -x).
+ -e, --expand Force macro expansion using makeinfo.
+ -I DIR Search DIR for Texinfo files.
+ -h, --help Display this help and exit successfully.
+ -l, --language=LANG Specify the LANG of FILE: LaTeX or Texinfo.
+ -p, --pdf Use pdftex or pdflatex for processing.
+ -q, --quiet No output unless errors (implies --batch).
+ -s, --silent Same as --quiet.
+ -t, --texinfo=CMD Insert CMD after @setfilename in copy of input file.
+ Multiple values accumulate.
+ -v, --version Display version information and exit successfully.
+ -V, --verbose Report on what is done.
+
+The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO,
+TEX (or PDFTEX), and TEXINDEX environment variables are used to run
+those commands, if they are set.
+
+Email bug reports to <bug-texinfo@gnu.org>,
+general questions and discussion to <help-texinfo@gnu.org>."
+
+# Initialize variables for option overriding and otherwise.
# Don't use `unset' since old bourne shells don't have this command.
# Instead, assign them an empty value.
-# Some of these, like TEX and TEXINDEX, may be inherited from the environment.
-backup_extension=.bak # these files get deleted if all goes well.
-batch=
+escape='\'
+batch=false # eval for batch mode
clean=
debug=
-orig_pwd="`pwd`"
+expand= # t for expansion via makeinfo
+oformat=dvi
+set_language=
+miincludes= # makeinfo include path
textra=
-verbose=false
-makeinfo="${MAKEINFO-makeinfo}"
-texindex="${TEXINDEX-texindex}"
-tex="${TEX-tex}"
+tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems.
+txincludes= # TEXINPUTS extensions
+txiprereq=19990129 # minimum texinfo.tex version to have macro expansion
+quiet= # by default let the tools' message be displayed
+verbose=false # echo for verbose mode
+
+orig_pwd=`pwd`
+
+# Systems which define $COMSPEC or $ComSpec use semicolons to separate
+# directories in TEXINPUTS.
+if test -n "$COMSPEC$ComSpec"; then
+ path_sep=";"
+else
+ path_sep=":"
+fi
# Save this so we can construct a new TEXINPUTS path for each file.
TEXINPUTS_orig="$TEXINPUTS"
-export TEXINPUTS
-
+# Unfortunately makeindex does not read TEXINPUTS.
+INDEXSTYLE_orig="$INDEXSTYLE"
+export TEXINPUTS INDEXSTYLE
+
+# Push a token among the arguments that will be used to notice when we
+# ended options/arguments parsing.
+# Use "set dummy ...; shift" rather than 'set - ..." because on
+# Solaris set - turns off set -x (but keeps set -e).
+# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3
+# still expand "$@" to a single argument (the empty string) rather
+# than nothing at all.
+arg_sep="$$--$$"
+set dummy ${1+"$@"} "$arg_sep"; shift
+
+#
# Parse command line arguments.
-# Make sure that all wildcarded options are long enough to be unambiguous.
-# It's a good idea to document the full long option name in each case.
-# Long options which take arguments will need a `*' appended to the
-# canonical name to match the value appended after the `=' character.
-while :; do
- test $# -eq 0 && break
-
+while test x"$1" != x"$arg_sep"; do
+
+ # Handle --option=value by splitting apart and putting back on argv.
case "$1" in
- -b | --batch | --b* ) batch=t; shift ;;
- -c | --clean | --c* ) clean=t; shift ;;
- -D | --debug | --d* ) debug=t; shift ;;
- -h | --help | --h* ) echo "$usage"; exit 0 ;;
- # OK, we should do real option parsing here, but be lazy for now.
- -t | --texinfo | --t*) shift; textra="$textra $1"; shift ;;
- -v | --vers* )
- echo "$progname (GNU Texinfo 3.12) $version"
- echo "Copyright (C) 1998 Free Software Foundation, Inc.
-There is NO warranty. You may redistribute this software
-under the terms of the GNU General Public License.
-For more information about these matters, see the files named COPYING."
- exit 0 ;;
- --verb* ) verbose=echo; shift ;;
- -- ) # Stop option processing
+ --*=*)
+ opt=`echo "$1" | sed -e 's/=.*//'`
+ val=`echo "$1" | sed -e 's/[^=]*=//'`
+ shift
+ set dummy "$opt" "$val" ${1+"$@"}; shift
+ ;;
+ esac
+
+ # This recognizes --quark as --quiet. So what.
+ case "$1" in
+ -@ ) escape=@;;
+ # Silently and without documentation accept -b and --b[atch] as synonyms.
+ -b | --b*) batch=eval;;
+ -q | -s | --q* | --s*) quiet=t; batch=eval;;
+ -c | --c*) clean=t;;
+ -D | --d*) debug=t;;
+ -e | --e*) expand=t;;
+ -h | --h*) echo "$usage"; exit 0;;
+ -I | --I*)
+ shift
+ miincludes="$miincludes -I $1"
+ txincludes="$txincludes$path_sep$1"
+ ;;
+ -l | --l*) shift; set_language=$1;;
+ -p | --p*) oformat=pdf;;
+ -t | --t*) shift; textra="$textra\\
+$1";;
+ -v | --vers*) echo "$version"; exit 0;;
+ -V | --verb*) verbose=echo;;
+ --) # What remains are not options.
shift
- break ;;
- -* )
- case "$1" in
- --*=* ) arg=`echo "$1" | sed -e 's/=.*//'` ;;
- * ) arg="$1" ;;
- esac
- exec 1>&2
- echo "$progname: Unknown or ambiguous option $bq$arg$eq."
- echo "$progname: Try $bq--help$eq for more information."
- exit 1 ;;
- * ) break ;;
+ while test x"$1" != x"$arg_sep"; do
+ set dummy ${1+"$@"} "$1"; shift
+ shift
+ done
+ break;;
+ -*)
+ echo "$0: Unknown or ambiguous option \`$1'." >&2
+ echo "$0: Try \`--help' for more information." >&2
+ exit 1;;
+ *) set dummy ${1+"$@"} "$1"; shift;;
esac
+ shift
done
+# Pop the token
+shift
-# See if there are any command line args left (which will be interpreted as
-# filename arguments).
-if test $# -eq 0; then
- exec 1>&2
- echo "$progname: At least one file name is required as an argument."
- echo "$progname: Try $bq--help$eq for more information."
+# Interpret remaining command line args as filenames.
+if test $# = 0; then
+ echo "$0: Missing file arguments." >&2
+ echo "$0: Try \`--help' for more information." >&2
exit 2
fi
+# Prepare the temporary directory. Remove it at exit, unless debugging.
+if test -z "$debug"; then
+ trap "cd / && rm -rf $tmpdir" 0 1 2 15
+fi
+
+# Create the temporary directory with strict rights
+(umask 077 && mkdir $tmpdir) || exit 1
+
+# Prepare the tools we might need. This may be extra work in some
+# cases, but improves the readibility of the script.
+utildir=$tmpdir/utils
+mkdir $utildir || exit 1
+
+# A sed script that preprocesses Texinfo sources in order to keep the
+# iftex sections only. We want to remove non TeX sections, and
+# comment (with `@c texi2dvi') TeX sections so that makeinfo does not
+# try to parse them. Nevertheless, while commenting TeX sections,
+# don't comment @macro/@end macro so that makeinfo does propagate
+# them. Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo
+# doesn't work well enough (yet) to use that, so work around with sed.
+comment_iftex_sed=$utildir/comment.sed
+cat <<EOF >$comment_iftex_sed
+/^@tex/,/^@end tex/{
+ s/^/@c texi2dvi/
+}
+/^@iftex/,/^@end iftex/{
+ s/^/@c texi2dvi/
+ /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{
+ s/^@c texi2dvi//
+ }
+}
+/^@html/,/^@end html/d
+/^@ifhtml/,/^@end ifhtml/d
+/^@ifnottex/,/^@end ifnottex/d
+/^@ifinfo/,/^@end ifinfo/{
+ /^@node/p
+ /^@menu/,/^@end menu/p
+ d
+}
+EOF
+# Uncommenting is simple: Remove any leading `@c texi2dvi'.
+uncomment_iftex_sed=$utildir/uncomment.sed
+cat <<EOF >$uncomment_iftex_sed
+s/^@c texi2dvi//
+EOF
+
+# A shell script that computes the list of xref files.
+# Takes the filename (without extension) of which we look for xref
+# files as argument. The index files must be reported last.
+get_xref_files=$utildir/get_xref.sh
+cat <<\EOF >$get_xref_files
+#! /bin/sh
+
+# Get list of xref files (indexes, tables and lists).
+# Find all files having root filename with a two-letter extension,
+# saves the ones that are really Texinfo-related files. .?o? catches
+# LaTeX tables and lists.
+for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do
+ # If file is empty, skip it.
+ test -s "$this_file" || continue
+ # If the file is not suitable to be an index or xref file, don't
+ # process it. The file can't be if its first character is not a
+ # backslash or single quote.
+ first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file`
+ if test "x$first_character" = "x\\" \
+ || test "x$first_character" = "x'"; then
+ xref_files="$xref_files ./$this_file"
+ fi
+done
+echo "$xref_files"
+EOF
+chmod 500 $get_xref_files
+
+# File descriptor usage:
+# 0 standard input
+# 1 standard output (--verbose messages)
+# 2 standard error
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 5 tools output (turned off by --quiet)
+
+# Tools' output. If quiet, discard, else redirect to the message flow.
+if test "$quiet" = t; then
+ exec 5>/dev/null
+else
+ exec 5>&1
+fi
+
+# Enable tracing
test "$debug" = t && set -x
-# Texify files
+#
+# TeXify files.
+
for command_line_filename in ${1+"$@"}; do
$verbose "Processing $command_line_filename ..."
- # See if file exists. If it doesn't we're in trouble since, even
+ # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex),
+ # prepend `./' in order to avoid that the tools take it as an option.
+ echo "$command_line_filename" | egrep '^(/|[A-z]:/)' >/dev/null \
+ || command_line_filename="./$command_line_filename"
+
+ # See if the file exists. If it doesn't we're in trouble since, even
# though the user may be able to reenter a valid filename at the tex
# prompt (assuming they're attending the terminal), this script won't
- # be able to find the right index files and so forth.
- if test ! -r "${command_line_filename}"; then
- echo "$0: Could not read ${command_line_filename}." >&2
+ # be able to find the right xref files and so forth.
+ if test ! -r "$command_line_filename"; then
+ echo "$0: Could not read $command_line_filename, skipping." >&2
continue
fi
- # Roughly equivalent to `dirname ...`, but more portable
- directory="`echo ${command_line_filename} | sed 's/\/[^\/]*$//'`"
- filename_texi="`basename ${command_line_filename}`"
- # Strip off the last extension part (probably .texinfo or .texi)
- filename_noext="`echo ${filename_texi} | sed 's/\.[^.]*$//'`"
-
- # Use same basename since we want to generate aux files with the same
- # basename as the manual. Use extension .texi for the temp file so
- # that TeX will ignore it. Thus, we must use a subdirectory.
- #
- # Output the macro-expanded file to here. The vastly abbreviated
- # temporary directory name is so we don't have collisions on 8.3 or
- # 14-character filesystems.
- tmp_dir=${TMPDIR-/tmp}/txi2d.$$
- filename_tmp=$tmp_dir/$filename_noext.texi
- # Output the file with the user's extra commands to here.
- tmp_dir2=${tmp_dir}.2
- filename_tmp2=$tmp_dir2/$filename_noext.texi
- mkdir $tmp_dir $tmp_dir2
- # Always remove the temporary directories.
- trap "rm -rf $tmp_dir $tmp_dir2" 1 2 15
-
- # If directory and file are the same, then it's probably because there's
- # no pathname component. Set dirname to `.', the current directory.
- if test "z${directory}" = "z${command_line_filename}"; then
- directory=.
- fi
+ # Get the name of the current directory. We want the full path
+ # because in clean mode we are in tmp, in which case a relative
+ # path has no meaning.
+ filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'`
+ filename_dir=`cd "$filename_dir" >/dev/null && pwd`
+
+ # Strip directory part but leave extension.
+ filename_ext=`basename "$command_line_filename"`
+ # Strip extension.
+ filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'`
+ ext=`echo "$filename_ext" | sed 's/^.*\.//'`
+
+ # _src. Use same basename since we want to generate aux files with
+ # the same basename as the manual. If --expand, then output the
+ # macro-expanded file to here, else copy the original file.
+ tmpdir_src=$tmpdir/src
+ filename_src=$tmpdir_src/$filename_noext.$ext
+
+ # _xtr. The file with the user's extra commands.
+ tmpdir_xtr=$tmpdir/xtr
+ filename_xtr=$tmpdir_xtr/$filename_noext.$ext
+
+ # _bak. Copies of the previous xref files (another round is run if
+ # they differ from the new one).
+ tmpdir_bak=$tmpdir/bak
+
+ # Make all those directories and give up if we can't succeed.
+ mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1
- # Source file might @include additional texinfo sources. Put `.' and
+ # Source file might include additional sources. Put `.' and
# directory where source file(s) reside in TEXINPUTS before anything
- # else. `.' goes first to ensure that any old .aux, .cps, etc. files in
- # ${directory} don't get used in preference to fresher files in `.'.
- TEXINPUTS=".:${directory}:${TEXINPUTS_orig}"
+ # else. `.' goes first to ensure that any old .aux, .cps,
+ # etc. files in ${directory} don't get used in preference to fresher
+ # files in `.'. Include orig_pwd in case we are in clean mode, where
+ # we've cd'd to a temp directory.
+ common=".$path_sep$orig_pwd$path_sep$filename_dir$path_sep$txincludes$path_sep"
+ TEXINPUTS="$common$TEXINPUTS_orig"
+ INDEXSTYLE="$common$INDEXSTYLE_orig"
+
+ # If the user explicitly specified the language, use that.
+ # Otherwise, if the first line is \input texinfo, assume it's texinfo.
+ # Otherwise, guess from the file extension.
+ if test -n "$set_language"; then
+ language=$set_language
+ elif sed 1q "$command_line_filename" | fgrep 'input texinfo' >/dev/null; then
+ language=texinfo
+ else
+ language=
+ fi
+
+ # Get the type of the file (latex or texinfo) from the given language
+ # we just guessed, or from the file extension if not set yet.
+ case ${language:-$filename_ext} in
+ [lL]a[tT]e[xX] | *.ltx | *.tex)
+ # Assume a LaTeX file. LaTeX needs bibtex and uses latex for
+ # compilation. No makeinfo.
+ bibtex=${BIBTEX:-bibtex}
+ makeinfo= # no point in running makeinfo on latex source.
+ texindex=${MAKEINDEX:-makeindex}
+ if test $oformat = dvi; then
+ tex=${LATEX:-latex}
+ else
+ tex=${PDFLATEX:-pdflatex}
+ fi
+ ;;
+
+ *)
+ # Assume a Texinfo file. Texinfo files need makeinfo, texindex and tex.
+ bibtex=
+ texindex=${TEXINDEX:-texindex}
+ if test $oformat = dvi; then
+ tex=${TEX:-tex}
+ else
+ tex=${PDFTEX:-pdftex}
+ fi
+ # Unless required by the user, makeinfo expansion is wanted only
+ # if texinfo.tex is too old.
+ if test "$expand" = t; then
+ makeinfo=${MAKEINFO:-makeinfo}
+ else
+ # Check if texinfo.tex performs macro expansion by looking for
+ # its version. The version is a date of the form YEAR-MO-DA.
+ # We don't need to use [0-9] to match the digits since anyway
+ # the comparison with $txiprereq, a number, will fail with non
+ # digits.
+ txiversion_tex=txiversion.tex
+ echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex
+ # Run in the tmpdir to avoid leaving files.
+ eval `cd $tmpdir >/dev/null \
+ && $tex $txiversion_tex 2>/dev/null \
+| sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'`
+ $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..."
+ if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then
+ makeinfo=
+ else
+ makeinfo=${MAKEINFO:-makeinfo}
+ fi
+ # As long as we had to run TeX, offer the user this convenience
+ if test "$txiformat" = Texinfo; then
+ escape=@
+ fi
+ fi
+ ;;
+ esac
- # Expand macro commands in the original source file using Makeinfo;
- # the macro syntax bfox implemented is impossible to implement in TeX.
+ # Expand macro commands in the original source file using Makeinfo.
# Always use `end' footnote style, since the `separate' style
# generates different output (arguably this is a bug in -E).
# Discard main info output, the user asked to run TeX, not makeinfo.
- # Redirect output to /dev/null to throw away `Making info file...' msg.
- $verbose "Macro-expanding $command_line_filename to $filename_tmp ..."
- $makeinfo --footnote-style=end -E $filename_tmp -o /dev/null \
- $command_line_filename >/dev/null
-
- # But if there were no macros, or makeinfo failed for some reason,
- # just use the original file. (It shouldn't make any difference, but
- # let's be safe.)
- if test $? -ne 0 || cmp -s $filename_tmp $command_line_filename; then
+ if test -n "$makeinfo"; then
+ $verbose "Macro-expanding $command_line_filename to $filename_src ..."
+ sed -f $comment_iftex_sed "$command_line_filename" \
+ | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \
+ -o /dev/null --macro-expand=- \
+ | sed -f $uncomment_iftex_sed >"$filename_src"
+ filename_input=$filename_src
+ fi
+
+ # If makeinfo failed (or was not even run), use the original file as input.
+ if test $? -ne 0 \
+ || test ! -r "$filename_src"; then
$verbose "Reverting to $command_line_filename ..."
- cp -p $command_line_filename $filename_tmp
+ filename_input=$filename_dir/$filename_ext
fi
- filename_input=$filename_tmp
- dirname_input=$tmp_dir
# Used most commonly for @finalout, @smallbook, etc.
if test -n "$textra"; then
- $verbose "Inserting extra commands: $textra."
+ $verbose "Inserting extra commands: $textra"
sed '/^@setfilename/a\
-'"$textra" $filename_input >$filename_tmp2
- filename_input=$filename_tmp2
- dirname_input=$tmp_dir2
+'"$textra" "$filename_input" >$filename_xtr
+ filename_input=$filename_xtr
fi
# If clean mode was specified, then move to the temporary directory.
if test "$clean" = t; then
- $verbose "cd $dirname_input"
- cd $dirname_input || exit 1
- filename_input=`basename $filename_input`
+ $verbose "cd $tmpdir_src"
+ cd "$tmpdir_src" || exit 1
fi
- while true; do # will break out of loop below
- # "Unset" variables that might have values from previous iterations and
- # which won't be completely reset later.
- definite_index_files=
-
- # Find all files having root filename with a two-letter extension,
- # determine whether they're really index files, and save them. Foo.aux
- # is actually the cross-references file, but we need to keep track of
- # that too.
- possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`"
- for this_file in ${possible_index_files}; do
- # If file is empty, forget it.
- test -s "${this_file}" || continue
-
- # Examine first character of file. If it's not suitable to be an
- # index or xref file, don't process it.
- first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`"
- if test "x${first_character}" = "x\\" \
- || test "x${first_character}" = "x'"; then
- definite_index_files="${definite_index_files} ${this_file}"
+ while :; do # will break out of loop below
+ orig_xref_files=`$get_xref_files "$filename_noext"`
+
+ # Save copies of originals for later comparison.
+ if test -n "$orig_xref_files"; then
+ $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`"
+ cp $orig_xref_files $tmpdir_bak
+ fi
+
+ # Run bibtex on current file.
+ # - If its input (AUX) exists.
+ # - If AUX contains both `\bibdata' and `\bibstyle'.
+ # - If some citations are missing (LOG contains `Citation').
+ # or the LOG complains of a missing .bbl
+ #
+ # We run bibtex first, because I can see reasons for the indexes
+ # to change after bibtex is run, but I see no reason for the
+ # converse.
+ #
+ # Don't try to be too smart. Running bibtex only if the bbl file
+ # exists and is older than the LaTeX file is wrong, since the
+ # document might include files that have changed. Because there
+ # can be several AUX (if there are \include's), but a single LOG,
+ # looking for missing citations in LOG is easier, though we take
+ # the risk to match false messages.
+ if test -n "$bibtex" \
+ && test -r "$filename_noext.aux" \
+ && test -r "$filename_noext.log" \
+ && (grep '^\\bibdata[{]' "$filename_noext.aux" \
+ && grep '^\\bibstyle[{]' "$filename_noext.aux" \
+ && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \
+ || grep 'No file .*\.bbl\.' "$filename_noext.log")) \
+ >/dev/null 2>&1; \
+ then
+ $verbose "Running $bibtex $filename_noext ..."
+ if $bibtex "$filename_noext" >&5; then :; else
+ echo "$0: $bibtex exited with bad status, quitting." >&2
+ exit 1
+ fi
+ fi
+
+ # What we'll run texindex on -- exclude non-index files.
+ # Since we know index files are last, it is correct to remove everything
+ # before .aux and .?o?.
+ index_files=`echo "$orig_xref_files" \
+ | sed "s!.*\.aux!!g;
+ s!./$filename_noext\..o.!!g;
+ s/^[ ]*//;s/[ ]*$//"`
+ # Run texindex (or makeindex) on current index files. If they
+ # already exist, and after running TeX a first time the index
+ # files don't change, then there's no reason to run TeX again.
+ # But we won't know that if the index files are out of date or
+ # nonexistent.
+ if test -n "$texindex" && test -n "$index_files"; then
+ $verbose "Running $texindex $index_files ..."
+ if $texindex $index_files 2>&5 1>&2; then :; else
+ echo "$0: $texindex exited with bad status, quitting." >&2
+ exit 1
fi
- done
- orig_index_files="${definite_index_files}"
- orig_index_files_sans_aux="`echo ${definite_index_files} \
- | sed 's/'${filename_noext}'\.aux//;
- s/^[ ]*//;s/[ ]*$//;'`"
-
- # Now save copies of original index files so we have some means of
- # comparison later.
- $verbose "Backing up current index files: $orig_index_files ..."
- for index_file_to_save in ${orig_index_files}; do
- cp "${index_file_to_save}" "${index_file_to_save}${backup_extension}"
- done
-
- # Run texindex on current index files. If they already exist, and
- # after running TeX a first time the index files don't change, then
- # there's no reason to run TeX again. But we won't know that if the
- # index files are out of date or nonexistent.
- if test -n "${orig_index_files_sans_aux}"; then
- $verbose "Running $texindex $orig_index_files_sans_aux ..."
- ${texindex} ${orig_index_files_sans_aux}
fi
# Finally, run TeX.
- if test "$batch" = t; then
- tex_mode='\nonstopmode'
- else
- tex_mode=
+ # Prevent $ESCAPE from being interpreted by the shell if it happens
+ # to be `/'.
+ $batch tex_args="\\${escape}nonstopmode\ \\${escape}input"
+ $verbose "Running $cmd ..."
+ cmd="$tex $tex_args $filename_input"
+ if $cmd >&5; then :; else
+ echo "$0: $tex exited with bad status, quitting." >&2
+ echo "$0: see $filename_noext.log for errors." >&2
+ test "$clean" = t \
+ && cp "$filename_noext.log" "$orig_pwd"
+ exit 1
fi
- $verbose "Running $tex $filename_input ..."
- cmd="$tex $tex_mode \\input $filename_input"
- $cmd
-
- # Check if index files changed.
- #
- definite_index_files=
- # Get list of new index files.
- possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`"
- for this_file in ${possible_index_files}; do
- # If file is empty, forget it.
- test -s "${this_file}" || continue
-
- # Examine first character of file. If it's not a backslash or
- # single quote, then it's definitely not an index or xref file.
- # (Will have to check for @ when we switch to Texinfo syntax in
- # all these files...)
- first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`"
- if test "x${first_character}" = "x\\" \
- || test "x${first_character}" = "x'"; then
- definite_index_files="${definite_index_files} ${this_file}"
- fi
- done
- new_index_files="${definite_index_files}"
- new_index_files_sans_aux="`echo ${definite_index_files} \
- | sed 's/'${filename_noext}'\.aux//;
- s/^[ ]*//;s/[ ]*$//;'`"
-
- # If old and new list don't at least have the same file list, then one
- # file or another has definitely changed.
- $verbose "Original index files =$orig_index_files"
- $verbose "New index files =$new_index_files"
- if test "z${orig_index_files}" != "z${new_index_files}"; then
- index_files_changed_p=t
- else
- # File list is the same. We must compare each file until we find a
- # difference.
- index_files_changed_p=
- for this_file in ${new_index_files}; do
- $verbose "Comparing index file $this_file ..."
- # cmp -s will return nonzero exit status if files differ.
- cmp -s "${this_file}" "${this_file}${backup_extension}"
- if test $? -ne 0; then
- # We only need to keep comparing until we find *one* that
- # differs, because we'll have to run texindex & tex no
- # matter what.
- index_files_changed_p=t
- $verbose "Index file $this_file differed:"
- test $verbose = echo \
- && diff -c "${this_file}${backup_extension}" "${this_file}"
+
+
+ # Decide if looping again is needed.
+ finished=t
+
+ # LaTeX (and the package changebar) report in the LOG file if it
+ # should be rerun. This is needed for files included from
+ # subdirs, since texi2dvi does not try to compare xref files in
+ # subdirs. Performing xref files test is still good since LaTeX
+ # does not report changes in xref files.
+ if fgrep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then
+ finished=
+ fi
+
+ # Check if xref files changed.
+ new_xref_files=`$get_xref_files "$filename_noext"`
+ $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`"
+ $verbose "New xref files = `echo $new_xref_files | sed 's|\./||g'`"
+
+ # If old and new lists don't at least have the same file list,
+ # then one file or another has definitely changed.
+ test "x$orig_xref_files" != "x$new_xref_files" && finished=
+
+ # File list is the same. We must compare each file until we find
+ # a difference.
+ if test -n "$finished"; then
+ for this_file in $new_xref_files; do
+ $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..."
+ # cmp -s returns nonzero exit status if files differ.
+ if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else
+ # We only need to keep comparing until we find one that
+ # differs, because we'll have to run texindex & tex again no
+ # matter how many more there might be.
+ finished=
+ $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..."
+ test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file"
break
fi
done
fi
- # If index files have changed since TeX has been run, or if the aux
- # file wasn't present originally, run texindex and TeX again.
- if test "${index_files_changed_p}"; then :; else
- # Nothing changed. We're done with TeX.
- break
- fi
+ # If finished, exit the loop, else rerun the loop.
+ test -n "$finished" && break
done
# If we were in clean mode, compilation was in a tmp directory.
- # Copy the DVI file into the directory where the compilation
+ # Copy the DVI (or PDF) file into the directory where the compilation
# has been done. (The temp dir is about to get removed anyway.)
# We also return to the original directory so that
# - the next file is processed in correct conditions
# - the temporary file can be removed
if test -n "$clean"; then
- $verbose "Copying DVI file from `pwd` to $orig_pwd"
- cp -p $filename_noext.dvi $orig_pwd
+ $verbose "Copying $oformat file from `pwd` to $orig_pwd"
+ cp -p "./$filename_noext.$oformat" "$orig_pwd"
+ cd / # in case $orig_pwd is on a different drive (for DOS)
cd $orig_pwd || exit 1
fi
- # Generate list of files to delete, then call rm once with the entire
- # list. This is significantly faster than multiple executions of rm.
- file_list=
- for file in ${orig_index_files}; do
- file_list="${file_list} ${file}${backup_extension}"
- done
- if test -n "${file_list}"; then
- $verbose "Removing $file_list $tmp_dir $tmp_dir2 ..."
- rm -f ${file_list}
- rm -rf $tmp_dir $tmp_dir2
+ # Remove temporary files.
+ if test "x$debug" = "x"; then
+ $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..."
+ cd /
+ rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak
fi
done
$verbose "$0 done."
-true # exit successfully.
+exit 0 # exit successfully, not however we ended the loop.
diff --git a/doc/texi2html b/doc/texi2html
index 4beec01..bdb3bee 100755
--- a/doc/texi2html
+++ b/doc/texi2html
@@ -1,19 +1,1733 @@
-#!/usr/local/bin/perl
+#! /usr/bin/perl
'di ';
'ig 00 ';
#+##############################################################################
-# #
-# File: texi2html #
-# #
-# Description: Program to transform most Texinfo documents to HTML #
-# #
+#
+# texi2html: Program to transform Texinfo documents to HTML
+#
+# Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
#-##############################################################################
-# @(#)texi2html 1.52 01/05/98 Written (mainly) by Lionel Cons, Lionel.Cons@cern.ch
+# This requires perl version 5 or higher
+require 5.0;
+
+#++##############################################################################
+#
+# NOTE FOR DEBUGGING THIS SCRIPT:
+# You can run 'perl texi2html.pl' directly, provided you have
+# the environment variable T2H_HOME set to the directory containing
+# the texi2html.init file
+#
+#--##############################################################################
+
+# CVS version:
+# $Id: texi2html.pl,v 1.55 2000/07/27 14:39:41 obachman Exp $
+# Homepage:
+$T2H_HOMEPAGE = <<EOT;
+http://www.mathematik.uni-kl.de/~obachman/Texi2html
+EOT
+
+# Authors:
+$T2H_AUTHORS = <<EOT;
+Written by: Lionel Cons <Lionel.Cons\@cern.ch> (original author)
+ Karl Berry <karl\@freefriends.org>
+ Olaf Bachmann <obachman\@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Olaf Bachmann <obachman\@mathematik.uni-kl.de>
+Send bugs and suggestions to <texi2html\@mathematik.uni-kl.de>
+EOT
+
+# Version: set in configure.in
+$THISVERSION = '1.64';
+$THISPROG = "texi2html $THISVERSION"; # program name and version
+
# The man page for this program is included at the end of this file and can be
# viewed using the command 'nroff -man texi2html'.
-# Please read the copyright at the end of the man page.
+
+# Identity:
+
+$T2H_TODAY = &pretty_date; # like "20 September 1993"
+# the eval prevents this from breaking on system which do not have
+# a proper getpwuid implemented
+eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i
+
+#+++############################################################################
+# #
+# Initialization #
+# Pasted content of File $(srcdir)/texi2html.init: Default initializations #
+# #
+#---############################################################################
+
+# leave this within comments, and keep the require statement
+# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init
+# exists.
+
+#
+# -*-perl-*-
+######################################################################
+# File: texi2html.init
+#
+# Sets default values for command-line arguments and for various customizable
+# procedures
+#
+# A copy of this file is pasted into the beginning of texi2html by
+# 'make texi2html'
+#
+# Copy this file and make changes to it, if you like.
+# Afterwards, either, load it with command-line option -init_file <your_init_file>
+#
+# $Id: texi2html.init,v 1.34 2000/07/27 14:09:02 obachman Exp $
+
+######################################################################
+# stuff which can also be set by command-line options
+#
+#
+# Note: values set here, overwrite values set by the command-line
+# options before -init_file and might still be overwritten by
+# command-line arguments following the -init_file option
+#
+
+# T2H_OPTIONS is a hash whose keys are the (long) names of valid
+# command-line options and whose values are a hash with the following keys:
+# type ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info)
+# linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info)
+# verbose ==> short description of option (displayed by -h)
+# noHelp ==> if 1 -> for "not so important options": only print description on -h 1
+# 2 -> for obsolete options: only print description on -h 2
+
+$T2H_DEBUG = 0;
+$T2H_OPTIONS -> {debug} =
+{
+ type => '=i',
+ linkage => \$main::T2H_DEBUG,
+ verbose => 'output HTML with debuging information',
+};
+
+$T2H_DOCTYPE = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
+$T2H_OPTIONS -> {doctype} =
+{
+ type => '=s',
+ linkage => \$main::T2H_DOCTYPE,
+ verbose => 'document type which is output in header of HTML files',
+ noHelp => 1
+};
+
+$T2H_CHECK = 0;
+$T2H_OPTIONS -> {check} =
+{
+ type => '!',
+ linkage => \$main::T2H_CHECK,
+ verbose => 'if set, only check files and output all things that may be Texinfo commands',
+ noHelp => 1
+};
+
+# -expand
+# if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections
+# else, neither expand @iftex, @tex, nor @ifinfo sections
+$T2H_EXPAND = "info";
+$T2H_OPTIONS -> {expand} =
+{
+ type => '=s',
+ linkage => \$T2H_EXPAND,
+ verbose => 'Expand info|tex|none section of texinfo source',
+};
+
+# - glossary
+#if set, uses section named `Footnotes' for glossary
+$T2H_USE_GLOSSARY = 0;
+T2H_OPTIONS -> {glossary} =
+{
+ type => '!',
+ linkage => \$T2H_USE_GLOSSARY,
+ verbose => "if set, uses section named `Footnotes' for glossary",
+ noHelp => 1,
+};
+
+
+# -invisible
+# $T2H_INVISIBLE_MARK is the text used to create invisible destination
+# anchors for index links (you can for instance use the invisible.xbm
+# file shipped with this program). This is a workaround for a known
+# bug of many WWW browsers, including netscape.
+# For me, it works fine without it -- on the contrary: if there, it
+# inserts space between headers and start of text (obachman 3/99)
+$T2H_INVISIBLE_MARK = '';
+# $T2H_INVISIBLE_MARK = '&#160;';
+$T2H_OPTIONS -> {invisible} =
+{
+ type => '=s',
+ linkage => \$T2H_INVISIBLE_MARK,
+ verbose => 'use text in invisble anchot',
+ noHelp => 1,
+};
+
+# -iso
+# if set, ISO8879 characters are used for special symbols (like copyright, etc)
+$T2H_USE_ISO = 0;
+$T2H_OPTIONS -> {iso} =
+{
+ type => 'iso',
+ linkage => \$T2H_USE_ISO,
+ verbose => 'if set, ISO8879 characters are used for special symbols (like copyright, etc)',
+ noHelp => 1,
+};
+
+# -I
+# list directories where @include files are searched for (besides the
+# directory of the doc file) additional '-I' args add to this list
+@T2H_INCLUDE_DIRS = (".");
+$T2H_OPTIONS -> {I} =
+{
+ type => '=s',
+ linkage => \@T2H_INCLUDE_DIRS,
+ verbose => 'append $s to the @include search path',
+};
+
+# -top_file
+# uses file of this name for top-level file
+# extension is manipulated appropriately, if necessary.
+# If empty, <basename of document>.html is used
+# Typically, you would set this to "index.html".
+$T2H_TOP_FILE = '';
+$T2H_OPTIONS -> {top_file} =
+{
+ type => '=s',
+ linkage => \$T2H_TOP_FILE,
+ verbose => 'use $s as top file, instead of <docname>.html',
+};
+
+
+# -toc_file
+# uses file of this name for table of contents file
+# extension is manipulated appropriately, if necessary.
+# If empty, <basename of document>_toc.html is used
+$T2H_TOC_FILE = '';
+$T2H_OPTIONS -> {toc_file} =
+{
+ type => '=s',
+ linkage => \$T2H_TOC_FILE,
+ verbose => 'use $s as ToC file, instead of <docname>_toc.html',
+};
+
+# -frames
+# if set, output two additional files which use HTML 4.0 "frames".
+$T2H_FRAMES = 0;
+$T2H_OPTIONS -> {frames} =
+{
+ type => '!',
+ linkage => \$T2H_FRAMES,
+ verbose => 'output files which use HTML 4.0 frames (experimental)',
+ noHelp => 1,
+};
+
+
+# -menu | -nomenu
+# if set, show the Texinfo menus
+$T2H_SHOW_MENU = 1;
+$T2H_OPTIONS -> {menu} =
+{
+ type => '!',
+ linkage => \$T2H_SHOW_MENU,
+ verbose => 'ouput Texinfo menus',
+};
+
+# -number | -nonumber
+# if set, number sections and show section names and numbers in references
+# and menus
+$T2H_NUMBER_SECTIONS = 1;
+$T2H_OPTIONS -> {number} =
+{
+ type => '!',
+ linkage => \$T2H_NUMBER_SECTIONS,
+ verbose => 'use numbered sections'
+};
+
+# if set, and T2H_NUMBER_SECTIONS is set, then use node names in menu
+# entries, instead of section names
+$T2H_NODE_NAME_IN_MENU = 0;
+
+# if set and menu entry equals menu descr, then do not print menu descr.
+# Likewise, if node name equals entry name, do not print entry name.
+$T2H_AVOID_MENU_REDUNDANCY = 1;
+
+# -split section|chapter|none
+# if set to 'section' (resp. 'chapter') create one html file per (sub)section
+# (resp. chapter) and separate pages for Top, ToC, Overview, Index,
+# Glossary, About.
+# otherwise, create monolithic html file which contains whole document
+#$T2H_SPLIT = 'section';
+$T2H_SPLIT = '';
+$T2H_OPTIONS -> {split} =
+{
+ type => '=s',
+ linkage => \$T2H_SPLIT,
+ verbose => 'split document on section|chapter else no splitting',
+};
+
+# -section_navigation|-no-section_navigation
+# if set, then navigation panels are printed at the beginning of each section
+# and, possibly at the end (depending on whether or not there were more than
+# $T2H_WORDS_IN_PAGE words on page
+# This is most useful if you do not want to have section navigation
+# on -split chapter
+$T2H_SECTION_NAVIGATION = 1;
+$T2H_OPTIONS -> {sec_nav} =
+{
+ type => '!',
+ linkage => \$T2H_SECTION_NAVIGATION,
+ verbose => 'output navigation panels for each section',
+};
+
+# -subdir
+# if set put result files in this directory
+# if not set result files are put into current directory
+#$T2H_SUBDIR = 'html';
+$T2H_SUBDIR = '';
+$T2H_OPTIONS -> {subdir} =
+{
+ type => '=s',
+ linkage => \$T2H_SUBDIR,
+ verbose => 'put HTML files in directory $s, instead of $cwd',
+};
+
+# -short_extn
+# If this is set all HTML file will have extension ".htm" instead of
+# ".html". This is helpful when shipping the document to PC systems.
+$T2H_SHORTEXTN = 0;
+$T2H_OPTIONS -> {short_ext} =
+{
+ type => '!',
+ linkage => \$T2H_SHORTEXTN,
+ verbose => 'use "htm" extension for output HTML files',
+};
+
+
+# -prefix
+# Set the output file prefix, prepended to all .html, .gif and .pl files.
+# By default, this is the basename of the document
+$T2H_PREFIX = '';
+$T2H_OPTIONS -> {prefix} =
+{
+ type => '=s',
+ linkage => \$T2H_PREFIX,
+ verbose => 'use as prefix for output files, instead of <docname>',
+};
+
+# -o filename
+# If set, generate monolithic document output html into $filename
+$T2H_OUT = '';
+$T2H_OPTIONS -> {out_file} =
+{
+ type => '=s',
+ linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';},
+ verbose => 'if set, all HTML output goes into file $s',
+};
+
+# -short_ref
+#if set cross-references are given without section numbers
+$T2H_SHORT_REF = '';
+$T2H_OPTIONS -> {short_ref} =
+{
+ type => '!',
+ linkage => \$T2H_SHORT_REF,
+ verbose => 'if set, references are without section numbers',
+};
+
+# -idx_sum
+# if value is set, then for each @prinindex $what
+# $docu_name_$what.idx is created which contains lines of the form
+# $key\t$ref sorted alphabetically (case matters)
+$T2H_IDX_SUMMARY = 0;
+$T2H_OPTIONS -> {idx_sum} =
+{
+ type => '!',
+ linkage => \$T2H_IDX_SUMMARY,
+ verbose => 'if set, also output index summary',
+ noHelp => 1,
+};
+
+# -verbose
+# if set, chatter about what we are doing
+$T2H_VERBOSE = '';
+$T2H_OPTIONS -> {Verbose} =
+{
+ type => '!',
+ linkage => \$T2H_VERBOSE,
+ verbose => 'print progress info to stdout',
+};
+
+# -lang
+# For page titles use $T2H_WORDS->{$T2H_LANG}->{...} as title.
+# To add a new language, supply list of titles (see $T2H_WORDS below).
+# and use ISO 639 language codes (see e.g. perl module Locale-Codes-1.02
+# for definitions)
+# Default's to 'en' if not set or no @documentlanguage is specified
+$T2H_LANG = '';
+$T2H_OPTIONS -> {lang} =
+{
+ type => '=s',
+ linkage => sub {SetDocumentLanguage($_[1])},
+ verbose => 'use $s as document language (ISO 639 encoding)',
+};
+
+# -l2h
+# if set, uses latex2html for generation of math content
+$T2H_L2H = '';
+$T2H_OPTIONS -> {l2h} =
+{
+ type => '!',
+ linkage => \$T2H_L2H,
+ verbose => 'if set, uses latex2html for @math and @tex',
+};
+
+######################
+# The following options are only relevant if $T2H_L2H is set
+#
+# -l2h_l2h
+# name/location of latex2html progam
+$T2H_L2H_L2H = "latex2html";
+$T2H_OPTIONS -> {l2h_l2h} =
+{
+ type => '=s',
+ linkage => \$T2H_L2H_L2H,
+ verbose => 'program to use for latex2html translation',
+ noHelp => 1,
+};
+
+# -l2h_skip
+# if set, skips actual call to latex2html tries to reuse previously generated
+# content, instead
+$T2H_L2H_SKIP = '';
+$T2H_OPTIONS -> {l2h_skip} =
+{
+ type => '!',
+ linkage => \$T2H_L2H_SKIP,
+ verbose => 'if set, tries to reuse previously latex2html output',
+ noHelp => 1,
+};
+
+# -l2h_tmp
+# if set, l2h uses this directory for temporarary files. The path
+# leading to this directory may not contain a dot (i.e., a "."),
+# otherwise, l2h will fail
+$T2H_L2H_TMP = '';
+$T2H_OPTIONS -> {l2h_tmp} =
+{
+ type => '=s',
+ linkage => \$T2H_L2H_TMP,
+ verbose => 'if set, uses $s as temporary latex2html directory',
+ noHelp => 1,
+};
+
+# if set, cleans intermediate files (they all have the prefix $doc_l2h_)
+# of l2h
+$T2H_L2H_CLEAN = 1;
+$T2H_OPTIONS -> {l2h_clean} =
+{
+ type => '!',
+ linkage => \$T2H_L2H_CLEAN,
+ verbose => 'if set, do not keep intermediate latex2html files for later reuse',
+ noHelp => 1,
+};
+
+$T2H_OPTIONS -> {D} =
+{
+ type => '=s',
+ linkage => sub {$main::value{@_[1]} = 1;},
+ verbose => 'equivalent to Texinfo "@set $s 1"',
+ noHelp => 1,
+};
+
+$T2H_OPTIONS -> {init_file} =
+{
+ type => '=s',
+ linkage => \&LoadInitFile,
+ verbose => 'load init file $s'
+};
+
+
+##############################################################################
+#
+# The following can only be set in the init file
+#
+##############################################################################
+
+# if set, center @image by default
+# otherwise, do not center by default
+$T2H_CENTER_IMAGE = 1;
+
+# used as identation for block enclosing command @example, etc
+# If not empty, must be enclosed in <td></td>
+$T2H_EXAMPLE_INDENT_CELL = '<td>&nbsp;</td>';
+# same as above, only for @small
+$T2H_SMALL_EXAMPLE_INDENT_CELL = '<td>&nbsp;</td>';
+# font size for @small
+$T2H_SMALL_FONT_SIZE = '-1';
+
+# if non-empty, and no @..heading appeared in Top node, then
+# use this as header for top node/section, otherwise use value of
+# @settitle or @shorttitle (in that order)
+$T2H_TOP_HEADING = '';
+
+# if set, use this chapter for 'Index' button, else
+# use first chapter whose name matches 'index' (case insensitive)
+$T2H_INDEX_CHAPTER = '';
+
+# if set and $T2H_SPLIT is set, then split index pages at the next letter
+# after they have more than that many entries
+$T2H_SPLIT_INDEX = 100;
+
+# if set (e.g., to index.html) replace hrefs to this file
+# (i.e., to index.html) by ./
+$T2H_HREF_DIR_INSTEAD_FILE = '';
+
+########################################################################
+# Language dependencies:
+# To add a new language extend T2H_WORDS hash and create $T2H_<...>_WORDS hash
+# To redefine one word, simply do:
+# $T2H_WORDS->{<language>}->{<word>} = 'whatever' in your personal init file.
+#
+$T2H_WORDS_EN =
+{
+ # titles of pages
+ 'ToC_Title' => 'Table of Contents',
+ 'Overview_Title' => 'Short Table of Contents',
+ 'Index_Title' => 'Index',
+ 'About_Title' => 'About this document',
+ 'Footnotes_Title' => 'Footnotes',
+ 'See' => 'See',
+ 'see' => 'see',
+ 'section' => 'section',
+# If necessary, we could extend this as follows:
+# # text for buttons
+# 'Top_Button' => 'Top',
+# 'ToC_Button' => 'Contents',
+# 'Overview_Button' => 'Overview',
+# 'Index_button' => 'Index',
+# 'Back_Button' => 'Back',
+# 'FastBack_Button' => 'FastBack',
+# 'Prev_Button' => 'Prev',
+# 'Up_Button' => 'Up',
+# 'Next_Button' => 'Next',
+# 'Forward_Button' =>'Forward',
+# 'FastWorward_Button' => 'FastForward',
+# 'First_Button' => 'First',
+# 'Last_Button' => 'Last',
+# 'About_Button' => 'About'
+};
+
+$T2H_WORD_DE =
+{
+ 'ToC_Title' => 'Inhaltsverzeichniss',
+ 'Overview_Title' => 'Kurzes Inhaltsverzeichniss',
+ 'Index_Title' => 'Index',
+ 'About_Title' => '&Uuml;ber dieses Dokument',
+ 'Footnotes_Title' => 'Fu&szlig;noten',
+ 'See' => 'Siehe',
+ 'see' => 'siehe',
+ 'section' => 'Abschnitt',
+};
+
+$T2H_WORD_NL =
+{
+ 'ToC_Title' => 'Inhoudsopgave',
+ 'Overview_Title' => 'Korte inhoudsopgave',
+ 'Index_Title' => 'Index', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'No translation available!', #No translation available!
+ 'See' => 'Zie',
+ 'see' => 'zie',
+ 'section' => 'sectie',
+};
+
+$T2H_WORD_ES =
+{
+ 'ToC_Title' => '&iacute;ndice General',
+ 'Overview_Title' => 'Resumen del Contenido',
+ 'Index_Title' => 'Index', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'Fu&szlig;noten',
+ 'See' => 'V&eacute;ase',
+ 'see' => 'v&eacute;ase',
+ 'section' => 'secci&oacute;n',
+};
+
+$T2H_WORD_NO =
+{
+ 'ToC_Title' => 'Innholdsfortegnelse',
+ 'Overview_Title' => 'Kort innholdsfortegnelse',
+ 'Index_Title' => 'Indeks', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'No translation available!',
+ 'See' => 'Se',
+ 'see' => 'se',
+ 'section' => 'avsnitt',
+};
+
+$T2H_WORD_PT =
+{
+ 'ToC_Title' => 'Sum&aacute;rio',
+ 'Overview_Title' => 'Breve Sum&aacute;rio',
+ 'Index_Title' => '&Iacute;ndice', #Not sure ;-)
+ 'About_Title' => 'No translation available!', #No translation available!
+ 'Footnotes_Title' => 'No translation available!',
+ 'See' => 'Veja',
+ 'see' => 'veja',
+ 'section' => 'Se&ccedil;&atilde;o',
+};
+
+$T2H_WORDS =
+{
+ 'en' => $T2H_WORDS_EN,
+ 'de' => $T2H_WORDS_DE,
+ 'nl' => $T2H_WORDS_NL,
+ 'es' => $T2H_WORDS_ES,
+ 'no' => $T2H_WORDS_NO,
+ 'pt' => $T2H_WORDS_PT
+};
+
+@MONTH_NAMES_EN =
+(
+ 'January', 'February', 'March', 'April', 'May',
+ 'June', 'July', 'August', 'September', 'October',
+ 'November', 'December'
+);
+
+@MONTH_NAMES_DE =
+(
+ 'Januar', 'Februar', 'M&auml;rz', 'April', 'Mai',
+ 'Juni', 'Juli', 'August', 'September', 'Oktober',
+ 'November', 'Dezember'
+);
+
+@MONTH_NAMES_NL =
+(
+ 'Januari', 'Februari', 'Maart', 'April', 'Mei',
+ 'Juni', 'Juli', 'Augustus', 'September', 'Oktober',
+ 'November', 'December'
+);
+
+@MONTH_NAMES_ES =
+(
+ 'enero', 'febrero', 'marzo', 'abril', 'mayo',
+ 'junio', 'julio', 'agosto', 'septiembre', 'octubre',
+ 'noviembre', 'diciembre'
+);
+
+@MONTH_NAMES_NO =
+(
+
+ 'januar', 'februar', 'mars', 'april', 'mai',
+ 'juni', 'juli', 'august', 'september', 'oktober',
+ 'november', 'desember'
+);
+
+@MONTH_NAMES_PT =
+(
+ 'Janeiro', 'Fevereiro', 'Mar&ccedil;o', 'Abril', 'Maio',
+ 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro',
+ 'Novembro', 'Dezembro'
+);
+
+
+$MONTH_NAMES =
+{
+ 'en' => \@MONTH_NAMES_EN,
+ 'de' => \@MONTH_NAMES_DE,
+ 'es' => \@MONTH_NAMES_ES,
+ 'nl' => \@MONTH_NAMES_NL,
+ 'no' => \@MONTH_NAMES_NO,
+ 'pt' => \@MONTH_NAMES_PT
+};
+########################################################################
+# Control of Page layout:
+# You can make changes of the Page layout at two levels:
+# 1.) For small changes, it is often enough to change the value of
+# some global string/hash/array variables
+# 2.) For larger changes, reimplement one of the T2H_DEFAULT_<fnc>* routines,
+# give them another name, and assign them to the respective
+# $T2H_<fnc> variable.
+
+# As a general interface, the hashes T2H_HREF, T2H_NAME, T2H_NODE hold
+# href, html-name, node-name of
+# This -- current section (resp. html page)
+# Top -- top page ($T2H_TOP_FILE)
+# Contents -- Table of contents
+# Overview -- Short table of contents
+# Index -- Index page
+# About -- page which explain "navigation buttons"
+# First -- first node
+# Last -- last node
+#
+# Whether or not the following hash values are set, depends on the context
+# (all values are w.r.t. 'This' section)
+# Next -- next node of texinfo
+# Prev -- previous node of texinfo
+# Up -- up node of texinfo
+# Forward -- next node in reading order
+# Back -- previous node in reading order
+# FastForward -- if leave node, up and next, else next node
+# FastBackward-- if leave node, up and prev, else prev node
+#
+# Furthermore, the following global variabels are set:
+# $T2H_THISDOC{title} -- title as set by @setttile
+# $T2H_THISDOC{fulltitle} -- full title as set by @title...
+# $T2H_THISDOC{subtitle} -- subtitle as set by @subtitle
+# $T2H_THISDOC{author} -- author as set by @author
+#
+# and pointer to arrays of lines which need to be printed by t2h_print_lines
+# $T2H_OVERVIEW -- lines of short table of contents
+# $T2H_TOC -- lines of table of contents
+# $T2H_TOP -- lines of Top texinfo node
+# $T2H_THIS_SECTION -- lines of 'This' section
+
+#
+# There are the following subs which control the layout:
+#
+$T2H_print_section = \&T2H_DEFAULT_print_section;
+$T2H_print_Top_header = \&T2H_DEFAULT_print_Top_header;
+$T2H_print_Top_footer = \&T2H_DEFAULT_print_Top_footer;
+$T2H_print_Top = \&T2H_DEFAULT_print_Top;
+$T2H_print_Toc = \&T2H_DEFAULT_print_Toc;
+$T2H_print_Overview = \&T2H_DEFAULT_print_Overview;
+$T2H_print_Footnotes = \&T2H_DEFAULT_print_Footnotes;
+$T2H_print_About = \&T2H_DEFAULT_print_About;
+$T2H_print_misc_header = \&T2H_DEFAULT_print_misc_header;
+$T2H_print_misc_footer = \&T2H_DEFAULT_print_misc_footer;
+$T2H_print_misc = \&T2H_DEFAULT_print_misc;
+$T2H_print_chapter_header = \&T2H_DEFAULT_print_chapter_header;
+$T2H_print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer;
+$T2H_print_page_head = \&T2H_DEFAULT_print_page_head;
+$T2H_print_page_foot = \&T2H_DEFAULT_print_page_foot;
+$T2H_print_head_navigation = \&T2H_DEFAULT_print_head_navigation;
+$T2H_print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation;
+$T2H_button_icon_img = \&T2H_DEFAULT_button_icon_img;
+$T2H_print_navigation = \&T2H_DEFAULT_print_navigation;
+$T2H_about_body = \&T2H_DEFAULT_about_body;
+$T2H_print_frame = \&T2H_DEFAULT_print_frame;
+$T2H_print_toc_frame = \&T2H_DEFAULT_print_toc_frame;
+
+########################################################################
+# Layout for html for every sections
+#
+sub T2H_DEFAULT_print_section
+{
+ my $fh = shift;
+ local $T2H_BUTTONS = \@T2H_SECTION_BUTTONS;
+ &$T2H_print_head_navigation($fh) if $T2H_SECTION_NAVIGATION;
+ my $nw = t2h_print_lines($fh);
+ if ($T2H_SPLIT eq 'section' && $T2H_SECTION_NAVIGATION)
+ {
+ &$T2H_print_foot_navigation($fh, $nw);
+ }
+ else
+ {
+ print $fh '<HR SIZE="6">' . "\n";
+ }
+}
+
+###################################################################
+# Layout of top-page I recommend that you use @ifnothtml, @ifhtml,
+# @html within the Top texinfo node to specify content of top-level
+# page.
+#
+# If you enclose everything in @ifnothtml, then title, subtitle,
+# author and overview is printed
+# T2H_HREF of Next, Prev, Up, Forward, Back are not defined
+# if $T2H_SPLIT then Top page is in its own html file
+sub T2H_DEFAULT_print_Top_header
+{
+ &$T2H_print_page_head(@_) if $T2H_SPLIT;
+ t2h_print_label(@_); # this needs to be called, otherwise no label set
+ &$T2H_print_head_navigation(@_);
+}
+sub T2H_DEFAULT_print_Top_footer
+{
+ &$T2H_print_foot_navigation(@_);
+ &$T2H_print_page_foot(@_) if $T2H_SPLIT;
+}
+sub T2H_DEFAULT_print_Top
+{
+ my $fh = shift;
+
+ # for redefining navigation buttons use:
+ # local $T2H_BUTTONS = [...];
+ # as it is, 'Top', 'Contents', 'Index', 'About' are printed
+ local $T2H_BUTTONS = \@T2H_MISC_BUTTONS;
+ &$T2H_print_Top_header($fh);
+ if ($T2H_THIS_SECTION)
+ {
+ # if top-level node has content, then print it with extra header
+ print $fh "<H1>$T2H_NAME{Top}</H1>"
+ unless ($T2H_HAS_TOP_HEADING);
+ t2h_print_lines($fh, $T2H_THIS_SECTION)
+ }
+ else
+ {
+ # top-level node is fully enclosed in @ifnothtml
+ # print fulltitle, subtitle, author, Overview
+ print $fh
+ "<CENTER>\n<H1>" .
+ join("</H1>\n<H1>", split(/\n/, $T2H_THISDOC{fulltitle})) .
+ "</H1>\n";
+ print $fh "<H2>$T2H_THISDOC{subtitle}</H2>\n" if $T2H_THISDOC{subtitle};
+ print $fh "$T2H_THISDOC{author}\n" if $T2H_THISDOC{author};
+ print $fh <<EOT;
+</CENTER>
+<HR>
+<P></P>
+<H2> Overview: </H2>
+<BLOCKQUOTE>
+EOT
+ t2h_print_lines($fh, $T2H_OVERVIEW);
+ print $fh "</BLOCKQUOTE>\n";
+ }
+ &$T2H_print_Top_footer($fh);
+}
+
+###################################################################
+# Layout of Toc, Overview, and Footnotes pages
+# By default, we use "normal" layout
+# T2H_HREF of Next, Prev, Up, Forward, Back, etc are not defined
+# use: local $T2H_BUTTONS = [...] to redefine navigation buttons
+sub T2H_DEFAULT_print_Toc
+{
+ return &$T2H_print_misc(@_);
+}
+sub T2H_DEFAULT_print_Overview
+{
+ return &$T2H_print_misc(@_);
+}
+sub T2H_DEFAULT_print_Footnotes
+{
+ return &$T2H_print_misc(@_);
+}
+sub T2H_DEFAULT_print_About
+{
+ return &$T2H_print_misc(@_);
+}
+
+sub T2H_DEFAULT_print_misc_header
+{
+ &$T2H_print_page_head(@_) if $T2H_SPLIT;
+ # this needs to be called, otherwise, no labels are set
+ t2h_print_label(@_);
+ &$T2H_print_head_navigation(@_);
+}
+sub T2H_DEFAULT_print_misc_footer
+{
+ &$T2H_print_foot_navigation(@_);
+ &$T2H_print_page_foot(@_) if $T2H_SPLIT;
+}
+sub T2H_DEFAULT_print_misc
+{
+ my $fh = shift;
+ local $T2H_BUTTONS = \@T2H_MISC_BUTTONS;
+ &$T2H_print_misc_header($fh);
+ print $fh "<H1>$T2H_NAME{This}</H1>\n";
+ t2h_print_lines($fh);
+ &$T2H_print_misc_footer($fh);
+}
+
+###################################################################
+# chapter_header and chapter_footer are only called if
+# T2H_SPLIT eq 'chapter'
+# chapter_header: after print_page_header, before print_section
+# chapter_footer: after print_section of last section, before print_page_footer
+#
+# If you want to get rid of navigation stuff after each section,
+# redefine print_section such that it does not call print_navigation,
+# and put print_navigation into print_chapter_header
+@T2H_CHAPTER_BUTTONS =
+ (
+ 'FastBack', 'FastForward', ' ',
+ ' ', ' ', ' ', ' ',
+ 'Top', 'Contents', 'Index', 'About',
+ );
+
+sub T2H_DEFAULT_print_chapter_header
+{
+ # nothing to do there, by default
+ if (! $T2H_SECTION_NAVIGATION)
+ {
+ my $fh = shift;
+ local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS;
+ &$T2H_print_navigation($fh);
+ print $fh "\n<HR SIZE=2>\n";
+ }
+}
+
+sub T2H_DEFAULT_print_chapter_footer
+{
+ local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS;
+ &$T2H_print_navigation(@_);
+}
+###################################################################
+$T2H_TODAY = &pretty_date; # like "20 September 1993"
+
+sub pretty_date {
+ local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
+
+ ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
+ $year += ($year < 70) ? 2000 : 1900;
+ # obachman: Let's do it as the Americans do
+ return($MONTH_NAMES->{$T2H_LANG}[$mon] . ", " . $mday . " " . $year);
+}
+
+
+###################################################################
+# Layout of standard header and footer
+#
+
+# Set the default body text, inserted between <BODY ... >
+###$T2H_BODYTEXT = 'LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"';
+$T2H_BODYTEXT = 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"';
+# text inserted after <BODY ...>
+$T2H_AFTER_BODY_OPEN = '';
+#text inserted before </BODY>
+$T2H_PRE_BODY_CLOSE = '';
+# this is used in footer
+$T2H_ADDRESS = "by <I>$T2H_USER</I> " if $T2H_USER;
+$T2H_ADDRESS .= "on <I>$T2H_TODAY</I>";
+# this is added inside <HEAD></HEAD> after <TITLE> and some META NAME stuff
+# can be used for <style> <script>, <meta> tags
+$T2H_EXTRA_HEAD = '';
+
+sub T2H_DEFAULT_print_page_head
+{
+ my $fh = shift;
+ my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}";
+ print $fh <<EOT;
+<HTML>
+$T2H_DOCTYPE
+<!-- Created on $T2H_TODAY by $THISPROG -->
+<!--
+$T2H_AUTHORS
+-->
+<HEAD>
+<TITLE>$longtitle</TITLE>
+
+<META NAME="description" CONTENT="$longtitle">
+<META NAME="keywords" CONTENT="$longtitle">
+<META NAME="resource-type" CONTENT="document">
+<META NAME="distribution" CONTENT="global">
+<META NAME="Generator" CONTENT="$THISPROG">
+$T2H_EXTRA_HEAD
+</HEAD>
+
+<BODY $T2H_BODYTEXT>
+$T2H_AFTER_BODY_OPEN
+EOT
+}
+
+sub T2H_DEFAULT_print_page_foot
+{
+ my $fh = shift;
+ print $fh <<EOT;
+<BR>
+<FONT SIZE="-1">
+This document was generated
+$T2H_ADDRESS
+using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A>
+$T2H_PRE_BODY_CLOSE
+</BODY>
+</HTML>
+EOT
+}
+
+###################################################################
+# Layout of navigation panel
+
+# if this is set, then a vertical navigation panel is used
+$T2H_VERTICAL_HEAD_NAVIGATION = 0;
+sub T2H_DEFAULT_print_head_navigation
+{
+ my $fh = shift;
+ if ($T2H_VERTICAL_HEAD_NAVIGATION)
+ {
+ print $fh <<EOT;
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0">
+<TR VALIGN="TOP">
+<TD ALIGN="LEFT">
+EOT
+ }
+ &$T2H_print_navigation($fh, $T2H_VERTICAL_HEAD_NAVIGATION);
+ if ($T2H_VERTICAL_HEAD_NAVIGATION)
+ {
+ print $fh <<EOT;
+</TD>
+<TD ALIGN="LEFT">
+EOT
+ }
+ elsif ($T2H_SPLIT eq 'section')
+ {
+ print $fh "<HR SIZE=1>\n";
+ }
+}
+
+# Specifies the minimum page length required before a navigation panel
+# is placed at the bottom of a page (the default is that of latex2html)
+# T2H_THIS_WORDS_IN_PAGE holds number of words of current page
+$T2H_WORDS_IN_PAGE = 300;
+sub T2H_DEFAULT_print_foot_navigation
+{
+ my $fh = shift;
+ my $nwords = shift;
+ if ($T2H_VERTICAL_HEAD_NAVIGATION)
+ {
+ print $fh <<EOT;
+</TD>
+</TR>
+</TABLE>
+EOT
+ }
+ print $fh "<HR SIZE=1>\n";
+ &$T2H_print_navigation($fh) if ($nwords >= $T2H_WORDS_IN_PAGE)
+}
+
+######################################################################
+# navigation panel
+#
+# specify in this array which "buttons" should appear in which order
+# in the navigation panel for sections; use ' ' for empty buttons (space)
+@T2H_SECTION_BUTTONS =
+ (
+ 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward',
+ ' ', ' ', ' ', ' ',
+ 'Top', 'Contents', 'Index', 'About',
+ );
+
+# buttons for misc stuff
+@T2H_MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About');
+
+# insert here name of icon images for buttons
+# Icons are used, if $T2H_ICONS and resp. value are set
+%T2H_ACTIVE_ICONS =
+ (
+ 'Top', '',
+ 'Contents', '',
+ 'Overview', '',
+ 'Index', '',
+ 'Back', '',
+ 'FastBack', '',
+ 'Prev', '',
+ 'Up', '',
+ 'Next', '',
+ 'Forward', '',
+ 'FastForward', '',
+ 'About' , '',
+ 'First', '',
+ 'Last', '',
+ ' ', ''
+ );
+
+# insert here name of icon images for these, if button is inactive
+%T2H_PASSIVE_ICONS =
+ (
+ 'Top', '',
+ 'Contents', '',
+ 'Overview', '',
+ 'Index', '',
+ 'Back', '',
+ 'FastBack', '',
+ 'Prev', '',
+ 'Up', '',
+ 'Next', '',
+ 'Forward', '',
+ 'FastForward', '',
+ 'About', '',
+ 'First', '',
+ 'Last', '',
+ );
+
+# how to create IMG tag
+sub T2H_DEFAULT_button_icon_img
+{
+ my $button = shift;
+ my $icon = shift;
+ my $name = shift;
+ return qq{<IMG SRC="$icon" BORDER="0" ALT="$button: $name" ALIGN="MIDDLE">};
+}
+
+# Names of text as alternative for icons
+%T2H_NAVIGATION_TEXT =
+ (
+ 'Top', 'Top',
+ 'Contents', 'Contents',
+ 'Overview', 'Overview',
+ 'Index', 'Index',
+ ' ', ' &nbsp; ',
+ 'Back', ' &lt; ',
+ 'FastBack', ' &lt;&lt; ',
+ 'Prev', 'Prev',
+ 'Up', ' Up ',
+ 'Next', 'Next',
+ 'Forward', ' &gt; ',
+ 'FastForward', ' &gt;&gt; ',
+ 'About', ' ? ',
+ 'First', ' |&lt; ',
+ 'Last', ' &gt;| '
+ );
+
+sub T2H_DEFAULT_print_navigation
+{
+ my $fh = shift;
+ my $vertical = shift;
+ my $spacing = 1;
+ print $fh "<TABLE CELLPADDING=$spacing CELLSPACING=$spacing BORDER=0>\n";
+
+ print $fh "<TR>" unless $vertical;
+ for $button (@$T2H_BUTTONS)
+ {
+ print $fh qq{<TR VALIGN="TOP" ALIGN="LEFT">\n} if $vertical;
+ print $fh qq{<TD VALIGN="MIDDLE" ALIGN="LEFT">};
+
+ if (ref($button) eq 'CODE')
+ {
+ &$button($fh, $vertical);
+ }
+ elsif ($button eq ' ')
+ { # handle space button
+ print $fh
+ $T2H_ICONS && $T2H_ACTIVE_ICONS{' '} ?
+ &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{' '}) :
+ $T2H_NAVIGATION_TEXT{' '};
+ next;
+ }
+ elsif ($T2H_HREF{$button})
+ { # button is active
+ print $fh
+ $T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? # use icon ?
+ t2h_anchor('', $T2H_HREF{$button}, # yes
+ &$T2H_button_icon_img($button,
+ $T2H_ACTIVE_ICONS{$button},
+ $T2H_NAME{$button}))
+ : # use text
+ "[" .
+ t2h_anchor('', $T2H_HREF{$button}, $T2H_NAVIGATION_TEXT{$button}) .
+ "]";
+ }
+ else
+ { # button is passive
+ print $fh
+ $T2H_ICONS && $T2H_PASSIVE_ICONS{$button} ?
+ &$T2H_button_icon_img($button,
+ $T2H_PASSIVE_ICONS{$button},
+ $T2H_NAME{$button}) :
+
+ "[" . $T2H_NAVIGATION_TEXT{$button} . "]";
+ }
+ print $fh "</TD>\n";
+ print $fh "</TR>\n" if $vertical;
+ }
+ print $fh "</TR>" unless $vertical;
+ print $fh "</TABLE>\n";
+}
+
+######################################################################
+# Frames: this is from "Richard Y. Kim" <ryk@coho.net>
+# Should be improved to be more conforming to other _print* functions
+
+sub T2H_DEFAULT_print_frame
+{
+ my $fh = shift;
+ print $fh <<EOT;
+<HTML>
+<HEAD><TITLE>$T2H_THISDOC{title}</TITLE></HEAD>
+<FRAMESET cols="140,*">
+ <FRAME name=toc src="$docu_toc_frame_file">
+ <FRAME name=main src="$docu_doc">
+</FRAMESET>
+</HTML>
+EOT
+}
+
+sub T2H_DEFAULT_print_toc_frame
+{
+ my $fh = shift;
+ &$T2H_print_page_head($fh);
+ print $fh <<EOT;
+<H2>Content</H2>
+EOT
+ print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines;
+ print $fh "</BODY></HTML>\n";
+}
+
+######################################################################
+# About page
+#
+
+# T2H_PRE_ABOUT might be a function
+$T2H_PRE_ABOUT = <<EOT;
+This document was generated $T2H_ADDRESS
+using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A>
+<P></P>
+EOT
+$T2H_AFTER_ABOUT = '';
+
+sub T2H_DEFAULT_about_body
+{
+ my $about;
+ if (ref($T2H_PRE_ABOUT) eq 'CODE')
+ {
+ $about = &$T2H_PRE_ABOUT();
+ }
+ else
+ {
+ $about = $T2H_PRE_ABOUT;
+ }
+ $about .= <<EOT;
+The buttons in the navigation panels have the following meaning:
+<P></P>
+<table border = "1">
+<TR>
+<TH> Button </TH>
+<TH> Name </TH>
+<TH> Go to </TH>
+<TH> From 1.2.3 go to</TH>
+</TR>
+EOT
+
+ for $button (@T2H_SECTION_BUTTONS)
+ {
+ next if $button eq ' ' || ref($button) eq 'CODE';
+ $about .= <<EOT;
+<TR>
+<TD ALIGN="CENTER">
+EOT
+ $about .=
+ ($T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ?
+ &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}) :
+ " [" . $T2H_NAVIGATION_TEXT{$button} . "] ");
+ $about .= <<EOT;
+</TD>
+<TD ALIGN="CENTER">
+$button
+</TD>
+<TD>
+$T2H_BUTTONS_GOTO{$button}
+</TD>
+<TD>
+$T2H_BUTTONS_EXAMPLE{$button}
+</TD>
+</TR>
+EOT
+ }
+
+ $about .= <<EOT;
+</TABLE>
+<P></P>
+where the <STRONG> Example </STRONG> assumes that the current position
+is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of
+the following structure:
+<UL>
+<LI> 1. Section One </LI>
+<UL>
+<LI>1.1 Subsection One-One</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.2 Subsection One-Two</LI>
+<UL>
+<LI>1.2.1 Subsubsection One-Two-One
+</LI><LI>1.2.2 Subsubsection One-Two-Two
+</LI><LI>1.2.3 Subsubsection One-Two-Three &nbsp; &nbsp; <STRONG>
+&lt;== Current Position </STRONG>
+</LI><LI>1.2.4 Subsubsection One-Two-Four
+</LI></UL>
+<LI>1.3 Subsection One-Three</LI>
+<UL>
+<LI> ... </LI>
+</UL>
+<LI>1.4 Subsection One-Four</LI>
+</UL>
+</UL>
+$T2H_AFTER_ABOUT
+EOT
+ return $about;
+}
+
+
+%T2H_BUTTONS_GOTO =
+ (
+ 'Top', 'cover (top) of document',
+ 'Contents', 'table of contents',
+ 'Overview', 'short table of contents',
+ 'Index', 'concept index',
+ 'Back', 'previous section in reading order',
+ 'FastBack', 'previous or up-and-previous section ',
+ 'Prev', 'previous section same level',
+ 'Up', 'up section',
+ 'Next', 'next section same level',
+ 'Forward', 'next section in reading order',
+ 'FastForward', 'next or up-and-next section',
+ 'About' , 'this page',
+ 'First', 'first section in reading order',
+ 'Last', 'last section in reading order',
+ );
+
+%T2H_BUTTONS_EXAMPLE =
+(
+ 'Top', ' &nbsp; ',
+ 'Contents', ' &nbsp; ',
+ 'Overview', ' &nbsp; ',
+ 'Index', ' &nbsp; ',
+ 'Back', '1.2.2',
+ 'FastBack', '1.1',
+ 'Prev', '1.2.2',
+ 'Up', '1.2',
+ 'Next', '1.2.4',
+ 'Forward', '1.2.4',
+ 'FastForward', '1.3',
+ 'About', ' &nbsp; ',
+ 'First', '1.',
+ 'Last', '1.2.4',
+);
+
+
+######################################################################
+# from here on, its l2h init stuff
+#
+
+## initialization for latex2html as for Singular manual generation
+## obachman 3/99
+
+#
+# Options controlling Titles, File-Names, Tracing and Sectioning
+#
+$TITLE = '';
+
+$SHORTEXTN = 0;
+
+$LONG_TITLES = 0;
+
+$DESTDIR = ''; # should be overwritten by cmd-line argument
+
+$NO_SUBDIR = 0;# should be overwritten by cmd-line argument
+
+$PREFIX = ''; # should be overwritten by cmd-line argument
+
+$AUTO_PREFIX = 0; # this is needed, so that prefix settings are used
+
+$AUTO_LINK = 0;
+
+$SPLIT = 0;
+
+$MAX_LINK_DEPTH = 0;
+
+$TMP = ''; # should be overwritten by cmd-line argument
+
+$DEBUG = 0;
+
+$VERBOSE = 1;
+
+#
+# Options controlling Extensions and Special Features
+#
+$HTML_VERSION = "3.2";
+
+$TEXDEFS = 1; # we absolutely need that
+
+$EXTERNAL_FILE = '';
+
+$SCALABLE_FONTS = 1;
+
+$NO_SIMPLE_MATH = 1;
+
+$LOCAL_ICONS = 1;
+
+$SHORT_INDEX = 0;
+
+$NO_FOOTNODE = 1;
+
+$ADDRESS = '';
+
+$INFO = '';
+
+#
+# Switches controlling Image Generation
+#
+$ASCII_MODE = 0;
+
+$NOLATEX = 0;
+
+$EXTERNAL_IMAGES = 0;
+
+$PS_IMAGES = 0;
+
+$NO_IMAGES = 0;
+
+$IMAGES_ONLY = 0;
+
+$REUSE = 2;
+
+$ANTI_ALIAS = 1;
+
+$ANTI_ALIAS_TEXT = 1;
+
+#
+#Switches controlling Navigation Panels
+#
+$NO_NAVIGATION = 1;
+$ADDRESS = '';
+$INFO = 0; # 0 = do not make a "About this document..." section
+
+#
+#Switches for Linking to other documents
+#
+# actuall -- we don't care
+
+$MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth
+
+$MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth
+
+$NOLATEX = 0; # 1 = do not pass unknown environments to Latex
+
+$EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document
+
+$ASCII_MODE = 0; # 1 = do not use any icons or internal images
+
+# 1 = use links to external postscript images rather than inlined bitmap
+# images.
+$PS_IMAGES = 0;
+$SHOW_SECTION_NUMBERS = 0;
+
+### Other global variables ###############################################
+$CHILDLINE = "";
+
+# This is the line width measured in pixels and it is used to right justify
+# equations and equation arrays;
+$LINE_WIDTH = 500;
+
+# Used in conjunction with AUTO_NAVIGATION
+$WORDS_IN_PAGE = 300;
+
+# Affects ONLY the way accents are processed
+$default_language = 'english';
+
+# The value of this variable determines how many words to use in each
+# title that is added to the navigation panel (see below)
+#
+$WORDS_IN_NAVIGATION_PANEL_TITLES = 0;
+
+# This number will determine the size of the equations, special characters,
+# and anything which will be converted into an inlined image
+# *except* "image generating environments" such as "figure", "table"
+# or "minipage".
+# Effective values are those greater than 0.
+# Sensible values are between 0.1 - 4.
+$MATH_SCALE_FACTOR = 1.5;
+
+# This number will determine the size of
+# image generating environments such as "figure", "table" or "minipage".
+# Effective values are those greater than 0.
+# Sensible values are between 0.1 - 4.
+$FIGURE_SCALE_FACTOR = 1.6;
+
+
+# If both of the following two variables are set then the "Up" button
+# of the navigation panel in the first node/page of a converted document
+# will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set
+# to some text which describes this external link.
+$EXTERNAL_UP_LINK = "";
+$EXTERNAL_UP_TITLE = "";
+
+# If this is set then the resulting HTML will look marginally better if viewed
+# with Netscape.
+$NETSCAPE_HTML = 1;
+
+# Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0"
+# Paper sizes has no effect other than in the time it takes to create inlined
+# images and in whether large images can be created at all ie
+# - larger paper sizes *MAY* help with large image problems
+# - smaller paper sizes are quicker to handle
+$PAPERSIZE = "a4";
+
+# Replace "english" with another language in order to tell LaTeX2HTML that you
+# want some generated section titles (eg "Table of Contents" or "References")
+# to appear in a different language. Currently only "english" and "french"
+# is supported but it is very easy to add your own. See the example in the
+# file "latex2html.config"
+$TITLES_LANGUAGE = "english";
+
+1; # This must be the last non-comment line
+
+# End File texi2html.init
+######################################################################
+
+
+require "$ENV{T2H_HOME}/texi2html.init"
+ if ($0 =~ /\.pl$/ &&
+ -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init");
+
+#+++############################################################################
+# #
+# Initialization #
+# Pasted content of File $(srcdir)/MySimple.pm: Command-line processing #
+# #
+#---############################################################################
+
+# leave this within comments, and keep the require statement
+# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init
+# exists.
+
+#
+package Getopt::MySimple;
+
+# Name:
+# Getopt::MySimple.
+#
+# Documentation:
+# POD-style (incomplete) documentation is in file MySimple.pod
+#
+# Tabs:
+# 4 spaces || die.
+#
+# Author:
+# Ron Savage rpsavage@ozemail.com.au.
+# 1.00 19-Aug-97 Initial version.
+# 1.10 13-Oct-97 Add arrays of switches (eg '=s@').
+# 1.20 3-Dec-97 Add 'Help' on a per-switch basis.
+# 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase.
+# 1.40 10-Nov-98 Change width of help report. Restructure tests.
+# 1-Jul-00 Modifications for Texi2html
+
+# --------------------------------------------------------------------------
+# Locally modified by obachman (Display type instead of env, order by cmp)
+# $Id: MySimple.pm,v 1.1 2000/07/03 08:44:13 obachman Exp $
+
+# use strict;
+# no strict 'refs';
+
+use vars qw(@EXPORT @EXPORT_OK @ISA);
+use vars qw($fieldWidth $opt $VERSION);
+
+use Exporter();
+use Getopt::Long;
+
+@ISA = qw(Exporter);
+@EXPORT = qw();
+@EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}.
+
+# --------------------------------------------------------------------------
+
+$fieldWidth = 20;
+$VERSION = '1.41';
+
+# --------------------------------------------------------------------------
+
+sub byOrder
+{
+ my($self) = @_;
+
+ return uc($a) cmp (uc($b));
+}
+
+# --------------------------------------------------------------------------
+
+sub dumpOptions
+{
+ my($self) = @_;
+
+ print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n";
+
+ for (sort byOrder keys(%{$self -> {'opt'} }) )
+ {
+ print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n";
+ }
+
+ print "\n";
+
+} # End of dumpOptions.
+
+# --------------------------------------------------------------------------
+# Return:
+# 0 -> Error.
+# 1 -> Ok.
+
+sub getOptions
+{
+ push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0.
+ push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1.
+
+ my($self, $default, $helpText, $versionText,
+ $helpThenExit, $versionThenExit, $ignoreCase) = @_;
+
+ $helpThenExit = 1 unless (defined($helpThenExit));
+ $versionThenExit = 1 unless (defined($versionThenExit));
+ $ignoreCase = 0 unless (defined($ignoreCase));
+
+ $self -> {'default'} = $default;
+ $self -> {'helpText'} = $helpText;
+ $self -> {'versionText'} = $versionText;
+ $Getopt::Long::ignorecase = $ignoreCase;
+
+ unless (defined($self -> {'default'}{'help'}))
+ {
+ $self -> {'default'}{'help'} =
+ {
+ type => ':i',
+ default => '',
+ linkage => sub {$self->helpOptions($_[1]); exit (0) if $helpThenExit;},
+ verbose => "print help and exit"
+ };
+ }
+
+ unless (defined($self -> {'default'}{'version'}))
+ {
+ $self -> {'default'}{'version'} =
+ {
+ type => '',
+ default => '',
+ linkage => sub {print $self->{'versionText'}; exit (0) if versionTheExit;},
+ verbose => "print version and exit"
+ };
+ }
+
+ for (keys(%{$self -> {'default'} }) )
+ {
+ my $type = ${$self -> {'default'} }{$_}{'type'};
+ push(@{$self -> {'type'} }, "$_$type");
+ $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'}
+ if ${$self -> {'default'} }{$_}{'linkage'};
+ }
+
+ my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} });
+
+ return $result unless $result;
+
+ for (keys(%{$self -> {'default'} }) )
+ {
+ if (! defined(${$self -> {'opt'} }{$_})) #{
+ {
+ ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'};
+ }
+ }
+
+ $result;
+} # End of getOptions.
+
+# --------------------------------------------------------------------------
+
+sub helpOptions
+{
+ my($self) = shift;
+ my($noHelp) = shift;
+ $noHelp = 0 unless $noHelp;
+ my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth)
+ = (10, 5, 9, 78, 4, 11);
+
+ print "$self->{'helpText'}" if ($self -> {'helpText'});
+
+ print ' Option', ' ' x ($optwidth - length('Option') -1 ),
+ 'Type', ' ' x ($typewidth - length('Type') + 1),
+ 'Default', ' ' x ($defaultwidth - length('Default') ),
+ "Description\n";
+
+ for (sort byOrder keys(%{$self -> {'default'} }) )
+ {
+ my($line, $help, $option, $val);
+ $option = $_;
+ next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp;
+ $line = " -$_ " . ' ' x ($optwidth - (2 + length) ) .
+ "${$self->{'default'} }{$_}{'type'} ".
+ ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) ));
+
+ $val = ${$self->{'default'} }{$_}{'linkage'};
+ if ($val)
+ {
+ if (ref($val) eq 'SCALAR')
+ {
+ $val = $$val;
+ }
+ else
+ {
+ $val = '';
+ }
+ }
+ else
+ {
+ $val = ${$self->{'default'} }{$_}{'default'};
+ }
+ $line .= "$val ";
+ $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line));
+
+ if (defined(${$self -> {'default'} }{$_}{'verbose'}) &&
+ ${$self -> {'default'} }{$_}{'verbose'} ne '')
+ {
+ $help = "${$self->{'default'} }{$_}{'verbose'}";
+ }
+ else
+ {
+ $help = ' ';
+ }
+ if ((length("$line") + length($help)) < $maxlinewidth)
+ {
+ print $line , $help, "\n";
+ }
+ else
+ {
+ print $line, "\n", ' ' x $valind, $help, "\n";
+ }
+ for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}}))
+ {
+ print ' ' x ($valind + 2);
+ print $val, ' ', ' ' x ($valwidth - length($val) - 2);
+ print ${$self->{'default'}}{$option}{'values'}{$val}, "\n";
+ }
+ }
+
+ print <<EOT;
+Note: 'Options' may be abbreviated. 'Type' specifications mean:
+ <none>| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo)
+ =s | :s mandatory (or, optional) string argument
+ =i | :i mandatory (or, optional) integer argument
+EOT
+} # End of helpOptions.
+
+#-------------------------------------------------------------------
+
+sub new
+{
+ my($class) = @_;
+ my($self) = {};
+ $self -> {'default'} = {};
+ $self -> {'helpText'} = '';
+ $self -> {'opt'} = {};
+ $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}.
+ $self -> {'type'} = ();
+
+ return bless $self, $class;
+
+} # End of new.
+
+# --------------------------------------------------------------------------
+
+1;
+
+# End MySimple.pm
+
+require "$ENV{T2H_HOME}/MySimple.pm"
+ if ($0 =~ /\.pl$/ &&
+ -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init");
+
+package main;
#+++############################################################################
# #
@@ -28,36 +1742,41 @@ $DEBUG_GLOSS = 8;
$DEBUG_DEF = 16;
$DEBUG_HTML = 32;
$DEBUG_USER = 64;
+$DEBUG_L2H = 128;
+
$BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference
$FILERE = '[\/\w.+-]+'; # RE for a file name
$VARRE = '[^\s\{\}]+'; # RE for a variable name
-$NODERE = '[^@{}:\'`",]+'; # RE for a node name
-$NODESRE = '[^@{}:\'`"]+'; # RE for a list of node names
-$XREFRE = '[^@{}]+'; # RE for a xref (should use NODERE)
-
-$ERROR = "***"; # prefix for errors and warnings
-$THISPROG = "texi2html 1.52"; # program name and version
-$HOMEPAGE = "http://wwwinfo.cern.ch/dis/texi2html/"; # program home page
-$TODAY = &pretty_date; # like "20 September 1993"
-$SPLITTAG = "<!-- SPLIT HERE -->\n"; # tag to know where to split
+$NODERE = '[^,:]+'; # RE for a node name
+$NODESRE = '[^:]+'; # RE for a list of node names
+
+$ERROR = "***"; # prefix for errors
+$WARN = "**"; # prefix for warnings
+
+ # program home page
$PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections
-$html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN">';
-#
-# language dependent constants
-#
-#$LDC_SEE = 'see';
-#$LDC_SECTION = 'section';
-#$LDC_IN = 'in';
-#$LDC_TOC = 'Table of Contents';
-#$LDC_GOTO = 'Go to the';
-#$LDC_FOOT = 'Footnotes';
-# TODO: @def* shortcuts
+$CHAPTEREND = "<!-- End chapter -->\n"; # to know where a chpater ends
+$SECTIONEND = "<!-- End section -->\n"; # to know where section ends
+$TOPEND = "<!-- End top -->\n"; # to know where top ends
+
+
#
# pre-defined indices
#
+$index_properties =
+{
+ 'c' => { name => 'cp'},
+ 'f' => { name => 'fn', code => 1},
+ 'v' => { name => 'vr', code => 1},
+ 'k' => { name => 'ky', code => 1},
+ 'p' => { name => 'pg', code => 1},
+ 't' => { name => 'tp', code => 1}
+};
+
+
%predefined_index = (
'cp', 'c',
'fn', 'f',
@@ -122,8 +1841,11 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
# cf. makeinfo.c
"*", "<BR>", # HTML+
" ", " ",
+ "\t", " ",
+ "-", "&#173;", # soft hyphen
"\n", "\n",
"|", "",
+ 'tab', '<\/TD><TD>',
# spacing commands
":", "",
"!", "!",
@@ -140,7 +1862,8 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
'br', '<P>', # paragraph break
'bullet', '*',
'copyright', '(C)',
- 'dots', '...',
+ 'dots', '<small>...<\/small>',
+ 'enddots', '<small>....<\/small>',
'equiv', '==',
'error', 'error-->',
'expansion', '==>',
@@ -148,27 +1871,45 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
'point', '-!-',
'print', '-|',
'result', '=>',
- 'today', $TODAY,
+ 'today', $T2H_TODAY,
+ 'aa', '&aring;',
+ 'AA', '&Aring;',
+ 'ae', '&aelig;',
+ 'oe', '&#156;',
+ 'AE', '&AElig;',
+ 'OE', '&#140;',
+ 'o', '&oslash;',
+ 'O', '&Oslash;',
+ 'ss', '&szlig;',
+ 'l', '\/l',
+ 'L', '\/L',
+ 'exclamdown', '&iexcl;',
+ 'questiondown', '&iquest;',
+ 'pounds', '&pound;'
);
#
# texinfo styles (@foo{bar}) to HTML ones
#
%style_map = (
+ 'acronym', '&do_acronym',
'asis', '',
'b', 'B',
'cite', 'CITE',
'code', 'CODE',
+ 'command', 'CODE',
'ctrl', '&do_ctrl', # special case
'dfn', 'EM', # DFN tag is illegal in the standard
'dmn', '', # useless
'email', '&do_email', # insert a clickable email address
'emph', 'EM',
+ 'env', 'CODE',
'file', '"TT', # will put quotes, cf. &apply_style
'i', 'I',
'kbd', 'KBD',
'key', 'KBD',
- 'math', 'EM',
+ 'math', '&do_math',
+ 'option', '"SAMP', # will put quotes, cf. &apply_style
'r', '', # unsupported
'samp', '"SAMP', # will put quotes, cf. &apply_style
'sc', '&do_sc', # special case
@@ -179,19 +1920,23 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
'url', '&do_url', # insert a clickable URL
'var', 'VAR',
'w', '', # unsupported
+ 'H', '&do_accent',
+ 'dotaccent', '&do_accent',
+ 'ringaccent','&do_accent',
+ 'tieaccent', '&do_accent',
+ 'u','&do_accent',
+ 'ubaraccent','&do_accent',
+ 'udotaccent','&do_accent',
+ 'v', '&do_accent',
+ ',', '&do_accent',
+ 'dotless', '&do_accent'
);
#
# texinfo format (@foo/@end foo) to HTML ones
#
%format_map = (
- 'display', 'PRE',
- 'example', 'PRE',
- 'format', 'PRE',
- 'lisp', 'PRE',
'quotation', 'BLOCKQUOTE',
- 'smallexample', 'PRE',
- 'smalllisp', 'PRE',
# lists
'itemize', 'UL',
'enumerate', 'OL',
@@ -201,6 +1946,38 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
);
#
+# an eval of these $complex_format_map->{what}->[0] yields beginning
+# an eval of these $complex_format_map->{what}->[1] yieleds end
+$complex_format_map =
+{
+ example =>
+ [
+ q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=example><pre>"},
+ q{'</pre></td></tr></table>'}
+ ],
+ smallexample =>
+ [
+ q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smallexample><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre>"},
+ q{'</FONT></pre></td></tr></table>'}
+ ],
+ display =>
+ [
+ q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=display><pre " . 'style="font-family: serif">'},
+ q{'</pre></td></tr></table>'}
+ ],
+ smalldisplay =>
+ [
+ q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smalldisplay><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre " . 'style="font-family: serif">'},
+ q{'</pre></FONT></td></tr></table>'}
+ ]
+};
+
+$complex_format_map->{lisp} = $complex_format_map->{example};
+$complex_format_map->{smalllisp} = $complex_format_map->{smallexample};
+$complex_format_map->{format} = $complex_format_map->{display};
+$complex_format_map->{smallformat} = $complex_format_map->{smalldisplay};
+
+#
# texinfo definition shortcuts to real ones
#
%def_map = (
@@ -229,7 +2006,9 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
'deftypefun', 'deftypefn Function',
'deftypevar', 'deftypevr Variable',
'defivar', 'defcv {Instance Variable}',
+ 'deftypeivar', 'defcv {Instance Variable}', # NEW: FIXME
'defmethod', 'defop Method',
+ 'deftypemethod', 'defop Method', # NEW:FIXME
# x shortcuts
'defunx', 'deffnx Function',
'defmacx', 'deffnx Macro',
@@ -249,7 +2028,15 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
# comments
'c', 1,
'comment', 1,
+ 'ifnotinfo', 1,
+ 'ifnottex', 1,
+ 'ifhtml', 1,
+ 'end ifhtml', 1,
+ 'end ifnotinfo', 1,
+ 'end ifnottex', 1,
# useless
+ 'detailmenu', 1,
+ 'direntry', 1,
'contents', 1,
'shortcontents', 1,
'summarycontents', 1,
@@ -263,6 +2050,7 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
'cropmarks', 1,
'finalout', 1,
'headings', 1,
+ 'sp', 1,
'need', 1,
'page', 1,
'setchapternewpage', 1,
@@ -289,88 +2077,221 @@ $html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//E
# #
#---############################################################################
-%value = (); # hold texinfo variables, see also -D
+#
+# flush stdout and stderr after every write
+#
+select(STDERR);
+$| = 1;
+select(STDOUT);
+$| = 1;
+
+%value = (); # hold texinfo variables, see also -D
$use_bibliography = 1;
-$use_acc = 0;
-$debug = 0;
-$doctype = '';
-$check = 0;
-$expandinfo = 0;
-$use_glossary = 0;
-$invisible_mark = '';
-$use_iso = 0;
-@include_dirs = ();
-$show_menu = 0;
-$number_sections = 0;
-$split_node = 0;
-$split_chapter = 0;
-$monolithic = 0;
-$verbose = 0;
-$usage = <<EOT;
-This is $THISPROG
-To convert a Texinfo file to HMTL: $0 [options] file
- where options can be:
- -expandinfo : use \@ifinfo sections, not \@iftex
- -glossary : handle a glossary
- -invisible name: use 'name' as an invisible anchor
- -Dname : define name like with \@set
- -I dir : search also for files in 'dir'
- -menu : handle menus
- -monolithic : output only one file including ToC
- -number : number sections
- -split_chapter : split on main sections
- -split_node : split on nodes
- -usage : print usage instructions
- -verbose : verbose output
-To check converted files: $0 -check [-verbose] files
-EOT
+$use_acc = 1;
-while (@ARGV && $ARGV[0] =~ /^-/) {
- $_ = shift(@ARGV);
- if (/^-acc$/) { $use_acc = 1; next; }
- if (/^-d(ebug)?(\d+)?$/) { $debug = $2 || shift(@ARGV); next; }
- if (/^-doctype$/) { $doctype = shift(@ARGV); next; }
- if (/^-c(heck)?$/) { $check = 1; next; }
- if (/^-e(xpandinfo)?$/) { $expandinfo = 1; next; }
- if (/^-g(lossary)?$/) { $use_glossary = 1; next; }
- if (/^-i(nvisible)?$/) { $invisible_mark = shift(@ARGV); next; }
- if (/^-iso$/) { $use_iso = 1; next; }
- if (/^-D(.+)?$/) { $value{$1 || shift(@ARGV)} = 1; next; }
- if (/^-I(.+)?$/) { push(@include_dirs, $1 || shift(@ARGV)); next; }
- if (/^-m(enu)?$/) { $show_menu = 1; next; }
- if (/^-mono(lithic)?$/) { $monolithic = 1; next; }
- if (/^-n(umber)?$/) { $number_sections = 1; next; }
- if (/^-s(plit)?_?(n(ode)?|c(hapter)?)?$/) {
- if ($2 =~ /^n/) {
- $split_node = 1;
- } else {
- $split_chapter = 1;
- }
- next;
+#
+# called on -init-file
+sub LoadInitFile
+{
+ my $init_file = shift;
+ # second argument is value of options
+ $init_file = shift;
+ if (-f $init_file)
+ {
+ print "# reading initialization file from $init_file\n"
+ if ($T2H_VERBOSE);
+ require($init_file);
+ }
+ else
+ {
+ print "$ERROR Error: can't read init file $int_file\n";
+ $init_file = '';
+ }
+}
+
+#
+# called on -lang
+sub SetDocumentLanguage
+{
+ my $lang = shift;
+ if (! exists($T2H_WORDS->{$lang}))
+ {
+ warn "$ERROR: Language specs for '$lang' do not exists. Reverting to '" .
+ ($T2H_LANG ? T2H_LANG : "en") . "'\n";
+ }
+ else
+ {
+ print "# using '$lang' as document language\n" if ($T2H_VERBOSE);
+ $T2H_LANG = $lang;
+ }
+}
+
+##
+## obsolete cmd line options
+##
+$T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_SECTION_NAVIGATION = 0;},
+ verbose => 'obsolete, use -nosec_nav',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {use_acc} =
+{
+ type => '!',
+ linkage => \$use_acc,
+ verbose => 'obsolete',
+ noHelp => 2
+};
+$T2H_OBSOLETE_OPTIONS -> {expandinfo} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_EXPAND = 'info';},
+ verbose => 'obsolete, use "-expand info" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {expandtex} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_EXPAND = 'tex';},
+ verbose => 'obsolete, use "-expand tex" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {monolithic} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_SPLIT = '';},
+ verbose => 'obsolete, use "-split no" instead',
+ noHelp => 2
+};
+$T2H_OBSOLETE_OPTIONS -> {split_node} =
+{
+ type => '!',
+ linkage => sub{$main::T2H_SPLIT = 'section';},
+ verbose => 'obsolete, use "-split section" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {split_chapter} =
+{
+ type => '!',
+ linkage => sub{$main::T2H_SPLIT = 'chapter';},
+ verbose => 'obsolete, use "-split chapter" instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {no_verbose} =
+{
+ type => '!',
+ linkage => sub {$main::T2H_VERBOSE = 0;},
+ verbose => 'obsolete, use -noverbose instead',
+ noHelp => 2,
+};
+$T2H_OBSOLETE_OPTIONS -> {output_file} =
+{
+ type => '=s',
+ linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';},
+ verbose => 'obsolete, use -out_file instead',
+ noHelp => 2
+};
+
+$T2H_OBSOLETE_OPTIONS -> {section_navigation} =
+{
+ type => '!',
+ linkage => \$T2H_SECTION_NAVIGATION,
+ verbose => 'obsolete, use -sec_nav instead',
+ noHelp => 2,
+};
+
+$T2H_OBSOLETE_OPTIONS -> {verbose} =
+{
+ type => '!',
+ linkage => \$T2H_VERBOSE,
+ verbose => 'obsolete, use -Verbose instead',
+ noHelp => 2
+};
+
+# read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc
+my $home = $ENV{HOME};
+defined($home) or $home = '';
+foreach $i ('/usr/local/etc/texi2htmlrc', "$home/.texi2htmlrc") {
+ if (-f $i) {
+ print "# reading initialization file from $i\n"
+ if ($T2H_VERBOSE);
+ require($i);
}
- if (/^-v(erbose)?$/) { $verbose = 1; next; }
- die $usage;
}
-if ($check) {
- die $usage unless @ARGV > 0;
+
+
+#+++############################################################################
+# #
+# parse command-line options
+# #
+#---############################################################################
+$T2H_USAGE_TEXT = <<EOT;
+Usage: texi2html [OPTIONS] TEXINFO-FILE
+Translates Texinfo source documentation to HTML.
+EOT
+$T2H_FAILURE_TEXT = <<EOT;
+Try 'texi2html -help' for usage instructions.
+EOT
+$options = new Getopt::MySimple;
+
+# some older version of GetOpt::Long don't have
+# Getopt::Long::Configure("pass_through")
+eval {Getopt::Long::Configure("pass_through");};
+$Configure_failed = $@ && <<EOT;
+**WARNING: Parsing of obsolete command-line options could have failed.
+ Consider to use only documented command-line options (run
+ 'texi2html -help 2' for a complete list) or upgrade to perl
+ version 5.005 or higher.
+EOT
+
+if (! $options->getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n"))
+{
+ print $Configure_failed if $Configure_failed;
+ die $T2H_FAILURE_TEXT;
+}
+
+if (@ARGV > 1)
+{
+ eval {Getopt::Long::Configure("no_pass_through");};
+ if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n"))
+ {
+ print $Configure_failed if $Configure_failed;
+ die $T2H_FAILURE_TEXT;
+ }
+}
+
+if ($T2H_CHECK) {
+ die "Need file to check\n$T2H_FAILURE_TEXT" unless @ARGV > 0;
&check;
exit;
}
-if (($split_node || $split_chapter) && $monolithic) {
- warn "Can't use -monolithic with -split, -monolithic ignored.\n";
- $monolithic = 0;
-}
-if ($expandinfo) {
- $to_skip{'ifinfo'}++;
- $to_skip{'end ifinfo'}++;
-} else {
- $to_skip{'iftex'}++;
- $to_skip{'end iftex'}++;
+#+++############################################################################
+# #
+# evaluation of cmd line options
+# #
+#---############################################################################
+
+if ($T2H_EXPAND eq 'info')
+{
+ $to_skip{'ifinfo'} = 1;
+ $to_skip{'end ifinfo'} = 1;
+}
+elsif ($T2H_EXPAND eq 'tex')
+{
+ $to_skip{'iftex'} = 1;
+ $to_skip{'end iftex'} = 1;
+
}
-$invisible_mark = '<IMG SRC="invisible.xbm">' if $invisible_mark eq 'xbm';
-die $usage unless @ARGV == 1;
+
+$T2H_INVISIBLE_MARK = '<IMG SRC="invisible.xbm">' if $T2H_INVISIBLE_MARK eq 'xbm';
+
+#
+# file name buisness
+#
+die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1;
$docu = shift(@ARGV);
if ($docu =~ /.*\//) {
chop($docu_dir = $&);
@@ -379,29 +2300,123 @@ if ($docu =~ /.*\//) {
$docu_dir = '.';
$docu_name = $docu;
}
-unshift(@include_dirs, $docu_dir);
+unshift(@T2H_INCLUDE_DIRS, $docu_dir);
$docu_name =~ s/\.te?x(i|info)?$//; # basename of the document
+$docu_name = $T2H_PREFIX if ($T2H_PREFIX);
-$docu_doc = "$docu_name.html"; # document's contents
-if ($monolithic) {
- $docu_toc = $docu_foot = $docu_doc;
-} else {
- $docu_toc = "${docu_name}_toc.html"; # document's table of contents
- $docu_foot = "${docu_name}_foot.html"; # document's footnotes
+# subdir
+if ($T2H_SUBDIR && ! $T2H_OUT)
+{
+ $T2H_SUBDIR =~ s|/*$||;
+ unless (-d "$T2H_SUBDIR" && -w "$T2H_SUBDIR")
+ {
+ if ( mkdir($T2H_SUBDIR, oct(755)))
+ {
+ print "# created directory $T2H_SUBDIR\n" if ($T2H_VERBOSE);
+ }
+ else
+ {
+ warn "$ERROR can't create directory $T2H_SUBDIR. Put results into current directory\n";
+ $T2H_SUBDIR = '';
+ }
+ }
+}
+
+if ($T2H_SUBDIR && ! $T2H_OUT)
+{
+ $docu_rdir = "$T2H_SUBDIR/";
+ print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE);
+}
+else
+{
+ if ($T2H_OUT && $T2H_OUT =~ m|(.*)/|)
+ {
+ $docu_rdir = "$1/";
+ print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE);
+ }
+ else
+ {
+ print "# putting result files into current directory \n" if ($T2H_VERBOSE);
+ $docu_rdir = '';
+ }
+}
+
+# extension
+if ($T2H_SHORTEXTN)
+{
+ $docu_ext = "htm";
+}
+else
+{
+ $docu_ext = "html";
+}
+if ($T2H_TOP_FILE =~ /\..*$/)
+{
+ $T2H_TOP_FILE = $`.".$docu_ext";
}
+# result files
+if (! $T2H_OUT && ($T2H_SPLIT =~ /section/i || $T2H_SPLIT =~ /node/i))
+{
+ $T2H_SPLIT = 'section';
+}
+elsif (! $T2H_OUT && $T2H_SPLIT =~ /chapter/i)
+{
+ $T2H_SPLIT = 'chapter'
+}
+else
+{
+ undef $T2H_SPLIT;
+}
+
+$docu_doc = "$docu_name.$docu_ext"; # document's contents
+$docu_doc_file = "$docu_rdir$docu_doc";
+if ($T2H_SPLIT)
+{
+ $docu_toc = $T2H_TOC_FILE || "${docu_name}_toc.$docu_ext"; # document's table of contents
+ $docu_stoc = "${docu_name}_ovr.$docu_ext"; # document's short toc
+ $docu_foot = "${docu_name}_fot.$docu_ext"; # document's footnotes
+ $docu_about = "${docu_name}_abt.$docu_ext"; # about this document
+ $docu_top = $T2H_TOP_FILE || $docu_doc;
+}
+else
+{
+ if ($T2H_OUT)
+ {
+ $docu_doc = $T2H_OUT;
+ $docu_doc =~ s|.*/||;
+ }
+ $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc;
+}
+
+$docu_toc_file = "$docu_rdir$docu_toc";
+$docu_stoc_file = "$docu_rdir$docu_stoc";
+$docu_foot_file = "$docu_rdir$docu_foot";
+$docu_about_file = "$docu_rdir$docu_about";
+$docu_top_file = "$docu_rdir$docu_top";
+
+$docu_frame_file = "$docu_rdir${docu_name}_frame.$docu_ext";
+$docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame.$docu_ext";
+
#
# variables
#
$value{'html'} = 1; # predefine html (the output format)
-$value{'texi2html'} = '1.52'; # predefine texi2html (the translator)
+$value{'texi2html'} = $THISVERSION; # predefine texi2html (the translator)
# _foo: internal to track @foo
foreach ('_author', '_title', '_subtitle',
- '_settitle', '_setfilename') {
+ '_settitle', '_setfilename', '_shorttitle') {
$value{$_} = ''; # prevent -w warnings
}
%node2sec = (); # node to section name
+%sec2node = (); # section to node name
+%sec2number = (); # section to number
+%number2sec = (); # number to section
+%idx2node = (); # index keys to node
%node2href = (); # node to HREF
+%node2next = (); # node to next
+%node2prev = (); # node to prev
+%node2up = (); # node to up
%bib2href = (); # bibliography reference to HREF
%gloss2href = (); # glossary term to HREF
@sections = (); # list of sections
@@ -421,7 +2436,7 @@ $html_num = 0;
#
# can I use ISO8879 characters? (HTML+)
#
-if ($use_iso) {
+if ($T2H_USE_ISO) {
$things_map{'bullet'} = "&bull;";
$things_map{'copyright'} = "&copy;";
$things_map{'dots'} = "&hellip;";
@@ -436,19 +2451,487 @@ if ($use_iso) {
#
$extensions = 'texi2html.ext'; # extensions in working directory
if (-f $extensions) {
- print "# reading extensions from $extensions\n" if $verbose;
+ print "# reading extensions from $extensions\n" if $T2H_VERBOSE;
require($extensions);
}
($progdir = $0) =~ s/[^\/]+$//;
if ($progdir && ($progdir ne './')) {
$extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory
if (-f $extensions) {
- print "# reading extensions from $extensions\n" if $verbose;
+ print "# reading extensions from $extensions\n" if $T2H_VERBOSE;
require($extensions);
}
}
-print "# reading from $docu\n" if $verbose;
+
+print "# reading from $docu\n" if $T2H_VERBOSE;
+
+#########################################################################
+#
+# latex2html stuff
+#
+# latex2html conversions consist of three stages:
+# 1) ToLatex: Put "latex" code into a latex file
+# 2) ToHtml: Use latex2html to generate corresponding html code and images
+# 3) FromHtml: Extract generated code and images from latex2html run
+#
+
+##########################
+# default settings
+#
+
+# defaults for files and names
+
+sub l2h_Init
+{
+ local($root) = @_;
+
+ return 0 unless ($root);
+
+ $l2h_name = "${root}_l2h";
+
+ $l2h_latex_file = "$docu_rdir${l2h_name}.tex";
+ $l2h_cache_file = "${docu_rdir}l2h_cache.pm";
+ $T2H_L2H_L2H = "latex2html" unless ($T2H_L2H_L2H);
+
+ # destination dir -- generated images are put there, should be the same
+ # as dir of enclosing html document --
+ $l2h_html_file = "$docu_rdir${l2h_name}.html";
+ $l2h_prefix = "${l2h_name}_";
+ return 1;
+}
+
+
+##########################
+#
+# First stage: Generation of Latex file
+# Initialize with: l2h_InitToLatex
+# Add content with: l2h_ToLatex($text) --> HTML placeholder comment
+# Finish with: l2h_FinishToLatex
+#
+
+$l2h_latex_preample = <<EOT;
+% This document was automatically generated by the l2h extenstion of texi2html
+% DO NOT EDIT !!!
+\\documentclass{article}
+\\usepackage{html}
+\\begin{document}
+EOT
+
+$l2h_latex_closing = <<EOT;
+\\end{document}
+EOT
+
+# return used latex 1, if l2h could be initalized properly, 0 otherwise
+sub l2h_InitToLatex
+{
+ %l2h_to_latex = ();
+ unless ($T2H_L2H_SKIP)
+ {
+ unless (open(L2H_LATEX, ">$l2h_latex_file"))
+ {
+ warn "$ERROR Error l2h: Can't open latex file '$latex_file' for writing\n";
+ return 0;
+ }
+ print "# l2h: use ${l2h_latex_file} as latex file\n" if ($T2H_VERBOSE);
+ print L2H_LATEX $l2h_latex_preample;
+ }
+ # open database for caching
+ l2h_InitCache();
+ $l2h_latex_count = 0;
+ $l2h_to_latex_count = 0;
+ $l2h_cached_count = 0;
+ return 1;
+}
+
+# print text (1st arg) into latex file (if not already there), return
+# HTML commentary which can be later on replaced by the latex2html
+# generated text
+sub l2h_ToLatex
+{
+ my($text) = @_;
+ my($count);
+
+ $l2h_to_latex_count++;
+ $text =~ s/(\s*)$//;
+
+ # try whether we can cache it
+ my $cached_text = l2h_FromCache($text);
+ if ($cached_text)
+ {
+ $l2h_cached_count++;
+ return $cached_text;
+ }
+
+ # try whether we have text already on things to do
+ unless ($count = $l2h_to_latex{$text})
+ {
+ $count = $l2h_latex_count;
+ $l2h_latex_count++;
+ $l2h_to_latex{$text} = $count;
+ $l2h_to_latex[$count] = $text;
+ unless ($T2H_L2H_SKIP)
+ {
+ print L2H_LATEX "\\begin{rawhtml}\n";
+ print L2H_LATEX "<!-- l2h_begin ${l2h_name} ${count} -->\n";
+ print L2H_LATEX "\\end{rawhtml}\n";
+
+ print L2H_LATEX "$text\n";
+
+ print L2H_LATEX "\\begin{rawhtml}\n";
+ print L2H_LATEX "<!-- l2h_end ${l2h_name} ${count} -->\n";
+ print L2H_LATEX "\\end{rawhtml}\n";
+ }
+ }
+ return "<!-- l2h_replace ${l2h_name} ${count} -->";
+}
+
+# print closing into latex file and close it
+sub l2h_FinishToLatex
+{
+ local ($reused);
+
+ $reused = $l2h_to_latex_count - $l2h_latex_count - $l2h_cached_count;
+ unless ($T2H_L2H_SKIP)
+ {
+ print L2H_LATEX $l2h_latex_closing;
+ close(L2H_LATEX);
+ }
+ print "# l2h: finished to latex ($l2h_cached_count cached, $reused reused, $l2h_latex_count contents)\n" if ($T2H_VERBOSE);
+ unless ($l2h_latex_count)
+ {
+ l2h_Finish();
+ return 0;
+ }
+ return 1;
+}
+
+###################################
+# Second stage: Use latex2html to generate corresponding html code and images
+#
+# l2h_ToHtml([$l2h_latex_file, [$l2h_html_dir]]):
+# Call latex2html on $l2h_latex_file
+# Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir
+# Return 1, on success
+# 0, otherwise
+#
+sub l2h_ToHtml
+{
+ local($call, $ext, $root, $dotbug);
+
+ if ($T2H_L2H_SKIP)
+ {
+ print "# l2h: skipping latex2html run\n" if ($T2H_VERBOSE);
+ return 1;
+ }
+
+ # Check for dot in directory where dvips will work
+ if ($T2H_L2H_TMP)
+ {
+ if ($T2H_L2H_TMP =~ /\./)
+ {
+ warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n";
+ $dotbug = 1;
+ }
+ }
+ else
+ {
+ if (&getcwd =~ /\./)
+ {
+ warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n";
+ $dotbug = 1;
+ }
+ }
+ # fix it, if necessary and hope that it works
+ $T2H_L2H_TMP = "/tmp" if ($dotbug);
+
+ $call = $T2H_L2H_L2H;
+ # use init file, if specified
+ $call = $call . " -init_file " . $init_file if ($init_file && -f $init_file);
+ # set output dir
+ $call .= ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir");
+ # use l2h_tmp, if specified
+ $call = $call . " -tmp $T2H_L2H_TMP" if ($T2H_L2H_TMP);
+ # options we want to be sure of
+ $call = $call ." -address 0 -info 0 -split 0 -no_navigation -no_auto_link";
+ $call = $call ." -prefix ${l2h_prefix} $l2h_latex_file";
+
+ print "# l2h: executing '$call'\n" if ($T2H_VERBOSE);
+ if (system($call))
+ {
+ warn "l2h ***Error: '${call}' did not succeed\n";
+ return 0;
+ }
+ else
+ {
+ print "# l2h: latex2html finished successfully\n" if ($T2H_VERBOSE);
+ return 1;
+ }
+}
+
+# this is directly pasted over from latex2html
+sub getcwd {
+ local($_) = `pwd`;
+
+ die "'pwd' failed (out of memory?)\n"
+ unless length;
+ chop;
+ $_;
+}
+
+
+##########################
+# Third stage: Extract generated contents from latex2html run
+# Initialize with: l2h_InitFromHtml
+# open $l2h_html_file for reading
+# reads in contents into array indexed by numbers
+# return 1, on success -- 0, otherwise
+# Extract Html code with: l2h_FromHtml($text)
+# replaces in $text all previosuly inserted comments by generated html code
+# returns (possibly changed) $text
+# Finish with: l2h_FinishFromHtml
+# closes $l2h_html_dir/$l2h_name.".$docu_ext"
+
+sub l2h_InitFromHtml
+{
+ local($h_line, $h_content, $count, %l2h_img);
+
+ if (! open(L2H_HTML, "<${l2h_html_file}"))
+ {
+ print "$ERROR Error l2h: Can't open ${l2h_html_file} for reading\n";
+ return 0;
+ }
+ print "# l2h: use ${l2h_html_file} as html file\n" if ($T2H_VERBOSE);
+
+ $l2h_html_count = 0;
+
+ while ($h_line = <L2H_HTML>)
+ {
+ if ($h_line =~ /^<!-- l2h_begin $l2h_name ([0-9]+) -->/)
+ {
+ $count = $1;
+ $h_content = "";
+ while ($h_line = <L2H_HTML>)
+ {
+ if ($h_line =~ /^<!-- l2h_end $l2h_name $count -->/)
+ {
+ chomp $h_content;
+ chomp $h_content;
+ $l2h_html_count++;
+ $h_content = l2h_ToCache($count, $h_content);
+ $l2h_from_html[$count] = $h_content;
+ $h_content = '';
+ last;
+ }
+ $h_content = $h_content.$h_line;
+ }
+ if ($hcontent)
+ {
+ print "$ERROR Warning l2h: l2h_end $l2h_name $count not found\n"
+ if ($T2H_VERBOSE);
+ close(L2H_HTML);
+ return 0;
+ }
+ }
+ }
+ print "# l2h: Got $l2h_html_count of $l2h_latex_count html contents\n"
+ if ($T2H_VERBOSE);
+
+ close(L2H_HTML);
+ return 1;
+}
+
+sub l2h_FromHtml
+{
+ local($text) = @_;
+ local($done, $to_do, $count);
+
+ $to_do = $text;
+
+ while ($to_do =~ /([^\000]*)<!-- l2h_replace $l2h_name ([0-9]+) -->([^\000]*)/)
+ {
+ $to_do = $1;
+ $count = $2;
+ $done = $3.$done;
+
+ $done = "<!-- l2h_end $l2h_name $count -->".$done
+ if ($T2H_DEBUG & $DEBUG_L2H);
+
+ $done = &l2h_ExtractFromHtml($count) . $done;
+
+ $done = "<!-- l2h_begin $l2h_name $count -->".$done
+ if ($T2H_DEBUG & $DEBUG_L2H);
+ }
+ return $to_do.$done;
+}
+
+
+sub l2h_ExtractFromHtml
+{
+ local($count) = @_;
+
+ return $l2h_from_html[$count] if ($l2h_from_html[$count]);
+
+ if ($count >= 0 && $count < $l2h_latex_count)
+ {
+ # now we are in trouble
+ local($l_l2h, $_);
+
+ $l2h_extract_error++;
+ print "$ERROR l2h: can't extract content $count from html\n"
+ if ($T2H_VERBOSE);
+ # try simple (ordinary) substition (without l2h)
+ $l_l2h = $T2H_L2H;
+ $T2H_L2H = 0;
+ $_ = $l2h_to_latex{$count};
+ $_ = &substitute_style($_);
+ &unprotect_texi;
+ $_ = "<!-- l2h: ". __LINE__ . " use texi2html -->" . $_
+ if ($T2H_DEBUG & $DEBUG_L2H);
+ $T2H_L2H = $l_l2h;
+ return $_;
+ }
+ else
+ {
+ # now we have been incorrectly called
+ $l2h_range_error++;
+ print "$ERROR l2h: Request of $count content which is out of valide range [0,$l2h_latex_count)\n";
+ return "<!-- l2h: ". __LINE__ . " out of range count $count -->"
+ if ($T2H_DEBUG & $DEBUG_L2H);
+ return "<!-- l2h: out of range count $count -->";
+ }
+}
+
+sub l2h_FinishFromHtml
+{
+ if ($T2H_VERBOSE)
+ {
+ if ($l2h_extract_error + $l2h_range_error)
+ {
+ print "# l2h: finished from html ($l2h_extract_error extract and $l2h_range_error errors)\n";
+ }
+ else
+ {
+ print "# l2h: finished from html (no errors)\n";
+ }
+ }
+}
+
+sub l2h_Finish
+{
+ l2h_StoreCache();
+ if ($T2H_L2H_CLEAN)
+ {
+ print "# l2h: removing temporary files generated by l2h extension\n"
+ if $T2H_VERBOSE;
+ while (<"$docu_rdir$l2h_name"*>)
+ {
+ unlink $_;
+ }
+ }
+ print "# l2h: Finished\n" if $T2H_VERBOSE;
+ return 1;
+}
+
+##############################
+# stuff for l2h caching
+#
+
+# I tried doing this with a dbm data base, but it did not store all
+# keys/values. Hence, I did as latex2html does it
+sub l2h_InitCache
+{
+ if (-r "$l2h_cache_file")
+ {
+ my $rdo = do "$l2h_cache_file";
+ warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n")
+ unless ($rdo);
+ }
+}
+
+sub l2h_StoreCache
+{
+ return unless $l2h_latex_count;
+
+ my ($key, $value);
+ open(FH, ">$l2h_cache_file") || return warn"$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n";
+
+
+ while (($key, $value) = each %l2h_cache)
+ {
+ # escape stuff
+ $key =~ s|/|\\/|g;
+ $key =~ s|\\\\/|\\/|g;
+ # weird, a \ at the end of the key results in an error
+ # maybe this also broke the dbm database stuff
+ $key =~ s|\\$|\\\\|;
+ $value =~ s/\|/\\\|/g;
+ $value =~ s/\\\\\|/\\\|/g;
+ $value =~ s|\\\\|\\\\\\\\|g;
+ print FH "\n\$l2h_cache_key = q/$key/;\n";
+ print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n";
+ }
+ print FH "1;";
+ close(FH);
+}
+
+# return cached html, if it exists for text, and if all pictures
+# are there, as well
+sub l2h_FromCache
+{
+ my $text = shift;
+ my $cached = $l2h_cache{$text};
+ if ($cached)
+ {
+ while ($cached =~ m/SRC="(.*?)"/g)
+ {
+ unless (-e "$docu_rdir$1")
+ {
+ return undef;
+ }
+ }
+ return $cached;
+ }
+ return undef;
+}
+
+# insert generated html into cache, move away images,
+# return transformed html
+$maximage = 1;
+sub l2h_ToCache
+{
+ my $count = shift;
+ my $content = shift;
+ my @images = ($content =~ /SRC="(.*?)"/g);
+ my ($src, $dest);
+
+ for $src (@images)
+ {
+ $dest = $l2h_img{$src};
+ unless ($dest)
+ {
+ my $ext;
+ if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext)
+ {
+ $ext = $1;
+ }
+ else
+ {
+ warn "$ERROR: L2h image $src has invalid extension\n";
+ next;
+ }
+ while (-e "$docu_rdir${docu_name}_$maximage.$ext") { $maximage++;}
+ $dest = "${docu_name}_$maximage.$ext";
+ system("cp -f $docu_rdir$src $docu_rdir$dest");
+ $l2h_img{$src} = $dest;
+ unlink "$docu_rdir$src" unless ($DEBUG & DEBUG_L2H);
+ }
+ $content =~ s/$src/$dest/g;
+ }
+ $l2h_cache{$l2h_to_latex[$count]} = $content;
+ return $content;
+}
+
#+++############################################################################
# #
@@ -458,25 +2941,34 @@ print "# reading from $docu\n" if $verbose;
@lines = (); # whole document
@toc_lines = (); # table of contents
-$toplevel = 0; # top level seen in hierarchy
+@stoc_lines = (); # table of contents
$curlevel = 0; # current level in TOC
$node = ''; # current node name
+$node_next = ''; # current node next name
+$node_prev = ''; # current node prev name
+$node_up = ''; # current node up name
$in_table = 0; # am I inside a table
$table_type = ''; # type of table ('', 'f', 'v', 'multi')
@tables = (); # nested table support
$in_bibliography = 0; # am I inside a bibliography
$in_glossary = 0; # am I inside a glossary
$in_top = 0; # am I inside the top node
+$has_top = 0; # did I see a top node?
+$has_top_command = 0; # did I see @top for automatic pointers?
$in_pre = 0; # am I inside a preformatted section
$in_list = 0; # am I inside a list
$in_html = 0; # am I inside an HTML section
$first_line = 1; # is it the first line
$dont_html = 0; # don't protect HTML on this line
-$split_num = 0; # split index
$deferred_ref = ''; # deferred reference for indexes
@html_stack = (); # HTML elements stack
$html_element = ''; # current HTML element
&html_reset;
+%macros = (); # macros
+
+# init l2h
+$T2H_L2H = &l2h_Init($docu_name) if ($T2H_L2H);
+$T2H_L2H = &l2h_InitToLatex if ($T2H_L2H);
# build code for simple substitutions
# the maps used (%simple_map and %things_map) MUST be aware of this
@@ -499,13 +2991,13 @@ if ($use_acc) {
} else {
$subst_code .= "s/\\\@\\$_";
}
- $subst_code .= "([aeiou])/&\${1}$accent_map{$_};/gi;\n";
+ $subst_code .= "([a-z])/&\${1}$accent_map{$_};/gi;\n";
}
}
eval("sub simple_substitutions { $subst_code }");
&init_input;
-while ($_ = &next_line) {
+INPUT_LINE: while ($_ = &next_line) {
#
# remove \input on the first lines only
#
@@ -513,56 +3005,123 @@ while ($_ = &next_line) {
next if /^\\input/;
$first_line = 0;
}
+ # non-@ substitutions cf. texinfmt.el
#
# parse texinfo tags
#
$tag = '';
$end_tag = '';
- if (/^\@end\s+(\w+)\b/) {
+ if (/^\s*\@end\s+(\w+)\b/) {
$end_tag = $1;
- } elsif (/^\@(\w+)\b/) {
+ } elsif (/^\s*\@(\w+)\b/) {
$tag = $1;
}
#
- # handle @ifhtml / @end ifhtml
+ # handle @html / @end html
#
if ($in_html) {
- if ($end_tag eq 'ifhtml') {
+ if ($end_tag eq 'html') {
$in_html = 0;
} else {
$tag2pro{$in_html} .= $_;
}
next;
- } elsif ($tag eq 'ifhtml') {
+ } elsif ($tag eq 'html') {
$in_html = $PROTECTTAG . ++$html_num;
push(@lines, $in_html);
next;
}
+
+ #
+ # try to remove inlined comments
+ # syntax from tex-mode.el comment-start-skip
+ #
+ s/((^|[^\@])(\@\@)*)\@c(omment | |\{|$).*/$1/;
+
+# Sometimes I use @c right at the end of a line ( to suppress the line feed )
+# s/((^|[^\@])(\@\@)*)\@c(omment)?$/$1/;
+# s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/;
+# s/(.*)\@c{.*?}(.*)/$1$2/;
+# s/(.*)\@comment{.*?}(.*)/$1$2/;
+# s/^(.*)\@c /$1/;
+# s/^(.*)\@comment /$1/;
+
+ #############################################################
+ # value substitution before macro expansion, so that
+ # it works in macro arguments
+ s/\@value{($VARRE)}/$value{$1}/eg;
+
+ #############################################################
+ # macro substitution
+ while (/\@(\w+)/g)
+ {
+ if (exists($macros->{$1}))
+ {
+ my $before = $`;
+ my $name = $1;
+ my $after = $';
+ my @args;
+ my $args;
+ if ($after =~ /^\s*{(.*?[^\\])}(.*)/)
+ {
+ $args = $1;
+ $after = $2;
+ }
+ elsif (@{$macros->{$name}->{Args}} == 1)
+ {
+ $args = $after;
+ $args =~ s/^\s*//;
+ $args =~ s/\s*$//;
+ $after = '';
+ }
+ $args =~ s|\\\\|\\|g;
+ $args =~ s|\\{|{|g;
+ $args =~ s|\\}|}|g;
+ if (@{$macros->{$name}->{Args}} > 1)
+ {
+ $args =~ s/(^|[^\\]),/$1$;/g ;
+ $args =~ s|\\,|,|g;
+ @args = split(/$;\s*/, $args) if (@{$macros->{$name}->{Args}} > 1);
+ }
+ else
+ {
+ $args =~ s|\\,|,|g;
+ @args = ($args);
+ }
+ my $macrobody = $macros->{$name}->{Body};
+ for ($i=0; $i<=$#args; $i++)
+ {
+ $macrobody =~ s|\\$macros->{$name}->{Args}->[$i]\\|$args[$i]|g;
+ }
+ $macrobody =~ s|\\\\|\\|g;
+ $_ = $before . $macrobody . $after;
+ unshift @input_spool, map {$_ = $_."\n"} split(/\n/, $_);
+ next INPUT_LINE;
+ }
+ } #
+
+
#
# try to skip the line
#
if ($end_tag) {
+ $in_titlepage = 0 if $end_tag eq 'titlepage';
next if $to_skip{"end $end_tag"};
} elsif ($tag) {
- next if $to_skip{$tag};
- last if $tag eq 'bye';
+ $in_titlepage = 1 if $tag eq 'titlepage';
+ next if $to_skip{$tag};
+ last if $tag eq 'bye';
}
if ($in_top) {
# parsing the top node
- if ($tag eq 'node' || $tag eq 'include' || $sec2level{$tag}) {
+ if ($tag eq 'node' ||
+ ($sec2level{$tag} && $tag !~ /unnumbered/ && $tag !~ /heading/))
+ {
# no more in top
$in_top = 0;
- } else {
- # skip it
- next;
+ push(@lines, $TOPEND);
}
}
- #
- # try to remove inlined comments
- # syntax from tex-mode.el comment-start-skip
- #
- s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/;
- # non-@ substitutions cf. texinfmt.el
unless ($in_pre) {
s/``/\"/g;
s/''/\"/g;
@@ -574,12 +3133,33 @@ while ($_ = &next_line) {
if ($tag) {
# skip lines
&skip_until($tag), next if $tag eq 'ignore';
- if ($expandinfo) {
- &skip_until($tag), next if $tag eq 'iftex';
- } else {
- &skip_until($tag), next if $tag eq 'ifinfo';
+ &skip_until($tag), next if $tag eq 'ifnothtml';
+ if ($tag eq 'ifinfo')
+ {
+ &skip_until($tag), next unless $T2H_EXPAND eq 'info';
+ }
+ if ($tag eq 'iftex')
+ {
+ &skip_until($tag), next unless $T2H_EXPAND eq 'tex';
+ }
+ if ($tag eq 'tex')
+ {
+ # add to latex2html file
+ if ($T2H_EXPAND eq 'tex' && $T2H_L2H && ! $in_pre)
+ {
+ # add space to the end -- tex(i2dvi) does this, as well
+ push(@lines, &l2h_ToLatex(&string_until($tag) . " "));
+ }
+ else
+ {
+ &skip_until($tag);
+ }
+ next;
+ }
+ if ($tag eq 'titlepage')
+ {
+ next;
}
- &skip_until($tag), next if $tag eq 'tex';
# handle special tables
if ($tag =~ /^(|f|v|multi)table$/) {
$table_type = $1;
@@ -588,35 +3168,37 @@ while ($_ = &next_line) {
# special cases
if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) {
$in_top = 1;
+ $has_top = 1;
+ $has_top_command = 1 if $tag eq 'top';
@lines = (); # ignore all lines before top (title page garbage)
next;
} elsif ($tag eq 'node') {
+ if ($in_top)
+ {
$in_top = 0;
- warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o;
- $_ = &protect_html($_); # if node contains '&' for instance
- s/^\@node\s+//;
- ($node) = split(/,/);
- &normalise_node($node);
- if ($split_node) {
- &next_doc;
- push(@lines, $SPLITTAG) if $split_num++;
- push(@sections, $node);
- }
- next;
+ push(@lines, $TOPEND);
+ }
+ warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o;
+ # request of "Richard Y. Kim" <ryk@ap.com>
+ s/^\@node\s+//;
+ $_ = &protect_html($_); # if node contains '&' for instance
+ ($node, $node_next, $node_prev, $node_up) = split(/,/);
+ &normalise_node($node);
+ &normalise_node($node_next);
+ &normalise_node($node_prev);
+ &normalise_node($node_up);
+ $node =~ /\"/ ?
+ push @lines, &html_debug("<A NAME='$node'></A>\n", __LINE__) :
+ push @lines, &html_debug("<A NAME=\"$node\"></A>\n", __LINE__);
+ next;
} elsif ($tag eq 'include') {
if (/^\@include\s+($FILERE)\s*$/o) {
- $file = $1;
- unless (-e $file) {
- foreach $dir (@include_dirs) {
- $file = "$dir/$1";
- last if -e $file;
- }
- }
- if (-e $file) {
+ $file = LocateIncludeFile($1);
+ if ($file && -e $file) {
&open($file);
- print "# including $file\n" if $verbose;
+ print "# including $file\n" if $T2H_VERBOSE;
} else {
- warn "$ERROR Can't find $file, skipping";
+ warn "$ERROR Can't find $1, skipping";
}
} else {
warn "$ERROR Bad include line: $_";
@@ -639,45 +3221,110 @@ while ($_ = &next_line) {
}
next;
} elsif ($tag eq 'menu') {
- unless ($show_menu) {
+ unless ($T2H_SHOW_MENU) {
&skip_until($tag);
next;
}
&html_push_if($tag);
- push(@lines, &html_debug("\n", __LINE__));
+ push(@lines, &html_debug('', __LINE__));
} elsif ($format_map{$tag}) {
$in_pre = 1 if $format_map{$tag} eq 'PRE';
&html_push_if($format_map{$tag});
- push(@lines, &html_debug("\n", __LINE__));
+ push(@lines, &html_debug('', __LINE__));
$in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ;
- push(@lines, &debug("<$format_map{$tag}>\n", __LINE__));
+# push(@lines, &debug("<BLOCKQUOTE>\n", __LINE__))
+# if $tag =~ /example/i;
+ # sunshine@sunshineco.com: <PRE>bla</PRE> looks better than
+ # <PRE>\nbla</PRE> (at least on NeXTstep browser
+ push(@lines, &debug("<$format_map{$tag}>" .
+ ($in_pre ? '' : "\n"), __LINE__));
next;
+ }
+ elsif (exists $complex_format_map->{$tag})
+ {
+ my $start = eval $complex_format_map->{$tag}->[0];
+ if ($@)
+ {
+ print "$ERROR: eval of complex_format_map->{$tag}->[0] $complex_format_map->{$tag}->[0]: $@";
+ $start = '<pre>'
+ }
+ $in_pre = 1 if $start =~ /<pre/;
+ push(@lines, html_debug($start. ($in_pre ? '' : "\n"), __LINE__));
+ next;
} elsif ($tag eq 'table') {
- if (/^\@(|f|v|multi)table\s+\@(\w+)/) {
+ # anorland@hem2.passagen.se
+ # if (/^\s*\@(|f|v|multi)table\s+\@(\w+)/) {
+ if (/^\s*\@(|f|v|multi)table\s+\@(\w+)|(\{[^\}]*\})/) {
$in_table = $2;
unshift(@tables, join($;, $table_type, $in_table));
if ($table_type eq "multi") {
- push(@lines, &debug("<TABLE BORDER>\n", __LINE__));
+ # don't use borders -- gets confused by empty cells
+ push(@lines, &debug("<TABLE>\n", __LINE__));
&html_push_if('TABLE');
} else {
push(@lines, &debug("<DL COMPACT>\n", __LINE__));
&html_push_if('DL');
}
- push(@lines, &html_debug("\n", __LINE__));
+ push(@lines, &html_debug('', __LINE__));
} else {
warn "$ERROR Bad table line: $_";
}
next;
- } elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') {
- if (/^\@$tag\s+(\w)\w\s+(\w)\w\s*$/) {
- eval("*${1}index = *${2}index");
- } else {
- warn "$ERROR Bad syn*index line: $_";
+ }
+ elsif ($tag eq 'synindex' || $tag eq 'syncodeindex')
+ {
+ if (/^\@$tag\s+(\w+)\s+(\w+)\s*$/)
+ {
+ my $from = $1;
+ my $to = $2;
+ my $prefix_from = IndexName2Prefix($from);
+ my $prefix_to = IndexName2Prefix($to);
+
+ warn("$ERROR unknown from index name $from ind syn*index line: $_"), next
+ unless $prefix_from;
+ warn("$ERROR unknown to index name $to ind syn*index line: $_"), next
+ unless $prefix_to;
+
+ if ($tag eq 'syncodeindex')
+ {
+ $index_properties->{$prefix_to}->{'from_code'}->{$prefix_from} = 1;
}
- next;
- } elsif ($tag eq 'sp') {
+ else
+ {
+ $index_properties->{$prefix_to}->{'from'}->{$prefix_from} = 1;
+ }
+ }
+ else
+ {
+ warn "$ERROR Bad syn*index line: $_";
+ }
+ next;
+ }
+ elsif ($tag eq 'defindex' || $tag eq 'defcodeindex')
+ {
+ if (/^\@$tag\s+(\w+)\s*$/)
+ {
+ my $name = $1;
+ $index_properties->{$name}->{name} = $name;
+ $index_properties->{$name}->{code} = 1 if $tag eq 'defcodeindex';
+ }
+ else
+ {
+ warn "$ERROR Bad defindex line: $_";
+ }
+ next;
+ }
+ elsif (/^\@printindex/)
+ {
+ push (@lines, "<!--::${section}::-->$_");
+ next;
+ }
+ elsif ($tag eq 'sp') {
push(@lines, &debug("<P>\n", __LINE__));
next;
+ } elsif ($tag eq 'center') {
+ push(@lines, &debug("<center>\n", __LINE__));
+ s/\@center//;
} elsif ($tag eq 'setref') {
&protect_html; # if setref contains '&' for instance
if (/^\@$tag\s*{($NODERE)}\s*$/) {
@@ -685,19 +3332,60 @@ while ($_ = &next_line) {
$setref =~ s/\s+/ /g; # normalize
$setref =~ s/ $//;
$node2sec{$setref} = $name;
+ $sec2node{$name} = $setref;
$node2href{$setref} = "$docu_doc#$docid";
} else {
warn "$ERROR Bad setref line: $_";
}
next;
- } elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') {
- if (/^\@$tag\s+(\w\w)\s*$/) {
- $valid_index{$1} = 1;
- } else {
- warn "$ERROR Bad defindex line: $_";
+ } elsif ($tag eq 'lowersections') {
+ local ($sec, $level);
+ while (($sec, $level) = each %sec2level) {
+ $sec2level{$sec} = $level + 1;
+ }
+ next;
+ } elsif ($tag eq 'raisesections') {
+ local ($sec, $level);
+ while (($sec, $level) = each %sec2level) {
+ $sec2level{$sec} = $level - 1;
}
next;
- } elsif (defined($def_map{$tag})) {
+ }
+ elsif ($tag eq 'macro' || $tag eq 'rmacro')
+ {
+ if (/^\@$tag\s*(\w+)\s*(.*)/)
+ {
+ my $name = $1;
+ my @args;
+ @args = split(/\s*,\s*/ , $1)
+ if ($2 =~ /^\s*{(.*)}\s*/);
+
+ $macros->{$name}->{Args} = \@args;
+ $macros->{$name}->{Body} = '';
+ while (($_ = &next_line) && $_ !~ /\@end $tag/)
+ {
+ $macros->{$name}->{Body} .= $_;
+ }
+ die "ERROR: No closing '\@end $tag' found for macro definition of '$name'\n"
+ unless (/\@end $tag/);
+ chomp $macros->{$name}->{Body};
+ }
+ else
+ {
+ warn "$ERROR: Bad macro defintion $_"
+ }
+ next;
+ }
+ elsif ($tag eq 'unmacro')
+ {
+ delete $macros->{$1} if (/^\@unmacro\s*(\w+)/);
+ next;
+ }
+ elsif ($tag eq 'documentlanguage')
+ {
+ SetDocumentLanguage($1) if (!$T2H_LANG && /documentlanguage\s*(\w+)/);
+ }
+ elsif (defined($def_map{$tag})) {
if ($def_map{$tag}) {
s/^\@$tag\s+//;
$tag = $def_map{$tag};
@@ -707,7 +3395,7 @@ while ($_ = &next_line) {
} elsif (defined($user_sub{$tag})) {
s/^\@$tag\s+//;
$sub = $user_sub{$tag};
- print "# user $tag = $sub, arg: $_" if $debug & $DEBUG_USER;
+ print "# user $tag = $sub, arg: $_" if $T2H_DEBUG & $DEBUG_USER;
if (defined(&$sub)) {
chop($_);
&$sub($_);
@@ -715,7 +3403,7 @@ while ($_ = &next_line) {
warn "$ERROR Bad user sub for $tag: $sub\n";
}
next;
- }
+ }
if (defined($def_map{$tag})) {
s/^\@$tag\s+//;
if ($tag =~ /x$/) {
@@ -742,9 +3430,9 @@ while ($_ = &next_line) {
$type = shift(@args);
$type =~ s/^\{(.*)\}$/$1/;
print "# def ($tag): {$type} ", join(', ', @args), "\n"
- if $debug & $DEBUG_DEF;
+ if $T2H_DEBUG & $DEBUG_DEF;
$type .= ':'; # it's nicer like this
- $name = shift(@args);
+ my $name = shift(@args);
$name =~ s/^\{(.*)\}$/$1/;
if ($is_extra) {
$_ = &debug("<DT>", __LINE__);
@@ -769,13 +3457,17 @@ while ($_ = &next_line) {
$_ .= &debug("\n<DD>", __LINE__);
$name = &unprotect_html($name);
if ($tag eq 'deffn' || $tag eq 'deftypefn') {
- unshift(@input_spool, "\@findex $name\n");
+ EnterIndexEntry('f', $name, $docu_doc, $section, \@lines);
+# unshift(@input_spool, "\@findex $name\n");
} elsif ($tag eq 'defop') {
- unshift(@input_spool, "\@findex $name on $ftype\n");
+ EnterIndexEntry('f', "$name on $ftype", $docu_doc, $section, \@lines);
+# unshift(@input_spool, "\@findex $name on $ftype\n");
} elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') {
- unshift(@input_spool, "\@vindex $name\n");
+ EnterIndexEntry('v', $name, $docu_doc, $section, \@lines);
+# unshift(@input_spool, "\@vindex $name\n");
} else {
- unshift(@input_spool, "\@tindex $name\n");
+ EnterIndexEntry('t', $name, $docu_doc, $section, \@lines);
+# unshift(@input_spool, "\@tindex $name\n");
}
$dont_html = 1;
}
@@ -783,15 +3475,28 @@ while ($_ = &next_line) {
if ($format_map{$end_tag}) {
$in_pre = 0 if $format_map{$end_tag} eq 'PRE';
$in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ;
- &html_pop_if('LI', 'P');
+ &html_pop_if('P');
+ &html_pop_if('LI');
&html_pop_if();
push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__));
- push(@lines, &html_debug("\n", __LINE__));
+ push(@lines, &html_debug('', __LINE__));
+ }
+ elsif (exists $complex_format_map->{$end_tag})
+ {
+ my $end = eval $complex_format_map->{$end_tag}->[1];
+ if ($@)
+ {
+ print "$ERROR: eval of complex_format_map->{$end_tag}->[1] $complex_format_map->{$end_tag}->[0]: $@";
+ $end = '</pre>'
+ }
+ $in_pre = 0 if $end =~ m|</pre>|;
+ push(@lines, html_debug($end, __LINE__));
} elsif ($end_tag =~ /^(|f|v|multi)table$/) {
unless (@tables) {
warn "$ERROR \@end $end_tag without \@*table\n";
next;
}
+ &html_pop_if('P');
($table_type, $in_table) = split($;, shift(@tables));
unless ($1 eq $table_type) {
warn "$ERROR \@end $end_tag without matching \@$end_tag\n";
@@ -815,103 +3520,154 @@ while ($_ = &next_line) {
} elsif ($end_tag eq 'menu') {
&html_pop_if();
push(@lines, $_); # must keep it for pass 2
- }
+ }
next;
}
- #
- # misc things
+ #############################################################
+ # anchor insertion
+ while (/\@anchor\s*\{(.*?)\}/)
+ {
+ $_ = $`.$';
+ my $anchor = $1;
+ $anchor = &normalise_node($anchor);
+ push @lines, &html_debug("<A NAME=\"$anchor\"></A>\n");
+ $node2href{$anchor} = "$docu_doc#$anchor";
+ next INPUT_LINE if $_ =~ /^\s*$/;
+ }
+
+ #############################################################
+ # index entry generation, after value substitutions
+ if (/^\@(\w+?)index\s+/)
+ {
+ EnterIndexEntry($1, $', $docu_doc, $section, \@lines);
+ next;
+ }
#
# protect texi and HTML things
&protect_texi;
$_ = &protect_html($_) unless $dont_html;
$dont_html = 0;
# substitution (unsupported things)
- s/^\@center\s+//g;
s/^\@exdent\s+//g;
s/\@noindent\s+//g;
s/\@refill\s+//g;
# other substitutions
&simple_substitutions;
- s/\@value{($VARRE)}/$value{$1}/eg;
s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4
#
# analyze the tag again
#
if ($tag) {
- if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) {
+ if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) {
if (/^\@$tag\s+(.+)$/) {
$name = $1;
- $name =~ s/\s+$//;
+ $name = &normalise_node($name);
$level = $sec2level{$tag};
- $name = &update_sec_num($tag, $level) . " $name"
- if $number_sections && $tag !~ /^unnumbered/;
- if ($tag =~ /heading$/) {
- push(@lines, &html_debug("\n", __LINE__));
- if ($html_element ne 'body') {
- # We are in a nice pickle here. We are trying to get a H? heading
- # even though we are not in the body level. So, we convert it to a
- # nice, bold, line by itself.
- $_ = &debug("\n\n<P><STRONG>$name</STRONG></P>\n\n", __LINE__);
- } else {
- $_ = &debug("<H$level>$name</H$level>\n", __LINE__);
- &html_push_if('body');
+ # check for index
+ $first_index_chapter = $name
+ if ($level == 1 && !$first_index_chapter &&
+ $name =~ /index/i);
+ if ($in_top && /heading/){
+ $T2H_HAS_TOP_HEADING = 1;
+ $_ = &debug("<H$level>$name</H$level>\n", __LINE__);
+ &html_push_if('body');
+ print "# top heading, section $name, level $level\n"
+ if $T2H_DEBUG & $DEBUG_TOC;
+ }
+ else
+ {
+ unless (/^\@\w*heading/)
+ {
+ unless (/^\@unnumbered/)
+ {
+ my $number = &update_sec_num($tag, $level);
+ $name = $number. ' ' . $name if $T2H_NUMBER_SECTIONS;
+ $sec2number{$name} = $number;
+ $number2sec{$number} = $name;
}
- print "# heading, section $name, level $level\n"
- if $debug & $DEBUG_TOC;
- } else {
- if ($split_chapter) {
- unless ($toplevel) {
- # first time we see a "section"
- unless ($level == 1) {
- warn "$ERROR The first section found is not of level 1: $_";
- warn "$ERROR I'll split on sections of level $level...\n";
- }
- $toplevel = $level;
- }
- if ($level == $toplevel) {
- &next_doc;
- push(@lines, $SPLITTAG) if $split_num++;
- push(@sections, $name);
- }
+ if (defined($toplevel))
+ {
+ push @lines, ($level==$toplevel ? $CHAPTEREND : $SECTIONEND);
}
- $sec_num++;
- $docid = "SEC$sec_num";
- $tocid = "TOC$sec_num";
- # check biblio and glossary
- $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i);
- $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i);
- # check node
- if ($node) {
- if ($node2sec{$node}) {
- warn "$ERROR Duplicate node found: $node\n";
- } else {
- $node2sec{$node} = $name;
- $node2href{$node} = "$docu_doc#$docid";
- print "# node $node, section $name, level $level\n"
- if $debug & $DEBUG_TOC;
- }
- $node = '';
- } else {
- print "# no node, section $name, level $level\n"
- if $debug & $DEBUG_TOC;
+ else
+ {
+ # first time we see a "section"
+ unless ($level == 1)
+ {
+ warn "$WARN The first section found is not of level 1: $_";
+ }
+ $toplevel = $level;
}
+ push(@sections, $name);
+ next_doc() if ($T2H_SPLIT eq 'section' ||
+ $T2H_SPLIT && $level == $toplevel);
+ }
+ $sec_num++;
+ $docid = "SEC$sec_num";
+ $tocid = (/^\@\w*heading/ ? undef : "TOC$sec_num");
+ # check biblio and glossary
+ $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i);
+ $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i);
+ # check node
+ if ($node)
+ {
+ warn "$ERROR Duplicate node found: $node\n"
+ if ($node2sec{$node});
+ }
+ else
+ {
+ $name .= ' ' while ($node2sec{$name});
+ $node = $name;
+ }
+ $name .= ' ' while ($sec2node{$name});
+ $section = $name;
+ $node2sec{$node} = $name;
+ $sec2node{$name} = $node;
+ $node2href{$node} = "$docu_doc#$docid";
+ $node2next{$node} = $node_next;
+ $node2prev{$node} = $node_prev;
+ $node2up{$node} = $node_up;
+ print "# node $node, section $name, level $level\n"
+ if $T2H_DEBUG & $DEBUG_TOC;
+
+ $node = '';
+ $node_next = '';
+ $node_prev = '';
+ $node_next = '';
+ if ($tocid)
+ {
# update TOC
while ($level > $curlevel) {
- $curlevel++;
- push(@toc_lines, "<UL>\n");
+ $curlevel++;
+ push(@toc_lines, "<UL>\n");
}
while ($level < $curlevel) {
- $curlevel--;
- push(@toc_lines, "</UL>\n");
+ $curlevel--;
+ push(@toc_lines, "</UL>\n");
+ }
+ $_ = &t2h_anchor($tocid, "$docu_doc#$docid", $name, 1);
+ $_ = &substitute_style($_);
+ push(@stoc_lines, "$_<BR>\n") if ($level == 1);
+ if ($T2H_NUMBER_SECTIONS)
+ {
+ push(@toc_lines, $_ . "<BR>\n")
+ }
+ else
+ {
+ push(@toc_lines, "<LI>" . $_ ."</LI>");
}
- $_ = "<LI>" . &anchor($tocid, "$docu_doc#$docid", $name, 1);
- push(@toc_lines, &substitute_style($_));
- # update DOC
- push(@lines, &html_debug("\n", __LINE__));
- &html_reset;
- $_ = "<H$level>".&anchor($docid, "$docu_toc#$tocid", $name)."</H$level>\n";
- $_ = &debug($_, __LINE__);
- push(@lines, &html_debug("\n", __LINE__));
+ }
+ else
+ {
+ push(@lines, &html_debug("<A NAME=\"$docid\"></A>\n",
+ __LINE__));
+ }
+ # update DOC
+ push(@lines, &html_debug('', __LINE__));
+ &html_reset;
+ $_ = "<H$level> $name </H$level>\n<!--docid::${docid}::-->\n";
+ $_ = &debug($_, __LINE__);
+ push(@lines, &html_debug('', __LINE__));
}
# update DOC
foreach $line (split(/\n+/, $_)) {
@@ -923,59 +3679,18 @@ while ($_ = &next_line) {
}
} else {
# track variables
- $value{$1} = $2, next if /^\@set\s+($VARRE)\s+(.*)$/o;
+ $value{$1} = Unprotect_texi($2), next if /^\@set\s+($VARRE)\s+(.*)$/o;
delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o;
# store things
- $value{'_setfilename'} = $1, next if /^\@setfilename\s+(.*)$/;
- $value{'_settitle'} = $1, next if /^\@settitle\s+(.*)$/;
- $value{'_author'} .= "$1\n", next if /^\@author\s+(.*)$/;
- $value{'_subtitle'} .= "$1\n", next if /^\@subtitle\s+(.*)$/;
- $value{'_title'} .= "$1\n", next if /^\@title\s+(.*)$/;
- # index
- if (/^\@(..?)index\s+/) {
- unless ($valid_index{$1}) {
- warn "$ERROR Undefined index command: $_";
- next;
- }
- $id = 'IDX' . ++$idx_num;
- $index = $1 . 'index';
- $what = &substitute_style($');
- $what =~ s/\s+$//;
- print "# found $index for '$what' id $id\n"
- if $debug & $DEBUG_INDEX;
- eval(<<EOC);
- if (defined(\$$index\{\$what\})) {
- \$$index\{\$what\} .= "$;$docu_doc#$id";
- } else {
- \$$index\{\$what\} = "$docu_doc#$id";
- }
-EOC
- #
- # dirty hack to see if I can put an invisible anchor...
- #
- if ($html_element eq 'P' ||
- $html_element eq 'LI' ||
- $html_element eq 'DT' ||
- $html_element eq 'DD' ||
- $html_element eq 'ADDRESS' ||
- $html_element eq 'B' ||
- $html_element eq 'BLOCKQUOTE' ||
- $html_element eq 'PRE' ||
- $html_element eq 'SAMP') {
- push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
- } elsif ($html_element eq 'body') {
- push(@lines, &debug("<P>\n", __LINE__));
- push(@lines, &anchor($id, '', $invisible_mark, !$in_pre));
- &html_push('P');
- } elsif ($html_element eq 'DL' ||
- $html_element eq 'UL' ||
- $html_element eq 'OL' ) {
- $deferred_ref .= &anchor($id, '', $invisible_mark, !$in_pre) . " ";
- }
- next;
- }
+ $value{'_shorttitle'} = Unprotect_texi($1), next if /^\@shorttitle\s+(.*)$/;
+ $value{'_setfilename'} = Unprotect_texi($1), next if /^\@setfilename\s+(.*)$/;
+ $value{'_settitle'} = Unprotect_texi($1), next if /^\@settitle\s+(.*)$/;
+ $value{'_author'} .= Unprotect_texi($1)."\n", next if /^\@author\s+(.*)$/;
+ $value{'_subtitle'} .= Unprotect_texi($1)."\n", next if /^\@subtitle\s+(.*)$/;
+ $value{'_title'} .= Unprotect_texi($1)."\n", next if /^\@title\s+(.*)$/;
+
# list item
- if (/^\@itemx?\s+/) {
+ if (/^\s*\@itemx?\s+/) {
$what = $';
$what =~ s/\s+$//;
if ($in_bibliography && $use_bibliography) {
@@ -983,17 +3698,21 @@ EOC
$id = 'BIB' . ++$bib_num;
$bib2href{$what} = "$docu_doc#$id";
print "# found bibliography for '$what' id $id\n"
- if $debug & $DEBUG_BIB;
- $what = &anchor($id, '', $what);
+ if $T2H_DEBUG & $DEBUG_BIB;
+ $what = &t2h_anchor($id, '', $what);
}
- } elsif ($in_glossary && $use_glossary) {
+ } elsif ($in_glossary && $T2H_USE_GLOSSARY) {
$id = 'GLOSS' . ++$gloss_num;
$entry = $what;
$entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
$gloss2href{$entry} = "$docu_doc#$id";
print "# found glossary for '$entry' id $id\n"
- if $debug & $DEBUG_GLOSS;
- $what = &anchor($id, '', $what);
+ if $T2H_DEBUG & $DEBUG_GLOSS;
+ $what = &t2h_anchor($id, '', $what);
+ }
+ elsif ($in_table && ($table_type eq 'f' || $table_type eq 'v'))
+ {
+ EnterIndexEntry($table_type, $what, $docu_doc, $section, \@lines);
}
&html_pop_if('P');
if ($html_element eq 'DL' || $html_element eq 'DD') {
@@ -1018,7 +3737,7 @@ EOC
push(@lines, &debug("<LI>$what\n", __LINE__));
&html_push('LI') unless $html_element eq 'LI';
}
- push(@lines, &html_debug("\n", __LINE__));
+ push(@lines, &html_debug('', __LINE__));
if ($deferred_ref) {
push(@lines, &debug("$deferred_ref\n", __LINE__));
$deferred_ref = '';
@@ -1031,20 +3750,25 @@ EOC
}
}
# paragraph separator
- if ($_ eq "\n") {
+ if ($_ eq "\n" && ! $in_pre) {
next if $#lines >= 0 && $lines[$#lines] eq "\n";
if ($html_element eq 'P') {
- push(@lines, "\n");
- $_ = &debug("</P>\n", __LINE__);
- &html_pop;
+ push (@lines, &debug("</P><P>\n", __LINE__));
}
- } elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE') {
- push(@lines, "<P>\n");
- &html_push('P');
- $_ = &debug($_, __LINE__);
- }
+# else
+# {
+# push(@lines, "<P></P>\n");
+# $_ = &debug("<P></P>\n", __LINE__);
+# }
+ elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE' || $html_element eq 'DD' || $html_element eq 'LI')
+ {
+ &html_push('P');
+ push(@lines, &debug("<P>\n", __LINE__));
+ }
+ }
# otherwise
- push(@lines, $_);
+ push(@lines, $_) unless $in_titlepage;
+ push(@lines, &debug("</center>\n", __LINE__)) if ($tag eq 'center');
}
# finish TOC
@@ -1054,7 +3778,327 @@ while ($level < $curlevel) {
push(@toc_lines, "</UL>\n");
}
-print "# end of pass 1\n" if $verbose;
+print "# end of pass 1\n" if $T2H_VERBOSE;
+
+SetDocumentLanguage('en') unless ($T2H_LANG);
+#+++############################################################################
+# #
+# Stuff related to Index generation #
+# #
+#---############################################################################
+
+sub EnterIndexEntry
+{
+ my $prefix = shift;
+ my $key = shift;
+ my $docu_doc = shift;
+ my $section = shift;
+ my $lines = shift;
+ local $_;
+
+ warn "$ERROR Undefined index command: $_", next
+ unless (exists ($index_properties->{$prefix}));
+ $key =~ s/\s+$//;
+ $_ = $key;
+ &protect_texi;
+ $key = $_;
+ $_ = &protect_html($_);
+ my $html_key = substitute_style($_);
+ my $id;
+ $key = remove_style($key);
+ $key = remove_things($key);
+ $_ = $key;
+ &unprotect_texi;
+ $key = $_;
+ while (exists $index->{$prefix}->{$key}) {$key .= ' '};
+ if ($lines->[$#lines] =~ /^<!--docid::(.+)::-->$/)
+ {
+ $id = $1;
+ }
+ else
+ {
+ $id = 'IDX' . ++$idx_num;
+ push(@$lines, &t2h_anchor($id, '', $T2H_INVISIBLE_MARK, !$in_pre));
+ }
+ $index->{$prefix}->{$key}->{html_key} = $html_key;
+ $index->{$prefix}->{$key}->{section} = $section;
+ $index->{$prefix}->{$key}->{href} = "$docu_doc#$id";
+ print "# found ${prefix}index for '$key' with id $id\n"
+ if $T2H_DEBUG & $DEBUG_INDEX;
+}
+
+sub IndexName2Prefix
+{
+ my $name = shift;
+ my $prefix;
+
+ for $prefix (keys %$index_properties)
+ {
+ return $prefix if ($index_properties->{$prefix}->{name} eq $name);
+ }
+ return undef;
+}
+
+sub GetIndexEntries
+{
+ my $normal = shift;
+ my $code = shift;
+ my ($entries, $prefix, $key) = ({});
+
+ for $prefix (keys %$normal)
+ {
+ for $key (keys %{$index->{$prefix}})
+ {
+ $entries->{$key} = {%{$index->{$prefix}->{$key}}};
+ }
+ }
+
+ if (defined($code))
+ {
+ for $prefix (keys %$code)
+ {
+ unless (exists $normal->{$keys})
+ {
+ for $key (keys %{$index->{$prefix}})
+ {
+ $entries->{$key} = {%{$index->{$prefix}->{$key}}};
+ $entries->{$key}->{html_key} = "<CODE>$entries->{$key}->{html_key}</CODE>";
+ }
+ }
+ }
+ }
+ return $entries;
+}
+
+sub byAlpha
+{
+ if ($a =~ /^[A-Za-z]/)
+ {
+ if ($b =~ /^[A-Za-z]/)
+ {
+ return lc($a) cmp lc($b);
+ }
+ else
+ {
+ return 1;
+ }
+ }
+ elsif ($b =~ /^[A-Za-z]/)
+ {
+ return -1;
+ }
+ else
+ {
+ return lc($a) cmp lc($b);
+ }
+}
+
+sub GetIndexPages
+{
+ my $entries = shift;
+ my (@Letters, $key);
+ my ($EntriesByLetter, $Pages, $page) = ({}, [], {});
+ my @keys = sort byAlpha keys %$entries;
+
+ for $key (@keys)
+ {
+ push @{$EntriesByLetter->{uc(substr($key,0, 1))}} , $entries->{$key};
+ }
+ @Letters = sort byAlpha keys %$EntriesByLetter;
+
+ $T2H_SPLIT_INDEX = 0 unless ($T2H_SPLIT);
+
+ unless ($T2H_SPLIT_INDEX)
+ {
+ $page->{First} = $Letters[0];
+ $page->{Last} = $Letters[$#Letters];
+ $page->{Letters} = \@Letters;
+ $page->{EntriesByLetter} = $EntriesByLetter;
+ push @$Pages, $page;
+ return $Pages;
+ }
+
+ if ($T2H_SPLIT_INDEX =~ /^\d+$/)
+ {
+ my $i = 0;
+ my ($prev_letter, $letter);
+ $page->{First} = $Letters[0];
+ for $letter (@Letters)
+ {
+ if ($i > $T2H_SPLIT_INDEX)
+ {
+ $page->{Last} = $prev_letter;
+ push @$Pages, {%$page};
+ $page->{Letters} = [];
+ $page->{EntriesByLetter} = {};
+ $page->{First} = $letter;
+ $i=0;
+ }
+ push @{$page->{Letters}}, $letter;
+ $page->{EntriesByLetter}->{$letter} = [@{$EntriesByLetter->{$letter}}];
+ $i += scalar(@{$EntriesByLetter->{$letter}});
+ $prev_letter = $letter;
+ }
+ $page->{Last} = $Letters[$#Letters];
+ push @$Pages, {%$page};
+ }
+ return $Pages;
+}
+
+sub GetIndexSummary
+{
+ my $first_page = shift;
+ my $Pages = shift;
+ my $name = shift;
+ my ($page, $letter, $summary, $i, $l1, $l2, $l);
+
+ $i = 0;
+ $summary = '<table><tr><th valign=top>Jump to: &nbsp; </th><td>';
+
+ for $page ($first_page, @$Pages)
+ {
+ for $letter (@{$page->{Letters}})
+ {
+ $l = t2h_anchor('', "$page->{href}#${name}_$letter", "<b>$letter</b>",
+ 0, 'style="text-decoration:none"') . "\n &nbsp; \n";
+
+ if ($letter =~ /^[A-Za-z]/)
+ {
+ $l2 .= $l;
+ }
+ else
+ {
+ $l1 .= $l;
+ }
+ }
+ }
+ $summary .= $l1 . "<BR>\n" if ($l1);
+ $summary .= $l2 . '</td></tr></table><br>';
+ return $summary;
+}
+
+sub PrintIndexPage
+{
+ my $lines = shift;
+ my $summary = shift;
+ my $page = shift;
+ my $name = shift;
+
+ push @$lines, $summary;
+
+ push @$lines , <<EOT;
+<P></P>
+<TABLE border=0>
+<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
+<TR><TD COLSPAN=3> <HR></TD></TR>
+EOT
+
+ for $letter (@{$page->{Letters}})
+ {
+ push @$lines, "<TR><TH><A NAME=\"${name}_$letter\"></A>$letter</TH><TD></TD><TD></TD></TR>\n";
+ for $entry (@{$page->{EntriesByLetter}->{$letter}})
+ {
+ push @$lines,
+ "<TR><TD></TD><TD valign=top>" .
+ t2h_anchor('', $entry->{href}, $entry->{html_key}) .
+ "</TD><TD valign=top>" .
+ t2h_anchor('', sec_href($entry->{section}), clean_name($entry->{section})) .
+ "</TD></TR>\n";
+ }
+ push @$lines, "<TR><TD COLSPAN=3> <HR></TD></TR>\n";
+ }
+ push @$lines, "</TABLE><P></P>";
+ push @$lines, $summary;
+}
+
+sub PrintIndex
+{
+ my $lines = shift;
+ my $name = shift;
+ my $section = shift;
+ $section = 'Top' unless $section;
+ my $prefix = IndexName2Prefix($name);
+
+ warn ("$ERROR printindex: bad index name: $name"), return
+ unless $prefix;
+
+ if ($index_properties->{$prefix}->{code})
+ {
+ $index_properties->{$prefix}->{from_code}->{$prefix} = 1;
+ }
+ else
+ {
+ $index_properties->{$prefix}->{from}->{$prefix}= 1;
+ }
+
+ my $Entries = GetIndexEntries($index_properties->{$prefix}->{from},
+ $index_properties->{$prefix}->{from_code});
+ return unless %$Entries;
+
+ if ($T2H_IDX_SUMMARY)
+ {
+ my $key;
+ open(FHIDX, ">$docu_rdir$docu_name" . "_$name.idx")
+ || die "Can't open > $docu_rdir$docu_name" . "_$name.idx for writing: $!\n";
+ print "# writing $name index summary in $docu_rdir$docu_name" . "_$name.idx...\n" if $T2H_VERBOSE;
+
+ for $key (sort keys %$Entries)
+ {
+ print FHIDX "$key\t$Entries->{$key}->{href}\n";
+ }
+ }
+
+ my $Pages = GetIndexPages($Entries);
+ my $page;
+ my $first_page = shift @$Pages;
+ my $sec_name = $section;
+ # remove section number
+ $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./;
+
+ ($first_page->{href} = sec_href($section)) =~ s/\#.*$//;
+ # Update tree structure of document
+ if (@$Pages)
+ {
+ my $sec;
+ my @after;
+
+ while (@sections && $sections[$#sections] ne $section)
+ {
+ unshift @after, pop @sections;
+ }
+
+ for $page (@$Pages)
+ {
+ my $node = ($page->{First} ne $page->{Last} ?
+ "$sec_name: $page->{First} -- $page->{Last}" :
+ "$sec_name: $page->{First}");
+ push @sections, $node;
+ $node2sec{$node} = $node;
+ $sec2node{$node} = $node;
+ $node2up{$node} = $section;
+ $page->{href} = next_doc();
+ $page->{name} = $node;
+ $node2href{$node} = $page->{href};
+ if ($prev_node)
+ {
+ $node2next{$prev_node} = $node;
+ $node2prev{$node} = $prev_node;
+ }
+ $prev_node = $node;
+ }
+ push @sections, @after;
+ }
+
+ my $summary = GetIndexSummary($first_page, $Pages, $name);
+ PrintIndexPage($lines, $summary, $first_page, $name);
+ for $page (@$Pages)
+ {
+ push @$lines, ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND);
+ push @$lines, "<H2 ALIGN=\"Left\">$page->{name}</H2>\n";
+ PrintIndexPage($lines, $summary, $page, $name);
+ }
+}
+
#+++############################################################################
# #
@@ -1078,86 +4122,86 @@ while (@lines) {
#
# menu
#
- $in_menu = 1, push(@lines2, &debug("<UL>\n", __LINE__)), next if /^\@menu\b/;
- $in_menu = 0, push(@lines2, &debug("</UL>\n", __LINE__)), next if /^\@end\s+menu\b/;
- if ($in_menu) {
- if (/^\*\s+($NODERE)::/o) {
- $descr = $';
- chop($descr);
- &menu_entry($1, $1, $descr);
- } elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) {
- $descr = $';
- chop($descr);
- &menu_entry($1, $2, $descr);
- } elsif (/^\*/) {
- warn "$ERROR Bad menu line: $_";
- } else { # description continued?
- push(@lines2, $_);
- }
- next;
+ if (/^\@menu\b/)
+ {
+ $in_menu = 1;
+ $in_menu_listing = 1;
+ push(@lines2, &debug("<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> \n", __LINE__));
+ next;
}
- #
- # printindex
- #
- if (/^\@printindex\s+(\w\w)\b/) {
- local($index, *ary, @keys, $key, $letter, $last_letter, @refs);
- if ($predefined_index{$1}) {
- $index = $predefined_index{$1} . 'index';
- } else {
- $index = $1 . 'index';
- }
- eval("*ary = *$index");
- @keys = keys(%ary);
- foreach $key (@keys) {
- $_ = $key;
- 1 while s/<(\w+)>\`(.*)\'<\/\1>/$2/; # remove HTML tags with quotes
- 1 while s/<(\w+)>(.*)<\/\1>/$2/; # remove HTML tags
- $_ = &unprotect_html($_);
- &unprotect_texi;
- tr/A-Z/a-z/; # lowercase
- $key2alpha{$key} = $_;
- print "# index $key sorted as $_\n"
- if $key ne $_ && $debug & $DEBUG_INDEX;
+ if (/^\@end\s+menu\b/)
+ {
+ if ($in_menu_listing)
+ {
+ push(@lines2, &debug("</TABLE></BLOCKQUOTE>\n", __LINE__));
+ }
+ else
+ {
+ push(@lines2, &debug("</BLOCKQUOTE>\n", __LINE__));
+ }
+ $in_menu = 0;
+ $in_menu_listing = 0;
+ next;
+ }
+ if ($in_menu)
+ {
+ my ($node, $name, $descr);
+ if (/^\*\s+($NODERE)::/o)
+ {
+ $node = $1;
+ $descr = $';
+ }
+ elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/)
+ {
+ $name = $1;
+ $node = $2;
+ $descr = $';
+ }
+ elsif (/^\*/)
+ {
+ warn "$ERROR Bad menu line: $_";
+ }
+ else
+ {
+ if ($in_menu_listing)
+ {
+ $in_menu_listing = 0;
+ push(@lines2, &debug("</TABLE>\n", __LINE__));
}
- push(@lines2, "Jump to:\n");
- $last_letter = undef;
- foreach $key (sort byalpha @keys) {
- $letter = substr($key2alpha{$key}, 0, 1);
- $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;;
- if (!defined($last_letter) || $letter ne $last_letter) {
- push(@lines2, "-\n") if defined($last_letter);
- push(@lines2, "<A HREF=\"#$index\_$letter\">" . &protect_html($letter) . "</A>\n");
- $last_letter = $letter;
- }
+ # should be like verbatim -- preseve spaces, etc
+ s/ /\&nbsp;/g;
+ $_ .= "<br>\n";
+ push(@lines2, $_);
+ }
+ if ($node)
+ {
+ if (! $in_menu_listing)
+ {
+ $in_menu_listing = 1;
+ push(@lines2, &debug("<TABLE BORDER=0 CELLSPACING=0>\n", __LINE__));
}
- push(@lines2, "<P>\n");
- $last_letter = undef;
- foreach $key (sort byalpha @keys) {
- $letter = substr($key2alpha{$key}, 0, 1);
- $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;;
- if (!defined($last_letter) || $letter ne $last_letter) {
- push(@lines2, "</DIR>\n") if defined($last_letter);
- push(@lines2, "<H2><A NAME=\"$index\_$letter\">" . &protect_html($letter) . "</A></H2>\n");
- push(@lines2, "<DIR>\n");
- $last_letter = $letter;
- }
- @refs = ();
- foreach (split(/$;/, $ary{$key})) {
- push(@refs, &anchor('', $_, $key, 0));
- }
- push(@lines2, "<LI>" . join(", ", @refs) . "\n");
+ # look for continuation
+ while ($lines[0] =~ /^\s+\w+/)
+ {
+ $descr .= shift(@lines);
}
- push(@lines2, "</DIR>\n") if defined($last_letter);
- next;
+ &menu_entry($node, $name, $descr);
+ }
+ next;
}
#
+ # printindex
+ #
+ PrintIndex(\@lines2, $2, $1), next
+ if (/^<!--::(.*)::-->\@printindex\s+(\w+)/);
+ #
# simple style substitutions
#
$_ = &substitute_style($_);
#
# xref
#
- while (/\@(x|px|info|)ref{($XREFRE)(}?)/o) {
+ while (/\@(x|px|info|)ref{([^{}]+)(}?)/) {
# note: Texinfo may accept other characters
($type, $nodes, $full) = ($1, $2, $3);
($before, $after) = ($`, $');
@@ -1167,11 +4211,11 @@ while (@lines) {
next; # while xref
}
if ($type eq 'x') {
- $type = 'See ';
+ $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} ";
} elsif ($type eq 'px') {
- $type = 'see ';
+ $type = "$T2H_WORDS->{$T2H_LANG}->{'see'} ";
} elsif ($type eq 'info') {
- $type = 'See Info';
+ $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} Info";
} else {
$type = '';
}
@@ -1201,24 +4245,50 @@ while (@lines) {
$nodes =~ s/\s+/ /g; # remove useless spaces
@args = split(/\s*,\s*/, $nodes);
$node = $args[0]; # the node is always the first arg
- &normalise_node($node);
- $sec = $node2sec{$node};
+ $node = &normalise_node($node);
+ $sec = $args[2] || $args[1] || $node2sec{$node};
+ $href = $node2href{$node};
if (@args == 5) { # reference to another manual
$sec = $args[2] || $node;
$man = $args[4] || $args[3];
- $_ = "${before}${type}section `$sec' in \@cite{$man}$after";
+ $_ = "${before}${type}$T2H_WORDS->{$T2H_LANG}->{'section'} `$sec' in \@cite{$man}$after";
} elsif ($type =~ /Info/) { # inforef
warn "$ERROR Wrong number of arguments: $_" unless @args == 3;
($nn, $_, $in) = @args;
$_ = "${before}${type} file `$in', node `$nn'$after";
- } elsif ($sec) {
- $href = $node2href{$node};
- $_ = "${before}${type}section " . &anchor('', $href, $sec) . $after;
- } else {
+ } elsif ($sec && $href && ! $T2H_SHORT_REF) {
+ $_ = "${before}${type}";
+ $_ .= "$T2H_WORDS->{$T2H_LANG}->{'section'} " if ${type};
+ $_ .= &t2h_anchor('', $href, $sec) . $after;
+ }
+ elsif ($href)
+ {
+ $_ = "${before}${type} " .
+ &t2h_anchor('', $href, $args[2] || $args[1] || $node) .
+ $after;
+ }
+ else {
warn "$ERROR Undefined node ($node): $_";
$_ = "$before$;0xref{$nodes}$after";
}
}
+
+ # replace images
+ s[\@image\s*{(.+?)}]
+ {
+ my @args = split (/\s*,\s*/, $1);
+ my $base = $args[0];
+ my $image =
+ LocateIncludeFile("$base.png") ||
+ LocateIncludeFile("$base.jpg") ||
+ LocateIncludeFile("$base.gif");
+ warn "$ERROR no image file for $base: $_" unless ($image && -e $image);
+ "<IMG SRC=\"$image\" ALT=\"$base\">";
+ ($T2H_CENTER_IMAGE ?
+ "<CENTER><IMG SRC=\"$image\" ALT=\"$base\"></CENTER>" :
+ "<IMG SRC=\"$image\" ALT=\"$base\">");
+ }eg;
+
#
# try to guess bibliography references or glossary terms
#
@@ -1229,7 +4299,7 @@ while (@lines) {
($pre, $what, $post) = ($`, $&, $');
$href = $bib2href{$what};
if (defined($href) && $post !~ /^[^<]*<\/A>/) {
- $done .= $pre . &anchor('', $href, $what);
+ $done .= $pre . &t2h_anchor('', $href, $what);
} else {
$done .= "$pre$what";
}
@@ -1237,7 +4307,7 @@ while (@lines) {
}
$_ = $done . $_;
}
- if ($use_glossary) {
+ if ($T2H_USE_GLOSSARY) {
$done = '';
while (/\b\w+\b/) {
($pre, $what, $post) = ($`, $&, $');
@@ -1245,7 +4315,7 @@ while (@lines) {
$entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/;
$href = $gloss2href{$entry};
if (defined($href) && $post !~ /^[^<]*<\/A>/) {
- $done .= $pre . &anchor('', $href, $what);
+ $done .= $pre . &t2h_anchor('', $href, $what);
} else {
$done .= "$pre$what";
}
@@ -1257,7 +4327,7 @@ while (@lines) {
# otherwise
push(@lines2, $_);
}
-print "# end of pass 2\n" if $verbose;
+print "# end of pass 2\n" if $T2H_VERBOSE;
#
# split style substitutions
@@ -1307,8 +4377,8 @@ while (@lines2) {
# otherwise
push(@lines3, $_);
}
-print "# end of pass 3\n" if $verbose;
-
+print "# end of pass 3\n" if $T2H_VERBOSE;
+
#+++############################################################################
# #
# Pass 4: foot notes, final cleanup #
@@ -1318,7 +4388,7 @@ print "# end of pass 3\n" if $verbose;
@foot_lines = (); # footnotes
@doc_lines = (); # final document
$end_of_para = 0; # true if last line is <P>
-
+
while (@lines3) {
$_ = shift(@lines3);
#
@@ -1356,10 +4426,10 @@ while (@lines3) {
$docid = "DOCF$foot_num";
$footid = "FOOT$foot_num";
$foot = "($foot_num)";
- push(@foot_lines, "<H3>" . &anchor($footid, "$d#$docid", $foot) . "</H3>\n");
+ push(@foot_lines, "<H3>" . &t2h_anchor($footid, "$d#$docid", $foot) . "</H3>\n");
$text = "<P>$text" unless $text =~ /^\s*<P>/;
push(@foot_lines, "$text\n");
- $_ = $before . &anchor($docid, "$docu_foot#$footid", $foot) . $after;
+ $_ = $before . &t2h_anchor($docid, "$docu_foot#$footid", $foot) . $after;
}
}
#
@@ -1373,7 +4443,8 @@ while (@lines3) {
# otherwise
push(@doc_lines, $_);
}
-print "# end of pass 4\n" if $verbose;
+
+print "# end of pass 4\n" if $T2H_VERBOSE;
#+++############################################################################
# #
@@ -1381,126 +4452,377 @@ print "# end of pass 4\n" if $verbose;
# #
#---############################################################################
-$header = <<EOT;
-<!-- This HTML file has been created by $THISPROG
- from $docu on $TODAY -->
-EOT
+$T2H_L2H = &l2h_FinishToLatex if ($T2H_L2H);
+$T2H_L2H = &l2h_ToHtml if ($T2H_L2H);
+$T2H_L2H = &l2h_InitFromHtml if ($T2H_L2H);
-$full_title = $value{'_title'} || $value{'_settitle'} || "Untitled Document";
-$title = $value{'_settitle'} || $full_title;
-$_ = &substitute_style($full_title);
-&unprotect_texi;
-s/\n$//; # rmv last \n (if any)
-$full_title = "<H1>" . join("</H1>\n<H1>", split(/\n/, $_)) . "</H1>\n";
+# fix node2up, node2prev, node2next, if desired
+if ($has_top_command)
+{
+ for $section (keys %sec2number)
+ {
+ $node = $sec2node{$section};
+ $node2up{$node} = Sec2UpNode($section) unless $node2up{$node};
+ $node2prev{$node} = Sec2PrevNode($section) unless $node2prev{$node};
+ $node2next{$node} = Sec2NextNode($section) unless $node2next{$node};
+ }
+}
+# prepare %T2H_THISDOC
+$T2H_THISDOC{fulltitle} = $value{'_title'} || $value{'_settitle'} || "Untitled Document";
+$T2H_THISDOC{title} = $value{'_settitle'} || $T2H_THISDOC{fulltitle};
+$T2H_THISDOC{author} = $value{'_author'};
+$T2H_THISDOC{subtitle} = $value{'_subtitle'};
+$T2H_THISDOC{shorttitle} = $value{'_shorttitle'};
+for $key (keys %T2H_THISDOC)
+{
+ $_ = &substitute_style($T2H_THISDOC{$key});
+ &unprotect_texi;
+ s/\s*$//;
+ $T2H_THISDOC{$key} = $_;
+}
+
+# if no sections, then simply print document as is
+unless (@sections)
+{
+ print "# Writing content into $docu_top_file \n" if $T2H_VERBOSE;
+ open(FILE, "> $docu_top_file")
+ || die "$ERROR: Can't open $docu_top_file for writing: $!\n";
+
+ &$T2H_print_page_head(\*FILE);
+ $T2H_THIS_SECTION = \@doc_lines;
+ t2h_print_lines(\*FILE);
+ &$T2H_print_foot_navigation(\*FILE);
+ &$T2H_print_page_foot(\*FILE);
+ close(FILE);
+ goto Finish;
+}
+
+# initialize $T2H_HREF, $T2H_NAME
+%T2H_HREF =
+ (
+ 'First' , sec_href($sections[0]),
+ 'Last', sec_href($sections[$#sections]),
+ 'About', $docu_about. '#SEC_About',
+ );
+
+# prepare TOC, OVERVIEW, TOP
+$T2H_TOC = \@toc_lines;
+$T2H_OVERVIEW = \@stoc_lines;
+if ($has_top)
+{
+ while (1)
+ {
+ $_ = shift @doc_lines;
+ last if /$TOPEND/;
+ push @$T2H_TOP, $_;
+ }
+ $T2H_HREF{'Top'} = $docu_top . '#SEC_Top';
+}
+else
+{
+ $T2H_HREF{'Top'} = $T2H_HREF{First};
+}
+
+$node2href{Top} = $T2H_HREF{Top};
+$T2H_HREF{Contents} = $docu_toc.'#SEC_Contents' if @toc_lines;
+$T2H_HREF{Overview} = $docu_stoc.'#SEC_OVERVIEW' if @stoc_lines;
+
+# settle on index
+if ($T2H_INDEX_CHAPTER)
+{
+ $T2H_HREF{Index} = $node2href{normalise_node($T2H_INDEX_CHAPTER)};
+ warn "$ERROR T2H_INDEX_CHAPTER '$T2H_INDEX_CHAPTER' not found\n"
+ unless $T2H_HREF{Index};
+}
+if (! $T2H_HREF{Index} && $first_index_chapter)
+{
+ $T2H_INDEX_CHAPTER = $first_index_chapter;
+ $T2H_HREF{Index} = $node2href{$T2H_INDEX_CHAPTER};
+}
+
+print "# Using '" . clean_name($T2H_INDEX_CHAPTER) . "' as index page\n"
+ if ($T2H_VERBOSE && $T2H_HREF{Index});
+
+%T2H_NAME =
+ (
+ 'First', clean_name($sec2node{$sections[0]}),
+ 'Last', clean_name($sec2node{$sections[$#sections]}),
+ 'About', $T2H_WORDS->{$T2H_LANG}->{'About_Title'},
+ 'Contents', $T2H_WORDS->{$T2H_LANG}->{'ToC_Title'},
+ 'Overview', $T2H_WORDS->{$T2H_LANG}->{'Overview_Title'},
+ 'Index' , clean_name($T2H_INDEX_CHAPTER),
+ 'Top', clean_name($T2H_TOP_HEADING || $T2H_THISDOC{'title'} || $T2H_THISDOC{'shorttitle'}),
+ );
+
+#############################################################################
+# print frame and frame toc file
#
-# print ToC
-#
-if (!$monolithic && @toc_lines) {
- if (open(FILE, "> $docu_toc")) {
- print "# creating $docu_toc...\n" if $verbose;
- &print_toplevel_header("$title - Table of Contents");
- &print_ruler;
- &print(*toc_lines, FILE);
- &print_toplevel_footer;
- close(FILE);
- } else {
- warn "$ERROR Can't write to $docu_toc: $!\n";
- }
+if ( $T2H_FRAMES )
+{
+ open(FILE, "> $docu_frame_file")
+ || die "$ERROR: Can't open $docu_frame_file for writing: $!\n";
+ print "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE;
+ &$T2H_print_frame(\*FILE);
+ close(FILE);
+
+ open(FILE, "> $docu_toc_frame_file")
+ || die "$ERROR: Can't open $docu_toc_frame_file for writing: $!\n";
+ print "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE;
+ &$T2H_print_toc_frame(\*FILE);
+ close(FILE);
}
+
+#############################################################################
+# print Top
#
-# print footnotes
+open(FILE, "> $docu_top_file")
+ || die "$ERROR: Can't open $docu_top_file for writing: $!\n";
+&$T2H_print_page_head(\*FILE) unless ($T2H_SPLIT);
+
+if ($has_top)
+{
+ print "# Creating Top in $docu_top_file ...\n" if $T2H_VERBOSE;
+ $T2H_THIS_SECTION = $T2H_TOP;
+ $T2H_HREF{This} = $T2H_HREF{Top};
+ $T2H_NAME{This} = $T2H_NAME{Top};
+ &$T2H_print_Top(\*FILE);
+}
+
+close(FILE) if $T2H_SPLIT;
+
+#############################################################################
+# Print sections
#
-if (!$monolithic && @foot_lines) {
- if (open(FILE, "> $docu_foot")) {
- print "# creating $docu_foot...\n" if $verbose;
- &print_toplevel_header("$title - Footnotes");
- &print_ruler;
- &print(*foot_lines, FILE);
- &print_toplevel_footer;
- close(FILE);
- } else {
- warn "$ERROR Can't write to $docu_foot: $!\n";
- }
-}
-
-#
-# print document
-#
-if ($split_chapter || $split_node) { # split
- $doc_num = 0;
- $last_num = scalar(@sections);
- $first_doc = &doc_name(1);
- $last_doc = &doc_name($last_num);
- while (@sections) {
- $section = shift(@sections);
- &next_doc;
- if (open(FILE, "> $docu_doc")) {
- print "# creating $docu_doc...\n" if $verbose;
- &print_header("$title - $section");
- $prev_doc = ($doc_num == 1 ? undef : &doc_name($doc_num - 1));
- $next_doc = ($doc_num == $last_num ? undef : &doc_name($doc_num + 1));
- $navigation = "Go to the ";
- $navigation .= ($prev_doc ? &anchor('', $first_doc, "first") : "first");
- $navigation .= ", ";
- $navigation .= ($prev_doc ? &anchor('', $prev_doc, "previous") : "previous");
- $navigation .= ", ";
- $navigation .= ($next_doc ? &anchor('', $next_doc, "next") : "next");
- $navigation .= ", ";
- $navigation .= ($next_doc ? &anchor('', $last_doc, "last") : "last");
- $navigation .= " section, " . &anchor('', $docu_toc, "table of contents") . ".\n";
- print FILE $navigation;
- &print_ruler;
- # find corresponding lines
- @tmp_lines = ();
- while (@doc_lines) {
- $_ = shift(@doc_lines);
- last if ($_ eq $SPLITTAG);
- push(@tmp_lines, $_);
- }
- &print(*tmp_lines, FILE);
- &print_ruler;
- print FILE $navigation;
- &print_footer;
- close(FILE);
- } else {
- warn "$ERROR Can't write to $docu_doc: $!\n";
- }
+$T2H_NODE{Forward} = $sec2node{$sections[0]};
+$T2H_NAME{Forward} = &clean_name($sec2node{$sections[0]});
+$T2H_HREF{Forward} = sec_href($sections[0]);
+$T2H_NODE{This} = 'Top';
+$T2H_NAME{This} = $T2H_NAME{Top};
+$T2H_HREF{This} = $T2H_HREF{Top};
+if ($T2H_SPLIT)
+{
+ print "# writing " . scalar(@sections) .
+ " sections in $docu_rdir$docu_name"."_[1..$doc_num]"
+ if $T2H_VERBOSE;
+ $previous = ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND);
+ undef $FH;
+ $doc_num = 0;
+}
+else
+{
+ print "# writing " . scalar(@sections) . " sections in $docu_top_file ..."
+ if $T2H_VERBOSE;
+ $FH = \*FILE;
+ $previous = '';
+}
+
+$counter = 0;
+# loop through sections
+while ($section = shift(@sections))
+{
+ if ($T2H_SPLIT && ($T2H_SPLIT eq 'section' || $previous eq $CHAPTEREND))
+ {
+ if ($FH)
+ {
+ #close previous page
+ &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter';
+ &$T2H_print_page_foot($FH);
+ close($FH);
+ undef $FH;
}
-} else { # not split
- if (open(FILE, "> $docu_doc")) {
- print "# creating $docu_doc...\n" if $verbose;
- if ($monolithic || !@toc_lines) {
- &print_toplevel_header($title);
- } else {
- &print_header($title);
- print FILE $full_title;
- }
- if ($monolithic && @toc_lines) {
- &print_ruler;
- print FILE "<H1>Table of Contents</H1>\n";
- &print(*toc_lines, FILE);
- }
- &print_ruler;
- &print(*doc_lines, FILE);
- if ($monolithic && @foot_lines) {
- &print_ruler;
- print FILE "<H1>Footnotes</H1>\n";
- &print(*foot_lines, FILE);
- }
- if ($monolithic || !@toc_lines) {
- &print_toplevel_footer;
- } else {
- &print_footer;
- }
- close(FILE);
- } else {
- warn "$ERROR Can't write to $docu_doc: $!\n";
+ }
+ $T2H_NAME{Back} = $T2H_NAME{This};
+ $T2H_HREF{Back} = $T2H_HREF{This};
+ $T2H_NODE{Back} = $T2H_NODE{This};
+ $T2H_NAME{This} = $T2H_NAME{Forward};
+ $T2H_HREF{This} = $T2H_HREF{Forward};
+ $T2H_NODE{This} = $T2H_NODE{Forward};
+ if ($sections[0])
+ {
+ $T2H_NODE{Forward} = $sec2node{$sections[0]};
+ $T2H_NAME{Forward} = &clean_name($T2H_NODE{Forward});
+ $T2H_HREF{Forward} = sec_href($sections[0]);
+ }
+ else
+ {
+ undef $T2H_HREF{Forward}, $T2H_NODE{Forward}, $T2H_NAME{Forward};
+ }
+
+ $node = $node2up{$T2H_NODE{This}};
+ $T2H_HREF{Up} = $node2href{$node};
+ if ($T2H_HREF{Up} eq $T2H_HREF{This} || ! $T2H_HREF{Up})
+ {
+ $T2H_NAME{Up} = $T2H_NAME{Top};
+ $T2H_HREF{Up} = $T2H_HREF{Top};
+ $T2H_NODE{Up} = 'Up';
+ }
+ else
+ {
+ $T2H_NAME{Up} = &clean_name($node);
+ $T2H_NODE{Up} = $node;
+ }
+
+ $node = $T2H_NODE{This};
+ $node = $node2prev{$node};
+ $T2H_NAME{Prev} = &clean_name($node);
+ $T2H_HREF{Prev} = $node2href{$node};
+ $T2H_NODE{Prev} = $node;
+
+ $node = $T2H_NODE{This};
+ if ($node2up{$node} && $node2up{$node} ne 'Top'&&
+ ($node2prev{$node} eq $T2H_NODE{Back} || ! $node2prev{$node}))
+ {
+ $node = $node2up{$node};
+ while ($node && $node ne $node2up{$node} && ! $node2prev{$node})
+ {
+ $node = $node2up{$node};
}
+ $node = $node2prev{$node}
+ unless $node2up{$node} eq 'Top' || ! $node2up{$node};
+ }
+ else
+ {
+ $node = $node2prev{$node};
+ }
+ $T2H_NAME{FastBack} = &clean_name($node);
+ $T2H_HREF{FastBack} = $node2href{$node};
+ $T2H_NODE{FastBack} = $node;
+
+ $node = $T2H_NODE{This};
+ $node = $node2next{$node};
+ $T2H_NAME{Next} = &clean_name($node);
+ $T2H_HREF{Next} = $node2href{$node};
+ $T2H_NODE{Next} = $node;
+
+ $node = $T2H_NODE{This};
+ if ($node2up{$node} && $node2up{$node} ne 'Top'&&
+ ($node2next{$node} eq $T2H_NODE{Forward} || ! $node2next{$node}))
+ {
+ $node = $node2up{$node};
+ while ($node && $node ne $node2up{$node} && ! $node2next{$node})
+ {
+ $node = $node2up{$node};
+ }
+ }
+ $node = $node2next{$node};
+ $T2H_NAME{FastForward} = &clean_name($node);
+ $T2H_HREF{FastForward} = $node2href{$node};
+ $T2H_NODE{FastForward} = $node;
+
+ if (! defined($FH))
+ {
+ my $file = $T2H_HREF{This};
+ $file =~ s/\#.*$//;
+ open(FILE, "> $docu_rdir$file") ||
+ die "$ERROR: Can't open $docu_rdir$file for writing: $!\n";
+ $FH = \*FILE;
+ &$T2H_print_page_head($FH);
+ t2h_print_label($FH);
+ &$T2H_print_chapter_header($FH) if $T2H_SPLIT eq 'chapter';
+ }
+ else
+ {
+ t2h_print_label($FH);
+ }
+
+ $T2H_THIS_SECTION = [];
+ while (@doc_lines) {
+ $_ = shift(@doc_lines);
+ last if ($_ eq $SECTIONEND || $_ eq $CHAPTEREND);
+ push(@$T2H_THIS_SECTION, $_);
+ }
+ $previous = $_;
+ &$T2H_print_section($FH);
+
+ if ($T2H_VERBOSE)
+ {
+ $counter++;
+ print "." if $counter =~ /00$/;
+ }
+}
+if ($T2H_SPLIT)
+{
+ &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter';
+ &$T2H_print_page_foot($FH);
+ close($FH);
+}
+print "\n" if $T2H_VERBOSE;
+
+#############################################################################
+# Print ToC, Overview, Footnotes
+#
+undef $T2H_HREF{Prev};
+undef $T2H_HREF{Next};
+undef $T2H_HREF{Back};
+undef $T2H_HREF{Forward};
+undef $T2H_HREF{Up};
+
+if (@foot_lines)
+{
+ print "# writing Footnotes in $docu_foot_file...\n" if $T2H_VERBOSE;
+ open (FILE, "> $docu_foot_file") || die "$ERROR: Can't open $docu_foot_file for writing: $!\n"
+ if $T2H_SPLIT;
+ $T2H_HREF{This} = $docu_foot;
+ $T2H_NAME{This} = $T2H_WORDS->{$T2H_LANG}->{'Footnotes_Title'};
+ $T2H_THIS_SECTION = \@foot_lines;
+ &$T2H_print_Footnotes(\*FILE);
+ close(FILE) if $T2H_SPLIT;
+}
+
+if (@toc_lines)
+{
+ print "# writing Toc in $docu_toc_file...\n" if $T2H_VERBOSE;
+ open (FILE, "> $docu_toc_file") || die "$ERROR: Can't open $docu_toc_file for writing: $!\n"
+ if $T2H_SPLIT;
+ $T2H_HREF{This} = $T2H_HREF{Contents};
+ $T2H_NAME{This} = $T2H_NAME{Contents};
+ $T2H_THIS_SECTION = \@toc_lines;
+ &$T2H_print_Toc(\*FILE);
+ close(FILE) if $T2H_SPLIT;
+}
+
+if (@stoc_lines)
+{
+ print "# writing Overview in $docu_stoc_file...\n" if $T2H_VERBOSE;
+ open (FILE, "> $docu_stoc_file") || die "$ERROR: Can't open $docu_stoc_file for writing: $!\n"
+ if $T2H_SPLIT;
+
+ $T2H_HREF{This} = $T2H_HREF{Overview};
+ $T2H_NAME{This} = $T2H_NAME{Overview};
+ $T2H_THIS_SECTION = \@stoc_lines;
+ unshift @$T2H_THIS_SECTION, "<BLOCKQUOTE>\n";
+ push @$T2H_THIS_SECTION, "\n</BLOCKQUOTE>\n";
+ &$T2H_print_Overview(\*FILE);
+ close(FILE) if $T2H_SPLIT;
+}
+
+if ($about_body = &$T2H_about_body())
+{
+ print "# writing About in $docu_about_file...\n" if $T2H_VERBOSE;
+ open (FILE, "> $docu_about_file") || die "$ERROR: Can't open $docu_about_file for writing: $!\n"
+ if $T2H_SPLIT;
+
+ $T2H_HREF{This} = $T2H_HREF{About};
+ $T2H_NAME{This} = $T2H_NAME{About};
+ $T2H_THIS_SECTION = [$about_body];
+ &$T2H_print_About(\*FILE);
+ close(FILE) if $T2H_SPLIT;
}
-print "# that's all folks\n" if $verbose;
+unless ($T2H_SPLIT)
+{
+ &$T2H_print_page_foot(\*FILE);
+ close (FILE);
+}
+
+Finish:
+&l2h_FinishFromHtml if ($T2H_L2H);
+&l2h_Finish if($T2H_L2H);
+print "# that's all folks\n" if $T2H_VERBOSE;
+
+exit(0);
#+++############################################################################
# #
@@ -1508,27 +4830,55 @@ print "# that's all folks\n" if $verbose;
# #
#---############################################################################
+sub LocateIncludeFile
+{
+ my $file = shift;
+ my $dir;
+
+ return $file if (-e $file && -r $file);
+ foreach $dir (@T2H_INCLUDE_DIRS)
+ {
+ return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file");
+ }
+ return undef;
+}
+
+sub clean_name
+{
+ local ($_);
+ $_ = &remove_style($_[0]);
+ &unprotect_texi;
+ return $_;
+}
+
sub update_sec_num {
local($name, $level) = @_;
+ my $ret;
$level--; # here we start at 0
- if ($name =~ /^appendix/) {
+ if ($name =~ /^appendix/ || defined(@appendix_sec_num)) {
# appendix style
if (defined(@appendix_sec_num)) {
&incr_sec_num($level, @appendix_sec_num);
} else {
@appendix_sec_num = ('A', 0, 0, 0);
}
- return(join('.', @appendix_sec_num[0..$level]));
+ $ret = join('.', @appendix_sec_num[0..$level]);
} else {
# normal style
- if (defined(@normal_sec_num)) {
- &incr_sec_num($level, @normal_sec_num);
- } else {
- @normal_sec_num = (1, 0, 0, 0);
+ if (defined(@normal_sec_num))
+ {
+ &incr_sec_num($level, @normal_sec_num);
+ }
+ else
+ {
+ @normal_sec_num = (1, 0, 0, 0);
}
- return(join('.', @normal_sec_num[0..$level]));
+ $ret = join('.', @normal_sec_num[0..$level]);
}
+
+ $ret .= "." if $level == 0;
+ return $ret;
}
sub incr_sec_num {
@@ -1540,13 +4890,78 @@ sub incr_sec_num {
}
}
+sub Sec2UpNode
+{
+ my $sec = shift;
+ my $num = $sec2number{$sec};
+
+ return '' unless $num;
+ return 'Top' unless $num =~ /\.\d+/;
+ $num =~ s/\.[^\.]*$//;
+ $num = $num . '.' unless $num =~ /\./;
+ return $sec2node{$number2sec{$num}};
+}
+
+sub Sec2PrevNode
+{
+ my $sec = shift;
+ my $num = $sec2number{$sec};
+ my ($i, $post);
+
+ if ($num =~ /(\w+)(\.$|$)/)
+ {
+ $num = $`;
+ $i = $1;
+ $post = $2;
+ if ($i eq 'A')
+ {
+ $i = $normal_sec_num[0];
+ }
+ elsif ($i ne '1')
+ {
+ # unfortunately, -- operator is not magical
+ $i = chr(ord($i) + 1);
+ }
+ else
+ {
+ return '';
+ }
+ return $sec2node{$number2sec{$num . $i . $post}}
+ }
+ return '';
+}
+
+sub Sec2NextNode
+{
+ my $sec = shift;
+ my $num = $sec2number{$sec};
+ my $i;
+
+ if ($num =~ /(\w+)(\.$|$)/)
+ {
+ $num = $`;
+ $i = $1;
+ $post = $2;
+ if ($post eq '.' && $i eq $normal_sec_num[0])
+ {
+ $i = 'A';
+ }
+ else
+ {
+ $i++;
+ }
+ return $sec2node{$number2sec{$num . $i . $post}}
+ }
+ return '';
+}
+
sub check {
local($_, %seen, %context, $before, $match, $after);
while (<>) {
if (/\@(\*|\.|\:|\@|\{|\})/) {
$seen{$&}++;
- $context{$&} .= "> $_" if $verbose;
+ $context{$&} .= "> $_" if $T2H_VERBOSE;
$_ = "$`XX$'";
redo;
}
@@ -1554,10 +4969,10 @@ sub check {
($before, $match, $after) = ($`, $&, $');
if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address
$seen{'e-mail address'}++;
- $context{'e-mail address'} .= "> $_" if $verbose;
+ $context{'e-mail address'} .= "> $_" if $T2H_VERBOSE;
} else {
$seen{$match}++;
- $context{$match} .= "> $_" if $verbose;
+ $context{$match} .= "> $_" if $T2H_VERBOSE;
}
$match =~ s/^\@/X/;
$_ = "$before$match$after";
@@ -1566,7 +4981,7 @@ sub check {
}
foreach (sort(keys(%seen))) {
- if ($verbose) {
+ if ($T2H_VERBOSE) {
print "$_\n";
print $context{$_};
} else {
@@ -1621,6 +5036,19 @@ sub skip_until {
die "* Failed to find '$tag' after: " . $lines[$#lines];
}
+# used in pass 1 for l2h use &next_line
+sub string_until {
+ local($tag) = @_;
+ local($_, $string);
+
+ while ($_ = &next_line) {
+ return $string if /^\@end\s+$tag\s*$/;
+# $_ =~ s/hbox/mbox/g;
+ $string = $string.$_;
+ }
+ die "* Failed to find '$tag' after: " . $lines[$#lines];
+}
+
#
# HTML stacking to have a better HTML output
#
@@ -1664,8 +5092,11 @@ sub html_pop_if {
sub html_debug {
local($what, $line) = @_;
- return("<!-- $line @html_stack, $html_element -->$what")
- if $debug & $DEBUG_HTML;
+ if ($T2H_DEBUG & $DEBUG_HTML)
+ {
+ $what = "\n" unless $what;
+ return("<!-- $line @html_stack, $html_element -->$what")
+ }
return($what);
}
@@ -1673,29 +5104,80 @@ sub html_debug {
sub debug {
local($what, $line) = @_;
return("<!-- $line -->$what")
- if $debug & $DEBUG_HTML;
+ if $T2H_DEBUG & $DEBUG_HTML;
return($what);
}
+sub SimpleTexi2Html
+{
+ local $_ = $_[0];
+ &protect_texi;
+ &protect_html;
+ $_ = substitute_style($_);
+ $_[0] = $_;
+}
+
sub normalise_node {
- $_[0] =~ s/\s+/ /g;
- $_[0] =~ s/ $//;
- $_[0] =~ s/^ //;
+ local $_ = $_[0];
+ s/\s+/ /g;
+ s/ $//;
+ s/^ //;
+ &protect_texi;
+ &protect_html;
+ $_ = substitute_style($_);
+ $_[0] = $_;
}
-sub menu_entry {
- local($entry, $node, $descr) = @_;
- local($href);
+sub menu_entry
+{
+ my ($node, $name, $descr) = @_;
+ my ($href, $entry);
+
+ &normalise_node($node);
+ $href = $node2href{$node};
+ if ($href)
+ {
+ $descr =~ s/^\s+//;
+ $descr =~ s/\s*$//;
+ $descr = SimpleTexi2Html($descr);
+ if ($T2H_NUMBER_SECTIONS && !$T2H_NODE_NAME_IN_MENU && $node2sec{$node})
+ {
+ $entry = $node2sec{$node};
+ $name = '';
+ }
+ else
+ {
+ &normalise_node($name);
+ $entry = ($name && ($name ne $node || ! $T2H_AVOID_MENU_REDUNDANCY)
+ ? "$name : $node" : $node);
+ }
- &normalise_node($node);
- $href = $node2href{$node};
- if ($href) {
- $descr =~ s/^\s+//;
- $descr = ": $descr" if $descr;
- push(@lines2, "<LI>" . &anchor('', $href, $entry) . "$descr\n");
- } else {
- warn "$ERROR Undefined node ($node): $_";
+ if ($T2H_AVOID_MENU_REDUNDANCY && $descr)
+ {
+ my $clean_entry = $entry;
+ $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /);
+ $clean_entry =~ s/[^\w]//g;
+ my $clean_descr = $descr;
+ $clean_descr =~ s/[^\w]//g;
+ $descr = '' if ($clean_entry eq $clean_descr)
}
+ push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' .
+ &t2h_anchor('', $href, $entry) .
+ '</TD><TD>&nbsp;&nbsp;</TD><TD ALIGN="left" VALIGN="TOP">' .
+ $descr .
+ "</TD></TR>\n", __LINE__));
+ }
+ elsif ($node =~ /^\(.*\)\w+/)
+ {
+ push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' .
+ $entry .
+ '</TD><TD ALIGN="left" VALIGN="TOP">' . $descr .
+ "</TD></TR>\n", __LINE__))
+ }
+ else
+ {
+ warn "$ERROR Undefined node of menu_entry ($node): $_";
+ }
}
sub do_ctrl { "^$_[0]" }
@@ -1704,19 +5186,51 @@ sub do_email {
local($addr, $text) = split(/,\s*/, $_[0]);
$text = $addr unless $text;
- &anchor('', "mailto:$addr", $text);
+ &t2h_anchor('', "mailto:$addr", $text);
+}
+
+sub do_sc
+{
+ # l2h does this much better
+ return &l2h_ToLatex("{\\sc ".&unprotect_html($_[0])."}") if ($T2H_L2H);
+ return "\U$_[0]\E";
}
-sub do_sc { "\U$_[0]\E" }
+sub do_math
+{
+ return &l2h_ToLatex("\$".&unprotect_html($_[0])."\$") if ($T2H_L2H);
+ return "<EM>".$text."</EM>";
+}
sub do_uref {
- local($url, $text) = split(/,\s*/, $_[0]);
+ local($url, $text, $only_text) = split(/,\s*/, $_[0]);
+ $text = $only_text if $only_text;
$text = $url unless $text;
- &anchor('', $url, $text);
+ &t2h_anchor('', $url, $text);
+}
+
+sub do_url { &t2h_anchor('', $_[0], $_[0]) }
+
+sub do_acronym
+{
+ return '<FONT SIZE="-1">' . $_[0] . '</FONT>';
}
-sub do_url { &anchor('', $_[0], $_[0]) }
+sub do_accent
+{
+ return "&$_[0]acute;" if $_[1] eq 'H';
+ return "$_[0]." if $_[1] eq 'dotaccent';
+ return "$_[0]*" if $_[1] eq 'ringaccent';
+ return "$_[0]".'[' if $_[1] eq 'tieaccent';
+ return "$_[0]".'(' if $_[1] eq 'u';
+ return "$_[0]_" if $_[1] eq 'ubaraccent';
+ return ".$_[0]" if $_[1] eq 'udotaccent';
+ return "$_[0]&lt;" if $_[1] eq 'v';
+ return "&$_[0]cedil;" if $_[1] eq ',';
+ return "$_[0]" if $_[1] eq 'dotless';
+ return undef;
+}
sub apply_style {
local($texi_style, $text) = @_;
@@ -1730,7 +5244,7 @@ sub apply_style {
}
if ($style =~ /^\&/) { # custom
$style = $';
- $text = &$style($text);
+ $text = &$style($text, $texi_style);
} elsif ($style) { # good style
$text = "<$style>$text</$style>";
} else { # no style
@@ -1744,19 +5258,27 @@ sub apply_style {
# remove Texinfo styles
sub remove_style {
local($_) = @_;
- s/\@\w+{([^\{\}]+)}/$1/g;
+ 1 while(s/\@\w+{([^\{\}]+)}/$1/g);
return($_);
}
+sub remove_things
+{
+ local ($_) = @_;
+ s|\@(\w+)\{\}|$1|g;
+ return $_;
+}
+
sub substitute_style {
local($_) = @_;
local($changed, $done, $style, $text);
+ &simple_substitutions;
$changed = 1;
while ($changed) {
$changed = 0;
$done = '';
- while (/\@(\w+){([^\{\}]+)}/) {
+ while (/\@(\w+){([^\{\}]+)}/ || /\@(,){([^\{\}]+)}/) {
$text = &apply_style($1, $2);
if ($text) {
$_ = "$`$text$'";
@@ -1771,13 +5293,19 @@ sub substitute_style {
return($_);
}
-sub anchor {
- local($name, $href, $text, $newline) = @_;
+sub t2h_anchor {
+ local($name, $href, $text, $newline, $extra_attribs) = @_;
local($result);
$result = "<A";
$result .= " NAME=\"$name\"" if $name;
- $result .= " HREF=\"$href\"" if $href;
+ if ($href)
+ {
+ $href =~ s|^$T2H_HREF_DIR_INSTEAD_FILE|./|
+ if ($T2H_HREF_DIR_INSTEAD_FILE);
+ $result .= ($href =~ /\"/ ? " HREF='$href'" : " HREF=\"$href\"");
+ }
+ $result .= " $extra_attribs" if $extra_attribs;
$result .= ">$text</A>";
$result .= "\n" if $newline;
return($result);
@@ -1786,104 +5314,46 @@ sub anchor {
sub pretty_date {
local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst);
- @MoY = ('January', 'Febuary', 'March', 'April', 'May', 'June',
+ @MoY = ('January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December');
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += ($year < 70) ? 2000 : 1900;
- return("$mday $MoY[$mon] $year");
+ # obachman: Let's do it as the Americans do
+ return("$MoY[$mon], $mday $year");
}
-sub doc_name {
+sub doc_href {
local($num) = @_;
- return("${docu_name}_$num.html");
+ return("${docu_name}_$num.$docu_ext");
+}
+
+sub sec_href
+{
+ return $node2href{$sec2node{$_[0]}};
}
sub next_doc {
- $docu_doc = &doc_name(++$doc_num);
+ $docu_doc = &doc_href(++$doc_num);
}
-sub print {
- local(*lines, $fh) = @_;
+sub t2h_print_lines {
+ my ($fh, $lines) = @_;
local($_);
-
- while (@lines) {
- $_ = shift(@lines);
+ $lines = $T2H_THIS_SECTION unless $lines;
+ my $cnt = 0;
+ for (@$lines)
+ {
+ $_ = l2h_FromHtml($_) if ($T2H_L2H);
if (/^$PROTECTTAG/o) {
$_ = $tag2pro{$_};
} else {
&unprotect_texi;
}
print $fh $_;
+ $cnt += split(/\W*\s+\W*/);
}
-}
-
-sub print_ruler {
- print FILE "<P><HR><P>\n";
-}
-
-sub print_header {
- local($_);
-
- # clean the title
- $_ = &remove_style($_[0]);
- &unprotect_texi;
- # print the header
- if ($doctype eq 'html2') {
- print FILE $html2_doctype;
- } elsif ($doctype) {
- print FILE $doctype;
- }
- print FILE <<EOT;
-<HTML>
-<HEAD>
-$header
-<TITLE>$_</TITLE>
-</HEAD>
-<BODY>
-EOT
-}
-
-sub print_toplevel_header {
- local($_);
-
- &print_header; # pass given arg...
- print FILE $full_title;
- if ($value{'_subtitle'}) {
- $value{'_subtitle'} =~ s/\n+$//;
- foreach (split(/\n/, $value{'_subtitle'})) {
- $_ = &substitute_style($_);
- &unprotect_texi;
- print FILE "<H2>$_</H2>\n";
- }
- }
- if ($value{'_author'}) {
- $value{'_author'} =~ s/\n+$//;
- foreach (split(/\n/, $value{'_author'})) {
- $_ = &substitute_style($_);
- &unprotect_texi;
- s/[\w.-]+\@[\w.-]+/<A HREF="mailto:$&">$&<\/A>/g;
- print FILE "<ADDRESS>$_</ADDRESS>\n";
- }
- }
- print FILE "<P>\n";
-}
-
-sub print_footer {
- print FILE <<EOT;
-</BODY>
-</HTML>
-EOT
-}
-
-sub print_toplevel_footer {
- &print_ruler;
- print FILE <<EOT;
-This document was generated on $TODAY using the
-<A HREF=\"$HOMEPAGE\">texi2html</A>
-translator version 1.52.</P>
-EOT
- &print_footer;
+ return $cnt;
}
sub protect_texi {
@@ -1901,6 +5371,13 @@ sub protect_html {
$what =~ s/\&/\&\#38;/g;
$what =~ s/\</\&\#60;/g;
$what =~ s/\>/\&\#62;/g;
+ # restore anything in quotes
+ # this fixes my problem where I had:
+ # < IMG SRC="leftarrow.gif" ALT="<--" > but what if I wanted &#60; in my ALT text ??
+ # maybe byte stuffing or some other technique should be used.
+ $what =~ s/\"([^\&]+)\&\#60;(.*)\"/"$1<$2"/g;
+ $what =~ s/\"([^\&]+)\&\#62;(.*)\"/"$1>$2"/g;
+ $what =~ s/\"([^\&]+)\&\#38;(.*)\"/"$1&$2"/g;
# but recognize some HTML things
$what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # </A>
$what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g; # <A [^&]+>
@@ -1916,6 +5393,13 @@ sub unprotect_texi {
s/$;4/\'/go;
}
+sub Unprotect_texi
+{
+ local $_ = shift;
+ &unprotect_texi;
+ return($_);
+}
+
sub unprotect_html {
local($what) = @_;
$what =~ s/\&\#38;/\&/g;
@@ -1924,8 +5408,12 @@ sub unprotect_html {
return($what);
}
-sub byalpha {
- $key2alpha{$a} cmp $key2alpha{$b};
+sub t2h_print_label
+{
+ my $fh = shift;
+ my $href = shift || $T2H_HREF{This};
+ $href =~ s/.*#(.*)$/$1/;
+ print $fh qq{<A NAME="$href"></A>\n};
}
##############################################################################
@@ -1938,144 +5426,4 @@ sub byalpha {
.nr nl 0-1 \" fake up transition to first page again
.nr % 0 \" start at page 1
'; __END__ ############# From here on it's a standard manual page ############
-.TH TEXI2HTML 1 "01/05/98"
-.AT 3
-.SH NAME
-texi2html \- a Texinfo to HTML converter
-.SH SYNOPSIS
-.B texi2html [options] file
-.PP
-.B texi2html -check [-verbose] files
-.SH DESCRIPTION
-.I Texi2html
-converts the given Texinfo file to a set of HTML files. It tries to handle
-most of the Texinfo commands. It creates hypertext links for cross-references,
-footnotes...
-.PP
-It also tries to add links from a reference to its corresponding entry in the
-bibliography (if any). It may also handle a glossary (see the
-.B \-glossary
-option).
-.PP
-.I Texi2html
-creates several files depending on the contents of the Texinfo file and on
-the chosen options (see FILES).
-.PP
-The HTML files created by
-.I texi2html
-are closer to TeX than to Info, that's why
-.I texi2html
-converts @iftex sections and not @ifinfo ones by default. You can reverse
-this with the \-expandinfo option.
-.SH OPTIONS
-.TP 12
-.B \-check
-Check the given file and give the list of all things that may be Texinfo commands.
-This may be used to check the output of
-.I texi2html
-to find the Texinfo commands that have been left in the HTML file.
-.TP
-.B \-expandinfo
-Expand @ifinfo sections, not @iftex ones.
-.TP
-.B \-glossary
-Use the section named 'Glossary' to build a list of terms and put links in the HTML
-document from each term toward its definition.
-.TP
-.B \-invisible \fIname\fP
-Use \fIname\fP to create invisible destination anchors for index links
-(you can for instance use the invisible.xbm file shipped with this program).
-This is a workaround for a known bug of many WWW browsers, including netscape.
-.TP
-.B \-I \fIdir\fP
-Look also in \fIdir\fP to find included files.
-.TP
-.B \-menu
-Show the Texinfo menus; by default they are ignored.
-.TP
-.B \-monolithic
-Output only one file, including the table of contents and footnotes.
-.TP
-.B \-number
-Number the sections.
-.TP
-.B \-split_chapter
-Split the output into several HTML files (one per main section:
-chapter, appendix...).
-.TP
-.B \-split_node
-Split the output into several HTML files (one per node).
-.TP
-.B \-usage
-Print usage instructions, listing the current available command-line options.
-.TP
-.B \-verbose
-Give a verbose output. Can be used with the
-.B \-check
-option.
-.PP
-.SH FILES
-By default
-.I texi2html
-creates the following files (foo being the name of the Texinfo file):
-.TP 16
-.B foo_toc.html
-The table of contents.
-.TP
-.B foo.html
-The document's contents.
-.TP
-.B foo_foot.html
-The footnotes (if any).
-.PP
-When used with the
-.B \-split
-option, it creates several files (one per chapter or node), named
-.B foo_n.html
-(n being the indice of the chapter or node), instead of the single
-.B foo.html
-file.
-.PP
-When used with the
-.B \-monolithic
-option, it creates only one file:
-.B foo.html
-.SH VARIABLES
-.I texi2html
-predefines the following variables: \fBhtml\fP, \fBtexi2html\fP.
-.SH ADDITIONAL COMMANDS
-.I texi2html
-implements the following non-Texinfo commands (maybe they are in Texinfo now...):
-.TP 16
-.B @ifhtml
-This indicates the start of an HTML section, this section will passed through
-without any modification.
-.TP
-.B @end ifhtml
-This indicates the end of an HTML section.
-.SH VERSION
-This is \fItexi2html\fP version 1.52, 01/05/98.
-.PP
-The latest version of \fItexi2html\fP can be found in WWW, cf. URL
-http://wwwinfo.cern.ch/dis/texi2html/
-.SH AUTHOR
-The main author is Lionel Cons, CERN IT/DIS/OSE, Lionel.Cons@cern.ch.
-Many other people around the net contributed to this program.
-.SH COPYRIGHT
-This program is the intellectual property of the European
-Laboratory for Particle Physics (known as CERN). No guarantee whatsoever is
-provided by CERN. No liability whatsoever is accepted for any loss or damage
-of any kind resulting from any defect or inaccuracy in this information or
-code.
-.PP
-CERN, 1211 Geneva 23, Switzerland
-.SH "SEE ALSO"
-GNU Texinfo Documentation Format,
-HyperText Markup Language (HTML),
-World Wide Web (WWW).
-.SH BUGS
-This program does not understand all Texinfo commands (yet).
-.PP
-TeX specific commands (normally enclosed in @iftex) will be
-passed unmodified.
-.ex
+.so /usr/local/man/man1/texi2html.1
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 1e90f8a..f189664 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -26,6 +26,9 @@ VPATH = .:@srcdir@
top_srcdir = @top_srcdir@
BUILD_DIR = .
+# Support an alternate destination root directory for package building
+DESTDIR =
+
DEFS = @DEFS@
CC = @CC@
CFLAGS = @CFLAGS@
diff --git a/examples/fileman.c b/examples/fileman.c
index e976848..578491a 100644
--- a/examples/fileman.c
+++ b/examples/fileman.c
@@ -41,15 +41,15 @@
extern char *xmalloc ();
/* The names of functions that actually do the manipulation. */
-int com_list __P((char *));
-int com_view __P((char *));
-int com_rename __P((char *));
-int com_stat __P((char *));
-int com_pwd __P((char *));
-int com_delete __P((char *));
-int com_help __P((char *));
-int com_cd __P((char *));
-int com_quit __P((char *));
+int com_list PARAMS((char *));
+int com_view PARAMS((char *));
+int com_rename PARAMS((char *));
+int com_stat PARAMS((char *));
+int com_pwd PARAMS((char *));
+int com_delete PARAMS((char *));
+int com_help PARAMS((char *));
+int com_cd PARAMS((char *));
+int com_quit PARAMS((char *));
/* A structure which contains information on the commands this program
can understand. */
@@ -212,8 +212,8 @@ stripwhite (string)
/* */
/* **************************************************************** */
-char *command_generator __P((const char *, int));
-char **fileman_completion __P((const char *, int, int));
+char *command_generator PARAMS((const char *, int));
+char **fileman_completion PARAMS((const char *, int, int));
/* Tell the GNU Readline library how to complete. We want to try to complete
on command names if this is the first word in the line, or on filenames
diff --git a/examples/readlinebuf.h b/examples/readlinebuf.h
new file mode 100644
index 0000000..a8af52c
--- /dev/null
+++ b/examples/readlinebuf.h
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * $Revision: 1.2 $
+ * $Date: 2001/09/11 06:19:36 $
+ * $Author: vyzo $
+ *
+ * Contents: A streambuf which uses the GNU readline library for line I/O
+ * (c) 2001 by Dimitris Vyzovitis [vyzo@media.mit.edu]
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the Free
+ * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ******************************************************************************/
+
+#ifndef _READLINEBUF_H_
+#define _READLINEBUF_H_
+
+#include <iostream>
+#include <cstring>
+#include <cassert>
+#include <cstdlib>
+#include <cstdio>
+
+#include <readline/readline.h>
+#include <readline/history.h>
+
+#if (defined __GNUC__) && (__GNUC__ < 3)
+#include <streambuf.h>
+#else
+#include <streambuf>
+using std::streamsize;
+using std::streambuf;
+#endif
+
+class readlinebuf : public streambuf {
+public:
+#if (defined __GNUC__) && (__GNUC__ < 3)
+ typedef char char_type;
+ typedef int int_type;
+ typedef streampos pos_type;
+ typedef streamoff off_type;
+#endif
+ static const int_type eof = EOF; // this is -1
+ static const int_type not_eof = 0;
+
+private:
+ const char* prompt_;
+ bool history_;
+ char* line_;
+ int low_;
+ int high_;
+
+protected:
+
+ virtual int_type showmanyc() const { return high_ - low_; }
+
+ virtual streamsize xsgetn( char_type* buf, streamsize n ) {
+ int rd = n > (high_ - low_)? (high_ - low_) : n;
+ memcpy( buf, line_, rd );
+ low_ += rd;
+
+ if ( rd < n ) {
+ low_ = high_ = 0;
+ free( line_ ); // free( NULL ) is a noop
+ line_ = readline( prompt_ );
+ if ( line_ ) {
+ high_ = strlen( line_ );
+ if ( history_ && high_ ) add_history( line_ );
+ rd += xsgetn( buf + rd, n - rd );
+ }
+ }
+
+ return rd;
+ }
+
+ virtual int_type underflow() {
+ if ( high_ == low_ ) {
+ low_ = high_ = 0;
+ free( line_ ); // free( NULL ) is a noop
+ line_ = readline( prompt_ );
+ if ( line_ ) {
+ high_ = strlen( line_ );
+ if ( history_ && high_ ) add_history( line_ );
+ }
+ }
+
+ if ( low_ < high_ ) return line_[low_];
+ else return eof;
+ }
+
+ virtual int_type uflow() {
+ int_type c = underflow();
+ if ( c != eof ) ++low_;
+ return c;
+ }
+
+ virtual int_type pbackfail( int_type c = eof ) {
+ if ( low_ > 0 ) --low_;
+ else if ( c != eof ) {
+ if ( high_ > 0 ) {
+ char* nl = (char*)realloc( line_, high_ + 1 );
+ if ( nl ) {
+ line_ = (char*)memcpy( nl + 1, line_, high_ );
+ high_ += 1;
+ line_[0] = char( c );
+ } else return eof;
+ } else {
+ assert( !line_ );
+ line_ = (char*)malloc( sizeof( char ) );
+ *line_ = char( c );
+ high_ = 1;
+ }
+ } else return eof;
+
+ return not_eof;
+ }
+
+public:
+ readlinebuf( const char* prompt = NULL, bool history = true )
+ : prompt_( prompt ), history_( history ),
+ line_( NULL ), low_( 0 ), high_( 0 ) {
+ setbuf( 0, 0 );
+ }
+
+
+};
+
+#endif
diff --git a/funmap.c b/funmap.c
index e09faf5..e4f2801 100644
--- a/funmap.c
+++ b/funmap.c
@@ -46,7 +46,7 @@ typedef int QSFUNC (const void *, const void *);
typedef int QSFUNC ();
#endif
-extern int _rl_qsort_string_compare __P((char **, char **));
+extern int _rl_qsort_string_compare PARAMS((char **, char **));
FUNMAP **funmap;
static int funmap_size;
diff --git a/histexpand.c b/histexpand.c
index 1c8a1d9..04f6478 100644
--- a/histexpand.c
+++ b/histexpand.c
@@ -56,7 +56,7 @@
#define HISTORY_WORD_DELIMITERS " \t\n;&()|<>"
#define HISTORY_QUOTE_CHARACTERS "\"'`"
-typedef int _hist_search_func_t __P((const char *, int));
+typedef int _hist_search_func_t PARAMS((const char *, int));
static char error_pointer;
@@ -65,10 +65,10 @@ static char *subst_rhs;
static int subst_lhs_len;
static int subst_rhs_len;
-static char *get_history_word_specifier __P((char *, char *, int *));
-static char *history_find_word __P((char *, int));
+static char *get_history_word_specifier PARAMS((char *, char *, int *));
+static char *history_find_word PARAMS((char *, int));
-static char *quote_breaks __P((char *));
+static char *quote_breaks PARAMS((char *));
/* Variables exported by this file. */
/* The character that represents the start of a history expansion
@@ -212,7 +212,7 @@ get_history_event (string, caller_index, delimiting_quote)
break;
which = i - local_index;
- temp = xmalloc (1 + which);
+ temp = (char *)xmalloc (1 + which);
if (which)
strncpy (temp, string + local_index, which);
temp[which] = '\0';
@@ -314,7 +314,7 @@ quote_breaks (s)
len += 2;
}
- r = ret = xmalloc (len);
+ r = ret = (char *)xmalloc (len);
*r++ = '\'';
for (p = s; p && *p; )
{
@@ -379,7 +379,7 @@ hist_error(s, start, current, errtype)
break;
}
- temp = xmalloc (ll + elen + 3);
+ temp = (char *)xmalloc (ll + elen + 3);
strncpy (temp, s + start, ll);
temp[ll] = ':';
temp[ll + 1] = ' ';
@@ -415,7 +415,7 @@ get_subst_pattern (str, iptr, delimiter, is_rhs, lenptr)
if (si > i || is_rhs)
{
- s = xmalloc (si - i + 1);
+ s = (char *)xmalloc (si - i + 1);
for (j = 0, k = i; k < si; j++, k++)
{
/* Remove a backslash quoting the search string delimiter. */
@@ -442,13 +442,13 @@ postproc_subst_rhs ()
char *new;
int i, j, new_size;
- new = xmalloc (new_size = subst_rhs_len + subst_lhs_len);
+ new = (char *)xmalloc (new_size = subst_rhs_len + subst_lhs_len);
for (i = j = 0; i < subst_rhs_len; i++)
{
if (subst_rhs[i] == '&')
{
if (j + subst_lhs_len >= new_size)
- new = xrealloc (new, (new_size = new_size * 2 + subst_lhs_len));
+ new = (char *)xrealloc (new, (new_size = new_size * 2 + subst_lhs_len));
strcpy (new + j, subst_lhs);
j += subst_lhs_len;
}
@@ -458,7 +458,7 @@ postproc_subst_rhs ()
if (subst_rhs[i] == '\\' && subst_rhs[i + 1] == '&')
i++;
if (j >= new_size)
- new = xrealloc (new, new_size *= 2);
+ new = (char *)xrealloc (new, new_size *= 2);
new[j++] = subst_rhs[i];
}
}
@@ -485,7 +485,7 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
char *event, *temp, *result, *tstr, *t, c, *word_spec;
int result_len;
- result = xmalloc (result_len = 128);
+ result = (char *)xmalloc (result_len = 128);
i = start;
@@ -698,7 +698,7 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
if (STREQN (temp+si, subst_lhs, subst_lhs_len))
{
int len = subst_rhs_len - subst_lhs_len + l_temp;
- new_event = xmalloc (1 + len);
+ new_event = (char *)xmalloc (1 + len);
strncpy (new_event, temp, si);
strncpy (new_event + si, subst_rhs, subst_rhs_len);
strncpy (new_event + si + subst_rhs_len,
@@ -759,7 +759,7 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
n = strlen (temp);
if (n >= result_len)
- result = xrealloc (result, n + 2);
+ result = (char *)xrealloc (result, n + 2);
strcpy (result, temp);
free (temp);
@@ -790,7 +790,7 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
{ \
while (j >= result_len) \
result_len += 128; \
- result = xrealloc (result, result_len); \
+ result = (char *)xrealloc (result, result_len); \
} \
strcpy (result + j - sl, s); \
} \
@@ -800,7 +800,7 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
do \
{ \
if (j >= result_len - 1) \
- result = xrealloc (result, result_len += 64); \
+ result = (char *)xrealloc (result, result_len += 64); \
result[j++] = c; \
result[j] = '\0'; \
} \
@@ -834,7 +834,7 @@ history_expand (hstring, output)
}
/* Prepare the buffer for printing error messages. */
- result = xmalloc (result_len = 256);
+ result = (char *)xmalloc (result_len = 256);
result[0] = '\0';
only_printing = modified = 0;
@@ -851,7 +851,7 @@ history_expand (hstring, output)
that is the substitution that we do. */
if (hstring[0] == history_subst_char)
{
- string = xmalloc (l + 5);
+ string = (char *)xmalloc (l + 5);
string[0] = string[1] = history_expansion_char;
string[2] = ':';
@@ -960,7 +960,7 @@ history_expand (hstring, output)
hist_string_extract_single_quoted (string, &i);
slen = i - quote + 2;
- temp = xmalloc (slen);
+ temp = (char *)xmalloc (slen);
strncpy (temp, string + quote, slen);
temp[slen - 1] = '\0';
ADD_STRING (temp);
@@ -974,7 +974,7 @@ history_expand (hstring, output)
case -2: /* history_comment_char */
if (i == 0 || member (string[i - 1], history_word_delimiters))
{
- temp = xmalloc (l - i + 1);
+ temp = (char *)xmalloc (l - i + 1);
strcpy (temp, string + i);
ADD_STRING (temp);
free (temp);
@@ -1006,7 +1006,7 @@ history_expand (hstring, output)
{
if (result)
{
- temp = xmalloc (1 + strlen (result));
+ temp = (char *)xmalloc (1 + strlen (result));
strcpy (temp, result);
ADD_STRING (temp);
free (temp);
@@ -1140,7 +1140,14 @@ get_history_word_specifier (spec, from, caller_index)
i++;
last = '$';
}
- else if (!spec[i] || spec[i] == ':') /* could be modifier separator */
+#if 0
+ else if (!spec[i] || spec[i] == ':')
+ /* check against `:' because there could be a modifier separator */
+#else
+ else
+ /* csh seems to allow anything to terminate the word spec here,
+ leaving it as an abbreviation. */
+#endif
last = -1; /* x- abbreviates x-$ omitting word `$' */
}
@@ -1196,7 +1203,7 @@ history_arg_extract (first, last, string)
{
for (size = 0, i = first; i < last; i++)
size += strlen (list[i]) + 1;
- result = xmalloc (size + 1);
+ result = (char *)xmalloc (size + 1);
result[0] = '\0';
for (i = first, offset = 0; i < last; i++)
@@ -1329,7 +1336,7 @@ history_tokenize_internal (string, wind, indp)
len = i - start;
if (result_index + 2 >= size)
result = (char **)xrealloc (result, ((size += 10) * sizeof (char *)));
- result[result_index] = xmalloc (1 + len);
+ result[result_index] = (char *)xmalloc (1 + len);
strncpy (result[result_index], string + start, len);
result[result_index][len] = '\0';
result[++result_index] = (char *)NULL;
diff --git a/histfile.c b/histfile.c
index c0582de..ab3c6c1 100644
--- a/histfile.c
+++ b/histfile.c
@@ -105,7 +105,7 @@ history_filename (filename)
else
home_len = strlen (home);
- return_val = xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */
+ return_val = (char *)xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */
strcpy (return_val, home);
return_val[home_len] = '/';
#if defined (__MSDOS__)
@@ -161,7 +161,7 @@ read_history_range (filename, from, to)
goto error_and_exit;
}
- buffer = xmalloc (file_size + 1);
+ buffer = (char *)xmalloc (file_size + 1);
chars_read = read (file, buffer, file_size);
if (chars_read < 0)
@@ -276,7 +276,7 @@ history_truncate_file (fname, lines)
goto truncate_exit;
}
- buffer = xmalloc (file_size + 1);
+ buffer = (char *)xmalloc (file_size + 1);
chars_read = read (file, buffer, file_size);
close (file);
@@ -367,7 +367,7 @@ history_do_write (filename, nelements, overwrite)
buffer_size += 1 + strlen (the_history[i]->line);
/* Allocate the buffer, and fill it. */
- buffer = xmalloc (buffer_size);
+ buffer = (char *)xmalloc (buffer_size);
for (j = 0, i = history_length - nelements; i < history_length; i++)
{
diff --git a/history.c b/history.c
index d59d8ce..e2d65ea 100644
--- a/history.c
+++ b/history.c
@@ -71,6 +71,9 @@ static HIST_ENTRY **the_history = (HIST_ENTRY **)NULL;
history that we save. */
static int history_stifled;
+/* The current number of slots allocated to the input_history. */
+static int history_size;
+
/* If HISTORY_STIFLED is non-zero, then this is the maximum number of
entries to remember. */
int history_max_entries;
@@ -83,9 +86,6 @@ int history_offset;
/* The number of strings currently stored in the history list. */
int history_length;
-/* The current number of slots allocated to the input_history. */
-static int history_size;
-
/* The logical `base' of the history array. It defaults to 1. */
int history_base = 1;
diff --git a/history.h b/history.h
index 947902e..58b5de4 100644
--- a/history.h
+++ b/history.h
@@ -62,81 +62,81 @@ typedef struct _hist_state {
/* Begin a session in which the history functions might be used. This
just initializes the interactive variables. */
-extern void using_history __P((void));
+extern void using_history PARAMS((void));
/* Return the current HISTORY_STATE of the history. */
-extern HISTORY_STATE *history_get_history_state __P((void));
+extern HISTORY_STATE *history_get_history_state PARAMS((void));
/* Set the state of the current history array to STATE. */
-extern void history_set_history_state __P((HISTORY_STATE *));
+extern void history_set_history_state PARAMS((HISTORY_STATE *));
/* Manage the history list. */
/* Place STRING at the end of the history list.
The associated data field (if any) is set to NULL. */
-extern void add_history __P((const char *));
+extern void add_history PARAMS((const char *));
/* A reasonably useless function, only here for completeness. WHICH
is the magic number that tells us which element to delete. The
elements are numbered from 0. */
-extern HIST_ENTRY *remove_history __P((int));
+extern HIST_ENTRY *remove_history PARAMS((int));
/* Make the history entry at WHICH have LINE and DATA. This returns
the old entry so you can dispose of the data. In the case of an
invalid WHICH, a NULL pointer is returned. */
-extern HIST_ENTRY *replace_history_entry __P((int, const char *, histdata_t));
+extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t));
/* Clear the history list and start over. */
-extern void clear_history __P((void));
+extern void clear_history PARAMS((void));
/* Stifle the history list, remembering only MAX number of entries. */
-extern void stifle_history __P((int));
+extern void stifle_history PARAMS((int));
/* Stop stifling the history. This returns the previous amount the
history was stifled by. The value is positive if the history was
stifled, negative if it wasn't. */
-extern int unstifle_history __P((void));
+extern int unstifle_history PARAMS((void));
/* Return 1 if the history is stifled, 0 if it is not. */
-extern int history_is_stifled __P((void));
+extern int history_is_stifled PARAMS((void));
/* Information about the history list. */
/* Return a NULL terminated array of HIST_ENTRY which is the current input
history. Element 0 of this list is the beginning of time. If there
is no history, return NULL. */
-extern HIST_ENTRY **history_list __P((void));
+extern HIST_ENTRY **history_list PARAMS((void));
/* Returns the number which says what history element we are now
looking at. */
-extern int where_history __P((void));
+extern int where_history PARAMS((void));
/* Return the history entry at the current position, as determined by
history_offset. If there is no entry there, return a NULL pointer. */
-extern HIST_ENTRY *current_history __P((void));
+extern HIST_ENTRY *current_history PARAMS((void));
/* Return the history entry which is logically at OFFSET in the history
array. OFFSET is relative to history_base. */
-extern HIST_ENTRY *history_get __P((int));
+extern HIST_ENTRY *history_get PARAMS((int));
/* Return the number of bytes that the primary history entries are using.
This just adds up the lengths of the_history->lines. */
-extern int history_total_bytes __P((void));
+extern int history_total_bytes PARAMS((void));
/* Moving around the history list. */
/* Set the position in the history list to POS. */
-extern int history_set_pos __P((int));
+extern int history_set_pos PARAMS((int));
/* Back up history_offset to the previous history entry, and return
a pointer to that entry. If there is no previous entry, return
a NULL pointer. */
-extern HIST_ENTRY *previous_history __P((void));
+extern HIST_ENTRY *previous_history PARAMS((void));
/* Move history_offset forward to the next item in the input_history,
and return the a pointer to that entry. If there is no next entry,
return a NULL pointer. */
-extern HIST_ENTRY *next_history __P((void));
+extern HIST_ENTRY *next_history PARAMS((void));
/* Searching the history list. */
@@ -146,45 +146,45 @@ extern HIST_ENTRY *next_history __P((void));
current_history () is the history entry, and the value of this function
is the offset in the line of that history entry that the string was
found in. Otherwise, nothing is changed, and a -1 is returned. */
-extern int history_search __P((const char *, int));
+extern int history_search PARAMS((const char *, int));
/* Search the history for STRING, starting at history_offset.
The search is anchored: matching lines must begin with string.
DIRECTION is as in history_search(). */
-extern int history_search_prefix __P((const char *, int));
+extern int history_search_prefix PARAMS((const char *, int));
/* Search for STRING in the history list, starting at POS, an
absolute index into the list. DIR, if negative, says to search
backwards from POS, else forwards.
Returns the absolute index of the history element where STRING
was found, or -1 otherwise. */
-extern int history_search_pos __P((const char *, int, int));
+extern int history_search_pos PARAMS((const char *, int, int));
/* Managing the history file. */
/* Add the contents of FILENAME to the history list, a line at a time.
If FILENAME is NULL, then read from ~/.history. Returns 0 if
successful, or errno if not. */
-extern int read_history __P((const char *));
+extern int read_history PARAMS((const char *));
/* Read a range of lines from FILENAME, adding them to the history list.
Start reading at the FROM'th line and end at the TO'th. If FROM
is zero, start at the beginning. If TO is less than FROM, read
until the end of the file. If FILENAME is NULL, then read from
~/.history. Returns 0 if successful, or errno if not. */
-extern int read_history_range __P((const char *, int, int));
+extern int read_history_range PARAMS((const char *, int, int));
/* Write the current history to FILENAME. If FILENAME is NULL,
then write the history list to ~/.history. Values returned
are as in read_history (). */
-extern int write_history __P((const char *));
+extern int write_history PARAMS((const char *));
/* Append NELEMENT entries to FILENAME. The entries appended are from
the end of the list minus NELEMENTs up to the end of the list. */
-extern int append_history __P((int, const char *));
+extern int append_history PARAMS((int, const char *));
/* Truncate the history file, leaving only the last NLINES lines. */
-extern int history_truncate_file __P((const char *, int));
+extern int history_truncate_file PARAMS((const char *, int));
/* History expansion. */
@@ -200,12 +200,12 @@ extern int history_truncate_file __P((const char *, int));
If an error ocurred in expansion, then OUTPUT contains a descriptive
error message. */
-extern int history_expand __P((char *, char **));
+extern int history_expand PARAMS((char *, char **));
/* Extract a string segment consisting of the FIRST through LAST
arguments present in STRING. Arguments are broken up as in
the shell. */
-extern char *history_arg_extract __P((int, int, const char *));
+extern char *history_arg_extract PARAMS((int, int, const char *));
/* Return the text of the history event beginning at the current
offset into STRING. Pass STRING with *INDEX equal to the
@@ -213,11 +213,11 @@ extern char *history_arg_extract __P((int, int, const char *));
DELIMITING_QUOTE is a character that is allowed to end the string
specification for what to search for in addition to the normal
characters `:', ` ', `\t', `\n', and sometimes `?'. */
-extern char *get_history_event __P((const char *, int *, int));
+extern char *get_history_event PARAMS((const char *, int *, int));
/* Return an array of tokens, much as the shell might. The tokens are
parsed out of STRING. */
-extern char **history_tokenize __P((const char *));
+extern char **history_tokenize PARAMS((const char *));
/* Exported history variables. */
extern int history_base;
diff --git a/histsearch.c b/histsearch.c
index ff4f3a1..76303f4 100644
--- a/histsearch.c
+++ b/histsearch.c
@@ -51,6 +51,8 @@
string. */
char *history_search_delimiter_chars = (char *)NULL;
+static int history_search_internal PARAMS((const char *, int, int));
+
/* Search the history for STRING, starting at history_offset.
If DIRECTION < 0, then the search is through previous entries, else
through subsequent. If ANCHORED is non-zero, the string must
diff --git a/input.c b/input.c
index e5af52d..e34558b 100644
--- a/input.c
+++ b/input.c
@@ -84,6 +84,11 @@ rl_getc_func_t *rl_getc_function = rl_getc;
static int _keyboard_input_timeout = 100000; /* 0.1 seconds; it's in usec */
+static int ibuffer_space PARAMS((void));
+static int rl_get_char PARAMS((int *));
+static int rl_unget_char PARAMS((int));
+static void rl_gather_tyi PARAMS((void));
+
/* **************************************************************** */
/* */
/* Character Input Buffering */
@@ -245,7 +250,7 @@ _rl_input_available ()
fd_set readfds, exceptfds;
struct timeval timeout;
#endif
-#if defined(FIONREAD)
+#if !defined (HAVE_SELECT) && defined(FIONREAD)
int chars_avail;
#endif
int tty;
@@ -260,13 +265,15 @@ _rl_input_available ()
timeout.tv_sec = 0;
timeout.tv_usec = _keyboard_input_timeout;
return (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) > 0);
-#endif
+#else
#if defined (FIONREAD)
if (ioctl (tty, FIONREAD, &chars_avail) == 0)
return (chars_avail);
#endif
+#endif
+
return 0;
}
@@ -278,7 +285,7 @@ _rl_insert_typein (c)
char *string;
i = key = 0;
- string = xmalloc (ibuffer_len + 1);
+ string = (char *)xmalloc (ibuffer_len + 1);
string[i++] = (char) c;
while ((t = rl_get_char (&key)) &&
diff --git a/isearch.c b/isearch.c
index f8d7695..2e3e16b 100644
--- a/isearch.c
+++ b/isearch.c
@@ -52,19 +52,23 @@
#include "xmalloc.h"
/* Variables exported to other files in the readline library. */
-unsigned char *_rl_isearch_terminators = (unsigned char *)NULL;
+char *_rl_isearch_terminators = (char *)NULL;
/* Variables imported from other files in the readline library. */
extern HIST_ENTRY *_rl_saved_line_for_history;
/* Forward declarations */
-static int rl_search_history __P((int, int));
+static int rl_search_history PARAMS((int, int));
/* Last line found by the current incremental search, so we don't `find'
identical lines many times in a row. */
static char *prev_line_found;
-static unsigned char *default_isearch_terminators = "\033\012";
+/* Last search string and its length. */
+static char *last_isearch_string;
+static int last_isearch_string_len;
+
+static char *default_isearch_terminators = "\033\012";
/* Search backwards through the history looking for a string which is typed
interactively. Start with the current line. */
@@ -99,7 +103,7 @@ rl_display_search (search_string, reverse_p, where)
searchlen = (search_string && *search_string) ? strlen (search_string) : 0;
- message = xmalloc (searchlen + 33);
+ message = (char *)xmalloc (searchlen + 33);
msglen = 0;
#if defined (NOTDEF)
@@ -129,7 +133,7 @@ rl_display_search (search_string, reverse_p, where)
strcpy (message + msglen, "': ");
- rl_message ("%s", message, 0);
+ rl_message ("%s", message);
free (message);
(*rl_redisplay_function) ();
}
@@ -176,7 +180,7 @@ rl_search_history (direction, invoking_key)
/* The list of characters which terminate the search, but are not
subsequently executed. If the variable isearch-terminators has
been set, we use that value, otherwise we use ESC and C-J. */
- unsigned char *isearch_terminators;
+ char *isearch_terminators;
RL_SETSTATE(RL_STATE_ISEARCH);
orig_point = rl_point;
@@ -205,7 +209,7 @@ rl_search_history (direction, invoking_key)
else
{
/* Keep track of this so we can free it. */
- allocated_line = xmalloc (1 + strlen (rl_line_buffer));
+ allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer));
strcpy (allocated_line, &rl_line_buffer[0]);
lines[i] = allocated_line;
}
@@ -218,7 +222,7 @@ rl_search_history (direction, invoking_key)
rl_save_prompt ();
/* Initialize search parameters. */
- search_string = xmalloc (search_string_size = 128);
+ search_string = (char *)xmalloc (search_string_size = 128);
*search_string = '\0';
search_string_index = 0;
prev_line_found = (char *)0; /* XXX */
@@ -242,7 +246,7 @@ rl_search_history (direction, invoking_key)
c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
- if (_rl_keymap[c].type == ISFUNC)
+ if (c >= 0 && _rl_keymap[c].type == ISFUNC)
{
f = _rl_keymap[c].function;
@@ -288,7 +292,18 @@ rl_search_history (direction, invoking_key)
{
case -1:
if (search_string_index == 0)
- continue;
+ {
+ if (last_isearch_string)
+ {
+ search_string_size = 64 + last_isearch_string_len;
+ search_string = (char *)xrealloc (search_string, search_string_size);
+ strcpy (search_string, last_isearch_string);
+ search_string_index = last_isearch_string_len;
+ rl_display_search (search_string, reverse, -1);
+ break;
+ }
+ continue;
+ }
else if (reverse)
--line_index;
else if (line_index != sline_len)
@@ -335,7 +350,7 @@ rl_search_history (direction, invoking_key)
if (search_string_index + 2 >= search_string_size)
{
search_string_size += 128;
- search_string = xrealloc (search_string, search_string_size);
+ search_string = (char *)xrealloc (search_string, search_string_size);
}
search_string[search_string_index++] = c;
search_string[search_string_index] = '\0';
@@ -428,8 +443,15 @@ rl_search_history (direction, invoking_key)
rl_restore_prompt ();
+#if 1
+ /* Save the search string for possible later use. */
+ FREE (last_isearch_string);
+ last_isearch_string = search_string;
+ last_isearch_string_len = search_string_index;
+#else
/* Free the search string. */
free (search_string);
+#endif
if (last_found_line < orig_line)
rl_get_previous_history (orig_line - last_found_line, 0);
@@ -442,8 +464,7 @@ rl_search_history (direction, invoking_key)
rl_point = line_index;
rl_clear_message ();
- if (allocated_line)
- free (allocated_line);
+ FREE (allocated_line);
free (lines);
RL_UNSETSTATE(RL_STATE_ISEARCH);
diff --git a/keymaps.h b/keymaps.h
index d8cba23..93cc820 100644
--- a/keymaps.h
+++ b/keymaps.h
@@ -70,30 +70,30 @@ extern KEYMAP_ENTRY_ARRAY vi_insertion_keymap, vi_movement_keymap;
/* Return a new, empty keymap.
Free it with free() when you are done. */
-extern Keymap rl_make_bare_keymap __P((void));
+extern Keymap rl_make_bare_keymap PARAMS((void));
/* Return a new keymap which is a copy of MAP. */
-extern Keymap rl_copy_keymap __P((Keymap));
+extern Keymap rl_copy_keymap PARAMS((Keymap));
/* Return a new keymap with the printing characters bound to rl_insert,
the lowercase Meta characters bound to run their equivalents, and
the Meta digits bound to produce numeric arguments. */
-extern Keymap rl_make_keymap __P((void));
+extern Keymap rl_make_keymap PARAMS((void));
/* Free the storage associated with a keymap. */
-extern void rl_discard_keymap __P((Keymap));
+extern void rl_discard_keymap PARAMS((Keymap));
/* These functions actually appear in bind.c */
/* Return the keymap corresponding to a given name. Names look like
`emacs' or `emacs-meta' or `vi-insert'. */
-extern Keymap rl_get_keymap_by_name __P((const char *));
+extern Keymap rl_get_keymap_by_name PARAMS((const char *));
/* Return the current keymap. */
-extern Keymap rl_get_keymap __P((void));
+extern Keymap rl_get_keymap PARAMS((void));
/* Set the current keymap to MAP. */
-extern void rl_set_keymap __P((Keymap));
+extern void rl_set_keymap PARAMS((Keymap));
#ifdef __cplusplus
}
diff --git a/kill.c b/kill.c
index 3ced8fb..90ce6e4 100644
--- a/kill.c
+++ b/kill.c
@@ -70,6 +70,11 @@ static int rl_kill_index;
/* How many slots we have in the kill ring. */
static int rl_kill_ring_length;
+static int _rl_copy_to_kill_ring PARAMS((char *, int));
+static int region_kill_internal PARAMS((int));
+static int _rl_copy_word_as_kill PARAMS((int, int));
+static int rl_yank_nth_arg_internal PARAMS((int, int, int));
+
/* How to say that you only want to save a certain amount
of kill material. */
int
@@ -129,7 +134,7 @@ _rl_copy_to_kill_ring (text, append)
if (_rl_last_command_was_kill && rl_editing_mode != vi_mode)
{
old = rl_kill_ring[slot];
- new = xmalloc (1 + strlen (old) + strlen (text));
+ new = (char *)xmalloc (1 + strlen (old) + strlen (text));
if (append)
{
@@ -612,7 +617,7 @@ rl_paste_from_clipboard (count, key)
if (ptr)
{
len = ptr - data;
- ptr = xmalloc (len + 1);
+ ptr = (char *)xmalloc (len + 1);
ptr[len] = '\0';
strncpy (ptr, data, len);
}
diff --git a/macro.c b/macro.c
index fed298a..347f89b 100644
--- a/macro.c
+++ b/macro.c
@@ -163,9 +163,9 @@ _rl_add_macro_char (c)
if (current_macro_index + 1 >= current_macro_size)
{
if (current_macro == 0)
- current_macro = xmalloc (current_macro_size = 25);
+ current_macro = (char *)xmalloc (current_macro_size = 25);
else
- current_macro = xrealloc (current_macro, current_macro_size += 25);
+ current_macro = (char *)xrealloc (current_macro, current_macro_size += 25);
}
current_macro[current_macro_index++] = c;
diff --git a/nls.c b/nls.c
index f807995..706c819 100644
--- a/nls.c
+++ b/nls.c
@@ -71,8 +71,8 @@ static char *legal_lang_values[] =
0
};
-static char *normalize_codeset __P((char *));
-static char *find_codeset __P((char *, size_t *));
+static char *normalize_codeset PARAMS((char *));
+static char *find_codeset PARAMS((char *, size_t *));
#endif /* !HAVE_SETLOCALE */
/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
@@ -141,10 +141,10 @@ normalize_codeset (codeset)
all_digits = 1;
for (len = 0, i = 0; i < namelen; i++)
{
- if (isalnum (codeset[i]))
+ if (ISALNUM ((unsigned char)codeset[i]))
{
len++;
- all_digits &= isdigit (codeset[i]);
+ all_digits &= _rl_digit_p (codeset[i]);
}
}
@@ -162,9 +162,9 @@ normalize_codeset (codeset)
}
for (i = 0; i < namelen; i++)
- if (isalpha (codeset[i]))
- *wp++ = (isupper (codeset[i])) ? tolower (codeset[i]) : codeset[i];
- else if (isdigit (codeset[i]))
+ if (ISALPHA ((unsigned char)codeset[i]))
+ *wp++ = _rl_to_lower (codeset[i]);
+ else if (_rl_digit_p (codeset[i]))
*wp++ = codeset[i];
*wp = '\0';
diff --git a/parens.c b/parens.c
index d1e66f5..ca6c368 100644
--- a/parens.c
+++ b/parens.c
@@ -54,7 +54,7 @@ extern char *strchr (), *strrchr ();
#include "readline.h"
#include "rlprivate.h"
-static int find_matching_open __P((char *, int, int));
+static int find_matching_open PARAMS((char *, int, int));
/* Non-zero means try to blink the matching open parenthesis when the
close parenthesis is inserted. */
diff --git a/readline.c b/readline.c
index 9d7cc5b..3efd810 100644
--- a/readline.c
+++ b/readline.c
@@ -67,22 +67,26 @@
#include "xmalloc.h"
#ifndef RL_LIBRARY_VERSION
-# define RL_LIBRARY_VERSION "4.2"
+# define RL_LIBRARY_VERSION "4.2a"
+#endif
+
+#ifndef RL_READLINE_VERSION
+# define RL_READLINE_VERSION 0x0402
#endif
/* Evaluates its arguments multiple times. */
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
/* Forward declarations used in this file. */
-void _rl_free_history_entry __P((HIST_ENTRY *));
+void _rl_free_history_entry PARAMS((HIST_ENTRY *));
-static char *readline_internal __P((void));
-static void readline_initialize_everything __P((void));
-static void start_using_history __P((void));
-static void bind_arrow_keys __P((void));
-static int rl_change_case __P((int, int));
+static char *readline_internal PARAMS((void));
+static void readline_initialize_everything PARAMS((void));
+static void start_using_history PARAMS((void));
+static void bind_arrow_keys PARAMS((void));
+static int rl_change_case PARAMS((int, int));
-static void readline_default_bindings __P((void));
+static void readline_default_bindings PARAMS((void));
/* **************************************************************** */
/* */
@@ -92,6 +96,8 @@ static void readline_default_bindings __P((void));
const char *rl_library_version = RL_LIBRARY_VERSION;
+int rl_readline_version = RL_READLINE_VERSION;
+
/* True if this is `real' readline as opposed to some stub substitute. */
int rl_gnu_readline_p = 1;
@@ -155,8 +161,11 @@ FILE *_rl_in_stream, *_rl_out_stream;
FILE *rl_instream = (FILE *)NULL;
FILE *rl_outstream = (FILE *)NULL;
-/* Non-zero means echo characters as they are read. */
-int readline_echoing_p = 1;
+/* Non-zero means echo characters as they are read. Defaults to no echo;
+ set to 1 if there is a controlling terminal, we can get its attributes,
+ and the attributes include `echo'. Look at rltty.c:prepare_terminal_settings
+ for the code that sets it. */
+int readline_echoing_p = 0;
/* Current prompt. */
char *rl_prompt = (char *)NULL;
@@ -219,7 +228,7 @@ int rl_num_chars_to_read;
char *rl_line_buffer = (char *)NULL;
int rl_line_buffer_len = 0;
-/* Forward declarations used by the display and termcap code. */
+/* Forward declarations used by the display, termcap, and history code. */
/* **************************************************************** */
/* */
@@ -240,6 +249,14 @@ int _rl_convert_meta_chars_to_ascii = 1;
rather than as a meta-prefixed escape sequence. */
int _rl_output_meta_chars = 0;
+/* If non-zero, rl_get_previous_history and rl_get_next_history attempt
+ to preserve the value of rl_point from line to line. */
+int _rl_history_preserve_point = 0;
+
+/* Saved target point for when _rl_history_preserve_point is set. Special
+ value of -1 means that point is at the end of the line. */
+static int _rl_history_saved_point = -1;
+
/* **************************************************************** */
/* */
/* Top Level Functions */
@@ -258,9 +275,7 @@ rl_set_prompt (prompt)
FREE (rl_prompt);
rl_prompt = prompt ? savestring (prompt) : (char *)NULL;
- rl_visible_prompt_length = (rl_prompt && *rl_prompt)
- ? rl_expand_prompt (rl_prompt)
- : 0;
+ rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
return 0;
}
@@ -583,6 +598,12 @@ _rl_dispatch (key, map)
if (key == ESC)
RL_UNSETSTATE(RL_STATE_METANEXT);
+ if (newkey < 0)
+ {
+ _rl_abort_internal ();
+ return -1;
+ }
+
r = _rl_dispatch (newkey, FUNCTION_TO_KEYMAP (map, key));
}
else
@@ -714,7 +735,7 @@ readline_initialize_everything ()
/* Allocate data structures. */
if (rl_line_buffer == 0)
- rl_line_buffer = xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
+ rl_line_buffer = (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE);
/* Initialize the terminal interface. */
if (rl_terminal_name == 0)
@@ -855,6 +876,12 @@ rl_digit_loop ()
key = c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
+ if (c < 0)
+ {
+ _rl_abort_internal ();
+ return -1;
+ }
+
/* If we see a key bound to `universal-argument' after seeing digits,
it ends the argument but is otherwise ignored. */
if (_rl_keymap[c].type == ISFUNC &&
@@ -901,8 +928,7 @@ rl_digit_loop ()
}
}
- RL_UNSETSTATE(RL_STATE_NUMERICARG);
- return 0;
+ /*NOTREACHED*/
}
/* Add the current digit to the argument in progress. */
@@ -1139,6 +1165,10 @@ rl_backward (count, key)
else
rl_point -= count;
}
+
+ if (rl_point < 0)
+ rl_point = 0;
+
return 0;
}
@@ -1344,7 +1374,7 @@ rl_insert (count, c)
readline because of extra large arguments. */
if (count > 1 && count <= 1024)
{
- string = xmalloc (1 + count);
+ string = (char *)xmalloc (1 + count);
for (i = 0; i < count; i++)
string[i] = c;
@@ -1431,6 +1461,10 @@ rl_newline (count, key)
int count, key;
{
rl_done = 1;
+
+ if (_rl_history_preserve_point)
+ _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
+
RL_SETSTATE(RL_STATE_DONE);
#if defined (VI_MODE)
@@ -1487,10 +1521,10 @@ rl_rubout (count, key)
}
else
{
- int c = the_line[--rl_point];
+ unsigned char c = the_line[--rl_point];
rl_delete_text (rl_point, rl_point + 1);
- if (rl_point == rl_end && isprint (c) && _rl_last_c_pos)
+ if (rl_point == rl_end && ISPRINT (c) && _rl_last_c_pos)
{
int l;
l = rl_character_len (c, rl_point);
@@ -1685,7 +1719,8 @@ rl_change_case (count, op)
/* */
/* **************************************************************** */
-/* Transpose the words at point. */
+/* Transpose the words at point. If point is at the end of the line,
+ transpose the two words before point. */
int
rl_transpose_words (count, key)
int count, key;
@@ -2000,6 +2035,10 @@ rl_get_next_history (count, key)
rl_maybe_replace_line ();
+ /* either not saved by rl_newline or at end of line, so set appropriately. */
+ if (_rl_history_saved_point == -1 && (rl_point || rl_end))
+ _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
+
temp = (HIST_ENTRY *)NULL;
while (count)
{
@@ -2020,7 +2059,12 @@ rl_get_next_history (count, key)
strcpy (the_line, temp->line);
rl_undo_list = (UNDO_LIST *)temp->data;
- rl_end = rl_point = strlen (the_line);
+ rl_end = strlen (the_line);
+ rl_point = (_rl_history_preserve_point && _rl_history_saved_point != -1)
+ ? _rl_history_saved_point
+ : rl_end;
+ if (rl_point > rl_end)
+ rl_point = rl_end;
#if defined (VI_MODE)
if (rl_editing_mode == vi_mode)
rl_point = 0;
@@ -2044,6 +2088,10 @@ rl_get_previous_history (count, key)
if (count == 0)
return 0;
+ /* either not saved by rl_newline or at end of line, so set appropriately. */
+ if (_rl_history_saved_point == -1 && (rl_point || rl_end))
+ _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point;
+
/* If we don't have a line saved, then save this one. */
rl_maybe_save_line ();
@@ -2077,7 +2125,12 @@ rl_get_previous_history (count, key)
strcpy (the_line, temp->line);
rl_undo_list = (UNDO_LIST *)temp->data;
- rl_end = rl_point = line_len;
+ rl_end = line_len;
+ rl_point = (_rl_history_preserve_point && _rl_history_saved_point != -1)
+ ? _rl_history_saved_point
+ : rl_end;
+ if (rl_point > rl_end)
+ rl_point = rl_end;
#if defined (VI_MODE)
if (rl_editing_mode == vi_mode)
diff --git a/readline.h b/readline.h
index d362df1..d608c7a 100644
--- a/readline.h
+++ b/readline.h
@@ -37,6 +37,11 @@ extern "C" {
# include <readline/tilde.h>
#endif
+/* Hex-encoded Readline version number. */
+#define RL_READLINE_VERSION 0x0402 /* Readline 4.2 */
+#define RL_VERSION_MAJOR 4
+#define RL_VERSION_MINOR 2
+
/* Readline data structures. */
/* Maintaining the state of undo. We remember individual deletes and inserts
@@ -73,184 +78,184 @@ extern FUNMAP **funmap;
/* **************************************************************** */
/* Bindable commands for numeric arguments. */
-extern int rl_digit_argument __P((int, int));
-extern int rl_universal_argument __P((int, int));
+extern int rl_digit_argument PARAMS((int, int));
+extern int rl_universal_argument PARAMS((int, int));
/* Bindable commands for moving the cursor. */
-extern int rl_forward __P((int, int));
-extern int rl_backward __P((int, int));
-extern int rl_beg_of_line __P((int, int));
-extern int rl_end_of_line __P((int, int));
-extern int rl_forward_word __P((int, int));
-extern int rl_backward_word __P((int, int));
-extern int rl_refresh_line __P((int, int));
-extern int rl_clear_screen __P((int, int));
-extern int rl_arrow_keys __P((int, int));
+extern int rl_forward PARAMS((int, int));
+extern int rl_backward PARAMS((int, int));
+extern int rl_beg_of_line PARAMS((int, int));
+extern int rl_end_of_line PARAMS((int, int));
+extern int rl_forward_word PARAMS((int, int));
+extern int rl_backward_word PARAMS((int, int));
+extern int rl_refresh_line PARAMS((int, int));
+extern int rl_clear_screen PARAMS((int, int));
+extern int rl_arrow_keys PARAMS((int, int));
/* Bindable commands for inserting and deleting text. */
-extern int rl_insert __P((int, int));
-extern int rl_quoted_insert __P((int, int));
-extern int rl_tab_insert __P((int, int));
-extern int rl_newline __P((int, int));
-extern int rl_do_lowercase_version __P((int, int));
-extern int rl_rubout __P((int, int));
-extern int rl_delete __P((int, int));
-extern int rl_rubout_or_delete __P((int, int));
-extern int rl_delete_horizontal_space __P((int, int));
-extern int rl_delete_or_show_completions __P((int, int));
-extern int rl_insert_comment __P((int, int));
+extern int rl_insert PARAMS((int, int));
+extern int rl_quoted_insert PARAMS((int, int));
+extern int rl_tab_insert PARAMS((int, int));
+extern int rl_newline PARAMS((int, int));
+extern int rl_do_lowercase_version PARAMS((int, int));
+extern int rl_rubout PARAMS((int, int));
+extern int rl_delete PARAMS((int, int));
+extern int rl_rubout_or_delete PARAMS((int, int));
+extern int rl_delete_horizontal_space PARAMS((int, int));
+extern int rl_delete_or_show_completions PARAMS((int, int));
+extern int rl_insert_comment PARAMS((int, int));
/* Bindable commands for changing case. */
-extern int rl_upcase_word __P((int, int));
-extern int rl_downcase_word __P((int, int));
-extern int rl_capitalize_word __P((int, int));
+extern int rl_upcase_word PARAMS((int, int));
+extern int rl_downcase_word PARAMS((int, int));
+extern int rl_capitalize_word PARAMS((int, int));
/* Bindable commands for transposing characters and words. */
-extern int rl_transpose_words __P((int, int));
-extern int rl_transpose_chars __P((int, int));
+extern int rl_transpose_words PARAMS((int, int));
+extern int rl_transpose_chars PARAMS((int, int));
/* Bindable commands for searching within a line. */
-extern int rl_char_search __P((int, int));
-extern int rl_backward_char_search __P((int, int));
+extern int rl_char_search PARAMS((int, int));
+extern int rl_backward_char_search PARAMS((int, int));
/* Bindable commands for readline's interface to the command history. */
-extern int rl_beginning_of_history __P((int, int));
-extern int rl_end_of_history __P((int, int));
-extern int rl_get_next_history __P((int, int));
-extern int rl_get_previous_history __P((int, int));
+extern int rl_beginning_of_history PARAMS((int, int));
+extern int rl_end_of_history PARAMS((int, int));
+extern int rl_get_next_history PARAMS((int, int));
+extern int rl_get_previous_history PARAMS((int, int));
/* Bindable commands for managing the mark and region. */
-extern int rl_set_mark __P((int, int));
-extern int rl_exchange_point_and_mark __P((int, int));
+extern int rl_set_mark PARAMS((int, int));
+extern int rl_exchange_point_and_mark PARAMS((int, int));
/* Bindable commands to set the editing mode (emacs or vi). */
-extern int rl_vi_editing_mode __P((int, int));
-extern int rl_emacs_editing_mode __P((int, int));
+extern int rl_vi_editing_mode PARAMS((int, int));
+extern int rl_emacs_editing_mode PARAMS((int, int));
/* Bindable commands for managing key bindings. */
-extern int rl_re_read_init_file __P((int, int));
-extern int rl_dump_functions __P((int, int));
-extern int rl_dump_macros __P((int, int));
-extern int rl_dump_variables __P((int, int));
+extern int rl_re_read_init_file PARAMS((int, int));
+extern int rl_dump_functions PARAMS((int, int));
+extern int rl_dump_macros PARAMS((int, int));
+extern int rl_dump_variables PARAMS((int, int));
/* Bindable commands for word completion. */
-extern int rl_complete __P((int, int));
-extern int rl_possible_completions __P((int, int));
-extern int rl_insert_completions __P((int, int));
-extern int rl_menu_complete __P((int, int));
+extern int rl_complete PARAMS((int, int));
+extern int rl_possible_completions PARAMS((int, int));
+extern int rl_insert_completions PARAMS((int, int));
+extern int rl_menu_complete PARAMS((int, int));
/* Bindable commands for killing and yanking text, and managing the kill ring. */
-extern int rl_kill_word __P((int, int));
-extern int rl_backward_kill_word __P((int, int));
-extern int rl_kill_line __P((int, int));
-extern int rl_backward_kill_line __P((int, int));
-extern int rl_kill_full_line __P((int, int));
-extern int rl_unix_word_rubout __P((int, int));
-extern int rl_unix_line_discard __P((int, int));
-extern int rl_copy_region_to_kill __P((int, int));
-extern int rl_kill_region __P((int, int));
-extern int rl_copy_forward_word __P((int, int));
-extern int rl_copy_backward_word __P((int, int));
-extern int rl_yank __P((int, int));
-extern int rl_yank_pop __P((int, int));
-extern int rl_yank_nth_arg __P((int, int));
-extern int rl_yank_last_arg __P((int, int));
+extern int rl_kill_word PARAMS((int, int));
+extern int rl_backward_kill_word PARAMS((int, int));
+extern int rl_kill_line PARAMS((int, int));
+extern int rl_backward_kill_line PARAMS((int, int));
+extern int rl_kill_full_line PARAMS((int, int));
+extern int rl_unix_word_rubout PARAMS((int, int));
+extern int rl_unix_line_discard PARAMS((int, int));
+extern int rl_copy_region_to_kill PARAMS((int, int));
+extern int rl_kill_region PARAMS((int, int));
+extern int rl_copy_forward_word PARAMS((int, int));
+extern int rl_copy_backward_word PARAMS((int, int));
+extern int rl_yank PARAMS((int, int));
+extern int rl_yank_pop PARAMS((int, int));
+extern int rl_yank_nth_arg PARAMS((int, int));
+extern int rl_yank_last_arg PARAMS((int, int));
/* Not available unless __CYGWIN__ is defined. */
#ifdef __CYGWIN__
-extern int rl_paste_from_clipboard __P((int, int));
+extern int rl_paste_from_clipboard PARAMS((int, int));
#endif
/* Bindable commands for incremental searching. */
-extern int rl_reverse_search_history __P((int, int));
-extern int rl_forward_search_history __P((int, int));
+extern int rl_reverse_search_history PARAMS((int, int));
+extern int rl_forward_search_history PARAMS((int, int));
/* Bindable keyboard macro commands. */
-extern int rl_start_kbd_macro __P((int, int));
-extern int rl_end_kbd_macro __P((int, int));
-extern int rl_call_last_kbd_macro __P((int, int));
+extern int rl_start_kbd_macro PARAMS((int, int));
+extern int rl_end_kbd_macro PARAMS((int, int));
+extern int rl_call_last_kbd_macro PARAMS((int, int));
/* Bindable undo commands. */
-extern int rl_revert_line __P((int, int));
-extern int rl_undo_command __P((int, int));
+extern int rl_revert_line PARAMS((int, int));
+extern int rl_undo_command PARAMS((int, int));
/* Bindable tilde expansion commands. */
-extern int rl_tilde_expand __P((int, int));
+extern int rl_tilde_expand PARAMS((int, int));
/* Bindable terminal control commands. */
-extern int rl_restart_output __P((int, int));
-extern int rl_stop_output __P((int, int));
+extern int rl_restart_output PARAMS((int, int));
+extern int rl_stop_output PARAMS((int, int));
/* Miscellaneous bindable commands. */
-extern int rl_abort __P((int, int));
-extern int rl_tty_status __P((int, int));
+extern int rl_abort PARAMS((int, int));
+extern int rl_tty_status PARAMS((int, int));
/* Bindable commands for incremental and non-incremental history searching. */
-extern int rl_history_search_forward __P((int, int));
-extern int rl_history_search_backward __P((int, int));
-extern int rl_noninc_forward_search __P((int, int));
-extern int rl_noninc_reverse_search __P((int, int));
-extern int rl_noninc_forward_search_again __P((int, int));
-extern int rl_noninc_reverse_search_again __P((int, int));
+extern int rl_history_search_forward PARAMS((int, int));
+extern int rl_history_search_backward PARAMS((int, int));
+extern int rl_noninc_forward_search PARAMS((int, int));
+extern int rl_noninc_reverse_search PARAMS((int, int));
+extern int rl_noninc_forward_search_again PARAMS((int, int));
+extern int rl_noninc_reverse_search_again PARAMS((int, int));
/* Bindable command used when inserting a matching close character. */
-extern int rl_insert_close __P((int, int));
+extern int rl_insert_close PARAMS((int, int));
/* Not available unless READLINE_CALLBACKS is defined. */
-extern void rl_callback_handler_install __P((const char *, rl_vcpfunc_t *));
-extern void rl_callback_read_char __P((void));
-extern void rl_callback_handler_remove __P((void));
+extern void rl_callback_handler_install PARAMS((const char *, rl_vcpfunc_t *));
+extern void rl_callback_read_char PARAMS((void));
+extern void rl_callback_handler_remove PARAMS((void));
/* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */
/* VI-mode bindable commands. */
-extern int rl_vi_redo __P((int, int));
-extern int rl_vi_undo __P((int, int));
-extern int rl_vi_yank_arg __P((int, int));
-extern int rl_vi_fetch_history __P((int, int));
-extern int rl_vi_search_again __P((int, int));
-extern int rl_vi_search __P((int, int));
-extern int rl_vi_complete __P((int, int));
-extern int rl_vi_tilde_expand __P((int, int));
-extern int rl_vi_prev_word __P((int, int));
-extern int rl_vi_next_word __P((int, int));
-extern int rl_vi_end_word __P((int, int));
-extern int rl_vi_insert_beg __P((int, int));
-extern int rl_vi_append_mode __P((int, int));
-extern int rl_vi_append_eol __P((int, int));
-extern int rl_vi_eof_maybe __P((int, int));
-extern int rl_vi_insertion_mode __P((int, int));
-extern int rl_vi_movement_mode __P((int, int));
-extern int rl_vi_arg_digit __P((int, int));
-extern int rl_vi_change_case __P((int, int));
-extern int rl_vi_put __P((int, int));
-extern int rl_vi_column __P((int, int));
-extern int rl_vi_delete_to __P((int, int));
-extern int rl_vi_change_to __P((int, int));
-extern int rl_vi_yank_to __P((int, int));
-extern int rl_vi_delete __P((int, int));
-extern int rl_vi_back_to_indent __P((int, int));
-extern int rl_vi_first_print __P((int, int));
-extern int rl_vi_char_search __P((int, int));
-extern int rl_vi_match __P((int, int));
-extern int rl_vi_change_char __P((int, int));
-extern int rl_vi_subst __P((int, int));
-extern int rl_vi_overstrike __P((int, int));
-extern int rl_vi_overstrike_delete __P((int, int));
-extern int rl_vi_replace __P((int, int));
-extern int rl_vi_set_mark __P((int, int));
-extern int rl_vi_goto_mark __P((int, int));
+extern int rl_vi_redo PARAMS((int, int));
+extern int rl_vi_undo PARAMS((int, int));
+extern int rl_vi_yank_arg PARAMS((int, int));
+extern int rl_vi_fetch_history PARAMS((int, int));
+extern int rl_vi_search_again PARAMS((int, int));
+extern int rl_vi_search PARAMS((int, int));
+extern int rl_vi_complete PARAMS((int, int));
+extern int rl_vi_tilde_expand PARAMS((int, int));
+extern int rl_vi_prev_word PARAMS((int, int));
+extern int rl_vi_next_word PARAMS((int, int));
+extern int rl_vi_end_word PARAMS((int, int));
+extern int rl_vi_insert_beg PARAMS((int, int));
+extern int rl_vi_append_mode PARAMS((int, int));
+extern int rl_vi_append_eol PARAMS((int, int));
+extern int rl_vi_eof_maybe PARAMS((int, int));
+extern int rl_vi_insertion_mode PARAMS((int, int));
+extern int rl_vi_movement_mode PARAMS((int, int));
+extern int rl_vi_arg_digit PARAMS((int, int));
+extern int rl_vi_change_case PARAMS((int, int));
+extern int rl_vi_put PARAMS((int, int));
+extern int rl_vi_column PARAMS((int, int));
+extern int rl_vi_delete_to PARAMS((int, int));
+extern int rl_vi_change_to PARAMS((int, int));
+extern int rl_vi_yank_to PARAMS((int, int));
+extern int rl_vi_delete PARAMS((int, int));
+extern int rl_vi_back_to_indent PARAMS((int, int));
+extern int rl_vi_first_print PARAMS((int, int));
+extern int rl_vi_char_search PARAMS((int, int));
+extern int rl_vi_match PARAMS((int, int));
+extern int rl_vi_change_char PARAMS((int, int));
+extern int rl_vi_subst PARAMS((int, int));
+extern int rl_vi_overstrike PARAMS((int, int));
+extern int rl_vi_overstrike_delete PARAMS((int, int));
+extern int rl_vi_replace PARAMS((int, int));
+extern int rl_vi_set_mark PARAMS((int, int));
+extern int rl_vi_goto_mark PARAMS((int, int));
/* VI-mode utility functions. */
-extern int rl_vi_check __P((void));
-extern int rl_vi_domove __P((int, int *));
-extern int rl_vi_bracktype __P((int));
+extern int rl_vi_check PARAMS((void));
+extern int rl_vi_domove PARAMS((int, int *));
+extern int rl_vi_bracktype PARAMS((int));
/* VI-mode pseudo-bindable commands, used as utility functions. */
-extern int rl_vi_fWord __P((int, int));
-extern int rl_vi_bWord __P((int, int));
-extern int rl_vi_eWord __P((int, int));
-extern int rl_vi_fword __P((int, int));
-extern int rl_vi_bword __P((int, int));
-extern int rl_vi_eword __P((int, int));
+extern int rl_vi_fWord PARAMS((int, int));
+extern int rl_vi_bWord PARAMS((int, int));
+extern int rl_vi_eWord PARAMS((int, int));
+extern int rl_vi_fword PARAMS((int, int));
+extern int rl_vi_bword PARAMS((int, int));
+extern int rl_vi_eword PARAMS((int, int));
/* **************************************************************** */
/* */
@@ -260,171 +265,172 @@ extern int rl_vi_eword __P((int, int));
/* Readline functions. */
/* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */
-extern char *readline __P((const char *));
+extern char *readline PARAMS((const char *));
-extern int rl_set_prompt __P((const char *));
-extern int rl_expand_prompt __P((char *));
+extern int rl_set_prompt PARAMS((const char *));
+extern int rl_expand_prompt PARAMS((char *));
-extern int rl_initialize __P((void));
+extern int rl_initialize PARAMS((void));
/* Undocumented; unused by readline */
-extern int rl_discard_argument __P((void));
+extern int rl_discard_argument PARAMS((void));
/* Utility functions to bind keys to readline commands. */
-extern int rl_add_defun __P((const char *, rl_command_func_t *, int));
-extern int rl_bind_key __P((int, rl_command_func_t *));
-extern int rl_bind_key_in_map __P((int, rl_command_func_t *, Keymap));
-extern int rl_unbind_key __P((int));
-extern int rl_unbind_key_in_map __P((int, Keymap));
-extern int rl_unbind_function_in_map __P((rl_command_func_t *, Keymap));
-extern int rl_unbind_command_in_map __P((const char *, Keymap));
-extern int rl_set_key __P((const char *, rl_command_func_t *, Keymap));
-extern int rl_generic_bind __P((int, const char *, char *, Keymap));
-extern int rl_variable_bind __P((const char *, const char *));
+extern int rl_add_defun PARAMS((const char *, rl_command_func_t *, int));
+extern int rl_bind_key PARAMS((int, rl_command_func_t *));
+extern int rl_bind_key_in_map PARAMS((int, rl_command_func_t *, Keymap));
+extern int rl_unbind_key PARAMS((int));
+extern int rl_unbind_key_in_map PARAMS((int, Keymap));
+extern int rl_unbind_function_in_map PARAMS((rl_command_func_t *, Keymap));
+extern int rl_unbind_command_in_map PARAMS((const char *, Keymap));
+extern int rl_set_key PARAMS((const char *, rl_command_func_t *, Keymap));
+extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap));
+extern int rl_variable_bind PARAMS((const char *, const char *));
/* Backwards compatibility, use rl_generic_bind instead. */
-extern int rl_macro_bind __P((const char *, const char *, Keymap));
+extern int rl_macro_bind PARAMS((const char *, const char *, Keymap));
/* Undocumented in the texinfo manual; not really useful to programs. */
-extern int rl_translate_keyseq __P((const char *, char *, int *));
-extern char *rl_untranslate_keyseq __P((int));
+extern int rl_translate_keyseq PARAMS((const char *, char *, int *));
+extern char *rl_untranslate_keyseq PARAMS((int));
-extern rl_command_func_t *rl_named_function __P((const char *));
-extern rl_command_func_t *rl_function_of_keyseq __P((const char *, Keymap, int *));
+extern rl_command_func_t *rl_named_function PARAMS((const char *));
+extern rl_command_func_t *rl_function_of_keyseq PARAMS((const char *, Keymap, int *));
-extern void rl_list_funmap_names __P((void));
-extern char **rl_invoking_keyseqs_in_map __P((rl_command_func_t *, Keymap));
-extern char **rl_invoking_keyseqs __P((rl_command_func_t *));
+extern void rl_list_funmap_names PARAMS((void));
+extern char **rl_invoking_keyseqs_in_map PARAMS((rl_command_func_t *, Keymap));
+extern char **rl_invoking_keyseqs PARAMS((rl_command_func_t *));
-extern void rl_function_dumper __P((int));
-extern void rl_macro_dumper __P((int));
-extern void rl_variable_dumper __P((int));
+extern void rl_function_dumper PARAMS((int));
+extern void rl_macro_dumper PARAMS((int));
+extern void rl_variable_dumper PARAMS((int));
-extern int rl_read_init_file __P((const char *));
-extern int rl_parse_and_bind __P((char *));
+extern int rl_read_init_file PARAMS((const char *));
+extern int rl_parse_and_bind PARAMS((char *));
/* Functions for manipulating keymaps. */
-extern Keymap rl_make_bare_keymap __P((void));
-extern Keymap rl_copy_keymap __P((Keymap));
-extern Keymap rl_make_keymap __P((void));
-extern void rl_discard_keymap __P((Keymap));
-
-extern Keymap rl_get_keymap_by_name __P((const char *));
-extern char *rl_get_keymap_name __P((Keymap));
-extern void rl_set_keymap __P((Keymap));
-extern Keymap rl_get_keymap __P((void));
+extern Keymap rl_make_bare_keymap PARAMS((void));
+extern Keymap rl_copy_keymap PARAMS((Keymap));
+extern Keymap rl_make_keymap PARAMS((void));
+extern void rl_discard_keymap PARAMS((Keymap));
+
+extern Keymap rl_get_keymap_by_name PARAMS((const char *));
+extern char *rl_get_keymap_name PARAMS((Keymap));
+extern void rl_set_keymap PARAMS((Keymap));
+extern Keymap rl_get_keymap PARAMS((void));
/* Undocumented; used internally only. */
-extern void rl_set_keymap_from_edit_mode __P((void));
-extern char *rl_get_keymap_name_from_edit_mode __P((void));
+extern void rl_set_keymap_from_edit_mode PARAMS((void));
+extern char *rl_get_keymap_name_from_edit_mode PARAMS((void));
/* Functions for manipulating the funmap, which maps command names to functions. */
-extern int rl_add_funmap_entry __P((const char *, rl_command_func_t *));
-extern const char **rl_funmap_names __P((void));
+extern int rl_add_funmap_entry PARAMS((const char *, rl_command_func_t *));
+extern const char **rl_funmap_names PARAMS((void));
/* Undocumented, only used internally -- there is only one funmap, and this
function may be called only once. */
-extern void rl_initialize_funmap __P((void));
+extern void rl_initialize_funmap PARAMS((void));
/* Utility functions for managing keyboard macros. */
-extern void rl_push_macro_input __P((char *));
+extern void rl_push_macro_input PARAMS((char *));
/* Functions for undoing, from undo.c */
-extern void rl_add_undo __P((enum undo_code, int, int, char *));
-extern void rl_free_undo_list __P((void));
-extern int rl_do_undo __P((void));
-extern int rl_begin_undo_group __P((void));
-extern int rl_end_undo_group __P((void));
-extern int rl_modifying __P((int, int));
+extern void rl_add_undo PARAMS((enum undo_code, int, int, char *));
+extern void rl_free_undo_list PARAMS((void));
+extern int rl_do_undo PARAMS((void));
+extern int rl_begin_undo_group PARAMS((void));
+extern int rl_end_undo_group PARAMS((void));
+extern int rl_modifying PARAMS((int, int));
/* Functions for redisplay. */
-extern void rl_redisplay __P((void));
-extern int rl_on_new_line __P((void));
-extern int rl_on_new_line_with_prompt __P((void));
-extern int rl_forced_update_display __P((void));
-extern int rl_clear_message __P((void));
-extern int rl_reset_line_state __P((void));
-extern int rl_crlf __P((void));
+extern void rl_redisplay PARAMS((void));
+extern int rl_on_new_line PARAMS((void));
+extern int rl_on_new_line_with_prompt PARAMS((void));
+extern int rl_forced_update_display PARAMS((void));
+extern int rl_clear_message PARAMS((void));
+extern int rl_reset_line_state PARAMS((void));
+extern int rl_crlf PARAMS((void));
#if (defined (__STDC__) || defined (__cplusplus)) && defined (USE_VARARGS) && defined (PREFER_STDARG)
-extern int rl_message (const char *, ...);
+extern int rl_message (const char *, ...) __attribute__((__format__ (printf, 1, 2)));
#else
extern int rl_message ();
#endif
-extern int rl_show_char __P((int));
+extern int rl_show_char PARAMS((int));
/* Undocumented in texinfo manual. */
-extern int rl_character_len __P((int, int));
+extern int rl_character_len PARAMS((int, int));
/* Save and restore internal prompt redisplay information. */
-extern void rl_save_prompt __P((void));
-extern void rl_restore_prompt __P((void));
+extern void rl_save_prompt PARAMS((void));
+extern void rl_restore_prompt PARAMS((void));
/* Modifying text. */
-extern int rl_insert_text __P((const char *));
-extern int rl_delete_text __P((int, int));
-extern int rl_kill_text __P((int, int));
-extern char *rl_copy_text __P((int, int));
+extern int rl_insert_text PARAMS((const char *));
+extern int rl_delete_text PARAMS((int, int));
+extern int rl_kill_text PARAMS((int, int));
+extern char *rl_copy_text PARAMS((int, int));
/* Terminal and tty mode management. */
-extern void rl_prep_terminal __P((int));
-extern void rl_deprep_terminal __P((void));
-extern void rl_tty_set_default_bindings __P((Keymap));
+extern void rl_prep_terminal PARAMS((int));
+extern void rl_deprep_terminal PARAMS((void));
+extern void rl_tty_set_default_bindings PARAMS((Keymap));
+
+extern int rl_reset_terminal PARAMS((const char *));
+extern void rl_resize_terminal PARAMS((void));
+extern void rl_set_screen_size PARAMS((int, int));
+extern void rl_get_screen_size PARAMS((int *, int *));
-extern int rl_reset_terminal __P((const char *));
-extern void rl_resize_terminal __P((void));
-extern void rl_set_screen_size __P((int, int));
-extern void rl_get_screen_size __P((int *, int *));
+extern char *rl_get_termcap PARAMS((const char *));
/* Functions for character input. */
-extern int rl_stuff_char __P((int));
-extern int rl_execute_next __P((int));
-extern int rl_clear_pending_input __P((void));
-extern int rl_read_key __P((void));
-extern int rl_getc __P((FILE *));
-extern int rl_set_keyboard_input_timeout __P((int));
+extern int rl_stuff_char PARAMS((int));
+extern int rl_execute_next PARAMS((int));
+extern int rl_clear_pending_input PARAMS((void));
+extern int rl_read_key PARAMS((void));
+extern int rl_getc PARAMS((FILE *));
+extern int rl_set_keyboard_input_timeout PARAMS((int));
/* `Public' utility functions . */
-extern void rl_extend_line_buffer __P((int));
-extern int rl_ding __P((void));
-extern int rl_alphabetic __P((int));
+extern void rl_extend_line_buffer PARAMS((int));
+extern int rl_ding PARAMS((void));
+extern int rl_alphabetic PARAMS((int));
/* Readline signal handling, from signals.c */
-extern int rl_set_signals __P((void));
-extern int rl_clear_signals __P((void));
-extern void rl_cleanup_after_signal __P((void));
-extern void rl_reset_after_signal __P((void));
-extern void rl_free_line_state __P((void));
+extern int rl_set_signals PARAMS((void));
+extern int rl_clear_signals PARAMS((void));
+extern void rl_cleanup_after_signal PARAMS((void));
+extern void rl_reset_after_signal PARAMS((void));
+extern void rl_free_line_state PARAMS((void));
-/* Undocumented. */
-extern int rl_set_paren_blink_timeout __P((int));
+extern int rl_set_paren_blink_timeout PARAMS((int));
/* Undocumented. */
-extern int rl_maybe_save_line __P((void));
-extern int rl_maybe_unsave_line __P((void));
-extern int rl_maybe_replace_line __P((void));
+extern int rl_maybe_save_line PARAMS((void));
+extern int rl_maybe_unsave_line PARAMS((void));
+extern int rl_maybe_replace_line PARAMS((void));
/* Completion functions. */
-extern int rl_complete_internal __P((int));
-extern void rl_display_match_list __P((char **, int, int));
+extern int rl_complete_internal PARAMS((int));
+extern void rl_display_match_list PARAMS((char **, int, int));
-extern char **rl_completion_matches __P((const char *, rl_compentry_func_t *));
-extern char *rl_username_completion_function __P((const char *, int));
-extern char *rl_filename_completion_function __P((const char *, int));
+extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *));
+extern char *rl_username_completion_function PARAMS((const char *, int));
+extern char *rl_filename_completion_function PARAMS((const char *, int));
#if 0
/* Backwards compatibility (compat.c). These will go away sometime. */
-extern void free_undo_list __P((void));
-extern int maybe_save_line __P((void));
-extern int maybe_unsave_line __P((void));
-extern int maybe_replace_line __P((void));
-
-extern int ding __P((void));
-extern int alphabetic __P((int));
-extern int crlf __P((void));
-
-extern char **completion_matches __P((char *, rl_compentry_func_t *));
-extern char *username_completion_function __P((const char *, int));
-extern char *filename_completion_function __P((const char *, int));
+extern void free_undo_list PARAMS((void));
+extern int maybe_save_line PARAMS((void));
+extern int maybe_unsave_line PARAMS((void));
+extern int maybe_replace_line PARAMS((void));
+
+extern int ding PARAMS((void));
+extern int alphabetic PARAMS((int));
+extern int crlf PARAMS((void));
+
+extern char **completion_matches PARAMS((char *, rl_compentry_func_t *));
+extern char *username_completion_function PARAMS((const char *, int));
+extern char *filename_completion_function PARAMS((const char *, int));
#endif
/* **************************************************************** */
@@ -434,7 +440,8 @@ extern char *filename_completion_function __P((const char *, int));
/* **************************************************************** */
/* The version of this incarnation of the readline library. */
-extern const char *rl_library_version;
+extern const char *rl_library_version; /* e.g., "4.2" */
+extern int rl_readline_version; /* e.g., 0x0402 */
/* True if this is real GNU readline. */
extern int rl_gnu_readline_p;
@@ -551,8 +558,8 @@ extern int rl_catch_sigwinch;
/* Completion variables. */
/* Pointer to the generator function for completion_matches ().
- NULL means to use filename_entry_function (), the default filename
- completer. */
+ NULL means to use rl_filename_completion_function (), the default
+ filename completer. */
extern rl_compentry_func_t *rl_completion_entry_function;
/* If rl_ignore_some_completions_function is non-NULL it is the address
diff --git a/rldefs.h b/rldefs.h
index 4e094bf..bd055e3 100644
--- a/rldefs.h
+++ b/rldefs.h
@@ -73,8 +73,14 @@ extern char *strchr (), *strrchr ();
#define _rl_stricmp strcasecmp
#define _rl_strnicmp strncasecmp
#else
-extern int _rl_stricmp __P((char *, char *);
-extern int _rl_strnicmp __P((char *, char *));
+extern int _rl_stricmp PARAMS((char *, char *));
+extern int _rl_strnicmp PARAMS((char *, char *));
+#endif
+
+#if defined (HAVE_STRPBRK)
+# define _rl_strpbrk(a,b) strpbrk((a),(b))
+#else
+extern char *_rl_strpbrk PARAMS((const char *, const char *));
#endif
#if !defined (emacs_mode)
@@ -97,8 +103,7 @@ extern int _rl_strnicmp __P((char *, char *));
#endif
#ifndef savestring
-extern char *xmalloc __P((int));
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
+#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x))
#endif
/* Possible values for _rl_bell_preference. */
diff --git a/rlprivate.h b/rlprivate.h
index a36de9b..9347b36 100644
--- a/rlprivate.h
+++ b/rlprivate.h
@@ -26,7 +26,7 @@
#include "rlconf.h" /* for VISIBLE_STATS */
#include "rlstdc.h"
-#include "posixjmp.h" /* defines procenv_t */
+#include "posixjmp.h" /* defines procenv_t */
/*************************************************************************
* *
@@ -34,9 +34,6 @@
* *
*************************************************************************/
-/* terminal.c */
-extern char *rl_get_termcap __P((const char *));
-
/*************************************************************************
* *
* Global variables undocumented in texinfo manual and not in readline.h *
@@ -69,25 +66,25 @@ extern int rl_blink_matching_paren;
*************************************************************************/
/* bind.c */
-extern char *rl_untranslate_keyseq __P((int));
+extern char *rl_untranslate_keyseq PARAMS((int));
/* kill.c */
-extern int rl_set_retained_kills __P((int));
+extern int rl_set_retained_kills PARAMS((int));
/* readline.c */
-extern int rl_discard_argument __P((void));
+extern int rl_discard_argument PARAMS((void));
/* rltty.c */
-extern int rl_stop_output __P((int, int));
+extern int rl_stop_output PARAMS((int, int));
/* terminal.c */
-extern void _rl_set_screen_size __P((int, int));
+extern void _rl_set_screen_size PARAMS((int, int));
/* undo.c */
-extern int _rl_fix_last_undo_of_type __P((int, int, int));
+extern int _rl_fix_last_undo_of_type PARAMS((int, int, int));
/* util.c */
-extern char *_rl_savestring __P((const char *));
+extern char *_rl_savestring PARAMS((const char *));
/*************************************************************************
* *
@@ -107,98 +104,97 @@ extern char *_rl_savestring __P((const char *));
#if defined(READLINE_CALLBACKS)
/* readline.c */
-extern void readline_internal_setup __P((void));
-extern char *readline_internal_teardown __P((int));
-extern int readline_internal_char __P((void));
+extern void readline_internal_setup PARAMS((void));
+extern char *readline_internal_teardown PARAMS((int));
+extern int readline_internal_char PARAMS((void));
#endif /* READLINE_CALLBACKS */
/* bind.c */
-extern void _rl_bind_if_unbound __P((const char *, rl_command_func_t *));
+extern void _rl_bind_if_unbound PARAMS((const char *, rl_command_func_t *));
/* display.c */
-extern char *_rl_strip_prompt __P((char *));
-extern void _rl_move_cursor_relative __P((int, const char *));
-extern void _rl_move_vert __P((int));
-extern void _rl_save_prompt __P((void));
-extern void _rl_restore_prompt __P((void));
-extern char *_rl_make_prompt_for_search __P((int));
-extern void _rl_erase_at_end_of_line __P((int));
-extern void _rl_clear_to_eol __P((int));
-extern void _rl_clear_screen __P((void));
-extern void _rl_update_final __P((void));
-extern void _rl_redisplay_after_sigwinch __P((void));
-extern void _rl_clean_up_for_exit __P((void));
-extern void _rl_erase_entire_line __P((void));
-extern int _rl_current_display_line __P((void));
+extern char *_rl_strip_prompt PARAMS((char *));
+extern void _rl_move_cursor_relative PARAMS((int, const char *));
+extern void _rl_move_vert PARAMS((int));
+extern void _rl_save_prompt PARAMS((void));
+extern void _rl_restore_prompt PARAMS((void));
+extern char *_rl_make_prompt_for_search PARAMS((int));
+extern void _rl_erase_at_end_of_line PARAMS((int));
+extern void _rl_clear_to_eol PARAMS((int));
+extern void _rl_clear_screen PARAMS((void));
+extern void _rl_update_final PARAMS((void));
+extern void _rl_redisplay_after_sigwinch PARAMS((void));
+extern void _rl_clean_up_for_exit PARAMS((void));
+extern void _rl_erase_entire_line PARAMS((void));
+extern int _rl_current_display_line PARAMS((void));
/* input.c */
-extern int _rl_any_typein __P((void));
-extern int _rl_input_available __P((void));
-extern void _rl_insert_typein __P((int));
+extern int _rl_any_typein PARAMS((void));
+extern int _rl_input_available PARAMS((void));
+extern void _rl_insert_typein PARAMS((int));
/* macro.c */
-extern void _rl_with_macro_input __P((char *));
-extern int _rl_next_macro_key __P((void));
-extern void _rl_push_executing_macro __P((void));
-extern void _rl_pop_executing_macro __P((void));
-extern void _rl_add_macro_char __P((int));
-extern void _rl_kill_kbd_macro __P((void));
+extern void _rl_with_macro_input PARAMS((char *));
+extern int _rl_next_macro_key PARAMS((void));
+extern void _rl_push_executing_macro PARAMS((void));
+extern void _rl_pop_executing_macro PARAMS((void));
+extern void _rl_add_macro_char PARAMS((int));
+extern void _rl_kill_kbd_macro PARAMS((void));
/* nls.c */
-extern int _rl_init_eightbit __P((void));
+extern int _rl_init_eightbit PARAMS((void));
/* parens.c */
-extern void _rl_enable_paren_matching __P((int));
+extern void _rl_enable_paren_matching PARAMS((int));
/* readline.c */
-extern void _rl_init_line_state __P((void));
-extern void _rl_set_the_line __P((void));
-extern int _rl_dispatch __P((int, Keymap));
-extern int _rl_init_argument __P((void));
-extern void _rl_fix_point __P((int));
-extern void _rl_replace_text __P((const char *, int, int));
-extern int _rl_char_search_internal __P((int, int, int));
-extern int _rl_set_mark_at_pos __P((int));
-extern int _rl_free_saved_history_line __P((void));
+extern void _rl_init_line_state PARAMS((void));
+extern void _rl_set_the_line PARAMS((void));
+extern int _rl_dispatch PARAMS((int, Keymap));
+extern int _rl_init_argument PARAMS((void));
+extern void _rl_fix_point PARAMS((int));
+extern void _rl_replace_text PARAMS((const char *, int, int));
+extern int _rl_char_search_internal PARAMS((int, int, int));
+extern int _rl_set_mark_at_pos PARAMS((int));
+extern int _rl_free_saved_history_line PARAMS((void));
/* rltty.c */
-extern int _rl_disable_tty_signals __P((void));
-extern int _rl_restore_tty_signals __P((void));
+extern int _rl_disable_tty_signals PARAMS((void));
+extern int _rl_restore_tty_signals PARAMS((void));
/* terminal.c */
-extern void _rl_get_screen_size __P((int, int));
-extern int _rl_init_terminal_io __P((const char *));
+extern void _rl_get_screen_size PARAMS((int, int));
+extern int _rl_init_terminal_io PARAMS((const char *));
#ifdef _MINIX
-extern void _rl_output_character_function __P((int));
+extern void _rl_output_character_function PARAMS((int));
#else
-extern int _rl_output_character_function __P((int));
+extern int _rl_output_character_function PARAMS((int));
#endif
-extern void _rl_output_some_chars __P((const char *, int));
-extern int _rl_backspace __P((int));
-extern void _rl_enable_meta_key __P((void));
-extern void _rl_control_keypad __P((int));
+extern void _rl_output_some_chars PARAMS((const char *, int));
+extern int _rl_backspace PARAMS((int));
+extern void _rl_enable_meta_key PARAMS((void));
+extern void _rl_control_keypad PARAMS((int));
/* util.c */
-extern int rl_alphabetic __P((int));
-extern int _rl_abort_internal __P((void));
-extern char *_rl_strindex __P((const char *, const char *));
-extern char *_rl_strpbrk __P((const char *, const char *));
-extern int _rl_qsort_string_compare __P((char **, char **));
-extern int (_rl_uppercase_p) __P((int));
-extern int (_rl_lowercase_p) __P((int));
-extern int (_rl_pure_alphabetic) __P((int));
-extern int (_rl_digit_p) __P((int));
-extern int (_rl_to_lower) __P((int));
-extern int (_rl_to_upper) __P((int));
-extern int (_rl_digit_value) __P((int));
+extern int rl_alphabetic PARAMS((int));
+extern int _rl_abort_internal PARAMS((void));
+extern char *_rl_strindex PARAMS((const char *, const char *));
+extern int _rl_qsort_string_compare PARAMS((char **, char **));
+extern int (_rl_uppercase_p) PARAMS((int));
+extern int (_rl_lowercase_p) PARAMS((int));
+extern int (_rl_pure_alphabetic) PARAMS((int));
+extern int (_rl_digit_p) PARAMS((int));
+extern int (_rl_to_lower) PARAMS((int));
+extern int (_rl_to_upper) PARAMS((int));
+extern int (_rl_digit_value) PARAMS((int));
/* vi_mode.c */
-extern void _rl_vi_initialize_line __P((void));
-extern void _rl_vi_reset_last __P((void));
-extern void _rl_vi_set_last __P((int, int, int));
-extern int _rl_vi_textmod_command __P((int));
-extern void _rl_vi_done_inserting __P((void));
+extern void _rl_vi_initialize_line PARAMS((void));
+extern void _rl_vi_reset_last PARAMS((void));
+extern void _rl_vi_set_last PARAMS((int, int, int));
+extern int _rl_vi_textmod_command PARAMS((int));
+extern void _rl_vi_done_inserting PARAMS((void));
/*************************************************************************
* Undocumented private variables *
@@ -213,6 +209,7 @@ extern int _rl_complete_show_all;
extern int _rl_complete_mark_directories;
extern int _rl_print_completions_horizontally;
extern int _rl_completion_case_fold;
+extern int _rl_match_hidden_files;
/* display.c */
extern int _rl_vis_botlin;
@@ -221,7 +218,7 @@ extern int _rl_suppress_redisplay;
extern char *rl_display_prompt;
/* isearch.c */
-extern unsigned char *_rl_isearch_terminators;
+extern char *_rl_isearch_terminators;
/* macro.c */
extern int _rl_defining_kbd_macro;
@@ -234,6 +231,7 @@ extern int _rl_bell_preference;
extern int _rl_meta_flag;
extern int _rl_convert_meta_chars_to_ascii;
extern int _rl_output_meta_chars;
+extern int _rl_history_preserve_point;
extern char *_rl_comment_begin;
extern unsigned char _rl_parsing_conditionalized_out;
extern Keymap _rl_keymap;
diff --git a/rlshell.h b/rlshell.h
index 6032275..3c03fba 100644
--- a/rlshell.h
+++ b/rlshell.h
@@ -25,10 +25,10 @@
#include "rlstdc.h"
-extern char *sh_single_quote __P((char *));
-extern void sh_set_lines_and_columns __P((int, int));
-extern char *sh_get_env_value __P((const char *));
-extern char *sh_get_home_dir __P((void));
-extern int sh_unset_nodelay_mode __P((int));
+extern char *sh_single_quote PARAMS((char *));
+extern void sh_set_lines_and_columns PARAMS((int, int));
+extern char *sh_get_env_value PARAMS((const char *));
+extern char *sh_get_home_dir PARAMS((void));
+extern int sh_unset_nodelay_mode PARAMS((int));
#endif /* _RL_SHELL_H_ */
diff --git a/rlstdc.h b/rlstdc.h
index a1ca208..d6a22b3 100644
--- a/rlstdc.h
+++ b/rlstdc.h
@@ -26,26 +26,20 @@
/* A function can be defined using prototypes and compile on both ANSI C
and traditional C compilers with something like this:
- extern char *func __P((char *, char *, int)); */
+ extern char *func PARAMS((char *, char *, int)); */
-#if !defined (__P)
+#if !defined (PARAMS)
# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
-# define __P(protos) protos
+# define PARAMS(protos) protos
# else
-# define __P(protos) ()
+# define PARAMS(protos) ()
# endif
#endif
-#if !defined (__STDC__) && !defined (__cplusplus)
-# if defined (__GNUC__) /* gcc with -traditional */
-# if !defined (const)
-# define const __const
-# endif /* !const */
-# else /* !__GNUC__ */
-# if !defined (const)
-# define const
-# endif /* !const */
-# endif /* !__GNUC__ */
-#endif /* !__STDC__ && !__cplusplus */
+#ifndef __attribute__
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__
+# define __attribute__(x)
+# endif
+#endif
#endif /* !_RL_STDC_H_ */
diff --git a/rltty.c b/rltty.c
index 636e7f7..cc0dc03 100644
--- a/rltty.c
+++ b/rltty.c
@@ -52,6 +52,11 @@ extern int errno;
rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal;
rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal;
+static void block_sigint PARAMS((void));
+static void release_sigint PARAMS((void));
+
+static void set_winsize PARAMS((int));
+
/* **************************************************************** */
/* */
/* Signal Management */
@@ -173,6 +178,14 @@ struct bsdtty {
static TIOTYPE otio;
+static void save_tty_chars PARAMS((TIOTYPE *));
+static int _get_tty_settings PARAMS((int, TIOTYPE *));
+static int get_tty_settings PARAMS((int, TIOTYPE *));
+static int _set_tty_settings PARAMS((int, TIOTYPE *));
+static int set_tty_settings PARAMS((int, TIOTYPE *));
+
+static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *));
+
static void
save_tty_chars (tiop)
TIOTYPE *tiop;
@@ -379,6 +392,14 @@ prepare_terminal_settings (meta_flag, oldtio, tiop)
static TIOTYPE otio;
+static void save_tty_chars PARAMS((TIOTYPE *));
+static int _get_tty_settings PARAMS((int, TIOTYPE *));
+static int get_tty_settings PARAMS((int, TIOTYPE *));
+static int _set_tty_settings PARAMS((int, TIOTYPE *));
+static int set_tty_settings PARAMS((int, TIOTYPE *));
+
+static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *));
+
#if defined (FLUSHO)
# define OUTPUT_BEING_FLUSHED(tp) (tp->c_lflag & FLUSHO)
#else
@@ -626,6 +647,7 @@ rl_prep_terminal (meta_flag)
if (get_tty_settings (tty, &tio) < 0)
{
release_sigint ();
+fprintf(stderr, "readline: warning: rl_prep_terminal: cannot get terminal settings");
return;
}
@@ -771,8 +793,8 @@ rltty_set_default_bindings (kmap)
{ \
int ic; \
ic = sc; \
- if (ic != -1 && kmap[ic].type == ISFUNC) \
- kmap[ic].function = func; \
+ if (ic != -1 && kmap[(unsigned char)ic].type == ISFUNC) \
+ kmap[(unsigned char)ic].function = func; \
} \
while (0)
@@ -861,6 +883,7 @@ _rl_disable_tty_signals ()
nosigstty = sigstty;
nosigstty.c_lflag &= ~ISIG;
+ nosigstty.c_iflag &= ~IXON;
if (_set_tty_settings (fileno (rl_instream), &nosigstty) < 0)
return (_set_tty_settings (fileno (rl_instream), &sigstty));
@@ -872,10 +895,17 @@ _rl_disable_tty_signals ()
int
_rl_restore_tty_signals ()
{
+ int r;
+
if (tty_sigs_disabled == 0)
return 0;
- return (_set_tty_settings (fileno (rl_instream), &sigstty));
+ r = _set_tty_settings (fileno (rl_instream), &sigstty);
+
+ if (r == 0)
+ tty_sigs_disabled = 0;
+
+ return r;
}
#endif /* !NEW_TTY_DRIVER */
diff --git a/rltypedefs.h b/rltypedefs.h
index b6f9b42..f3280e9 100644
--- a/rltypedefs.h
+++ b/rltypedefs.h
@@ -45,40 +45,40 @@ typedef char **CPPFunction ();
# define _RL_FUNCTION_TYPEDEF
/* Bindable functions */
-typedef int rl_command_func_t __P((int, int));
+typedef int rl_command_func_t PARAMS((int, int));
/* Typedefs for the completion system */
-typedef char *rl_compentry_func_t __P((const char *, int));
-typedef char **rl_completion_func_t __P((const char *, int, int));
+typedef char *rl_compentry_func_t PARAMS((const char *, int));
+typedef char **rl_completion_func_t PARAMS((const char *, int, int));
-typedef char *rl_quote_func_t __P((char *, int, char *));
-typedef char *rl_dequote_func_t __P((char *, int));
+typedef char *rl_quote_func_t PARAMS((char *, int, char *));
+typedef char *rl_dequote_func_t PARAMS((char *, int));
-typedef int rl_compignore_func_t __P((char **));
+typedef int rl_compignore_func_t PARAMS((char **));
-typedef void rl_compdisp_func_t __P((char **, int, int));
+typedef void rl_compdisp_func_t PARAMS((char **, int, int));
/* Type for input and pre-read hook functions like rl_event_hook */
-typedef int rl_hook_func_t __P((void));
+typedef int rl_hook_func_t PARAMS((void));
/* Input function type */
-typedef int rl_getc_func_t __P((FILE *));
+typedef int rl_getc_func_t PARAMS((FILE *));
/* Generic function that takes a character buffer (which could be the readline
line buffer) and an index into it (which could be rl_point) and returns
an int. */
-typedef int rl_linebuf_func_t __P((char *, int));
+typedef int rl_linebuf_func_t PARAMS((char *, int));
/* `Generic' function pointer typedefs */
-typedef int rl_intfunc_t __P((int));
+typedef int rl_intfunc_t PARAMS((int));
#define rl_ivoidfunc_t rl_hook_func_t
-typedef int rl_icpfunc_t __P((char *));
-typedef int rl_icppfunc_t __P((char **));
+typedef int rl_icpfunc_t PARAMS((char *));
+typedef int rl_icppfunc_t PARAMS((char **));
-typedef void rl_voidfunc_t __P((void));
-typedef void rl_vintfunc_t __P((int));
-typedef void rl_vcpfunc_t __P((char *));
-typedef void rl_vcppfunc_t __P((char **));
+typedef void rl_voidfunc_t PARAMS((void));
+typedef void rl_vintfunc_t PARAMS((int));
+typedef void rl_vcpfunc_t PARAMS((char *));
+typedef void rl_vcppfunc_t PARAMS((char **));
#endif /* _RL_FUNCTION_TYPEDEF */
#ifdef __cplusplus
diff --git a/savestring.c b/savestring.c
index 7414175..c7ebeb1 100644
--- a/savestring.c
+++ b/savestring.c
@@ -20,8 +20,11 @@
have a copy of the license, write to the Free Software Foundation,
59 Temple Place, Suite 330, Boston, MA 02111 USA. */
-extern char *strcpy ();
-extern char *xmalloc ();
+#include <config.h>
+#ifdef HAVE_STRING_H
+# include <string.h>
+#endif
+#include "xmalloc.h"
/* Backwards compatibility, now that savestring has been removed from
all `public' readline header files. */
@@ -29,5 +32,5 @@ char *
savestring (s)
const char *s;
{
- return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s)));
+ return ((char *)strcpy ((char *)xmalloc (1 + strlen (s)), (s)));
}
diff --git a/search.c b/search.c
index 45d7f13..9c2feb1 100644
--- a/search.c
+++ b/search.c
@@ -54,7 +54,7 @@
extern HIST_ENTRY *_rl_saved_line_for_history;
/* Functions imported from the rest of the library. */
-extern int _rl_free_history_entry __P((HIST_ENTRY *));
+extern int _rl_free_history_entry PARAMS((HIST_ENTRY *));
static char *noninc_search_string = (char *) NULL;
static int noninc_history_pos;
@@ -66,6 +66,13 @@ static int rl_history_search_pos;
static char *history_search_string;
static int history_string_size;
+static void make_history_line_current PARAMS((HIST_ENTRY *));
+static int noninc_search_from_pos PARAMS((char *, int, int));
+static void noninc_dosearch PARAMS((char *, int));
+static void noninc_search PARAMS((int, int));
+static int rl_history_search_internal PARAMS((int, int));
+static void rl_history_search_reinit PARAMS((void));
+
/* Make the data from the history entry ENTRY be the contents of the
current line. This doesn't do anything with rl_point; the caller
must set it. */
@@ -391,7 +398,7 @@ rl_history_search_reinit ()
if (rl_history_search_len >= history_string_size - 2)
{
history_string_size = rl_history_search_len + 2;
- history_search_string = xrealloc (history_search_string, history_string_size);
+ history_search_string = (char *)xrealloc (history_search_string, history_string_size);
}
history_search_string[0] = '^';
strncpy (history_search_string + 1, rl_line_buffer, rl_point);
diff --git a/shell.c b/shell.c
index 3727f7c..ad27cc1 100644
--- a/shell.c
+++ b/shell.c
@@ -44,6 +44,10 @@
# include <strings.h>
#endif /* !HAVE_STRING_H */
+#if defined (HAVE_LIMITS_H)
+# include <limits.h>
+#endif
+
#include <fcntl.h>
#include <pwd.h>
@@ -54,13 +58,29 @@
#include "xmalloc.h"
#if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid __P((uid_t));
+extern struct passwd *getpwuid PARAMS((uid_t));
#endif /* !HAVE_GETPW_DECLS */
#ifndef NULL
# define NULL 0
#endif
+#ifndef CHAR_BIT
+# define CHAR_BIT 8
+#endif
+
+/* Nonzero if the integer type T is signed. */
+#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
+
+/* Bound on length of the string representing an integer value of type T.
+ Subtract one for the sign bit if T is signed;
+ 302 / 1000 is log10 (2) rounded up;
+ add one for integer division truncation;
+ add one more for a minus sign if t is signed. */
+#define INT_STRLEN_BOUND(t) \
+ ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \
+ + 1 + TYPE_SIGNED (t))
+
/* All of these functions are resolved from bash if we are linking readline
as part of bash. */
@@ -103,18 +123,18 @@ sh_set_lines_and_columns (lines, cols)
char *b;
#if defined (HAVE_PUTENV)
- b = xmalloc (24);
+ b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("LINES=") + 1);
sprintf (b, "LINES=%d", lines);
putenv (b);
- b = xmalloc (24);
+ b = (char *)xmalloc (INT_STRLEN_BOUND (int) + sizeof ("COLUMNS=") + 1);
sprintf (b, "COLUMNS=%d", cols);
putenv (b);
#else /* !HAVE_PUTENV */
# if defined (HAVE_SETENV)
- b = xmalloc (8);
+ b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
sprintf (b, "%d", lines);
setenv ("LINES", b, 1);
- b = xmalloc (8);
+ b = (char *)xmalloc (INT_STRLEN_BOUND (int) + 1);
sprintf (b, "%d", cols);
setenv ("COLUMNS", b, 1);
# endif /* HAVE_SETENV */
diff --git a/shlib/Makefile.in b/shlib/Makefile.in
index 9eaa5f5..11d7047 100644
--- a/shlib/Makefile.in
+++ b/shlib/Makefile.in
@@ -47,6 +47,9 @@ exec_prefix = @exec_prefix@
includedir = @includedir@
libdir = @libdir@
+# Support an alternate destination root directory for package building
+DESTDIR =
+
CFLAGS = @CFLAGS@
LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"'
CPPFLAGS = @CPPFLAGS@
@@ -83,7 +86,7 @@ SHLIB_MAJOR= @SHLIB_MAJOR@
SHLIB_MINOR= .@SHLIB_MINOR@
# For libraries which include headers from other libraries.
-INCLUDES = -I. -I.. -I$(topdir) -I$(includedir)
+INCLUDES = -I. -I.. -I$(topdir)
CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) $(LOCAL_CFLAGS) $(CFLAGS)
@@ -147,17 +150,24 @@ $(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so
$(RM) $@
$(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so $(SHLIB_LIBS)
+# Since tilde.c is shared between readline and bash, make sure we compile
+# it with the right flags when it's built as part of readline
+tilde.so: tilde.c
+ ${RM} $@
+ $(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_CFLAGS) -DREADLINE_LIBRARY -c -o tilde.o $(topdir)/tilde.c
+ $(MV) tilde.o $@
+
installdirs: $(topdir)/support/mkdirs
- -$(SHELL) $(topdir)/support/mkdirs $(libdir)
+ -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(libdir)
install: installdirs $(SHLIB_STATUS)
- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY)
- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -i "$(INSTALL_DATA)" $(SHARED_READLINE)
+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY)
+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -i "$(INSTALL_DATA)" $(SHARED_READLINE)
@echo install: you may need to run ldconfig
uninstall:
- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -U $(SHARED_HISTORY)
- $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -U $(SHARED_READLINE)
+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -U $(SHARED_HISTORY)
+ $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(DESTDIR)$(libdir) -U $(SHARED_READLINE)
@echo uninstall: you may need to run ldconfig
clean mostlyclean: force
diff --git a/signals.c b/signals.c
index ddc6563..a191269 100644
--- a/signals.c
+++ b/signals.c
@@ -73,7 +73,7 @@ typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt
# define sigemptyset(m)
#endif /* !HAVE_POSIX_SIGNALS */
-static SigHandler *rl_set_sighandler __P((int, SigHandler *, sighandler_cxt *));
+static SigHandler *rl_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *));
/* Exported variables for use by applications. */
diff --git a/support/config.guess b/support/config.guess
index 6a2c9ff..cd21956 100755
--- a/support/config.guess
+++ b/support/config.guess
@@ -695,12 +695,12 @@ EOF
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
*:FreeBSD:*:*)
- if test -x /usr/bin/objformat; then
- if test "elf" = "`/usr/bin/objformat`"; then
- echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
- exit 0
- fi
- fi
+# if test -x /usr/bin/objformat; then
+# if test "elf" = "`/usr/bin/objformat`"; then
+# echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
+# exit 0
+# fi
+# fi
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-=(].*//'`
exit 0 ;;
*:NetBSD:*:*)
diff --git a/support/mkdist b/support/mkdist
index a1e4eb1..9de6dbf 100755
--- a/support/mkdist
+++ b/support/mkdist
@@ -68,6 +68,8 @@ do
case "$type" in
d) mkdir $newdir/$fname ;;
f) cp -p $SRCDIR/$fname $newdir/$fname ;;
+ s) ln -s $mode $newdir/$fname ; mode= ;; # symlink
+ l) ln $mode $newdir/$fname ; mode= ;; # hard link
*) echo "unknown file type $type" 1>&2 ;;
esac
diff --git a/support/shlib-install b/support/shlib-install
index 6d45d0f..654cfa9 100755
--- a/support/shlib-install
+++ b/support/shlib-install
@@ -63,9 +63,10 @@ fi
# post-install/uninstall
-# HP-UX requires that a shared library have execute permission
+# HP-UX and Darwin/MacOS X require that a shared library have execute permission
case "$host_os" in
-hpux*) if [ -z "$uninstall" ]; then
+hpux*|darwin*|macosx*)
+ if [ -z "$uninstall" ]; then
chmod 555 ${INSTALLDIR}/${LIBNAME}
fi ;;
*) ;;
@@ -82,6 +83,9 @@ case "$LIBNAME" in
*.[0-9]) # libname.M
LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'` # libname
;;
+*.[0-9].[0-9].dylib) # libname.M.N.dylib
+ LINK2=`echo $LIBNAME | sed 's:\(.*\.[0-9]\)\.[0-9]:\1:'` # libname.M.dylib
+ LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]\.[0-9]:\1:'` # libname.dylib
esac
INSTALL_LINK1='cd $INSTALLDIR ; ln -s $LIBNAME $LINK1'
@@ -91,7 +95,7 @@ INSTALL_LINK2='cd $INSTALLDIR ; ln -s $LIBNAME $LINK2'
# Create symlinks to the installed library. This section is incomplete.
#
case "$host_os" in
-*linux*|bsdi4*)
+*linux*|bsdi4*|*gnu*|darwin*|macosx*)
# libname.so.M -> libname.so.M.N
${echo} ${RM} ${INSTALLDIR}/$LINK2
if [ -z "$uninstall" ]; then
@@ -105,7 +109,7 @@ case "$host_os" in
fi
;;
-solaris2*|aix4.[2-9]*|osf*|irix[56]*)
+solaris2*|aix4.[2-9]*|osf*|irix[56]*|sysv[45]*|dgux*)
# libname.so -> libname.so.M
${echo} ${RM} ${INSTALLDIR}/$LINK1
if [ -z "$uninstall" ]; then
@@ -114,8 +118,8 @@ solaris2*|aix4.[2-9]*|osf*|irix[56]*)
;;
-# FreeBSD 3.x can have either a.out or ELF shared libraries
-freebsd3*)
+# FreeBSD 3.x and above can have either a.out or ELF shared libraries
+freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*)
if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then
# libname.so -> libname.so.M
${echo} ${RM} ${INSTALLDIR}/$LINK1
diff --git a/support/shobj-conf b/support/shobj-conf
index 5abef8a..a7c5810 100755
--- a/support/shobj-conf
+++ b/support/shobj-conf
@@ -77,7 +77,17 @@ sunos5*|solaris2*)
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
;;
-freebsd2* | netbsd* | openbsd*)
+# All versions of Linux or the semi-mythical GNU Hurd.
+linux*|gnu*)
+ SHOBJ_CFLAGS=-fPIC
+ SHOBJ_LD='${CC}'
+ SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
+
+ SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
+ SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
+ ;;
+
+freebsd2* | netbsd*)
SHOBJ_CFLAGS=-fpic
SHOBJ_LD=ld
SHOBJ_LDFLAGS='-x -Bshareable'
@@ -86,16 +96,6 @@ freebsd2* | netbsd* | openbsd*)
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
;;
-# FreeBSD-3.x can have either a.out or ELF object files
-#freebsd3*)
-# SHOBJ_CFLAGS=-fpic
-# SHOBJ_LD='${CC}'
-# SHOBJ_LDFLAGS='-shared'
-#
-# SHLIB_XLDFLAGS='-R$(libdir)'
-# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
-# ;;
-
# FreeBSD-3.x ELF
freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*)
SHOBJ_CFLAGS=-fpic
@@ -113,13 +113,31 @@ freebsd[3-9]*|freebsdelf[3-9]*|freebsdaout[3-9]*)
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
fi
;;
-# All versions of Linux or the semi-mythical GNU Hurd.
-linux*|gnu*)
+
+# Darwin/MacOS X
+darwin*|macosx*)
+ SHOBJ_STATUS=unsupported
+ SHLIB_STATUS=supported
+
+ SHOBJ_CFLAGS='-dynamic -fno-common'
+
+ SHOBJ_LD=/usr/bin/libtool
+
+ SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)'
+ SHLIB_LIBSUFF='dylib'
+
+ SHOBJ_LDFLAGS='-dynamic'
+ SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+
+ SHLIB_LIBS='-lSystem'
+ ;;
+
+openbsd*)
SHOBJ_CFLAGS=-fPIC
SHOBJ_LD='${CC}'
- SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
+ SHOBJ_LDFLAGS='-shared'
- SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`'
+ SHLIB_XLDFLAGS='-R$(libdir)'
SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)'
;;
@@ -239,6 +257,20 @@ hpux9*-*gcc*)
hpux9*)
SHOBJ_STATUS=unsupported
SHLIB_STATUS=unsupported
+
+ # If you are using the HP ANSI C compiler, you can uncomment and use
+ # this code (I have not tested it)
+# SHOBJ_STATUS=supported
+# SHLIB_STATUS=supported
+#
+# SHOBJ_CFLAGS='+z'
+# SHOBJ_LD='ld'
+# SHOBJ_LDFLAGS='-b +s'
+#
+# SHLIB_XLDFLAGS='+b $(libdir)'
+# SHLIB_LIBSUFF='sl'
+# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+
;;
hpux10*-*gcc*)
@@ -257,17 +289,18 @@ hpux10*)
SHLIB_STATUS=unsupported
# If you are using the HP ANSI C compiler, you can uncomment and use
- # this code
-# SHOBJ_STATUS=unsupported
-# SHLIB_STATUS=unsupported
+ # this code (I have not tested it)
+# SHOBJ_STATUS=supported
+# SHLIB_STATUS=supported
#
# SHOBJ_CFLAGS='+z'
# SHOBJ_LD='ld'
-# SHOBJ_LDFLAGS='-b'
+# SHOBJ_LDFLAGS='-b +s +h $@'
#
-# SHLIB_XLDFLAGS=''
+# SHLIB_XLDFLAGS='+b $(libdir)'
# SHLIB_LIBSUFF='sl'
# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
+
;;
hpux11*-*gcc*)
@@ -287,15 +320,15 @@ hpux11*)
SHLIB_STATUS=unsupported
# If you are using the HP ANSI C compiler, you can uncomment and use
- # this code
-# SHOBJ_STATUS=unsupported
-# SHLIB_STATUS=unsupported
+ # this code (I have not tested it)
+# SHOBJ_STATUS=supported
+# SHLIB_STATUS=supported
#
# SHOBJ_CFLAGS='+z'
# SHOBJ_LD='ld'
-# SHOBJ_LDFLAGS='-b'
+# SHOBJ_LDFLAGS='-b +s +h $@'
#
-# SHLIB_XLDFLAGS=''
+# SHLIB_XLDFLAGS='+b $(libdir)'
# SHLIB_LIBSUFF='sl'
# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)'
diff --git a/terminal.c b/terminal.c
index 64256b4..4d2268c 100644
--- a/terminal.c
+++ b/terminal.c
@@ -64,6 +64,7 @@
#include "rlprivate.h"
#include "rlshell.h"
+#include "xmalloc.h"
/* **************************************************************** */
/* */
@@ -326,7 +327,11 @@ get_term_capabilities (bp)
register int i;
for (i = 0; i < NUM_TC_STRINGS; i++)
+# ifdef __LCC__
+ *(tc_strings[i].tc_value) = tgetstr ((char *)tc_strings[i].tc_var, bp);
+# else
*(tc_strings[i].tc_value) = tgetstr (tc_strings[i].tc_var, bp);
+# endif
#endif
tcap_initialized = 1;
}
@@ -361,10 +366,10 @@ _rl_init_terminal_io (terminal_name)
else
{
if (term_string_buffer == 0)
- term_string_buffer = xmalloc(2032);
+ term_string_buffer = (char *)xmalloc(2032);
if (term_buffer == 0)
- term_buffer = xmalloc(4080);
+ term_buffer = (char *)xmalloc(4080);
buffer = term_string_buffer;
diff --git a/tilde.c b/tilde.c
index 7f33db4..6e4f116 100644
--- a/tilde.c
+++ b/tilde.c
@@ -48,22 +48,21 @@
#include "tilde.h"
#if defined (TEST) || defined (STATIC_MALLOC)
-static char *xmalloc (), *xrealloc ();
+static void *xmalloc (), *xrealloc ();
#else
-extern char *xmalloc __P((int));
-extern char *xrealloc __P((void *, int));
+# include "xmalloc.h"
#endif /* TEST || STATIC_MALLOC */
#if !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid __P((uid_t));
-extern struct passwd *getpwnam __P((const char *));
+extern struct passwd *getpwuid PARAMS((uid_t));
+extern struct passwd *getpwnam PARAMS((const char *));
#endif /* !HAVE_GETPW_DECLS */
#if !defined (savestring)
# ifndef strcpy
extern char *strcpy ();
# endif
-#define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x))
+#define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x))
#endif /* !savestring */
#if !defined (NULL)
@@ -77,8 +76,8 @@ extern char *strcpy ();
/* If being compiled as part of bash, these will be satisfied from
variables.o. If being compiled as part of readline, they will
be satisfied from shell.o. */
-extern char *sh_get_home_dir __P((void));
-extern char *sh_get_env_value __P((const char *));
+extern char *sh_get_home_dir PARAMS((void));
+extern char *sh_get_env_value PARAMS((const char *));
/* The default value of tilde_additional_prefixes. This is set to
whitespace preceding a tilde so that simple programs which do not
@@ -114,12 +113,17 @@ char **tilde_additional_prefixes = (char **)default_prefixes;
`:' and `=~'. */
char **tilde_additional_suffixes = (char **)default_suffixes;
+static int tilde_find_prefix PARAMS((const char *, int *));
+static int tilde_find_suffix PARAMS((const char *));
+static char *isolate_tilde_prefix PARAMS((const char *, int *));
+static char *glue_prefix_and_suffix PARAMS((char *, const char *, int));
+
/* Find the start of a tilde expansion in STRING, and return the index of
the tilde which starts the expansion. Place the length of the text
which identified this tilde starter in LEN, excluding the tilde itself. */
static int
tilde_find_prefix (string, len)
- char *string;
+ const char *string;
int *len;
{
register int i, j, string_len;
@@ -154,7 +158,7 @@ tilde_find_prefix (string, len)
the character which ends the tilde definition. */
static int
tilde_find_suffix (string)
- char *string;
+ const char *string;
{
register int i, j, string_len;
register char **suffixes;
@@ -190,9 +194,9 @@ tilde_expand (string)
result_index = result_size = 0;
if (result = strchr (string, '~'))
- result = xmalloc (result_size = (strlen (string) + 16));
+ result = (char *)xmalloc (result_size = (strlen (string) + 16));
else
- result = xmalloc (result_size = (strlen (string) + 1));
+ result = (char *)xmalloc (result_size = (strlen (string) + 1));
/* Scan through STRING expanding tildes as we come to them. */
while (1)
@@ -206,7 +210,7 @@ tilde_expand (string)
/* Copy the skipped text into the result. */
if ((result_index + start + 1) > result_size)
- result = xrealloc (result, 1 + (result_size += (start + 20)));
+ result = (char *)xrealloc (result, 1 + (result_size += (start + 20)));
strncpy (result + result_index, string, start);
result_index += start;
@@ -223,7 +227,7 @@ tilde_expand (string)
break;
/* Expand the entire tilde word, and copy it into RESULT. */
- tilde_word = xmalloc (1 + end);
+ tilde_word = (char *)xmalloc (1 + end);
strncpy (tilde_word, string, end);
tilde_word[end] = '\0';
string += end;
@@ -239,7 +243,7 @@ tilde_expand (string)
#endif
{
if ((result_index + len + 1) > result_size)
- result = xrealloc (result, 1 + (result_size += (len + 20)));
+ result = (char *)xrealloc (result, 1 + (result_size += (len + 20)));
strcpy (result + result_index, expansion);
result_index += len;
@@ -257,13 +261,13 @@ tilde_expand (string)
the location it points to. */
static char *
isolate_tilde_prefix (fname, lenp)
- char *fname;
+ const char *fname;
int *lenp;
{
char *ret;
int i;
- ret = xmalloc (strlen (fname));
+ ret = (char *)xmalloc (strlen (fname));
#if defined (__MSDOS__)
for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++)
#else
@@ -280,7 +284,8 @@ isolate_tilde_prefix (fname, lenp)
SUFFIND. */
static char *
glue_prefix_and_suffix (prefix, suffix, suffind)
- char *prefix, *suffix;
+ char *prefix;
+ const char *suffix;
int suffind;
{
char *ret;
@@ -288,7 +293,7 @@ glue_prefix_and_suffix (prefix, suffix, suffind)
plen = (prefix && *prefix) ? strlen (prefix) : 0;
slen = strlen (suffix + suffind);
- ret = xmalloc (plen + slen + 1);
+ ret = (char *)xmalloc (plen + slen + 1);
if (plen)
strcpy (ret, prefix);
strcpy (ret + plen, suffix + suffind);
@@ -412,28 +417,28 @@ main (argc, argv)
static void memory_error_and_abort ();
-static char *
+static void *
xmalloc (bytes)
- int bytes;
+ size_t bytes;
{
- char *temp = (char *)malloc (bytes);
+ void *temp = (char *)malloc (bytes);
if (!temp)
memory_error_and_abort ();
return (temp);
}
-static char *
+static void *
xrealloc (pointer, bytes)
- char *pointer;
+ void *pointer;
int bytes;
{
- char *temp;
+ void *temp;
if (!pointer)
- temp = (char *)malloc (bytes);
+ temp = malloc (bytes);
else
- temp = (char *)realloc (pointer, bytes);
+ temp = realloc (pointer, bytes);
if (!temp)
memory_error_and_abort ();
diff --git a/tilde.h b/tilde.h
index d3966a6..0df608b 100644
--- a/tilde.h
+++ b/tilde.h
@@ -24,35 +24,27 @@
#if !defined (_TILDE_H_)
# define _TILDE_H_
+#if defined (HAVE_CONFIG_H)
+# include <config.h>
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
/* A function can be defined using prototypes and compile on both ANSI C
and traditional C compilers with something like this:
- extern char *func __P((char *, char *, int)); */
+ extern char *func PARAMS((char *, char *, int)); */
-#if !defined (__P)
+#if !defined (PARAMS)
# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
-# define __P(protos) protos
+# define PARAMS(protos) protos
# else
-# define __P(protos) ()
+# define PARAMS(protos) ()
# endif
#endif
-#if !defined (__STDC__) && !defined (__cplusplus)
-# if defined (__GNUC__) /* gcc with -traditional */
-# if !defined (const)
-# define const __const
-# endif /* !const */
-# else /* !__GNUC__ */
-# if !defined (const)
-# define const
-# endif /* !const */
-# endif /* !__GNUC__ */
-#endif /* !__STDC__ && !__cplusplus */
-
-typedef char *tilde_hook_func_t __P((char *));
+typedef char *tilde_hook_func_t PARAMS((char *));
/* If non-null, this contains the address of a function that the application
wants called before trying the standard tilde expansions. The function
@@ -77,11 +69,11 @@ extern char **tilde_additional_prefixes;
extern char **tilde_additional_suffixes;
/* Return a new string which is the result of tilde expanding STRING. */
-extern char *tilde_expand __P((const char *));
+extern char *tilde_expand PARAMS((const char *));
/* Do the work of tilde expansion on FILENAME. FILENAME starts with a
tilde. If there is no expansion, call tilde_expansion_failure_hook. */
-extern char *tilde_expand_word __P((const char *));
+extern char *tilde_expand_word PARAMS((const char *));
#ifdef __cplusplus
}
diff --git a/undo.c b/undo.c
index e29e940..9be231d 100644
--- a/undo.c
+++ b/undo.c
@@ -48,6 +48,7 @@
#include "history.h"
#include "rlprivate.h"
+#include "xmalloc.h"
#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0)
diff --git a/util.c b/util.c
index 6d0a6e3..bd08b38 100644
--- a/util.c
+++ b/util.c
@@ -132,7 +132,7 @@ rl_copy_text (from, to)
SWAP (from, to);
length = to - from;
- copy = xmalloc (1 + length);
+ copy = (char *)xmalloc (1 + length);
strncpy (copy, rl_line_buffer + from, length);
copy[length] = '\0';
return (copy);
@@ -147,7 +147,7 @@ rl_extend_line_buffer (len)
while (len >= rl_line_buffer_len)
{
rl_line_buffer_len += DEFAULT_BUFFER_SIZE;
- rl_line_buffer = xrealloc (rl_line_buffer, rl_line_buffer_len);
+ rl_line_buffer = (char *)xrealloc (rl_line_buffer, rl_line_buffer_len);
}
_rl_set_the_line ();
@@ -193,7 +193,7 @@ rl_tilde_expand (ignore, key)
if (rl_line_buffer[start] == '~')
{
len = end - start + 1;
- temp = xmalloc (len + 1);
+ temp = (char *)xmalloc (len + 1);
strncpy (temp, rl_line_buffer + start, len);
temp[len] = '\0';
homedir = tilde_expand (temp);
@@ -225,6 +225,7 @@ _rl_strindex (s1, s2)
return ((char *)NULL);
}
+#ifndef HAVE_STRPBRK
/* Find the first occurrence in STRING1 of any character from STRING2.
Return a pointer to the character in STRING1. */
char *
@@ -243,6 +244,7 @@ _rl_strpbrk (string1, string2)
}
return ((char *)NULL);
}
+#endif
#if !defined (HAVE_STRCASECMP)
/* Compare at most COUNT characters from string1 to string2. Case
@@ -302,62 +304,16 @@ _rl_qsort_string_compare (s1, s2)
#endif
}
-/* Function equivalents for the macros defined in chartypes.h. */
-#undef _rl_uppercase_p
-int
-_rl_uppercase_p (c)
- int c;
-{
- return (isupper (c));
-}
-
-#undef _rl_lowercase_p
-int
-_rl_lowercase_p (c)
- int c;
-{
- return (islower (c));
-}
-
-#undef _rl_pure_alphabetic
-int
-_rl_pure_alphabetic (c)
- int c;
-{
- return (isupper (c) || islower (c));
-}
-
-#undef _rl_digit_p
-int
-_rl_digit_p (c)
- int c;
-{
- return (isdigit (c));
-}
-
-#undef _rl_to_lower
-int
-_rl_to_lower (c)
- int c;
-{
- return (isupper (c) ? tolower (c) : c);
-}
+/* Function equivalents for the macros defined in chardefs.h. */
+#define FUNCTION_FOR_MACRO(f) int (f) (c) int c; { return f (c); }
-#undef _rl_to_upper
-int
-_rl_to_upper (c)
- int c;
-{
- return (islower (c) ? toupper (c) : c);
-}
-
-#undef _rl_digit_value
-int
-_rl_digit_value (c)
- int c;
-{
- return (isdigit (c) ? c - '0' : c);
-}
+FUNCTION_FOR_MACRO (_rl_digit_p)
+FUNCTION_FOR_MACRO (_rl_digit_value)
+FUNCTION_FOR_MACRO (_rl_lowercase_p)
+FUNCTION_FOR_MACRO (_rl_pure_alphabetic)
+FUNCTION_FOR_MACRO (_rl_to_lower)
+FUNCTION_FOR_MACRO (_rl_to_upper)
+FUNCTION_FOR_MACRO (_rl_uppercase_p)
/* Backwards compatibility, now that savestring has been removed from
all `public' readline header files. */
@@ -366,5 +322,5 @@ char *
_rl_savestring (s)
const char *s;
{
- return (strcpy (xmalloc (1 + (int)strlen (s)), (s)));
+ return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s)));
}
diff --git a/vi_mode.c b/vi_mode.c
index b9c0ea8..09ccecf 100644
--- a/vi_mode.c
+++ b/vi_mode.c
@@ -57,22 +57,10 @@
#include "rlprivate.h"
#include "xmalloc.h"
-#ifndef _rl_digit_p
-#define _rl_digit_p(c) ((c) >= '0' && (c) <= '9')
-#endif
-
-#ifndef _rl_digit_value
-#define _rl_digit_value(c) ((c) - '0')
-#endif
-
#ifndef member
#define member(c, s) ((c) ? (char *)strchr ((s), (c)) != (char *)NULL : 0)
#endif
-#ifndef isident
-#define isident(c) ((_rl_pure_alphabetic (c) || _rl_digit_p (c) || c == '_'))
-#endif
-
#ifndef exchange
#define exchange(x, y) do {int temp = x; x = y; y = temp;} while (0)
#endif
@@ -81,7 +69,7 @@
static int _rl_vi_doing_insert;
/* Command keys which do movement for xxx_to commands. */
-static const char *vi_motion = " hl^$0ftFt;,%wbeWBE|";
+static const char *vi_motion = " hl^$0ftFT;,%wbeWBE|";
/* Keymap used for vi replace characters. Created dynamically since
rarely used. */
@@ -112,9 +100,11 @@ static int vi_redoing;
static const char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~";
/* Arrays for the saved marks. */
-static int vi_mark_chars[27];
+static int vi_mark_chars['z' - 'a' + 1];
-static int rl_digit_loop1 __P((void));
+static void _rl_vi_stuff_insert PARAMS((int));
+static void _rl_vi_save_insert PARAMS((UNDO_LIST *));
+static int rl_digit_loop1 PARAMS((void));
void
_rl_vi_initialize_line ()
@@ -460,14 +450,14 @@ rl_vi_fword (count, ignore)
while (count-- && rl_point < (rl_end - 1))
{
/* Move to white space (really non-identifer). */
- if (isident (rl_line_buffer[rl_point]))
+ if (_rl_isident (rl_line_buffer[rl_point]))
{
- while (isident (rl_line_buffer[rl_point]) && rl_point < rl_end)
+ while (_rl_isident (rl_line_buffer[rl_point]) && rl_point < rl_end)
rl_point++;
}
else /* if (!whitespace (rl_line_buffer[rl_point])) */
{
- while (!isident (rl_line_buffer[rl_point]) &&
+ while (!_rl_isident (rl_line_buffer[rl_point]) &&
!whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end)
rl_point++;
}
@@ -497,9 +487,9 @@ rl_vi_bword (count, ignore)
back so we don't get messed up by the rl_point++ down there in
the while loop. Without this code, words like `l;' screw up the
function. */
- last_is_ident = isident (rl_line_buffer[rl_point - 1]);
- if ((isident (rl_line_buffer[rl_point]) && !last_is_ident) ||
- (!isident (rl_line_buffer[rl_point]) && last_is_ident))
+ last_is_ident = _rl_isident (rl_line_buffer[rl_point - 1]);
+ if ((_rl_isident (rl_line_buffer[rl_point]) && !last_is_ident) ||
+ (!_rl_isident (rl_line_buffer[rl_point]) && last_is_ident))
rl_point--;
while (rl_point > 0 && whitespace (rl_line_buffer[rl_point]))
@@ -507,10 +497,10 @@ rl_vi_bword (count, ignore)
if (rl_point > 0)
{
- if (isident (rl_line_buffer[rl_point]))
- while (--rl_point >= 0 && isident (rl_line_buffer[rl_point]));
+ if (_rl_isident (rl_line_buffer[rl_point]))
+ while (--rl_point >= 0 && _rl_isident (rl_line_buffer[rl_point]));
else
- while (--rl_point >= 0 && !isident (rl_line_buffer[rl_point]) &&
+ while (--rl_point >= 0 && !_rl_isident (rl_line_buffer[rl_point]) &&
!whitespace (rl_line_buffer[rl_point]));
rl_point++;
}
@@ -532,10 +522,10 @@ rl_vi_eword (count, ignore)
if (rl_point < rl_end)
{
- if (isident (rl_line_buffer[rl_point]))
- while (++rl_point < rl_end && isident (rl_line_buffer[rl_point]));
+ if (_rl_isident (rl_line_buffer[rl_point]))
+ while (++rl_point < rl_end && _rl_isident (rl_line_buffer[rl_point]));
else
- while (++rl_point < rl_end && !isident (rl_line_buffer[rl_point])
+ while (++rl_point < rl_end && !_rl_isident (rl_line_buffer[rl_point])
&& !whitespace (rl_line_buffer[rl_point]));
}
rl_point--;
@@ -611,7 +601,7 @@ _rl_vi_save_insert (up)
if (len >= vi_insert_buffer_size)
{
vi_insert_buffer_size += (len + 32) - (len % 32);
- vi_insert_buffer = xrealloc (vi_insert_buffer, vi_insert_buffer_size);
+ vi_insert_buffer = (char *)xrealloc (vi_insert_buffer, vi_insert_buffer_size);
}
strncpy (vi_insert_buffer, rl_line_buffer + start, len - 1);
vi_insert_buffer[len-1] = '\0';
@@ -847,12 +837,12 @@ rl_digit_loop1 ()
RL_UNSETSTATE(RL_STATE_NUMERICARG);
return 1;
}
- rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg, 0);
+ rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg);
RL_SETSTATE(RL_STATE_MOREINPUT);
key = c = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
- if (_rl_keymap[c].type == ISFUNC &&
+ if (c >= 0 && _rl_keymap[c].type == ISFUNC &&
_rl_keymap[c].function == rl_universal_argument)
{
rl_numeric_arg *= 4;
@@ -1356,7 +1346,7 @@ rl_vi_set_mark (count, key)
ch = rl_read_key ();
RL_UNSETSTATE(RL_STATE_MOREINPUT);
- if (_rl_lowercase_p (ch) == 0)
+ if (ch < 'a' || ch > 'z')
{
rl_ding ();
return -1;
@@ -1381,7 +1371,7 @@ rl_vi_goto_mark (count, key)
rl_point = rl_mark;
return 0;
}
- else if (_rl_lowercase_p (ch) == 0)
+ else if (ch < 'a' || ch > 'z')
{
rl_ding ();
return -1;
diff --git a/xmalloc.c b/xmalloc.c
index c0d0640..8985d34 100644
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -51,26 +51,26 @@ memory_error_and_abort (fname)
/* Return a pointer to free()able block of memory large enough
to hold BYTES number of bytes. If the memory cannot be allocated,
print an error message and abort. */
-char *
+PTR_T
xmalloc (bytes)
- int bytes;
+ size_t bytes;
{
- char *temp;
+ PTR_T temp;
- temp = (char *)malloc (bytes);
+ temp = malloc (bytes);
if (temp == 0)
memory_error_and_abort ("xmalloc");
return (temp);
}
-char *
+PTR_T
xrealloc (pointer, bytes)
PTR_T pointer;
- int bytes;
+ size_t bytes;
{
- char *temp;
+ PTR_T temp;
- temp = pointer ? (char *)realloc (pointer, bytes) : (char *)malloc (bytes);
+ temp = pointer ? realloc (pointer, bytes) : malloc (bytes);
if (temp == 0)
memory_error_and_abort ("xrealloc");
diff --git a/xmalloc.h b/xmalloc.h
index bdf251b..9cb08ba 100644
--- a/xmalloc.h
+++ b/xmalloc.h
@@ -39,8 +39,8 @@
#endif /* !PTR_T */
-extern char *xmalloc __P((int));
-extern char *xrealloc __P((void *, int));
-extern void xfree __P((void *));
+extern PTR_T xmalloc PARAMS((size_t));
+extern PTR_T xrealloc PARAMS((void *, size_t));
+extern void xfree PARAMS((void *));
#endif /* _XMALLOC_H_ */