From 576f19e34c32c9ad1bab3c4a130e7027cd3fd9de Mon Sep 17 00:00:00 2001
From: Chet Ramey
Date: Mon, 15 Jun 2020 16:10:22 -0400
Subject: [PATCH] readline-8.1-alpha release
---
CHANGELOG | 39 +-
CHANGES | 65 +
INSTALL | 2 +-
NEWS | 58 +
README | 2 +-
aclocal.m4 | 2117 +-----------------
bind.c | 252 ++-
colors.c | 11 +-
complete.c | 75 +-
configure | 37 +-
configure.ac | 13 +-
display.c | 819 ++++---
doc/history.0 | 188 +-
doc/history.3 | 49 +-
doc/history.dvi | Bin 71552 -> 72236 bytes
doc/history.html | 30 +-
doc/history.info | 90 +-
doc/history.pdf | Bin 203702 -> 204479 bytes
doc/history.ps | 1351 ++++++------
doc/history.texi | 2 +-
doc/history_3.ps | 849 ++++----
doc/hsuser.texi | 39 +-
doc/readline.0 | 491 ++---
doc/readline.3 | 42 +-
doc/readline.dvi | Bin 318576 -> 320660 bytes
doc/readline.html | 1481 ++++++-------
doc/readline.info | 234 +-
doc/readline.pdf | Bin 395448 -> 397008 bytes
doc/readline.ps | 2364 +++++++++++----------
doc/readline_3.ps | 1419 +++++++------
doc/rlman.texi | 2 +-
doc/rltech.texi | 19 +-
doc/rluser.texi | 56 +-
doc/rluserman.dvi | Bin 112756 -> 113996 bytes
doc/rluserman.html | 344 +--
doc/rluserman.info | 86 +-
doc/rluserman.pdf | Bin 230085 -> 231011 bytes
doc/rluserman.ps | 894 ++++----
doc/rluserman.texi | 2 +-
doc/texi2dvi | 1680 ++++++++-------
doc/version.texi | 8 +-
emacs_keymap.c | 4 +-
examples/autoconf/BASH_CHECK_LIB_TERMCAP | 3 +-
examples/autoconf/RL_LIB_READLINE_VERSION | 1 +
funmap.c | 10 +-
histexpand.c | 26 +-
histfile.c | 52 +-
input.c | 31 +-
isearch.c | 70 +-
kill.c | 109 +-
mbutil.c | 106 +-
misc.c | 63 +-
patchlevel | 2 +-
posixdir.h | 2 +-
posixstat.h | 22 +-
readline.c | 97 +-
readline.h | 16 +-
readline.pc.in | 2 +-
rlmbutil.h | 2 +-
rlprivate.h | 34 +-
search.c | 47 +-
signals.c | 16 +-
support/config.guess | 296 ++-
support/config.sub | 61 +-
support/shlib-install | 36 +-
support/shobj-conf | 59 +-
terminal.c | 63 +-
text.c | 105 +-
tilde.c | 18 +-
undo.c | 2 +
util.c | 3 +-
vi_mode.c | 144 +-
72 files changed, 8270 insertions(+), 8442 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 18265ab..ad8c741 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,4 +1,4 @@
-[Readline-specific changelog. Descriptions of changes to the source are
+\[Readline-specific changelog. Descriptions of changes to the source are
found in the bash changelog.]
6/9
@@ -1351,3 +1351,40 @@ Makefile.in
----
Makefile.in
- installdirs: create $(pkgconfigdir) if it doesn't exist
+
+
+ 4/8/2019
+ --------
+readline.pc.in
+ - change CFLAGS to include ${includedir} instead of ${includedir}/readline,
+ to support the recommended `#include '. Report
+ and fix from Andrea Bolognani
+
+ 5/13
+ ----
+configure.ac
+ - hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS
+
+ 8/28
+ ----
+configure.ac
+ - hpux: add -DTGETFLAG_BROKEN to LOCAL_CFLAGS
+
+ 9/6
+ ---
+examples/autoconf/RL_LIB_READLINE_VERSION
+ - include in the AC_TRY_RUN block to accommodate compilers
+ that treat functions without an existing prototype as fatal errors.
+ Report and fix from Florian Weimer
+
+ 12/13
+ -----
+support/shlib-install
+ - remove old code for FreeBSD and Dragonfly; they are ELF-only now and
+ can use the same code as Linux. Fix from
+ Baptiste Daroussin
+
+ 5/20/2020
+ ---------
+configure.ac
+ - bumped version number up to 8.1
diff --git a/CHANGES b/CHANGES
index 09eab6e..fc06b49 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,68 @@
+This document details the changes between this version, readline-8.1, and
+the previous version, readline-8.0.
+
+1. Changes to Readline
+
+a. There are a number of fixes that were found as the result of fuzzing with
+ random input.
+
+b. Changed the revert-all-at-newline behavior to make sure to start at the end
+ of the history list when doing it, instead of the line where the user hit
+ return.
+
+c. When parsing `set' commands from the inputrc file or an application, readline
+ now allows trailing whitespace.
+
+d. Fixed a bug that left a file descriptor open to the history file if the
+ file size was 0.
+
+e. Fixed a problem with binding key sequences containing meta characters.
+
+f. Fixed a bug that caused the wrong line to be displayed if the user tried to
+ move back beyond the beginning of the history list, or forward past the end
+ of the history list.
+
+g. If readline catches SIGTSTP, it now sets a hook that allows the calling
+ application to handle it if it desires.
+
+h. Fixed a redisplay problem with a prompt string containing embedded newlines.
+
+i. Fixed a problem with completing filenames containing invalid multibyte
+ sequences when case-insensitive comparisons are enabled.
+
+j. Fixed a redisplay problem with prompt strings containing invisible multibyte
+ characters.
+
+k. Fixed a problem with multibyte characters mapped to editing commands that
+ modify the search string in incremental search.
+
+l. Fixed a bug with maintaining the key sequence while resolving a bound
+ command in the presence of ambiguous sequences (sequences with a common
+ prefix), in most cases while attempting to unbind it.
+
+m. Fixed several buffer overflows found as the result of fuzzing.
+
+n. Reworked backslash handling when translating key sequences for key binding
+ to be more uniform and consistent, which introduces a slight backwards
+ incompatibility.
+
+o. Fixed a bug with saving the history that resulted in errors not being
+ propagated to the calling application when the history file is not writable.
+
+p. Readline only calls chown(2) on a newly-written history file if it really
+ needs to, instead of having it be a no-op.
+
+q. Readline now behaves better when operate-and-get-next is used when the
+ history list is `full': when there are already $HISTSIZE entries.
+
+r. Fixed a bug that could cause vi redo (`.') of a replace command not to work
+ correctly in the C or POSIX locale.
+
+s. Fixed a bug with vi-mode digit arguments that caused the last command to be
+ set incorrectly. This prevents yank-last-arg from working as intended, for
+ example.
+
+-------------------------------------------------------------------------------
This document details the changes between this version, readline-8.0, and the
previous version, readline-7.0.
diff --git a/INSTALL b/INSTALL
index afb4d53..e11be22 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,7 +1,7 @@
Basic Installation
==================
-These are installation instructions for Readline-8.0.
+These are installation instructions for Readline-8.1.
The simplest way to compile readline is:
diff --git a/NEWS b/NEWS
index 42be21e..27a8a76 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,40 @@
+This is a terse description of the new features added to readline-8.1 since
+the release of readline-8.0.
+
+New Features in Readline
+
+a. If a second consecutive completion attempt produces matches where the first
+ did not, treat it as a new completion attempt and insert a match as
+ appropriate.
+
+b. Bracketed paste mode works in more places: incremental search strings, vi
+ overstrike mode, character search, and reading numeric arguments.
+
+c. Readline automatically switches to horizontal scrolling if the terminal has
+ only one line.
+
+d. Unbinding all key sequences bound to a particular readline function now
+ descends into keymaps for multi-key sequences.
+
+e. rl-clear-display: new bindable command that clears the screen and, if
+ possible, the scrollback buffer (bound to emacs mode M-C-l by default).
+
+f. New active mark and face feature: when enabled, it will highlight the text
+ inserted by a bracketed paste (the `active region') and the text found by
+ incremental and non-incremental history searches.
+
+g. Readline sets the mark in several additional commands.
+
+h. Bracketed paste mode is enabled by default (for now).
+
+i. Readline tries to take advantage of the more regular structure of UTF-8
+ characters to identify the beginning and end of characters when moving
+ through the line buffer.
+
+j. The bindable operate-and-get-next command (and its default bindings) are
+ now part of readline instead of a bash-specific addition.
+
+-------------------------------------------------------------------------------
This is a terse description of the new features added to readline-8.0 since
the release of readline-7.0.
@@ -178,6 +215,27 @@ n. New application-settable variable: rl_signal_event_hook; function that is
called when readline is reading terminal input and read(2) is interrupted
by a signal. Currently not called for SIGHUP or SIGTERM.
+-------------------------------------------------------------------------------
+This is a terse description of the new features added to readline-6.2 since
+the release of readline-6.1.
+
+a. The history library does not try to write the history filename in the
+ current directory if $HOME is unset. This closes a potential security
+ problem if the application does not specify a history filename.
+
+b. New bindable variable `completion-display-width' to set the number of
+ columns used when displaying completions.
+
+c. New bindable variable `completion-case-map' to cause case-insensitive
+ completion to treat `-' and `_' as identical.
+
+d. There are new bindable vi-mode command names to avoid readline's case-
+ insensitive matching not allowing them to be bound separately.
+
+e. New bindable variable `menu-complete-display-prefix' causes the menu
+ completion code to display the common prefix of the possible completions
+ before cycling through the list, instead of after.
+
-------------------------------------------------------------------------------
This is a terse description of the new features added to readline-6.1 since
the release of readline-6.0.
diff --git a/README b/README
index 4fb0804..de98575 100644
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
Introduction
============
-This is the Gnu Readline library, version 8.0.
+This is the Gnu Readline library, version 8.1.
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
diff --git a/aclocal.m4 b/aclocal.m4
index 1413267..a29d26d 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-nl
+dnl
dnl Bash specific tests
dnl
dnl Some derived from PDKSH 5.1.3 autoconf tests
@@ -10,6 +10,7 @@ AC_DEFUN(BASH_C_LONG_LONG,
ac_cv_c_long_long=yes
else
AC_TRY_RUN([
+#include
int
main()
{
@@ -33,6 +34,7 @@ AC_DEFUN(BASH_C_LONG_DOUBLE,
ac_cv_c_long_double=yes
else
AC_TRY_RUN([
+#include
int
main()
{
@@ -64,6 +66,8 @@ AC_DEFUN(BASH_HEADER_INTTYPES,
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 This could be changed to use AC_COMPILE_IFELSE instead of AC_EGREP_CPP
dnl
dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND])
AC_DEFUN(BASH_CHECK_TYPE,
@@ -134,6 +138,8 @@ typedef int (*_bashfunc)(const char *, ...);
#else
typedef int (*_bashfunc)();
#endif
+#include
+int
main()
{
_bashfunc pf;
@@ -191,9 +197,11 @@ AC_CACHE_VAL(bash_cv_under_sys_siglist,
#ifdef HAVE_UNISTD_H
#include
#endif
+#include
#ifndef UNDER_SYS_SIGLIST_DECLARED
extern char *_sys_siglist[];
#endif
+int
main()
{
char *msg = (char *)_sys_siglist[2];
@@ -218,9 +226,11 @@ AC_CACHE_VAL(bash_cv_sys_siglist,
#ifdef HAVE_UNISTD_H
#include
#endif
+#include
#if !HAVE_DECL_SYS_SIGLIST
extern char *sys_siglist[];
#endif
+int
main()
{
char *msg = sys_siglist[2];
@@ -273,6 +283,8 @@ AC_CACHE_VAL(bash_cv_dup2_broken,
[AC_TRY_RUN([
#include
#include
+#include
+int
main()
{
int fd1, fd2, fl;
@@ -300,7 +312,8 @@ AC_DEFUN(BASH_FUNC_STRSIGNAL,
[AC_MSG_CHECKING([for the existence of strsignal])
AC_CACHE_VAL(bash_cv_have_strsignal,
[AC_TRY_LINK([#include
-#include ],
+#include
+#include ],
[char *s = (char *)strsignal(2);],
bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)])
AC_MSG_RESULT($bash_cv_have_strsignal)
@@ -321,6 +334,9 @@ AC_CACHE_VAL(bash_cv_opendir_not_robust,
#ifdef HAVE_UNISTD_H
# include
#endif /* HAVE_UNISTD_H */
+#ifdef HAVE_SYS_STAT_H
+#include
+#endif
#if defined(HAVE_DIRENT_H)
# include
#else
@@ -335,6 +351,8 @@ AC_CACHE_VAL(bash_cv_opendir_not_robust,
# include
# endif
#endif /* HAVE_DIRENT_H */
+#include
+int
main()
{
DIR *dir;
@@ -514,6 +532,8 @@ AC_TRY_RUN([
#include
#include
#include
+#include
+int
main()
{
#ifdef HAVE_QUAD_T
@@ -583,6 +603,7 @@ AC_CACHE_VAL(bash_cv_getenv_redef,
#ifdef HAVE_UNISTD_H
# include
#endif
+#include
#ifndef __STDC__
# ifndef const
# define const
@@ -598,6 +619,7 @@ getenv (name)
{
return "42";
}
+int
main()
{
char *s;
@@ -684,6 +706,11 @@ AC_DEFUN(BASH_FUNC_ULIMIT_MAXFDS,
[AC_MSG_CHECKING(whether ulimit can substitute for getdtablesize)
AC_CACHE_VAL(bash_cv_ulimit_maxfds,
[AC_TRY_RUN([
+#include
+#ifdef HAVE_ULIMIT_H
+#include
+#endif
+int
main()
{
long maxfds = ulimit(4, 0L);
@@ -707,7 +734,9 @@ AC_CACHE_VAL(bash_cv_getcwd_malloc,
#ifdef HAVE_UNISTD_H
#include
#endif
+#include
+int
main()
{
char *xpwd;
@@ -757,12 +786,13 @@ AC_CACHE_VAL(bash_cv_fnm_extmatch,
[AC_TRY_RUN([
#include
+int
main()
{
#ifdef FNM_EXTMATCH
- exit (0);
+ return (0);
#else
- exit (1);
+ return (1);
#endif
}
], bash_cv_fnm_extmatch=yes, bash_cv_fnm_extmatch=no,
@@ -786,7 +816,9 @@ AC_CACHE_VAL(bash_cv_func_sigsetjmp,
#include
#include
#include
+#include
+int
main()
{
#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
@@ -835,7 +867,10 @@ AC_CACHE_VAL(bash_cv_func_strcoll_broken,
#if defined (HAVE_LOCALE_H)
#include
#endif
+#include
+#include
+int
main(c, v)
int c;
char *v[];
@@ -881,6 +916,7 @@ AC_CACHE_VAL(bash_cv_printf_a_format,
[AC_TRY_RUN([
#include
#include
+#include
int
main()
@@ -934,6 +970,7 @@ AC_CACHE_VAL(bash_cv_struct_stat_st_blocks,
#include
],
[
+int
main()
{
static struct stat a;
@@ -1142,12 +1179,17 @@ 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_COMPILE_IFELSE(
+ [AC_LANG_PROGRAM(
+ [[#if HAVE_SYS_TIME_H
+ #include
+ #endif
+ #include
+ ]],
+ [[static struct timeval x; x.tv_sec = x.tv_usec;]]
+ )],
+ 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
@@ -1241,6 +1283,11 @@ AC_CACHE_VAL(bash_cv_pgrp_pipe,
#ifdef HAVE_UNISTD_H
# include
#endif
+#ifdef HAVE_SYS_WAIT_H
+# include
+#endif
+#include
+int
main()
{
# ifdef GETPGRP_VOID
@@ -1305,6 +1352,7 @@ AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers,
#ifdef HAVE_UNISTD_H
#include
#endif
+#include
typedef RETSIGTYPE sigfunc();
@@ -1335,6 +1383,7 @@ int s;
nsigint++;
}
+int
main()
{
nsigint = 0;
@@ -1418,8 +1467,11 @@ AC_CACHE_VAL(bash_cv_sys_named_pipes,
#ifdef HAVE_UNISTD_H
#include
#endif
+#include
+#include
/* Add more tests in here as appropriate. */
+int
main()
{
int fd, err;
@@ -1651,11 +1703,13 @@ AC_CACHE_VAL(bash_cv_unusable_rtsigs,
[AC_TRY_RUN([
#include
#include
+#include
#ifndef NSIG
# define NSIG 64
#endif
+int
main ()
{
int n_sigs = 2 * NSIG;
@@ -1770,6 +1824,7 @@ bash_cv_wcwidth_broken,
#include
#include
+int
main(c, v)
int c;
char **v;
@@ -1834,9 +1889,11 @@ AC_CACHE_VAL(ac_cv_rl_version,
[AC_TRY_RUN([
#include
#include
+#include
extern int rl_gnu_readline_p;
+int
main()
{
FILE *fp;
@@ -1926,7 +1983,9 @@ AC_CACHE_VAL(bash_cv_func_ctype_nonascii,
#endif
#include
#include
+#include
+int
main(c, v)
int c;
char *v[];
@@ -1969,10 +2028,12 @@ AC_CACHE_VAL(bash_cv_wcontinued_broken,
#include
#include
#include
+#include
#ifndef errno
extern int errno;
#endif
+int
main()
{
int x;
@@ -2023,2036 +2084,6 @@ AC_DEFUN([AM_PATH_LISPDIR],
AC_SUBST(lispdir)
])
-dnl
-dnl tests added for gettext
-dnl
-# codeset.m4 serial AM1 (gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
- AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
- [AC_TRY_LINK([#include ],
- [char* cs = nl_langinfo(CODESET);],
- am_cv_langinfo_codeset=yes,
- am_cv_langinfo_codeset=no)
- ])
- if test $am_cv_langinfo_codeset = yes; then
- AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
- [Define if you have and nl_langinfo(CODESET).])
- fi
-])
-# gettext.m4 serial 20 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper , 1995-2000.
-dnl Bruno Haible , 2000-2003.
-
-dnl Macro to add for using GNU gettext.
-
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
-dnl default (if it is not specified or empty) is 'no-libtool'.
-dnl INTLSYMBOL should be 'external' for packages with no intl directory,
-dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory.
-dnl If INTLSYMBOL is 'use-libtool', then a libtool library
-dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static,
-dnl depending on --{enable,disable}-{shared,static} and on the presence of
-dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
-dnl $(top_builddir)/intl/libintl.a will be created.
-dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
-dnl implementations (in libc or libintl) without the ngettext() function
-dnl will be ignored. If NEEDSYMBOL is specified and is
-dnl 'need-formatstring-macros', then GNU gettext implementations that don't
-dnl support the ISO C 99 formatstring macros will be ignored.
-dnl INTLDIR is used to find the intl libraries. If empty,
-dnl the value `$(top_builddir)/intl/' is used.
-dnl
-dnl The result of the configuration is one of three cases:
-dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
-dnl and used.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 2) GNU gettext has been found in the system's C library.
-dnl Catalog format: GNU --> install in $(datadir)
-dnl Catalog extension: .mo after installation, .gmo in source tree
-dnl 3) No internationalization, always use English msgid.
-dnl Catalog format: none
-dnl Catalog extension: none
-dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
-dnl The use of .gmo is historical (it was needed to avoid overwriting the
-dnl GNU format catalogs when building on a platform with an X/Open gettext),
-dnl but we keep it in order not to force irrelevant filename changes on the
-dnl maintainers.
-dnl
-AC_DEFUN([AM_GNU_GETTEXT],
-[
- dnl Argument checking.
- ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
- [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
- ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
- [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
-])])])])
- define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
- define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
-
- AC_REQUIRE([AM_PO_SUBDIRS])dnl
- ifelse(gt_included_intl, yes, [
- AC_REQUIRE([AM_INTL_SUBDIR])dnl
- ])
-
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- dnl Ideally we would do this search only after the
- dnl if test "$USE_NLS" = "yes"; then
- dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then
- dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
- dnl the configure script would need to contain the same shell code
- dnl again, outside any 'if'. There are two solutions:
- dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
- dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
- dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
- dnl documented, we avoid it.
- ifelse(gt_included_intl, yes, , [
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
- ])
-
- dnl Set USE_NLS.
- AM_NLS
-
- ifelse(gt_included_intl, yes, [
- BUILD_INCLUDED_LIBINTL=no
- USE_INCLUDED_LIBINTL=no
- ])
- LIBINTL=
- LTLIBINTL=
- POSUB=
-
- dnl If we use NLS figure out what method
- if test "$USE_NLS" = "yes"; then
- gt_use_preinstalled_gnugettext=no
- ifelse(gt_included_intl, yes, [
- AC_MSG_CHECKING([whether included gettext is requested])
- AC_ARG_WITH(included-gettext,
- [ --with-included-gettext use the GNU gettext library included here],
- nls_cv_force_use_gnu_gettext=$withval,
- nls_cv_force_use_gnu_gettext=no)
- AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
-
- nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
- if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
- ])
- dnl User does not insist on using GNU NLS library. Figure out what
- dnl to use. If GNU gettext is available we use this. Else we have
- dnl to fall back to GNU NLS library.
-
- dnl Add a version number to the cache macros.
- define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
- define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
- define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
-
- AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
- [AC_TRY_LINK([#include
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern int *_nl_domain_bindings;],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
- gt_cv_func_gnugettext_libc=yes,
- gt_cv_func_gnugettext_libc=no)])
-
- if test "$gt_cv_func_gnugettext_libc" != "yes"; then
- dnl Sometimes libintl requires libiconv, so first search for libiconv.
- ifelse(gt_included_intl, yes, , [
- AM_ICONV_LINK
- ])
- dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
- dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
- dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
- dnl even if libiconv doesn't exist.
- AC_LIB_LINKFLAGS_BODY([intl])
- AC_CACHE_CHECK([for GNU gettext in libintl],
- gt_cv_func_gnugettext_libintl,
- [gt_save_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $INCINTL"
- gt_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBINTL"
- dnl Now see whether libintl exists and does not depend on libiconv.
- AC_TRY_LINK([#include
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias ();],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
- gt_cv_func_gnugettext_libintl=yes,
- gt_cv_func_gnugettext_libintl=no)
- dnl Now see whether libintl exists and depends on libiconv.
- if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include
-]ifelse([$2], [need-formatstring-macros],
-[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
-#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
-#endif
-changequote(,)dnl
-typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
-changequote([,])dnl
-], [])[extern int _nl_msg_cat_cntr;
-extern
-#ifdef __cplusplus
-"C"
-#endif
-const char *_nl_expand_alias ();],
- [bindtextdomain ("", "");
-return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
- [LIBINTL="$LIBINTL $LIBICONV"
- LTLIBINTL="$LTLIBINTL $LTLIBICONV"
- gt_cv_func_gnugettext_libintl=yes
- ])
- fi
- CPPFLAGS="$gt_save_CPPFLAGS"
- LIBS="$gt_save_LIBS"])
- fi
-
- dnl If an already present or preinstalled GNU gettext() is found,
- dnl use it. But if this macro is used in GNU gettext, and GNU
- dnl gettext is already preinstalled in libintl, we update this
- dnl libintl. (Cf. the install rule in intl/Makefile.in.)
- if test "$gt_cv_func_gnugettext_libc" = "yes" \
- || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
- && test "$PACKAGE" != gettext-runtime \
- && test "$PACKAGE" != gettext-tools; }; then
- gt_use_preinstalled_gnugettext=yes
- else
- dnl Reset the values set by searching for libintl.
- LIBINTL=
- LTLIBINTL=
- INCINTL=
- fi
-
- ifelse(gt_included_intl, yes, [
- if test "$gt_use_preinstalled_gnugettext" != "yes"; then
- dnl GNU gettext is not found in the C library.
- dnl Fall back on included GNU gettext library.
- nls_cv_use_gnu_gettext=yes
- fi
- fi
-
- if test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions used to generate GNU NLS library.
- BUILD_INCLUDED_LIBINTL=yes
- USE_INCLUDED_LIBINTL=yes
- LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
- LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
- LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
- fi
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- dnl Mark actions to use GNU gettext tools.
- CATOBJEXT=.gmo
- fi
- ])
-
- if test "$gt_use_preinstalled_gnugettext" = "yes" \
- || test "$nls_cv_use_gnu_gettext" = "yes"; then
- AC_DEFINE(ENABLE_NLS, 1,
- [Define to 1 if translation of program messages to the user's native language
- is requested.])
- else
- USE_NLS=no
- fi
- fi
-
- AC_MSG_CHECKING([whether to use NLS])
- AC_MSG_RESULT([$USE_NLS])
- if test "$USE_NLS" = "yes"; then
- AC_MSG_CHECKING([where the gettext function comes from])
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
- gt_source="external libintl"
- else
- gt_source="libc"
- fi
- else
- gt_source="included intl directory"
- fi
- AC_MSG_RESULT([$gt_source])
- fi
-
- if test "$USE_NLS" = "yes"; then
-
- if test "$gt_use_preinstalled_gnugettext" = "yes"; then
- if test "$gt_cv_func_gnugettext_libintl" = "yes"; then
- AC_MSG_CHECKING([how to link with libintl])
- AC_MSG_RESULT([$LIBINTL])
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
- fi
-
- dnl For backward compatibility. Some packages may be using this.
- AC_DEFINE(HAVE_GETTEXT, 1,
- [Define if the GNU gettext() function is already present or preinstalled.])
- AC_DEFINE(HAVE_DCGETTEXT, 1,
- [Define if the GNU dcgettext() function is already present or preinstalled.])
- fi
-
- dnl We need to process the po/ directory.
- POSUB=po
- fi
-
- ifelse(gt_included_intl, yes, [
- dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
- dnl to 'yes' because some of the testsuite requires it.
- if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
- BUILD_INCLUDED_LIBINTL=yes
- fi
-
- dnl Make all variables we use known to autoconf.
- AC_SUBST(BUILD_INCLUDED_LIBINTL)
- AC_SUBST(USE_INCLUDED_LIBINTL)
- AC_SUBST(CATOBJEXT)
-
- dnl For backward compatibility. Some configure.ins may be using this.
- nls_cv_header_intl=
- nls_cv_header_libgt=
-
- dnl For backward compatibility. Some Makefiles may be using this.
- DATADIRNAME=share
- AC_SUBST(DATADIRNAME)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INSTOBJEXT=.mo
- AC_SUBST(INSTOBJEXT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- GENCAT=gencat
- AC_SUBST(GENCAT)
-
- dnl For backward compatibility. Some Makefiles may be using this.
- if test "$USE_INCLUDED_LIBINTL" = yes; then
- INTLOBJS="\$(GETTOBJS)"
- fi
- AC_SUBST(INTLOBJS)
-
- dnl Enable libtool support if the surrounding package wishes it.
- INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
- AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
- ])
-
- dnl For backward compatibility. Some Makefiles may be using this.
- INTLLIBS="$LIBINTL"
- AC_SUBST(INTLLIBS)
-
- dnl Make all documented variables known to autoconf.
- AC_SUBST(LIBINTL)
- AC_SUBST(LTLIBINTL)
- AC_SUBST(POSUB)
-])
-
-
-dnl Checks for all prerequisites of the intl subdirectory,
-dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
-dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
-AC_DEFUN([AM_INTL_SUBDIR],
-[
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AM_MKINSTALLDIRS])dnl
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
- AC_REQUIRE([AC_PROG_RANLIB])dnl
- AC_REQUIRE([AC_ISC_POSIX])dnl
- AC_REQUIRE([AC_HEADER_STDC])dnl
- AC_REQUIRE([AC_C_CONST])dnl
- AC_REQUIRE([AC_C_INLINE])dnl
- AC_REQUIRE([AC_TYPE_OFF_T])dnl
- AC_REQUIRE([AC_TYPE_SIZE_T])dnl
- AC_REQUIRE([AC_FUNC_ALLOCA])dnl
- AC_REQUIRE([AC_FUNC_MMAP])dnl
- AC_REQUIRE([jm_GLIBC21])dnl
- AC_REQUIRE([gt_INTDIV0])dnl
- AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl
- AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
- AC_REQUIRE([gt_INTTYPES_PRI])dnl
-
- AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
-stdlib.h string.h unistd.h sys/param.h])
- AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
-geteuid getgid getuid mempcpy munmap putenv setenv setlocale localeconv stpcpy \
-strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \
-__fsetlocking])
-
- AM_ICONV
- AM_LANGINFO_CODESET
- if test $ac_cv_header_locale_h = yes; then
- AM_LC_MESSAGES
- fi
-
- dnl intl/plural.c is generated from intl/plural.y. It requires bison,
- dnl because plural.y uses bison specific features. It requires at least
- dnl bison-1.26 because earlier versions generate a plural.c that doesn't
- dnl compile.
- dnl bison is only needed for the maintainer (who touches plural.y). But in
- dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
- dnl the rule in general Makefile. Now, some people carelessly touch the
- dnl files or have a broken "make" program, hence the plural.c rule will
- dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
- dnl present or too old.
- AC_CHECK_PROGS([INTLBISON], [bison])
- if test -z "$INTLBISON"; then
- ac_verc_fail=yes
- else
- dnl Found it, now check the version.
- AC_MSG_CHECKING([version of bison])
-changequote(<<,>>)dnl
- ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
- case $ac_prog_version in
- '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
- 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
-changequote([,])dnl
- ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
- *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
- esac
- AC_MSG_RESULT([$ac_prog_version])
- fi
- if test $ac_verc_fail = yes; then
- INTLBISON=:
- fi
-])
-
-
-dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
-AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
-# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# Test for the GNU C Library, version 2.1 or newer.
-# From Bruno Haible.
-
-AC_DEFUN([jm_GLIBC21],
- [
- AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
- ac_cv_gnu_library_2_1,
- [AC_EGREP_CPP([Lucky GNU user],
- [
-#include
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
- Lucky GNU user
- #endif
-#endif
- ],
- ac_cv_gnu_library_2_1=yes,
- ac_cv_gnu_library_2_1=no)
- ]
- )
- AC_SUBST(GLIBC21)
- GLIBC21="$ac_cv_gnu_library_2_1"
- ]
-)
-# iconv.m4 serial AM4 (gettext-0.11.3)
-dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
-[
- dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([iconv])
-])
-
-AC_DEFUN([AM_ICONV_LINK],
-[
- dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
- dnl those with the standalone portable GNU libiconv installed).
-
- dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
- dnl accordingly.
- AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
-
- dnl Add $INCICONV to CPPFLAGS before performing the following checks,
- dnl because if the user has installed libiconv and not disabled its use
- dnl via --without-libiconv-prefix, he wants to use it. The first
- dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
- am_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
-
- AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [
- am_cv_func_iconv="no, consider installing GNU libiconv"
- am_cv_lib_iconv=no
- AC_TRY_LINK([#include
-#include ],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_func_iconv=yes)
- if test "$am_cv_func_iconv" != yes; then
- am_save_LIBS="$LIBS"
- LIBS="$LIBS $LIBICONV"
- AC_TRY_LINK([#include
-#include ],
- [iconv_t cd = iconv_open("","");
- iconv(cd,NULL,NULL,NULL,NULL);
- iconv_close(cd);],
- am_cv_lib_iconv=yes
- am_cv_func_iconv=yes)
- LIBS="$am_save_LIBS"
- fi
- ])
- if test "$am_cv_func_iconv" = yes; then
- AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
- fi
- if test "$am_cv_lib_iconv" = yes; then
- AC_MSG_CHECKING([how to link with libiconv])
- AC_MSG_RESULT([$LIBICONV])
- else
- dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
- dnl either.
- CPPFLAGS="$am_save_CPPFLAGS"
- LIBICONV=
- LTLIBICONV=
- fi
- AC_SUBST(LIBICONV)
- AC_SUBST(LTLIBICONV)
-])
-
-AC_DEFUN([AM_ICONV],
-[
- AM_ICONV_LINK
- if test "$am_cv_func_iconv" = yes; then
- AC_MSG_CHECKING([for iconv declaration])
- AC_CACHE_VAL(am_cv_proto_iconv, [
- AC_TRY_COMPILE([
-#include
-#include
-extern
-#ifdef __cplusplus
-"C"
-#endif
-#if defined(__STDC__) || defined(__cplusplus)
-size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
-#else
-size_t iconv();
-#endif
-], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
- am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
- am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
- AC_MSG_RESULT([$]{ac_t:-
- }[$]am_cv_proto_iconv)
- AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
- [Define as const if the declaration of iconv() needs const.])
- fi
-])
-# intdiv0.m4 serial 1 (gettext-0.11.3)
-dnl Copyright (C) 2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([gt_INTDIV0],
-[
- AC_REQUIRE([AC_PROG_CC])dnl
- AC_REQUIRE([AC_CANONICAL_HOST])dnl
-
- AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
- gt_cv_int_divbyzero_sigfpe,
- [
- AC_TRY_RUN([
-#include
-#include
-
-static void
-#ifdef __cplusplus
-sigfpe_handler (int sig)
-#else
-sigfpe_handler (sig) int sig;
-#endif
-{
- /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */
- exit (sig != SIGFPE);
-}
-
-int x = 1;
-int y = 0;
-int z;
-int nan;
-
-int main ()
-{
- signal (SIGFPE, sigfpe_handler);
-/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */
-#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
- signal (SIGTRAP, sigfpe_handler);
-#endif
-/* Linux/SPARC yields signal SIGILL. */
-#if defined (__sparc__) && defined (__linux__)
- signal (SIGILL, sigfpe_handler);
-#endif
-
- z = x / y;
- nan = y / y;
- exit (1);
-}
-], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
- [
- # Guess based on the CPU.
- case "$host_cpu" in
- alpha* | i[34567]86 | m68k | s390*)
- gt_cv_int_divbyzero_sigfpe="guessing yes";;
- *)
- gt_cv_int_divbyzero_sigfpe="guessing no";;
- esac
- ])
- ])
- case "$gt_cv_int_divbyzero_sigfpe" in
- *yes) value=1;;
- *) value=0;;
- esac
- AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
- [Define if integer division by zero raises signal SIGFPE.])
-])
-# inttypes.m4 serial 1 (gettext-0.11.4)
-dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H if exists and doesn't clash with
-# .
-
-AC_DEFUN([gt_HEADER_INTTYPES_H],
-[
- AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
- [
- AC_TRY_COMPILE(
- [#include
-#include ],
- [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
- ])
- if test $gt_cv_header_inttypes_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
- [Define if exists and doesn't clash with .])
- fi
-])
-# inttypes_h.m4 serial 5 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists,
-# doesn't clash with , and declares uintmax_t.
-
-AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
-[
- AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
- [AC_TRY_COMPILE(
- [#include
-#include ],
- [uintmax_t i = (uintmax_t) -1;],
- jm_ac_cv_header_inttypes_h=yes,
- jm_ac_cv_header_inttypes_h=no)])
- if test $jm_ac_cv_header_inttypes_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
- [Define if exists, doesn't clash with ,
- and declares uintmax_t. ])
- fi
-])
-# inttypes-pri.m4 serial 1 (gettext-0.11.4)
-dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-# Define PRI_MACROS_BROKEN if exists and defines the PRI*
-# macros to non-string values. This is the case on AIX 4.3.3.
-
-AC_DEFUN([gt_INTTYPES_PRI],
-[
- AC_REQUIRE([gt_HEADER_INTTYPES_H])
- if test $gt_cv_header_inttypes_h = yes; then
- AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
- gt_cv_inttypes_pri_broken,
- [
- AC_TRY_COMPILE([#include
-#ifdef PRId32
-char *p = PRId32;
-#endif
-], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
- ])
- fi
- if test "$gt_cv_inttypes_pri_broken" = yes; then
- AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
- [Define if exists and defines unusable PRI* macros.])
- fi
-])
-# isc-posix.m4 serial 2 (gettext-0.11.2)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-# This file is not needed with autoconf-2.53 and newer. Remove it in 2005.
-
-# This test replaces the one in autoconf.
-# Currently this macro should have the same name as the autoconf macro
-# because gettext's gettext.m4 (distributed in the automake package)
-# still uses it. Otherwise, the use in gettext.m4 makes autoheader
-# give these diagnostics:
-# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
-# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
-
-undefine([AC_ISC_POSIX])
-
-AC_DEFUN([AC_ISC_POSIX],
- [
- dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
- AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
- ]
-)
-# lcmessage.m4 serial 3 (gettext-0.11.3)
-dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper , 1995.
-
-# Check whether LC_MESSAGES is available in .
-
-AC_DEFUN([AM_LC_MESSAGES],
-[
- AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
- [AC_TRY_LINK([#include ], [return LC_MESSAGES],
- am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
- if test $am_cv_val_LC_MESSAGES = yes; then
- AC_DEFINE(HAVE_LC_MESSAGES, 1,
- [Define if your file defines LC_MESSAGES.])
- fi
-])
-# lib-ld.m4 serial 2 (gettext-0.12)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl Subroutines of libtool.m4,
-dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
-dnl with libtool.m4.
-
-dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
-AC_DEFUN([AC_LIB_PROG_LD_GNU],
-[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
-[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
-if $LD -v 2>&1 &5; then
- acl_cv_prog_gnu_ld=yes
-else
- acl_cv_prog_gnu_ld=no
-fi])
-with_gnu_ld=$acl_cv_prog_gnu_ld
-])
-
-dnl From libtool-1.4. Sets the variable LD.
-AC_DEFUN([AC_LIB_PROG_LD],
-[AC_ARG_WITH(gnu-ld,
-[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
-test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-ac_prog=ld
-if test "$GCC" = yes; then
- # Check if gcc -print-prog-name=ld gives a path.
- AC_MSG_CHECKING([for ld used by GCC])
- case $host in
- *-*-mingw*)
- # gcc leaves a trailing carriage return which upsets mingw
- ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
- *)
- ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
- esac
- case $ac_prog in
- # Accept absolute paths.
- [[\\/]* | [A-Za-z]:[\\/]*)]
- [re_direlt='/[^/][^/]*/\.\./']
- # Canonicalize the path of ld
- ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
- while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
- ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
- done
- test -z "$LD" && LD="$ac_prog"
- ;;
- "")
- # If it fails, then pretend we aren't using GCC.
- ac_prog=ld
- ;;
- *)
- # If it is relative, then search for the first ld in PATH.
- with_gnu_ld=unknown
- ;;
- esac
-elif test "$with_gnu_ld" = yes; then
- AC_MSG_CHECKING([for GNU ld])
-else
- AC_MSG_CHECKING([for non-GNU ld])
-fi
-AC_CACHE_VAL(acl_cv_path_LD,
-[if test -z "$LD"; then
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
- acl_cv_path_LD="$ac_dir/$ac_prog"
- # Check to see if the program is GNU ld. I'd rather use --version,
- # but apparently some GNU ld's only accept -v.
- # Break only if it was the GNU/non-GNU ld that we prefer.
- if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
- test "$with_gnu_ld" != no && break
- else
- test "$with_gnu_ld" != yes && break
- fi
- fi
- done
- IFS="$ac_save_ifs"
-else
- acl_cv_path_LD="$LD" # Let the user override the test with a path.
-fi])
-LD="$acl_cv_path_LD"
-if test -n "$LD"; then
- AC_MSG_RESULT($LD)
-else
- AC_MSG_RESULT(no)
-fi
-test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
-AC_LIB_PROG_LD_GNU
-])
-# lib-link.m4 serial 4 (gettext-0.12)
-dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
-dnl augments the CPPFLAGS variable.
-AC_DEFUN([AC_LIB_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
- ac_cv_lib[]Name[]_libs="$LIB[]NAME"
- ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
- ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
- ])
- LIB[]NAME="$ac_cv_lib[]Name[]_libs"
- LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
- INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
- dnl results of this search when this library appears as a dependency.
- HAVE_LIB[]NAME=yes
- undefine([Name])
- undefine([NAME])
-])
-
-dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
-dnl searches for libname and the libraries corresponding to explicit and
-dnl implicit dependencies, together with the specified include files and
-dnl the ability to compile and link the specified testcode. If found, it
-dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
-dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
-dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
-dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
-AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
-[
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- AC_REQUIRE([AC_LIB_RPATH])
- define([Name],[translit([$1],[./-], [___])])
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
-
- dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
- dnl accordingly.
- AC_LIB_LINKFLAGS_BODY([$1], [$2])
-
- dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
- dnl because if the user has installed lib[]Name and not disabled its use
- dnl via --without-lib[]Name-prefix, he wants to use it.
- ac_save_CPPFLAGS="$CPPFLAGS"
- AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
-
- AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
- ac_save_LIBS="$LIBS"
- LIBS="$LIBS $LIB[]NAME"
- AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
- LIBS="$ac_save_LIBS"
- ])
- if test "$ac_cv_lib[]Name" = yes; then
- HAVE_LIB[]NAME=yes
- AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
- AC_MSG_CHECKING([how to link with lib[]$1])
- AC_MSG_RESULT([$LIB[]NAME])
- else
- HAVE_LIB[]NAME=no
- dnl If $LIB[]NAME didn't lead to a usable library, we don't need
- dnl $INC[]NAME either.
- CPPFLAGS="$ac_save_CPPFLAGS"
- LIB[]NAME=
- LTLIB[]NAME=
- fi
- AC_SUBST([HAVE_LIB]NAME)
- AC_SUBST([LIB]NAME)
- AC_SUBST([LTLIB]NAME)
- undefine([Name])
- undefine([NAME])
-])
-
-dnl Determine the platform dependent parameters needed to use rpath:
-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
-dnl hardcode_direct, hardcode_minus_L.
-AC_DEFUN([AC_LIB_RPATH],
-[
- AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS
- AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld
- AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host
- AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
- AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
- CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
- ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
- . ./conftest.sh
- rm -f ./conftest.sh
- acl_cv_rpath=done
- ])
- wl="$acl_cv_wl"
- libext="$acl_cv_libext"
- shlibext="$acl_cv_shlibext"
- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
- hardcode_direct="$acl_cv_hardcode_direct"
- hardcode_minus_L="$acl_cv_hardcode_minus_L"
- dnl Determine whether the user wants rpath handling at all.
- AC_ARG_ENABLE(rpath,
- [ --disable-rpath do not hardcode runtime library paths],
- :, enable_rpath=yes)
-])
-
-dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
-dnl the libraries corresponding to explicit and implicit dependencies.
-dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
-AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
-[
- define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
- [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib$1-prefix],
-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib
- --without-lib$1-prefix don't search for lib$1 in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- dnl Search the library and its dependencies in $additional_libdir and
- dnl $LDFLAGS. Using breadth-first-seach.
- LIB[]NAME=
- LTLIB[]NAME=
- INC[]NAME=
- rpathdirs=
- ltrpathdirs=
- names_already_handled=
- names_next_round='$1 $2'
- while test -n "$names_next_round"; do
- names_this_round="$names_next_round"
- names_next_round=
- for name in $names_this_round; do
- already_handled=
- for n in $names_already_handled; do
- if test "$n" = "$name"; then
- already_handled=yes
- break
- fi
- done
- if test -z "$already_handled"; then
- names_already_handled="$names_already_handled $name"
- dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
- dnl or AC_LIB_HAVE_LINKFLAGS call.
- uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
- eval value=\"\$HAVE_LIB$uppername\"
- if test -n "$value"; then
- if test "$value" = yes; then
- eval value=\"\$LIB$uppername\"
- test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
- eval value=\"\$LTLIB$uppername\"
- test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
- else
- dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
- dnl that this library doesn't exist. So just drop it.
- :
- fi
- else
- dnl Search the library lib$name in $additional_libdir and $LDFLAGS
- dnl and the already constructed $LIBNAME/$LTLIBNAME.
- found_dir=
- found_la=
- found_so=
- found_a=
- if test $use_additional = yes; then
- if test "X$prefer_shared" = "Xyes" && test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
- found_dir="$additional_libdir"
- found_so="$additional_libdir/lib$name.$shlibext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- else
- if test -f "$additional_libdir/lib$name.$libext"; then
- found_dir="$additional_libdir"
- found_a="$additional_libdir/lib$name.$libext"
- if test -f "$additional_libdir/lib$name.la"; then
- found_la="$additional_libdir/lib$name.la"
- fi
- fi
- fi
- fi
- if test "X$found_dir" = "X"; then
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- case "$x" in
- -L*)
- dir=`echo "X$x" | sed -e 's/^X-L//'`
- if test "X$prefer_shared" = "Xyes" && test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
- found_dir="$dir"
- found_so="$dir/lib$name.$shlibext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- else
- if test -f "$dir/lib$name.$libext"; then
- found_dir="$dir"
- found_a="$dir/lib$name.$libext"
- if test -f "$dir/lib$name.la"; then
- found_la="$dir/lib$name.la"
- fi
- fi
- fi
- ;;
- esac
- if test "X$found_dir" != "X"; then
- break
- fi
- done
- fi
- if test "X$found_dir" != "X"; then
- dnl Found the library.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
- if test "X$found_so" != "X"; then
- dnl Linking with a shared library. We attempt to hardcode its
- dnl directory into the executable's runpath, unless it's the
- dnl standard /usr/lib.
- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then
- dnl No hardcoding is needed.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $found_dir"
- fi
- dnl The hardcoding into $LIBNAME is system dependent.
- if test "$hardcode_direct" = yes; then
- dnl Using DIR/libNAME.so during linking hardcodes DIR into the
- dnl resulting binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then
- dnl Use an explicit option to hardcode DIR into the resulting
- dnl binary.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $found_dir"
- fi
- else
- dnl Rely on "-L$found_dir".
- dnl But don't add it if it's already contained in the LDFLAGS
- dnl or the already constructed $LIBNAME
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$found_dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
- fi
- if test "$hardcode_minus_L" != no; then
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
- else
- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH
- dnl here, because this doesn't fit in flags passed to the
- dnl compiler. So give up. No hardcoding. This affects only
- dnl very old systems.
- dnl FIXME: Not sure whether we should use
- dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
- dnl here.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- fi
- else
- if test "X$found_a" != "X"; then
- dnl Linking with a static library.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
- else
- dnl We shouldn't come here, but anyway it's good to have a
- dnl fallback.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
- fi
- fi
- dnl Assume the include files are nearby.
- additional_includedir=
- case "$found_dir" in
- */lib | */lib/)
- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
- additional_includedir="$basedir/include"
- ;;
- esac
- if test "X$additional_includedir" != "X"; then
- dnl Potentially add $additional_includedir to $INCNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's /usr/local/include and we are using GCC on Linux,
- dnl 3. if it's already present in $CPPFLAGS or the already
- dnl constructed $INCNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- for x in $CPPFLAGS $INC[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $INCNAME.
- INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- fi
- dnl Look for dependencies.
- if test -n "$found_la"; then
- dnl Read the .la file. It defines the variables
- dnl dlname, library_names, old_library, dependency_libs, current,
- dnl age, revision, installed, dlopen, dlpreopen, libdir.
- save_libdir="$libdir"
- case "$found_la" in
- */* | *\\*) . "$found_la" ;;
- *) . "./$found_la" ;;
- esac
- libdir="$save_libdir"
- dnl We use only dependency_libs.
- for dep in $dependency_libs; do
- case "$dep" in
- -L*)
- additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
- dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 3. if it's already present in $LDFLAGS or the already
- dnl constructed $LIBNAME,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- haveit=
- for x in $LDFLAGS $LIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LIBNAME.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- haveit=
- for x in $LDFLAGS $LTLIB[]NAME; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LTLIBNAME.
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- ;;
- -R*)
- dir=`echo "X$dep" | sed -e 's/^X-R//'`
- if test "$enable_rpath" != no; then
- dnl Potentially add DIR to rpathdirs.
- dnl The rpathdirs will be appended to $LIBNAME at the end.
- haveit=
- for x in $rpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- rpathdirs="$rpathdirs $dir"
- fi
- dnl Potentially add DIR to ltrpathdirs.
- dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
- haveit=
- for x in $ltrpathdirs; do
- if test "X$x" = "X$dir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- ltrpathdirs="$ltrpathdirs $dir"
- fi
- fi
- ;;
- -l*)
- dnl Handle this in the next round.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
- ;;
- *.la)
- dnl Handle this in the next round. Throw away the .la's
- dnl directory; it is already contained in a preceding -L
- dnl option.
- names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
- ;;
- *)
- dnl Most likely an immediate library name.
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
- ;;
- esac
- done
- fi
- else
- dnl Didn't find the library; assume it is in the system directories
- dnl known to the linker and runtime loader. (All the system
- dnl directories known to the linker should also be known to the
- dnl runtime loader, otherwise the system is severely misconfigured.)
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
- fi
- fi
- fi
- done
- done
- if test "X$rpathdirs" != "X"; then
- if test -n "$hardcode_libdir_separator"; then
- dnl Weird platform: only the last -rpath option counts, the user must
- dnl pass all path elements in one option. We can arrange that for a
- dnl single library, but not when more than one $LIBNAMEs are used.
- alldirs=
- for found_dir in $rpathdirs; do
- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
- done
- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
- acl_save_libdir="$libdir"
- libdir="$alldirs"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- else
- dnl The -rpath options are cumulative.
- for found_dir in $rpathdirs; do
- acl_save_libdir="$libdir"
- libdir="$found_dir"
- eval flag=\"$hardcode_libdir_flag_spec\"
- libdir="$acl_save_libdir"
- LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
- done
- fi
- fi
- if test "X$ltrpathdirs" != "X"; then
- dnl When using libtool, the option that works for both libraries and
- dnl executables is -R. The -R options are cumulative.
- for found_dir in $ltrpathdirs; do
- LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
- done
- fi
-])
-
-dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
-dnl unless already present in VAR.
-dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
-dnl contains two or three consecutive elements that belong together.
-AC_DEFUN([AC_LIB_APPENDTOVAR],
-[
- for element in [$2]; do
- haveit=
- for x in $[$1]; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X$element"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- [$1]="${[$1]}${[$1]:+ }$element"
- fi
- done
-])
-# lib-prefix.m4 serial 2 (gettext-0.12)
-dnl Copyright (C) 2001-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Bruno Haible.
-
-dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
-dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
-dnl require excessive bracketing.
-ifdef([AC_HELP_STRING],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
-[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
-
-dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
-dnl to access previously installed libraries. The basic assumption is that
-dnl a user will want packages to use other packages he previously installed
-dnl with the same --prefix option.
-dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
-dnl libraries, but is otherwise very convenient.
-AC_DEFUN([AC_LIB_PREFIX],
-[
- AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
- AC_REQUIRE([AC_PROG_CC])
- AC_REQUIRE([AC_CANONICAL_HOST])
- AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
- dnl By default, look in $includedir and $libdir.
- use_additional=yes
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- AC_LIB_ARG_WITH([lib-prefix],
-[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
- --without-lib-prefix don't search for libraries in includedir and libdir],
-[
- if test "X$withval" = "Xno"; then
- use_additional=no
- else
- if test "X$withval" = "X"; then
- AC_LIB_WITH_FINAL_PREFIX([
- eval additional_includedir=\"$includedir\"
- eval additional_libdir=\"$libdir\"
- ])
- else
- additional_includedir="$withval/include"
- additional_libdir="$withval/lib"
- fi
- fi
-])
- if test $use_additional = yes; then
- dnl Potentially add $additional_includedir to $CPPFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/include,
- dnl 2. if it's already present in $CPPFLAGS,
- dnl 3. if it's /usr/local/include and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_includedir" != "X/usr/include"; then
- haveit=
- for x in $CPPFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-I$additional_includedir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_includedir" = "X/usr/local/include"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_includedir"; then
- dnl Really add $additional_includedir to $CPPFLAGS.
- CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
- fi
- fi
- fi
- fi
- dnl Potentially add $additional_libdir to $LDFLAGS.
- dnl But don't add it
- dnl 1. if it's the standard /usr/lib,
- dnl 2. if it's already present in $LDFLAGS,
- dnl 3. if it's /usr/local/lib and we are using GCC on Linux,
- dnl 4. if it doesn't exist as a directory.
- if test "X$additional_libdir" != "X/usr/lib"; then
- haveit=
- for x in $LDFLAGS; do
- AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
- if test "X$x" = "X-L$additional_libdir"; then
- haveit=yes
- break
- fi
- done
- if test -z "$haveit"; then
- if test "X$additional_libdir" = "X/usr/local/lib"; then
- if test -n "$GCC"; then
- case $host_os in
- linux*) haveit=yes;;
- esac
- fi
- fi
- if test -z "$haveit"; then
- if test -d "$additional_libdir"; then
- dnl Really add $additional_libdir to $LDFLAGS.
- LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
- fi
- fi
- fi
- fi
- fi
-])
-
-dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
-dnl acl_final_exec_prefix, containing the values to which $prefix and
-dnl $exec_prefix will expand at the end of the configure script.
-AC_DEFUN([AC_LIB_PREPARE_PREFIX],
-[
- dnl Unfortunately, prefix and exec_prefix get only finally determined
- dnl at the end of configure.
- if test "X$prefix" = "XNONE"; then
- acl_final_prefix="$ac_default_prefix"
- else
- acl_final_prefix="$prefix"
- fi
- if test "X$exec_prefix" = "XNONE"; then
- acl_final_exec_prefix='${prefix}'
- else
- acl_final_exec_prefix="$exec_prefix"
- fi
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
- prefix="$acl_save_prefix"
-])
-
-dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
-dnl variables prefix and exec_prefix bound to the values they will have
-dnl at the end of the configure script.
-AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
-[
- acl_save_prefix="$prefix"
- prefix="$acl_final_prefix"
- acl_save_exec_prefix="$exec_prefix"
- exec_prefix="$acl_final_exec_prefix"
- $1
- exec_prefix="$acl_save_exec_prefix"
- prefix="$acl_save_prefix"
-])
-# nls.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper , 1995-2000.
-dnl Bruno Haible , 2000-2003.
-
-AC_DEFUN([AM_NLS],
-[
- AC_MSG_CHECKING([whether NLS is requested])
- dnl Default is enabled NLS
- AC_ARG_ENABLE(nls,
- [ --disable-nls do not use Native Language Support],
- USE_NLS=$enableval, USE_NLS=yes)
- AC_MSG_RESULT($USE_NLS)
- AC_SUBST(USE_NLS)
-])
-
-AC_DEFUN([AM_MKINSTALLDIRS],
-[
- dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
- dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
- dnl Try to locate it.
- MKINSTALLDIRS=
- if test -n "$ac_aux_dir"; then
- case "$ac_aux_dir" in
- /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
- *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
- esac
- fi
- if test -z "$MKINSTALLDIRS"; then
- MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
- fi
- AC_SUBST(MKINSTALLDIRS)
-])
-# po.m4 serial 1 (gettext-0.12)
-dnl Copyright (C) 1995-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper , 1995-2000.
-dnl Bruno Haible , 2000-2003.
-
-dnl Checks for all prerequisites of the po subdirectory.
-AC_DEFUN([AM_PO_SUBDIRS],
-[
- AC_REQUIRE([AC_PROG_MAKE_SET])dnl
- AC_REQUIRE([AC_PROG_INSTALL])dnl
- AC_REQUIRE([AM_MKINSTALLDIRS])dnl
- AC_REQUIRE([AM_NLS])dnl
-
- dnl Perform the following tests also if --disable-nls has been given,
- dnl because they are needed for "make dist" to work.
-
- dnl Search for GNU msgfmt in the PATH.
- dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
- dnl The second test excludes FreeBSD msgfmt.
- AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
- [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 &&
- (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
-
- dnl Search for GNU xgettext 0.12 or newer in the PATH.
- dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
- dnl The second test excludes FreeBSD xgettext.
- AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
- [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
- (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
- :)
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
-
- dnl Search for GNU msgmerge 0.11 or newer in the PATH.
- AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
- [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :)
-
- dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
- dnl Test whether we really found GNU msgfmt.
- if test "$GMSGFMT" != ":"; then
- dnl If it is no GNU msgfmt we define it as : so that the
- dnl Makefiles still can work.
- if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
- (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
- AC_MSG_RESULT(
- [found $GMSGFMT program is not GNU msgfmt; ignore it])
- GMSGFMT=":"
- fi
- fi
-
- dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
- dnl Test whether we really found GNU xgettext.
- if test "$XGETTEXT" != ":"; then
- dnl If it is no GNU xgettext we define it as : so that the
- dnl Makefiles still can work.
- if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 &&
- (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
- : ;
- else
- AC_MSG_RESULT(
- [found xgettext program is not GNU xgettext; ignore it])
- XGETTEXT=":"
- fi
- dnl Remove leftover from FreeBSD xgettext call.
- rm -f messages.po
- fi
-
- AC_OUTPUT_COMMANDS([
- for ac_file in $CONFIG_FILES; do
- # Support "outfile[:infile[:infile...]]"
- case "$ac_file" in
- *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
- esac
- # PO directories have a Makefile.in generated from Makefile.in.in.
- case "$ac_file" in */Makefile.in)
- # Adjust a relative srcdir.
- ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
- ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
- ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
- # In autoconf-2.13 it is called $ac_given_srcdir.
- # In autoconf-2.50 it is called $srcdir.
- test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
- case "$ac_given_srcdir" in
- .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
- /*) top_srcdir="$ac_given_srcdir" ;;
- *) top_srcdir="$ac_dots$ac_given_srcdir" ;;
- esac
- if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
- rm -f "$ac_dir/POTFILES"
- test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
- cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
- POMAKEFILEDEPS="POTFILES.in"
- # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend
- # on $ac_dir but don't depend on user-specified configuration
- # parameters.
- if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
- # The LINGUAS file contains the set of available languages.
- if test -n "$OBSOLETE_ALL_LINGUAS"; then
- test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
- fi
- ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"`
- # Hide the ALL_LINGUAS assigment from automake.
- eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
- POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
- else
- # The set of available languages was given in configure.in.
- eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
- fi
- case "$ac_given_srcdir" in
- .) srcdirpre= ;;
- *) srcdirpre='$(srcdir)/' ;;
- esac
- POFILES=
- GMOFILES=
- UPDATEPOFILES=
- DUMMYPOFILES=
- for lang in $ALL_LINGUAS; do
- POFILES="$POFILES $srcdirpre$lang.po"
- GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
- UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
- DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
- done
- # CATALOGS depends on both $ac_dir and the user's LINGUAS
- # environment variable.
- INST_LINGUAS=
- if test -n "$ALL_LINGUAS"; then
- for presentlang in $ALL_LINGUAS; do
- useit=no
- if test "%UNSET%" != "$LINGUAS"; then
- desiredlanguages="$LINGUAS"
- else
- desiredlanguages="$ALL_LINGUAS"
- fi
- for desiredlang in $desiredlanguages; do
- # Use the presentlang catalog if desiredlang is
- # a. equal to presentlang, or
- # b. a variant of presentlang (because in this case,
- # presentlang can be used as a fallback for messages
- # which are not translated in the desiredlang catalog).
- case "$desiredlang" in
- "$presentlang"*) useit=yes;;
- esac
- done
- if test $useit = yes; then
- INST_LINGUAS="$INST_LINGUAS $presentlang"
- fi
- done
- fi
- CATALOGS=
- if test -n "$INST_LINGUAS"; then
- for lang in $INST_LINGUAS; do
- CATALOGS="$CATALOGS $lang.gmo"
- done
- fi
- test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
- sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
- for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
- if test -f "$f"; then
- case "$f" in
- *.orig | *.bak | *~) ;;
- *) cat "$f" >> "$ac_dir/Makefile" ;;
- esac
- fi
- done
- fi
- ;;
- esac
- done],
- [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
- # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
- # from automake.
- eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
- # Capture the value of LINGUAS because we need it to compute CATALOGS.
- LINGUAS="${LINGUAS-%UNSET%}"
- ])
-])
-# progtest.m4 serial 3 (gettext-0.12)
-dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-dnl
-dnl This file can can be used in projects which are not available under
-dnl the GNU General Public License or the GNU Library General Public
-dnl License but which still want to provide support for the GNU gettext
-dnl functionality.
-dnl Please note that the actual code of the GNU gettext library is covered
-dnl by the GNU Library General Public License, and the rest of the GNU
-dnl gettext package package is covered by the GNU General Public License.
-dnl They are *not* in the public domain.
-
-dnl Authors:
-dnl Ulrich Drepper , 1996.
-
-# Search path for a program which passes the given test.
-
-dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
-dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
-AC_DEFUN([AM_PATH_PROG_WITH_TEST],
-[
-# Prepare PATH_SEPARATOR.
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Find out how to test for executable files. Don't use a zero-byte file,
-# as systems may use methods other than mode bits to determine executability.
-cat >conf$$.file <<_ASEOF
-#! /bin/sh
-exit 0
-_ASEOF
-chmod +x conf$$.file
-if test -x conf$$.file >/dev/null 2>&1; then
- ac_executable_p="test -x"
-else
- ac_executable_p="test -f"
-fi
-rm -f conf$$.file
-
-# Extract the first word of "$2", so it can be a program name with args.
-set dummy $2; ac_word=[$]2
-AC_MSG_CHECKING([for $ac_word])
-AC_CACHE_VAL(ac_cv_path_$1,
-[case "[$]$1" in
- [[\\/]]* | ?:[[\\/]]*)
- ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
- ;;
- *)
- ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
- for ac_dir in ifelse([$5], , $PATH, [$5]); do
- IFS="$ac_save_IFS"
- test -z "$ac_dir" && ac_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
- if [$3]; then
- ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
- break 2
- fi
- fi
- done
- done
- IFS="$ac_save_IFS"
-dnl If no 4th arg is given, leave the cache variable unset,
-dnl so AC_PATH_PROGS will keep looking.
-ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
-])dnl
- ;;
-esac])dnl
-$1="$ac_cv_path_$1"
-if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
- AC_MSG_RESULT([$]$1)
-else
- AC_MSG_RESULT(no)
-fi
-AC_SUBST($1)dnl
-])
-# stdint_h.m4 serial 3 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-# Define HAVE_STDINT_H_WITH_UINTMAX if exists,
-# doesn't clash with , and declares uintmax_t.
-
-AC_DEFUN([jm_AC_HEADER_STDINT_H],
-[
- AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
- [AC_TRY_COMPILE(
- [#include
-#include ],
- [uintmax_t i = (uintmax_t) -1;],
- jm_ac_cv_header_stdint_h=yes,
- jm_ac_cv_header_stdint_h=no)])
- if test $jm_ac_cv_header_stdint_h = yes; then
- AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
- [Define if exists, doesn't clash with ,
- and declares uintmax_t. ])
- fi
-])
-# uintmax_t.m4 serial 7 (gettext-0.12)
-dnl Copyright (C) 1997-2003 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-AC_PREREQ(2.13)
-
-# Define uintmax_t to 'unsigned long' or 'unsigned long long'
-# if it is not already defined in or .
-
-AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
-[
- AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
- AC_REQUIRE([jm_AC_HEADER_STDINT_H])
- if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
- AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
- test $ac_cv_type_unsigned_long_long = yes \
- && ac_type='unsigned long long' \
- || ac_type='unsigned long'
- AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
- [Define to unsigned long or unsigned long long
- if and don't define.])
- else
- AC_DEFINE(HAVE_UINTMAX_T, 1,
- [Define if you have the 'uintmax_t' type in or .])
- fi
-])
-# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40)
-dnl Copyright (C) 1999-2002 Free Software Foundation, Inc.
-dnl This file is free software, distributed under the terms of the GNU
-dnl General Public License. As a special exception to the GNU General
-dnl Public License, this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl From Paul Eggert.
-
-AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
-[
- AC_CACHE_CHECK([for unsigned long long], ac_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;],
- ac_cv_type_unsigned_long_long=yes,
- ac_cv_type_unsigned_long_long=no)])
- if test $ac_cv_type_unsigned_long_long = yes; then
- AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
- [Define if you have the unsigned long long type.])
- fi
-])
-
dnl From gnulib
AC_DEFUN([BASH_FUNC_FPURGE],
[
@@ -4068,7 +2099,9 @@ AC_DEFUN([BASH_FUNC_SNPRINTF],
AC_CACHE_CHECK([for standard-conformant snprintf], [bash_cv_func_snprintf],
[AC_TRY_RUN([
#include
+#include
+int
main()
{
int n;
@@ -4125,6 +2158,7 @@ foo(format, va_alist)
return n;
}
+int
main()
{
int n;
@@ -4154,6 +2188,7 @@ AC_CACHE_VAL(bash_cv_wexitstatus_offset,
#include
+int
main(c, v)
int c;
char **v;
@@ -4242,7 +2277,7 @@ unsigned char string[4] = { '\xc3', '\xa4', '\0' };
int
main (int c, char **v)
{
- setlocale (LC_ALL, "de_DE.UTF-8");
+ setlocale (LC_ALL, "en_US.UTF-8");
if (fnmatch (pattern, (const char *)string, 0) != FNM_NOMATCH)
exit (0);
exit (1);
diff --git a/bind.c b/bind.c
index 57ae10f..3cbed2c 100644
--- a/bind.c
+++ b/bind.c
@@ -1,6 +1,6 @@
/* bind.c -- key binding and startup file support for the readline library. */
-/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -135,12 +135,13 @@ rl_add_defun (const char *name, rl_command_func_t *function, int key)
int
rl_bind_key (int key, rl_command_func_t *function)
{
- char keyseq[3];
+ char keyseq[4];
int l;
- if (key < 0)
+ if (key < 0 || key > largest_char)
return (key);
+ /* Want to make this a multi-character key sequence with an ESC prefix */
if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
{
if (_rl_keymap[ESC].type == ISKMAP)
@@ -153,24 +154,43 @@ rl_bind_key (int key, rl_command_func_t *function)
escmap[key].function = function;
return (0);
}
- return (key);
+
+ /* Otherwise, let's just let rl_generic_bind handle the key sequence.
+ We start it off with ESC here and let the code below add the rest
+ of the sequence. */
+ keyseq[0] = ESC;
+ l = 1;
+ key = UNMETA(key);
+ goto bind_keyseq;
}
/* If it's bound to a function or macro, just overwrite. Otherwise we have
to treat it as a key sequence so rl_generic_bind handles shadow keymaps
- for us. If we are binding '\' make sure to escape it so it makes it
- through the call to rl_translate_keyseq. */
+ for us. If we are binding '\' or \C-@ (NUL) make sure to escape it so
+ it makes it through the call to rl_translate_keyseq. */
if (_rl_keymap[key].type != ISKMAP)
{
+ if (_rl_keymap[key].type == ISMACR)
+ xfree ((char *)_rl_keymap[key].function);
_rl_keymap[key].type = ISFUNC;
_rl_keymap[key].function = function;
}
else
{
l = 0;
+bind_keyseq:
if (key == '\\')
- keyseq[l++] = '\\';
- keyseq[l++] = key;
+ {
+ keyseq[l++] = '\\';
+ keyseq[l++] = '\\';
+ }
+ else if (key == '\0')
+ {
+ keyseq[l++] = '\\';
+ keyseq[l++] = '0';
+ }
+ else
+ keyseq[l++] = key;
keyseq[l] = '\0';
rl_bind_keyseq (keyseq, function);
}
@@ -242,6 +262,13 @@ rl_unbind_function_in_map (rl_command_func_t *func, Keymap map)
map[i].function = (rl_command_func_t *)NULL;
rval = 1;
}
+ else if (map[i].type == ISKMAP) /* TAG:readline-8.1 */
+ {
+ int r;
+ r = rl_unbind_function_in_map (func, FUNCTION_TO_KEYMAP (map, i));
+ if (r == 1)
+ rval = 1;
+ }
}
return rval;
}
@@ -352,7 +379,7 @@ int
rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
{
char *keys;
- int keys_len, prevkey;
+ int keys_len, prevkey, ic;
register int i;
KEYMAP_ENTRY k;
Keymap prevmap;
@@ -385,7 +412,6 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
for (i = 0; i < keys_len; i++)
{
unsigned char uc = keys[i];
- int ic;
if (i > 0)
prevkey = ic;
@@ -397,6 +423,9 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
return -1;
}
+ /* We now rely on rl_translate_keyseq to do this conversion, so this
+ check is superfluous. */
+#if 0
if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
{
ic = UNMETA (ic);
@@ -406,6 +435,7 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
map = FUNCTION_TO_KEYMAP (map, ESC);
}
}
+#endif
if ((i + 1) < keys_len)
{
@@ -439,9 +469,7 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
}
else
{
- if (map[ic].type == ISMACR)
- xfree ((char *)map[ic].function);
- else if (map[ic].type == ISKMAP)
+ if (map[ic].type == ISKMAP)
{
prevmap = map;
map = FUNCTION_TO_KEYMAP (map, ic);
@@ -454,6 +482,8 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
if (type == ISFUNC && data == 0)
data = (char *)_rl_null_function;
}
+ if (map[ic].type == ISMACR)
+ xfree ((char *)map[ic].function);
map[ic].function = KEYMAP_TO_FUNCTION (data);
map[ic].type = type;
@@ -492,59 +522,38 @@ rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
int
rl_translate_keyseq (const char *seq, char *array, int *len)
{
- register int i, c, l, temp;
+ register int i, l, temp;
+ int has_control, has_meta;
+ unsigned char c;
- for (i = l = 0; c = seq[i]; i++)
+ has_control = 0;
+ has_meta = 0;
+
+ /* When there are incomplete prefixes \C- or \M- (has_control || has_meta)
+ without base character at the end of SEQ, they are processed as the
+ prefixes for '\0'.
+ */
+ for (i = l = 0; (c = seq[i]) || has_control || has_meta; i++)
{
- if (c == '\\')
+ /* Only backslashes followed by a non-null character are handled
+ specially. Trailing backslash (backslash followed by '\0') is
+ processed as a normal character.
+ */
+ if (c == '\\' && seq[i + 1] != '\0')
{
c = seq[++i];
- if (c == 0)
+ /* Handle \C- and \M- prefixes. */
+ if (c == 'C' && seq[i + 1] == '-')
{
- array[l++] = '\\'; /* preserve trailing backslash */
- break;
+ i++;
+ has_control = 1;
+ continue;
}
-
- /* Handle \C- and \M- prefixes. */
- if ((c == 'C' || c == 'M') && seq[i + 1] == '-')
+ else if (c == 'M' && seq[i + 1] == '-')
{
- /* Handle special case of backwards define. */
- if (strncmp (&seq[i], "C-\\M-", 5) == 0)
- {
- array[l++] = ESC; /* ESC is meta-prefix */
- i += 5;
- array[l++] = CTRL (_rl_to_upper (seq[i]));
- }
- else if (c == 'M')
- {
- i++; /* seq[i] == '-' */
- /* XXX - obey convert-meta setting */
- if (_rl_convert_meta_chars_to_ascii && _rl_keymap[ESC].type == ISKMAP)
- array[l++] = ESC; /* ESC is meta-prefix */
- else if (seq[i+1] == '\\' && seq[i+2] == 'C' && seq[i+3] == '-')
- {
- i += 4;
- temp = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i]));
- array[l++] = META (temp);
- }
- else
- {
- /* This doesn't yet handle things like \M-\a, which may
- or may not have any reasonable meaning. You're
- probably better off using straight octal or hex. */
- i++;
- array[l++] = META (seq[i]);
- }
- }
- else if (c == 'C')
- {
- i += 2;
- /* Special hack for C-?... */
- array[l++] = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i]));
- }
- if (seq[i] == '\0')
- break;
+ i++;
+ has_meta = 1;
continue;
}
@@ -555,34 +564,34 @@ rl_translate_keyseq (const char *seq, char *array, int *len)
switch (c)
{
case 'a':
- array[l++] = '\007';
+ c = '\007';
break;
case 'b':
- array[l++] = '\b';
+ c = '\b';
break;
case 'd':
- array[l++] = RUBOUT; /* readline-specific */
+ c = RUBOUT; /* readline-specific */
break;
case 'e':
- array[l++] = ESC;
+ c = ESC;
break;
case 'f':
- array[l++] = '\f';
+ c = '\f';
break;
case 'n':
- array[l++] = NEWLINE;
+ c = NEWLINE;
break;
case 'r':
- array[l++] = RETURN;
+ c = RETURN;
break;
case 't':
- array[l++] = TAB;
+ c = TAB;
break;
case 'v':
- array[l++] = 0x0B;
+ c = 0x0B;
break;
case '\\':
- array[l++] = '\\';
+ c = '\\';
break;
case '0': case '1': case '2': case '3':
case '4': case '5': case '6': case '7':
@@ -590,7 +599,7 @@ rl_translate_keyseq (const char *seq, char *array, int *len)
for (temp = 2, c -= '0'; ISOCTAL ((unsigned char)seq[i]) && temp--; i++)
c = (c * 8) + OCTVALUE (seq[i]);
i--; /* auto-increment in for loop */
- array[l++] = c & largest_char;
+ c &= largest_char;
break;
case 'x':
i++;
@@ -599,16 +608,40 @@ rl_translate_keyseq (const char *seq, char *array, int *len)
if (temp == 2)
c = 'x';
i--; /* auto-increment in for loop */
- array[l++] = c & largest_char;
+ c &= largest_char;
break;
default: /* backslashes before non-special chars just add the char */
- array[l++] = c;
+ c &= largest_char;
break; /* the backslash is stripped */
}
- continue;
}
- array[l++] = c;
+ /* Process \C- and \M- flags */
+ if (has_control)
+ {
+ /* Special treatment for C-? */
+ c = (c == '?') ? RUBOUT : CTRL (_rl_to_upper (c));
+ has_control = 0;
+ }
+ if (has_meta)
+ {
+ c = META (c);
+ has_meta = 0;
+ }
+
+ /* If convert-meta is turned on, convert a meta char to a key sequence */
+ if (META_CHAR (c) && _rl_convert_meta_chars_to_ascii)
+ {
+ array[l++] = ESC; /* ESC is meta-prefix */
+ array[l++] = UNMETA (c);
+ }
+ else
+ array[l++] = (c);
+
+ /* Null characters may be processed for incomplete prefixes at the end of
+ sequence */
+ if (seq[i] == '\0')
+ break;
}
*len = l;
@@ -756,7 +789,7 @@ _rl_untranslate_macro_value (char *seq, int use_escapes)
/* Return a pointer to the function that STRING represents.
If STRING doesn't have a matching function, then a NULL pointer
- is returned. */
+ is returned. The string match is case-insensitive. */
rl_command_func_t *
rl_named_function (const char *string)
{
@@ -809,7 +842,7 @@ _rl_function_of_keyseq_internal (const char *keyseq, size_t len, Keymap map, int
{
/* If this is the last key in the key sequence, return the
map. */
- if (keyseq[i + 1] == '\0')
+ if (i + 1 == len)
{
if (type)
*type = ISKMAP;
@@ -822,9 +855,9 @@ _rl_function_of_keyseq_internal (const char *keyseq, size_t len, Keymap map, int
/* If we're not at the end of the key sequence, and the current key
is bound to something other than a keymap, then the entire key
sequence is not bound. */
- else if (map[ic].type != ISKMAP && keyseq[i+1])
+ else if (map[ic].type != ISKMAP && i+1 < len)
return ((rl_command_func_t *)NULL);
- else /* map[ic].type != ISKMAP && keyseq[i+1] == 0 */
+ else /* map[ic].type != ISKMAP && i+1 == len */
{
if (type)
*type = map[ic].type;
@@ -1569,15 +1602,11 @@ rl_parse_and_bind (char *string)
/* Strip trailing whitespace from values of boolean variables. */
if (find_boolean_var (var) >= 0)
{
- /* remove trailing whitespace */
-remove_trailing:
- e = value + strlen (value) - 1;
- while (e >= value && whitespace (*e))
- e--;
- e++; /* skip back to whitespace or EOS */
-
- if (*e && e >= value)
- *e = '\0';
+ /* just read a whitespace-delimited word or empty string */
+ for (e = value; *e && whitespace (*e) == 0; e++)
+ ;
+ if (e > value)
+ *e = '\0'; /* cut off everything trailing */
}
else if ((i = find_string_var (var)) >= 0)
{
@@ -1589,9 +1618,24 @@ remove_trailing:
value++; /* skip past the quote */
}
else
- goto remove_trailing;
+ {
+ /* remove trailing whitespace */
+ e = value + strlen (value) - 1;
+ while (e >= value && whitespace (*e))
+ e--;
+ e++; /* skip back to whitespace or EOS */
+
+ if (*e && e >= value)
+ *e = '\0';
+ }
}
-
+ else
+ {
+ /* avoid calling rl_variable_bind just to find this out */
+ _rl_init_file_error ("%s: unknown variable name", var);
+ return 1;
+ }
+
rl_variable_bind (var, value);
return 0;
}
@@ -1903,7 +1947,7 @@ string_varname (int i)
}
/* A boolean value that can appear in a `set variable' command is true if
- the value is null or empty, `on' (case-insensitive), or "1". Any other
+ the value is null or empty, `on' (case-insensitive), or "1". All other
values result in 0 (false). */
static int
bool_to_int (const char *value)
@@ -1928,7 +1972,7 @@ rl_variable_value (const char *name)
return (_rl_get_string_variable_value (string_varlist[i].name));
/* Unknown variable names return NULL. */
- return 0;
+ return (char *)NULL;
}
int
@@ -1959,6 +2003,8 @@ rl_variable_bind (const char *name, const char *value)
}
v = (*string_varlist[i].set_func) (value);
+ if (v != 0)
+ _rl_init_file_error ("%s: could not set value to `%s'", name, value);
return v;
}
@@ -2581,20 +2627,22 @@ rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map)
else
sprintf (keyname, "\\e");
}
- else if (CTRL_CHAR (key))
- sprintf (keyname, "\\C-%c", _rl_to_lower (UNCTRL (key)));
- else if (key == RUBOUT)
- sprintf (keyname, "\\C-?");
- else if (key == '\\' || key == '"')
- {
- keyname[0] = '\\';
- keyname[1] = (char) key;
- keyname[2] = '\0';
- }
else
{
- keyname[0] = (char) key;
- keyname[1] = '\0';
+ int c = key, l = 0;
+ if (CTRL_CHAR (c) || c == RUBOUT)
+ {
+ keyname[l++] = '\\';
+ keyname[l++] = 'C';
+ keyname[l++] = '-';
+ c = (c == RUBOUT) ? '?' : _rl_to_lower (UNCTRL (c));
+ }
+
+ if (c == '\\' || c == '"')
+ keyname[l++] = '\\';
+
+ keyname[l++] = (char) c;
+ keyname[l++] = '\0';
}
strcat (keyname, seqs[i]);
diff --git a/colors.c b/colors.c
index 53758e0..9e37527 100644
--- a/colors.c
+++ b/colors.c
@@ -2,7 +2,7 @@
Modified by Chet Ramey for Readline.
- Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012, 2015, 2017
+ Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012, 2015, 2017, 2019
Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
@@ -32,6 +32,13 @@
#include "rlconf.h"
+#if defined __TANDEM
+# define _XOPEN_SOURCE_EXTENDED 1
+# define _TANDEM_SOURCE 1
+# include
+# include
+#endif
+
#include
#include "posixstat.h" // stat related macros (S_ISREG, ...)
@@ -175,7 +182,7 @@ _rl_print_color_indicator (const char *f)
if (linkok == -1 && _rl_color_indicator[C_MISSING].string != NULL)
colored_filetype = C_MISSING;
- else if (linkok == 0 && S_ISLNK(mode) && _rl_color_indicator[C_ORPHAN].string != NULL)
+ else if (linkok == 0 && _rl_color_indicator[C_ORPHAN].string != NULL)
colored_filetype = C_ORPHAN; /* dangling symlink */
else if(stat_ok != 0)
{
diff --git a/complete.c b/complete.c
index adce0d6..989b15c 100644
--- a/complete.c
+++ b/complete.c
@@ -1,6 +1,6 @@
/* complete.c -- filename completion for readline. */
-/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2019 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -21,11 +21,18 @@
#define READLINE_LIBRARY
+#if defined (__TANDEM)
+# define _XOPEN_SOURCE_EXTENDED 1
+#endif
+
#if defined (HAVE_CONFIG_H)
# include
#endif
#include
+#if defined (__TANDEM)
+# include
+#endif
#include
#if defined (HAVE_SYS_FILE_H)
# include
@@ -406,6 +413,7 @@ int rl_sort_completion_matches = 1;
/* Local variable states what happened during the last completion attempt. */
static int completion_changed_buffer;
+static int last_completion_failed = 0;
/* The result of the query to the user about displaying completion matches */
static int completion_y_or_n;
@@ -428,7 +436,11 @@ rl_complete (int ignore, int invoking_key)
if (rl_inhibit_completion)
return (_rl_insert_char (ignore, invoking_key));
- else if (rl_last_func == rl_complete && !completion_changed_buffer)
+#if 0
+ else if (rl_last_func == rl_complete && completion_changed_buffer == 0 && last_completion_failed == 0)
+#else
+ else if (rl_last_func == rl_complete && completion_changed_buffer == 0)
+#endif
return (rl_complete_internal ('?'));
else if (_rl_complete_show_all)
return (rl_complete_internal ('!'));
@@ -477,7 +489,7 @@ rl_completion_mode (rl_command_func_t *cfunc)
/* */
/************************************/
-/* Reset readline state on a signal or other event. */
+/* Reset public readline state on a signal or other event. */
void
_rl_reset_completion_state (void)
{
@@ -1330,12 +1342,13 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text)
memset (&ps2, 0, sizeof (mbstate_t));
}
#endif
- if (_rl_completion_case_fold)
+ for (si = 0; (c1 = match_list[i][si]) && (c2 = match_list[i + 1][si]); si++)
{
- for (si = 0;
- (c1 = _rl_to_lower(match_list[i][si])) &&
- (c2 = _rl_to_lower(match_list[i + 1][si]));
- si++)
+ if (_rl_completion_case_fold)
+ {
+ c1 = _rl_to_lower (c1);
+ c2 = _rl_to_lower (c2);
+ }
#if defined (HANDLE_MULTIBYTE)
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
{
@@ -1347,35 +1360,17 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text)
break;
continue;
}
- wc1 = towlower (wc1);
- wc2 = towlower (wc2);
+ if (_rl_completion_case_fold)
+ {
+ wc1 = towlower (wc1);
+ wc2 = towlower (wc2);
+ }
if (wc1 != wc2)
break;
else if (v1 > 1)
si += v1 - 1;
}
else
-#endif
- if (c1 != c2)
- break;
- }
- else
- {
- for (si = 0;
- (c1 = match_list[i][si]) &&
- (c2 = match_list[i + 1][si]);
- si++)
-#if defined (HANDLE_MULTIBYTE)
- if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
- {
- mbstate_t ps_back;
- ps_back = ps1;
- if (!_rl_compare_chars (match_list[i], si, &ps1, match_list[i+1], si, &ps2))
- break;
- else if ((v = _rl_get_char_len (&match_list[i][si], &ps_back)) > 1)
- si += v - 1;
- }
- else
#endif
if (c1 != c2)
break;
@@ -1986,10 +1981,12 @@ rl_complete_internal (int what_to_do)
int start, end, delimiter, found_quote, i, nontrivial_lcd;
char *text, *saved_line_buffer;
char quote_char;
- int tlen, mlen;
+ int tlen, mlen, saved_last_completion_failed;
RL_SETSTATE(RL_STATE_COMPLETING);
+ saved_last_completion_failed = last_completion_failed;
+
set_completion_defaults (what_to_do);
saved_line_buffer = rl_line_buffer ? savestring (rl_line_buffer) : (char *)NULL;
@@ -2023,6 +2020,7 @@ rl_complete_internal (int what_to_do)
rl_ding ();
FREE (saved_line_buffer);
completion_changed_buffer = 0;
+ last_completion_failed = 1;
RL_UNSETSTATE(RL_STATE_COMPLETING);
_rl_reset_completion_state ();
return (0);
@@ -2038,11 +2036,15 @@ rl_complete_internal (int what_to_do)
rl_ding ();
FREE (saved_line_buffer);
completion_changed_buffer = 0;
+ last_completion_failed = 1;
RL_UNSETSTATE(RL_STATE_COMPLETING);
_rl_reset_completion_state ();
return (0);
}
+ if (matches && matches[0] && *matches[0])
+ last_completion_failed = 0;
+
switch (what_to_do)
{
case TAB:
@@ -2098,6 +2100,15 @@ rl_complete_internal (int what_to_do)
break;
case '?':
+ /* Let's try to insert a single match here if the last completion failed
+ but this attempt returned a single match. */
+ if (saved_last_completion_failed && matches[0] && *matches[0] && matches[1] == 0)
+ {
+ insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char);
+ append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd);
+ break;
+ }
+
if (rl_completion_display_matches_hook == 0)
{
_rl_sigcleanup = _rl_complete_sigcleanup;
diff --git a/configure b/configure
index c9b7ade..9a7f172 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
#! /bin/sh
-# From configure.ac for Readline 8.0, version 2.85.
+# From configure.ac for Readline 8.1, version 2.88.
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for readline 8.0.
+# Generated by GNU Autoconf 2.69 for readline 8.1.
#
# Report bugs to .
#
@@ -581,8 +581,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='readline'
PACKAGE_TARNAME='readline'
-PACKAGE_VERSION='8.0'
-PACKAGE_STRING='readline 8.0'
+PACKAGE_VERSION='8.1'
+PACKAGE_STRING='readline 8.1'
PACKAGE_BUGREPORT='bug-readline@gnu.org'
PACKAGE_URL=''
@@ -1278,7 +1278,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures readline 8.0 to adapt to many kinds of systems.
+\`configure' configures readline 8.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1343,7 +1343,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of readline 8.0:";;
+ short | recursive ) echo "Configuration of readline 8.1:";;
esac
cat <<\_ACEOF
@@ -1440,7 +1440,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-readline configure 8.0
+readline configure 8.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2092,7 +2092,7 @@ cat >config.log <<_ACEOF
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 8.0, which was
+It was created by readline $as_me 8.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2476,7 +2476,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
ac_config_headers="$ac_config_headers config.h"
-LIBVERSION=8.0
+LIBVERSION=8.1
# Make sure we can run config.sub.
$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
@@ -3909,8 +3909,8 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-# 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 we're using gcc and the user hasn't specified CFLAGS, add -O2 to CFLAGS.
+test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2"
if test $ac_cv_c_compiler_gnu = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
@@ -5320,6 +5320,7 @@ else
#ifdef HAVE_UNISTD_H
#include
#endif
+#include
typedef RETSIGTYPE sigfunc();
@@ -5350,6 +5351,7 @@ int s;
nsigint++;
}
+int
main()
{
nsigint = 0;
@@ -5400,7 +5402,9 @@ else
#include
#include
#include
+#include
+int
main()
{
#if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS)
@@ -5503,7 +5507,10 @@ else
#if defined (HAVE_LOCALE_H)
#include
#endif
+#include
+#include
+int
main(c, v)
int c;
char *v[];
@@ -5573,7 +5580,9 @@ else
#endif
#include
#include
+#include
+int
main(c, v)
int c;
char *v[];
@@ -6717,6 +6726,7 @@ else
#include
#include
+int
main(c, v)
int c;
char **v;
@@ -6807,6 +6817,7 @@ esac
case "$host_os" in
isc*) LOCAL_CFLAGS=-Disc386 ;;
+hpux*) LOCAL_CFLAGS="-DTGETENT_BROKEN -DTGETFLAG_BROKEN" ;;
esac
# shared library configuration section
@@ -7413,7 +7424,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by readline $as_me 8.0, which was
+This file was extended by readline $as_me 8.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -7479,7 +7490,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-readline config.status 8.0
+readline config.status 8.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index b73e37b..f9a97e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5,7 +5,7 @@ dnl report bugs to chet@po.cwru.edu
dnl
dnl Process this file with autoconf to produce a configure script.
-# Copyright (C) 1987-2018 Free Software Foundation, Inc.
+# Copyright (C) 1987-2020 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
@@ -20,9 +20,9 @@ dnl Process this file with autoconf to produce a configure script.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-AC_REVISION([for Readline 8.0, version 2.85])
+AC_REVISION([for Readline 8.1, version 2.88])
-AC_INIT(readline, 8.0, bug-readline@gnu.org)
+AC_INIT(readline, 8.1, bug-readline@gnu.org)
dnl make sure we are using a recent autoconf version
AC_PREREQ(2.50)
@@ -32,7 +32,7 @@ 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=8.0
+LIBVERSION=8.1
AC_CANONICAL_HOST
AC_CANONICAL_BUILD
@@ -104,8 +104,8 @@ AC_PROG_CC
dnl AC_AIX
AC_MINIX
-# 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 we're using gcc and the user hasn't specified CFLAGS, add -O2 to CFLAGS.
+test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O2"
AC_PROG_GCC_TRADITIONAL
AC_PROG_INSTALL
@@ -215,6 +215,7 @@ esac
case "$host_os" in
isc*) LOCAL_CFLAGS=-Disc386 ;;
+hpux*) LOCAL_CFLAGS="-DTGETENT_BROKEN -DTGETFLAG_BROKEN" ;;
esac
# shared library configuration section
diff --git a/display.c b/display.c
index 4c6cc00..491b7d4 100644
--- a/display.c
+++ b/display.c
@@ -1,6 +1,6 @@
/* display.c -- readline redisplay facility. */
-/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
This file is part of the GNU Readline Library (Readline), a library
for reading lines of text with interactive input and history editing.
@@ -63,23 +63,31 @@
extern char *strchr (), *strrchr ();
#endif /* !strchr && !__STDC__ */
-static void update_line PARAMS((char *, char *, int, int, int, int));
+static void putc_face PARAMS((int, int, char *));
+static void puts_face PARAMS((const char *, const char *, int));
+static void norm_face PARAMS((char *, int));
+
+static void update_line PARAMS((char *, char *, char *, char *, int, int, int, int));
static void space_to_eol PARAMS((int));
static void delete_chars PARAMS((int));
static void insert_some_chars PARAMS((char *, int, int));
static void open_some_spaces PARAMS((int));
static void cr PARAMS((void));
static void redraw_prompt PARAMS((char *));
+static void _rl_move_cursor_relative PARAMS((int, const char *, const char *));
/* Values for FLAGS */
#define PMT_MULTILINE 0x01
static char *expand_prompt PARAMS((char *, int, int *, int *, int *, int *));
+#define DEFAULT_LINE_BUFFER_SIZE 1024
+
/* State of visible and invisible lines. */
struct line_state
{
char *line;
+ char *lface;
int *lbreaks;
int lbsize;
#if defined (HANDLE_MULTIBYTE)
@@ -102,7 +110,9 @@ static int line_structures_initialized = 0;
#define vis_lbsize (line_state_visible->lbsize)
#define visible_line (line_state_visible->line)
+#define vis_face (line_state_visible->lface)
#define invisible_line (line_state_invisible->line)
+#define inv_face (line_state_invisible->lface)
#if defined (HANDLE_MULTIBYTE)
static int _rl_col_width PARAMS((const char *, int, int, int));
@@ -123,6 +133,10 @@ static int _rl_col_width PARAMS((const char *, int, int, int));
to use prompt_last_invisible directly. */
#define PROMPT_ENDING_INDEX \
((MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? prompt_physical_chars : prompt_last_invisible+1)
+
+#define FACE_NORMAL '0'
+#define FACE_STANDOUT '1'
+#define FACE_INVALID ((char)1)
/* **************************************************************** */
/* */
@@ -190,6 +204,8 @@ int _rl_last_v_pos = 0;
on screen minus 1. */
int _rl_vis_botlin = 0;
+static int _rl_quick_redisplay = 0;
+
/* This is a hint update_line gives to rl_redisplay that it has adjusted the
value of _rl_last_c_pos *and* taken the presence of any invisible chars in
the prompt into account. rl_redisplay notes this and does not do the
@@ -219,7 +235,11 @@ static int msg_bufsiz = 0;
static int forced_display;
/* Default and initial buffer size. Can grow. */
-static int line_size = 1024;
+static int line_size = 0;
+
+/* Set to a non-zero value if horizontal scrolling has been enabled
+ automatically because the terminal was resized to height 1. */
+static int horizontal_scrolling_autoset = 0; /* explicit initialization */
/* Variables to keep track of the expanded prompt string, which may
include invisible characters. */
@@ -574,11 +594,6 @@ rl_expand_prompt (char *prompt)
{
/* The prompt spans multiple lines. */
t = ++p;
- local_prompt = expand_prompt (p, PMT_MULTILINE,
- &prompt_visible_length,
- &prompt_last_invisible,
- &prompt_invis_chars_first_line,
- &prompt_physical_chars);
c = *t; *t = '\0';
/* The portion of the prompt string up to and including the
final newline is now null-terminated. */
@@ -588,11 +603,53 @@ rl_expand_prompt (char *prompt)
(int *)NULL,
(int *)NULL);
*t = c;
+
+ local_prompt = expand_prompt (p, PMT_MULTILINE,
+ &prompt_visible_length,
+ &prompt_last_invisible,
+ &prompt_invis_chars_first_line,
+ &prompt_physical_chars);
local_prompt_len = local_prompt ? strlen (local_prompt) : 0;
return (prompt_prefix_length);
}
}
+/* Allocate the various line structures, making sure they can hold MINSIZE
+ bytes. If the existing line size can accommodate MINSIZE bytes, don't do
+ anything. */
+static void
+realloc_line (int minsize)
+{
+ int minimum_size;
+ int newsize, delta;
+
+ minimum_size = DEFAULT_LINE_BUFFER_SIZE;
+ if (minsize < minimum_size)
+ minsize = minimum_size;
+ if (minsize <= _rl_screenwidth) /* XXX - for gdb */
+ minsize = _rl_screenwidth + 1;
+ if (line_size >= minsize)
+ return;
+
+ newsize = minimum_size;
+ while (newsize < minsize)
+ newsize *= 2;
+
+ visible_line = (char *)xrealloc (visible_line, newsize);
+ vis_face = (char *)xrealloc (vis_face, newsize);
+
+ invisible_line = (char *)xrealloc (invisible_line, newsize);
+ inv_face = (char *)xrealloc (inv_face, newsize);
+
+ delta = newsize - line_size;
+ memset (visible_line + line_size, 0, delta);
+ memset (vis_face + line_size, FACE_NORMAL, delta);
+ memset (invisible_line + line_size, 1, delta);
+ memset (inv_face + line_size, FACE_INVALID, delta);
+
+ line_size = newsize;
+}
+
/* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated
arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE
and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is
@@ -601,29 +658,12 @@ rl_expand_prompt (char *prompt)
static void
init_line_structures (int minsize)
{
- register int n;
-
if (invisible_line == 0) /* initialize it */
{
- if (line_size < minsize)
- line_size = minsize;
- visible_line = (char *)xmalloc (line_size);
- invisible_line = (char *)xmalloc (line_size);
- }
- else if (line_size < minsize) /* ensure it can hold MINSIZE chars */
- {
- line_size *= 2;
- if (line_size < minsize)
- line_size = minsize;
- visible_line = (char *)xrealloc (visible_line, line_size);
- invisible_line = (char *)xrealloc (invisible_line, line_size);
- }
-
- for (n = minsize; n < line_size; n++)
- {
- visible_line[n] = 0;
- invisible_line[n] = 1;
+ if (line_size > minsize)
+ minsize = line_size;
}
+ realloc_line (minsize);
if (vis_lbreaks == 0)
{
@@ -645,16 +685,68 @@ init_line_structures (int minsize)
line_structures_initialized = 1;
}
-
+
+/* Convenience functions to add chars to the invisible line that update the
+ face information at the same time. */
+static void /* XXX - change this */
+invis_addc (int *outp, char c, char face)
+{
+ realloc_line (*outp + 1);
+ invisible_line[*outp] = c;
+ inv_face[*outp] = face;
+ *outp += 1;
+}
+
+static void
+invis_adds (int *outp, const char *str, int n, char face)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ invis_addc (outp, str[i], face);
+}
+
+static void
+invis_nul (int *outp)
+{
+ invis_addc (outp, '\0', 0);
+ *outp -= 1;
+}
+
+static void
+set_active_region (int *beg, int *end)
+{
+ if (rl_point >= 0 && rl_point <= rl_end && rl_mark >= 0 && rl_mark <= rl_end)
+ {
+ *beg = (rl_mark < rl_point) ? rl_mark : rl_point;
+ *end = (rl_mark < rl_point) ? rl_point : rl_mark;
+ }
+}
+
+/* Do whatever tests are necessary and tell update_line that it can do a
+ quick, dumb redisplay on the assumption that there are so many
+ differences between the old and new lines that it would be a waste to
+ compute all the differences.
+ Right now, it just sets _rl_quick_redisplay if the current visible line
+ is a single line (so we don't have to move vertically or mess with line
+ wrapping). */
+void
+_rl_optimize_redisplay (void)
+{
+ if (_rl_vis_botlin == 0)
+ _rl_quick_redisplay = 1;
+}
+
/* Basic redisplay algorithm. See comments inline. */
void
rl_redisplay (void)
{
- register int in, out, c, linenum, cursor_linenum;
- register char *line;
+ int in, out, c, linenum, cursor_linenum;
int inv_botlin, lb_botlin, lb_linenum, o_cpos;
int newlines, lpos, temp, n0, num, prompt_lines_estimate;
char *prompt_this_line;
+ char cur_face;
+ int hl_begin, hl_end;
int mb_cur_max = MB_CUR_MAX;
#if defined (HANDLE_MULTIBYTE)
wchar_t wc;
@@ -672,6 +764,14 @@ rl_redisplay (void)
_rl_block_sigint ();
RL_SETSTATE (RL_STATE_REDISPLAYING);
+ cur_face = FACE_NORMAL;
+ /* Can turn this into an array for multiple highlighted objects in addition
+ to the region */
+ hl_begin = hl_end = -1;
+
+ if (rl_mark_active_p ())
+ set_active_region (&hl_begin, &hl_end);
+
if (!rl_display_prompt)
rl_display_prompt = "";
@@ -680,13 +780,26 @@ rl_redisplay (void)
init_line_structures (0);
rl_on_new_line ();
}
+ else if (line_size <= _rl_screenwidth)
+ init_line_structures (_rl_screenwidth + 1);
+
+ /* Enable horizontal scrolling automatically for terminals of height 1
+ where wrapping lines doesn't work. Disable it as soon as the terminal
+ height is increased again if it was automatically enabled. */
+ if (_rl_screenheight <= 1)
+ {
+ if (_rl_horizontal_scroll_mode == 0)
+ horizontal_scrolling_autoset = 1;
+ _rl_horizontal_scroll_mode = 1;
+ }
+ else if (horizontal_scrolling_autoset)
+ _rl_horizontal_scroll_mode = 0;
/* Draw the line into the buffer. */
cpos_buffer_position = -1;
prompt_multibyte_chars = prompt_visible_length - prompt_physical_chars;
- line = invisible_line;
out = inv_botlin = 0;
/* Mark the line as modified or not. We only do this for history
@@ -694,8 +807,8 @@ rl_redisplay (void)
modmark = 0;
if (_rl_mark_modified_lines && current_history () && rl_undo_list)
{
- line[out++] = '*';
- line[out] = '\0';
+ invis_addc (&out, '*', cur_face);
+ invis_nul (&out);
modmark = 1;
}
@@ -708,7 +821,7 @@ rl_redisplay (void)
/* If the prompt to be displayed is the `primary' readline prompt (the
one passed to readline()), use the values we have already expanded.
If not, use what's already in rl_display_prompt. WRAP_OFFSET is the
- number of non-visible characters in the prompt string. */
+ number of non-visible characters (bytes) in the prompt string. */
/* This is where we output the characters in the prompt before the last
newline, if any. If there aren't any embedded newlines, we don't
write anything. Copy the last line of the prompt string into the line in
@@ -719,18 +832,8 @@ rl_redisplay (void)
_rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix));
if (local_prompt_len > 0)
- {
- temp = local_prompt_len + out + 2;
- if (temp >= line_size)
- {
- line_size = (temp + 1024) - (temp % 1024);
- visible_line = (char *)xrealloc (visible_line, line_size);
- line = invisible_line = (char *)xrealloc (invisible_line, line_size);
- }
- strncpy (line + out, local_prompt, local_prompt_len);
- out += local_prompt_len;
- }
- line[out] = '\0';
+ invis_adds (&out, local_prompt, local_prompt_len, cur_face);
+ invis_nul (&out);
wrap_offset = local_prompt_len - prompt_visible_length;
}
else
@@ -753,17 +856,9 @@ rl_redisplay (void)
}
}
- prompt_physical_chars = pmtlen = strlen (prompt_this_line);
- temp = pmtlen + out + 2;
- if (temp >= line_size)
- {
- line_size = (temp + 1024) - (temp % 1024);
- visible_line = (char *)xrealloc (visible_line, line_size);
- line = invisible_line = (char *)xrealloc (invisible_line, line_size);
- }
- strncpy (line + out, prompt_this_line, pmtlen);
- out += pmtlen;
- line[out] = '\0';
+ prompt_physical_chars = pmtlen = strlen (prompt_this_line); /* XXX */
+ invis_adds (&out, prompt_this_line, pmtlen, cur_face);
+ invis_nul (&out);
wrap_offset = prompt_invis_chars_first_line = 0;
}
@@ -844,8 +939,8 @@ rl_redisplay (void)
num = 0;
#endif
- /* prompt_invis_chars_first_line is the number of invisible characters in
- the first physical line of the prompt.
+ /* prompt_invis_chars_first_line is the number of invisible characters (bytes)
+ in the first physical line of the prompt.
wrap_offset - prompt_invis_chars_first_line is usually the number of
invis chars on the second (or, more generally, last) line. */
@@ -901,6 +996,11 @@ rl_redisplay (void)
for (in = 0; in < rl_end; in++)
#endif
{
+ if (in == hl_begin)
+ cur_face = FACE_STANDOUT;
+ else if (in == hl_end)
+ cur_face = FACE_NORMAL;
+
c = (unsigned char)rl_line_buffer[in];
#if defined (HANDLE_MULTIBYTE)
@@ -925,14 +1025,6 @@ rl_redisplay (void)
}
#endif
- if (out + 8 >= line_size) /* XXX - 8 for \t */
- {
- line_size *= 2;
- visible_line = (char *)xrealloc (visible_line, line_size);
- invisible_line = (char *)xrealloc (invisible_line, line_size);
- line = invisible_line;
- }
-
if (in == rl_point)
{
cpos_buffer_position = out;
@@ -947,9 +1039,12 @@ rl_redisplay (void)
{
if (_rl_output_meta_chars == 0)
{
- sprintf (line + out, "\\%o", c);
+ char obuf[5];
+ int olen;
- if (lpos + 4 >= _rl_screenwidth)
+ olen = sprintf (obuf, "\\%o", c);
+
+ if (lpos + olen >= _rl_screenwidth)
{
temp = _rl_screenwidth - lpos;
CHECK_INV_LBREAKS ();
@@ -957,16 +1052,20 @@ rl_redisplay (void)
#if defined (HANDLE_MULTIBYTE)
line_state_invisible->wrapped_line[newlines] = _rl_wrapped_multicolumn;
#endif
- lpos = 4 - temp;
+ lpos = olen - temp;
}
else
- lpos += 4;
+ lpos += olen;
- out += 4;
+ for (temp = 0; temp < olen; temp++)
+ {
+ invis_addc (&out, obuf[temp], cur_face);
+ CHECK_LPOS ();
+ }
}
else
{
- line[out++] = c;
+ invis_addc (&out, c, cur_face);
CHECK_LPOS();
}
}
@@ -975,11 +1074,7 @@ rl_redisplay (void)
{
register int newout;
-#if 0
- newout = (out | (int)7) + 1;
-#else
newout = out + 8 - lpos % 8;
-#endif
temp = newout - out;
if (lpos + temp >= _rl_screenwidth)
{
@@ -992,19 +1087,19 @@ rl_redisplay (void)
#endif
lpos = temp - temp2;
while (out < newout)
- line[out++] = ' ';
+ invis_addc (&out, ' ', cur_face);
}
else
{
while (out < newout)
- line[out++] = ' ';
+ invis_addc (&out, ' ', cur_face);
lpos += temp;
}
}
#endif
else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
{
- line[out++] = '\0'; /* XXX - sentinel */
+ invis_addc (&out, '\0', cur_face);
CHECK_INV_LBREAKS ();
inv_lbreaks[++newlines] = out;
#if defined (HANDLE_MULTIBYTE)
@@ -1014,9 +1109,9 @@ rl_redisplay (void)
}
else if (CTRL_CHAR (c) || c == RUBOUT)
{
- line[out++] = '^';
+ invis_addc (&out, '^', cur_face);
CHECK_LPOS();
- line[out++] = CTRL_CHAR (c) ? UNCTRL (c) : '?';
+ invis_addc (&out, CTRL_CHAR (c) ? UNCTRL (c) : '?', cur_face);
CHECK_LPOS();
}
else
@@ -1032,7 +1127,7 @@ rl_redisplay (void)
for (i = lpos; i < _rl_screenwidth; i++)
{
/* The space will be removed in update_line() */
- line[out++] = ' ';
+ invis_addc (&out, ' ', cur_face);
_rl_wrapped_multicolumn++;
CHECK_LPOS();
}
@@ -1042,17 +1137,17 @@ rl_redisplay (void)
lb_linenum = newlines;
}
for (i = in; i < in+wc_bytes; i++)
- line[out++] = rl_line_buffer[i];
+ invis_addc (&out, rl_line_buffer[i], cur_face);
for (i = 0; i < wc_width; i++)
CHECK_LPOS();
}
else
{
- line[out++] = c;
+ invis_addc (&out, c, cur_face);
CHECK_LPOS();
}
#else
- line[out++] = c;
+ invis_addc (&out, c, cur_face);
CHECK_LPOS();
#endif
}
@@ -1074,7 +1169,7 @@ rl_redisplay (void)
in++;
#endif
}
- line[out] = '\0';
+ invis_nul (&out);
line_totbytes = out;
if (cpos_buffer_position < 0)
{
@@ -1082,6 +1177,11 @@ rl_redisplay (void)
lb_linenum = newlines;
}
+ /* If we are switching from one line to multiple wrapped lines, we don't
+ want to do a dumb update (or we want to make it smarter). */
+ if (_rl_quick_redisplay && newlines > 0)
+ _rl_quick_redisplay = 0;
+
inv_botlin = lb_botlin = _rl_inv_botlin = newlines;
CHECK_INV_LBREAKS ();
inv_lbreaks[newlines+1] = out;
@@ -1118,7 +1218,7 @@ rl_redisplay (void)
{
#if defined (HANDLE_MULTIBYTE)
if (mb_cur_max > 1 && rl_byte_oriented == 0)
- out = _rl_find_prev_mbchar (line, _rl_screenchars, MB_FIND_ANY);
+ out = _rl_find_prev_mbchar (invisible_line, _rl_screenchars, MB_FIND_ANY);
else
#endif
out = _rl_screenchars - 1;
@@ -1136,14 +1236,32 @@ rl_redisplay (void)
#define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l]))
#define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l])
#define VIS_CHARS(line) (visible_line + vis_lbreaks[line])
+#define VIS_FACE(line) (vis_face + vis_lbreaks[line])
#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line)
+#define VIS_LINE_FACE(line) ((line) > _rl_vis_botlin) ? "" : VIS_FACE(line)
#define INV_LINE(line) (invisible_line + inv_lbreaks[line])
+#define INV_LINE_FACE(line) (inv_face + inv_lbreaks[line])
#define OLD_CPOS_IN_PROMPT() (cpos_adjusted == 0 && \
_rl_last_c_pos != o_cpos && \
_rl_last_c_pos > wrap_offset && \
o_cpos < prompt_last_invisible)
+
+ /* We don't want to highlight anything that's going to be off the top
+ of the display; if the current line takes up more than an entire
+ screen, just mark the lines that won't be displayed as having a
+ `normal' face.
+ It's imperfect, but better than display corruption. */
+ if (rl_mark_active_p () && inv_botlin > _rl_screenheight)
+ {
+ int extra;
+
+ extra = inv_botlin - _rl_screenheight;
+ for (linenum = 0; linenum <= extra; linenum++)
+ norm_face (INV_LINE_FACE(linenum), INV_LLEN (linenum));
+ }
+
/* For each line in the buffer, do the updating display. */
for (linenum = 0; linenum <= inv_botlin; linenum++)
{
@@ -1151,7 +1269,9 @@ rl_redisplay (void)
the locale from a non-multibyte to a multibyte one. */
o_cpos = _rl_last_c_pos;
cpos_adjusted = 0;
- update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
+ update_line (VIS_LINE(linenum), VIS_LINE_FACE(linenum),
+ INV_LINE(linenum), INV_LINE_FACE(linenum),
+ linenum,
VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
/* update_line potentially changes _rl_last_c_pos, but doesn't
@@ -1199,19 +1319,35 @@ rl_redisplay (void)
_rl_clear_to_eol (nleft);
}
#if 0
- /* This segment is intended to handle the case where the prompt
- has invisible characters on the second line and the new line
+ /* This segment is intended to handle the case where the old
+ visible prompt has invisible characters and the new line
to be displayed needs to clear the rest of the old characters
- out (e.g., when printing the i-search prompt). In general,
- the case of the new line being shorter than the old.
- Incomplete */
- else if (linenum == prompt_last_screen_line &&
- prompt_physical_chars > _rl_screenwidth &&
- wrap_offset != prompt_invis_chars_first_line &&
+ out (e.g., when printing the i-search prompt): in general,
+ the case of the new line being shorter than the old. We need
+ to be at the end of the new line and the old line needs to be
+ longer than the current cursor position. It's not perfect,
+ since it uses the byte length of the first line, but this will
+ at worst result in some extra clear-to-end-of-lines. We can't
+ use the prompt length variables because they may not
+ correspond to the visible line (see printing the i-search
+ prompt above). The tests for differing numbers of invisible
+ characters may not matter and can probably be removed. */
+ else if (linenum == 0 &&
+ linenum == prompt_last_screen_line &&
_rl_last_c_pos == out &&
+ _rl_last_c_pos < visible_first_line_len &&
+ visible_wrap_offset &&
+ visible_wrap_offset != wrap_offset)
+ {
+ if (mb_cur_max > 1 && rl_byte_oriented == 0)
+ nleft = _rl_screenwidth - _rl_last_c_pos;
+ else
+ nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
+ if (nleft)
+ _rl_clear_to_eol (nleft);
+ }
#endif
-
/* Since the new first line is now visible, save its length. */
if (linenum == 0)
visible_first_line_len = (inv_botlin > 0) ? inv_lbreaks[1] : out - wrap_offset;
@@ -1226,7 +1362,7 @@ rl_redisplay (void)
{
tt = VIS_CHARS (linenum);
_rl_move_vert (linenum);
- _rl_move_cursor_relative (0, tt);
+ _rl_move_cursor_relative (0, tt, VIS_FACE(linenum));
_rl_clear_to_eol
((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth);
}
@@ -1255,20 +1391,12 @@ rl_redisplay (void)
the characters from the current cursor position. But we
only need to reprint it if the cursor is before the last
invisible character in the prompt string. */
+ /* XXX - why not use local_prompt_len? */
nleft = prompt_visible_length + wrap_offset;
if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
-#if 0
- _rl_last_c_pos <= PROMPT_ENDING_INDEX && local_prompt)
-#else
_rl_last_c_pos < PROMPT_ENDING_INDEX && local_prompt)
-#endif
{
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- if (_rl_term_cr)
- tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
+ _rl_cr ();
if (modmark)
_rl_output_some_chars ("*", 1);
@@ -1282,8 +1410,8 @@ rl_redisplay (void)
/* Where on that line? And where does that line start
in the buffer? */
pos = inv_lbreaks[cursor_linenum];
- /* nleft == number of characters in the line buffer between the
- start of the line and the desired cursor position. */
+ /* nleft == number of characters (bytes) in the line buffer between
+ the start of the line and the desired cursor position. */
nleft = cpos_buffer_position - pos;
/* NLEFT is now a number of characters in a buffer. When in a
@@ -1314,9 +1442,9 @@ rl_redisplay (void)
point specified by a buffer position (NLEFT) that doesn't take
invisible characters into account. */
if (mb_cur_max > 1 && rl_byte_oriented == 0)
- _rl_move_cursor_relative (nleft, &invisible_line[pos]);
+ _rl_move_cursor_relative (nleft, &invisible_line[pos], &inv_face[pos]);
else if (nleft != _rl_last_c_pos)
- _rl_move_cursor_relative (nleft, &invisible_line[pos]);
+ _rl_move_cursor_relative (nleft, &invisible_line[pos], &inv_face[pos]);
}
}
else /* Do horizontal scrolling. Much simpler */
@@ -1372,7 +1500,7 @@ rl_redisplay (void)
/* If the first character on the screen isn't the first character
in the display line, indicate this with a special character. */
if (lmargin > 0)
- line[lmargin] = '<';
+ invisible_line[lmargin] = '<';
/* If SCREENWIDTH characters starting at LMARGIN do not encompass
the whole line, indicate that with a special character at the
@@ -1380,15 +1508,15 @@ rl_redisplay (void)
wrap offset into account. */
t = lmargin + M_OFFSET (lmargin, wrap_offset) + _rl_screenwidth;
if (t > 0 && t < out)
- line[t - 1] = '>';
+ invisible_line[t - 1] = '>';
if (rl_display_fixed == 0 || forced_display || lmargin != last_lmargin)
{
forced_display = 0;
o_cpos = _rl_last_c_pos;
cpos_adjusted = 0;
- update_line (&visible_line[last_lmargin],
- &invisible_line[lmargin],
+ update_line (&visible_line[last_lmargin], &vis_face[last_lmargin],
+ &invisible_line[lmargin], &inv_face[lmargin],
0,
_rl_screenwidth + visible_wrap_offset,
_rl_screenwidth + (lmargin ? 0 : wrap_offset),
@@ -1413,7 +1541,7 @@ rl_redisplay (void)
if (visible_first_line_len > _rl_screenwidth)
visible_first_line_len = _rl_screenwidth;
- _rl_move_cursor_relative (cpos_buffer_position - lmargin, &invisible_line[lmargin]);
+ _rl_move_cursor_relative (cpos_buffer_position - lmargin, &invisible_line[lmargin], &inv_face[lmargin]);
last_lmargin = lmargin;
}
}
@@ -1434,22 +1562,64 @@ rl_redisplay (void)
visible_wrap_offset = 0;
else
visible_wrap_offset = wrap_offset;
+
+ _rl_quick_redisplay = 0;
}
RL_UNSETSTATE (RL_STATE_REDISPLAYING);
_rl_release_sigint ();
}
+static void
+putc_face (int c, int face, char *cur_face)
+{
+ char cf;
+ cf = *cur_face;
+ if (cf != face)
+ {
+ if (cf != FACE_NORMAL && cf != FACE_STANDOUT)
+ return;
+ if (face != FACE_NORMAL && face != FACE_STANDOUT)
+ return;
+ if (face == FACE_STANDOUT && cf == FACE_NORMAL)
+ _rl_standout_on ();
+ if (face == FACE_NORMAL && cf == FACE_STANDOUT)
+ _rl_standout_off ();
+ *cur_face = face;
+ }
+ if (c != EOF)
+ putc (c, rl_outstream);
+}
+
+static void
+puts_face (const char *str, const char *face, int n)
+{
+ int i;
+ char cur_face;
+
+ for (cur_face = FACE_NORMAL, i = 0; i < n; i++)
+ putc_face (str[i], face[i], &cur_face);
+ putc_face (EOF, FACE_NORMAL, &cur_face);
+}
+
+static void
+norm_face (char *face, int n)
+{
+ memset (face, FACE_NORMAL, n);
+}
+
+#define ADJUST_CPOS(x) do { _rl_last_c_pos -= (x) ; cpos_adjusted = 1; } while (0)
+
/* PWP: update_line() is based on finding the middle difference of each
line on the screen; vis:
/old first difference
- /beginning of line | /old last same /old EOL
- v v v v
+ /beginning of line | /old last same /old EOL
+ v v v v
old: eddie> Oh, my little gruntle-buggy is to me, as lurgid as
new: eddie> Oh, my little buggy says to me, as lurgid as
- ^ ^ ^ ^
- \beginning of line | \new last same \new end of line
+ ^ ^ ^ ^
+ \beginning of line | \new last same \new end of line
\new first difference
All are character pointers for the sake of speed. Special cases for
@@ -1457,9 +1627,10 @@ new: eddie> Oh, my little buggy says to me, as lurgid as
Could be made even smarter, but this works well enough */
static void
-update_line (char *old, char *new, int current_line, int omax, int nmax, int inv_botlin)
+update_line (char *old, char *old_face, char *new, char *new_face, int current_line, int omax, int nmax, int inv_botlin)
{
- register char *ofd, *ols, *oe, *nfd, *nls, *ne;
+ char *ofd, *ols, *oe, *nfd, *nls, *ne;
+ char *ofdf, *nfdf, *olsf, *nlsf;
int temp, lendiff, wsatend, od, nd, twidth, o_cpos;
int current_invis_chars;
int col_lendiff, col_temp;
@@ -1594,17 +1765,24 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
int count, i, j;
char *optr;
- _rl_output_some_chars (new, newbytes);
+ puts_face (new, new_face, newbytes);
_rl_last_c_pos = newwidth;
_rl_last_v_pos++;
/* 5a. If the number of screen positions doesn't match, punt
- and do a dumb update. */
- if (newwidth != oldwidth)
+ and do a dumb update.
+ 5b. If the number of bytes is greater in the new line than
+ the old, do a dumb update, because there is no guarantee we
+ can extend the old line enough to fit the new bytes. */
+ if (newwidth != oldwidth || newbytes > oldbytes)
{
+ oe = old + omax;
ne = new + nmax;
nd = newbytes;
nfd = new + nd;
+ ofdf = old_face + oldbytes;
+ nfdf = new_face + newbytes;
+
goto dumb_update;
}
if (oldbytes != 0 && newbytes != 0)
@@ -1613,13 +1791,21 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
consume the first character of old. Fix up `old' so it
reflects the new screen contents. We use +1 in the
memmove call to copy the trailing NUL. */
- memmove (old+newbytes, old+oldbytes, strlen (old+oldbytes) + 1);
+ /* (strlen(old+oldbytes) == (omax - oldbytes - 1)) */
+
+ /* Don't bother trying to fit the bytes if the number of bytes
+ doesn't change. */
+ if (oldbytes != newbytes)
+ {
+ memmove (old+newbytes, old+oldbytes, strlen (old+oldbytes) + 1);
+ memmove (old_face+newbytes, old_face+oldbytes, strlen (old+oldbytes) + 1);
+ }
memcpy (old, new, newbytes);
+ memcpy (old_face, new_face, newbytes);
j = newbytes - oldbytes;
-
omax += j;
/* Fix up indices if we copy data from one line to another */
- for (i = current_line+1; i <= inv_botlin+1; i++)
+ for (i = current_line+1; j != 0 && i <= inv_botlin+1 && i <=_rl_vis_botlin+1; i++)
vis_lbreaks[i] += j;
}
}
@@ -1629,21 +1815,69 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
_rl_last_c_pos = 1;
_rl_last_v_pos++;
if (old[0] && new[0])
- old[0] = new[0];
+ {
+ old[0] = new[0];
+ old_face[0] = new_face[0];
+ }
}
}
else
#endif
{
if (new[0])
- putc (new[0], rl_outstream);
+ puts_face (new, new_face, 1);
else
putc (' ', rl_outstream);
_rl_last_c_pos = 1;
_rl_last_v_pos++;
if (old[0] && new[0])
- old[0] = new[0];
+ {
+ old[0] = new[0];
+ old_face[0] = new_face[0];
+ }
+ }
+ }
+
+ /* We know that we are dealing with a single screen line here */
+ if (_rl_quick_redisplay)
+ {
+ nfd = new;
+ nfdf = new_face;
+ ofd = old;
+ ofdf = old_face;
+ for (od = 0, oe = ofd; od < omax && *oe; oe++, od++);
+ for (nd = 0, ne = nfd; nd < nmax && *ne; ne++, nd++);
+ od = nd = 0;
+ _rl_move_cursor_relative (0, old, old_face);
+
+ bytes_to_insert = ne - nfd;
+ if (bytes_to_insert < local_prompt_len) /* ??? */
+ goto dumb_update;
+
+ /* output the prompt, output the line contents, clear the rest */
+ _rl_output_some_chars (nfd, local_prompt_len);
+ if (mb_cur_max > 1 && rl_byte_oriented == 0)
+ _rl_last_c_pos = prompt_physical_chars;
+ else
+ _rl_last_c_pos = local_prompt_len;
+
+ bytes_to_insert -= local_prompt_len;
+ if (bytes_to_insert > 0)
+ {
+ puts_face (new+local_prompt_len, nfdf+local_prompt_len, bytes_to_insert);
+ if (mb_cur_max > 1 && rl_byte_oriented)
+ _rl_last_c_pos += _rl_col_width (new, local_prompt_len, ne-new, 1);
+ else
+ _rl_last_c_pos += bytes_to_insert;
}
+
+ /* See comments at dumb_update: for an explanation of this heuristic */
+ if (nmax < omax)
+ goto clear_rest_of_line;
+ else if ((nmax - W_OFFSET(current_line, wrap_offset)) < (omax - W_OFFSET (current_line, visible_wrap_offset)))
+ goto clear_rest_of_line;
+ else
+ return;
}
/* Find first difference. */
@@ -1653,11 +1887,13 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
/* See if the old line is a subset of the new line, so that the
only change is adding characters. */
temp = (omax < nmax) ? omax : nmax;
- if (memcmp (old, new, temp) == 0) /* adding at the end */
+ if (memcmp (old, new, temp) == 0 && memcmp (old_face, new_face, temp) == 0)
{
- new_offset = old_offset = temp;
+ new_offset = old_offset = temp; /* adding at the end */
ofd = old + temp;
+ ofdf = old_face + temp;
nfd = new + temp;
+ nfdf = new_face + temp;
}
else
{
@@ -1665,36 +1901,42 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
memset (&ps_old, 0, sizeof(mbstate_t));
/* Are the old and new lines the same? */
- if (omax == nmax && STREQN (new, old, omax))
+ if (omax == nmax && memcmp (new, old, omax) == 0 && memcmp (new_face, old_face, omax) == 0)
{
old_offset = omax;
new_offset = nmax;
ofd = old + omax;
+ ofdf = old_face + omax;
nfd = new + nmax;
+ nfdf = new_face + nmax;
}
else
{
/* Go through the line from the beginning and find the first
- difference. */
+ difference. We assume that faces change at (possibly multi-
+ byte) character boundaries. */
new_offset = old_offset = 0;
- for (ofd = old, nfd = new;
+ for (ofd = old, ofdf = old_face, nfd = new, nfdf = new_face;
(ofd - old < omax) && *ofd &&
- _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new); )
+ _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new) &&
+ *ofdf == *nfdf; )
{
old_offset = _rl_find_next_mbchar (old, old_offset, 1, MB_FIND_ANY);
new_offset = _rl_find_next_mbchar (new, new_offset, 1, MB_FIND_ANY);
ofd = old + old_offset;
+ ofdf = old_face + old_offset;
nfd = new + new_offset;
+ nfdf = new_face + new_offset;
}
}
}
}
else
#endif
- for (ofd = old, nfd = new;
- (ofd - old < omax) && *ofd && (*ofd == *nfd);
- ofd++, nfd++)
+ for (ofd = old, ofdf = old_face, nfd = new, nfdf = new_face;
+ (ofd - old < omax) && *ofd && (*ofd == *nfd) && (*ofdf == *nfdf);
+ ofd++, nfd++, ofdf++, nfdf++)
;
/* Move to the end of the screen line. ND and OD are used to keep track
@@ -1723,7 +1965,9 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
old_offset = _rl_find_prev_mbchar (old, ofd - old, MB_FIND_ANY);
new_offset = _rl_find_prev_mbchar (new, nfd - new, MB_FIND_ANY);
ofd = old + old_offset; /* equal by definition */
+ ofdf = old_face + old_offset;
nfd = new + new_offset;
+ nfdf = new_face + new_offset;
}
}
#endif
@@ -1736,40 +1980,41 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
if (mb_cur_max > 1 && rl_byte_oriented == 0)
{
ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY);
+ olsf = old_face + (ols - old);
nls = new + _rl_find_prev_mbchar (new, ne - new, MB_FIND_ANY);
+ nlsf = new_face + (nls - new);
while ((ols > ofd) && (nls > nfd))
{
memset (&ps_old, 0, sizeof (mbstate_t));
memset (&ps_new, 0, sizeof (mbstate_t));
-#if 0
- /* On advice from jir@yamato.ibm.com */
- _rl_adjust_point (old, ols - old, &ps_old);
- _rl_adjust_point (new, nls - new, &ps_new);
-#endif
-
- if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0)
+ if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0 ||
+ *olsf != *nlsf)
break;
if (*ols == ' ')
wsatend = 0;
ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY);
+ olsf = old_face + (ols - old);
nls = new + _rl_find_prev_mbchar (new, nls - new, MB_FIND_ANY);
+ nlsf = new_face + (nls - new);
}
}
else
{
#endif /* HANDLE_MULTIBYTE */
ols = oe - 1; /* find last same */
+ olsf = old_face + (ols - old);
nls = ne - 1;
- while ((ols > ofd) && (nls > nfd) && (*ols == *nls))
+ nlsf = new_face + (nls - new);
+ while ((ols > ofd) && (nls > nfd) && (*ols == *nls) && (*olsf == *nlsf))
{
if (*ols != ' ')
wsatend = 0;
- ols--;
- nls--;
+ ols--; olsf--;
+ nls--; nlsf--;
}
#if defined (HANDLE_MULTIBYTE)
}
@@ -1778,15 +2023,17 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
if (wsatend)
{
ols = oe;
+ olsf = old_face + (ols - old);
nls = ne;
+ nlsf = new_face + (nls - new);
}
#if defined (HANDLE_MULTIBYTE)
/* This may not work for stateful encoding, but who cares? To handle
stateful encoding properly, we have to scan each string from the
beginning and compare. */
- else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0)
+ else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0 || *olsf != *nlsf)
#else
- else if (*ols != *nls)
+ else if (*ols != *nls || *olsf != *nlsf)
#endif
{
if (*ols) /* don't step past the NUL */
@@ -1803,6 +2050,8 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
else
nls++;
}
+ olsf = old_face + (ols - old);
+ nlsf = new_face + (nls - new);
}
/* count of invisible characters in the current invisible line. */
@@ -1815,6 +2064,10 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
visible_wrap_offset based on what we know. */
if (current_line == 0)
visible_wrap_offset = prompt_invis_chars_first_line; /* XXX */
+#if 0 /* XXX - not yet */
+ else if (current_line == prompt_last_screen_line && wrap_offset > prompt_invis_chars_first_line)
+ visible_wrap_offset = wrap_offset - prompt_invis_chars_first_line
+#endif
if ((mb_cur_max == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset)
_rl_last_c_pos += visible_wrap_offset;
}
@@ -1852,19 +2105,21 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
(((od > 0 || nd > 0) && (od <= prompt_last_invisible || nd <= prompt_last_invisible)) ||
((od >= lendiff) && _rl_last_c_pos < PROMPT_ENDING_INDEX)))
{
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
+ _rl_cr ();
if (modmark)
_rl_output_some_chars ("*", 1);
_rl_output_some_chars (local_prompt, lendiff);
if (mb_cur_max > 1 && rl_byte_oriented == 0)
{
- /* We take wrap_offset into account here so we can pass correct
- information to _rl_move_cursor_relative. */
- _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff, 1) - wrap_offset + modmark;
+ /* If we just output the entire prompt string we can take advantage
+ of knowing the number of physical characters in the prompt. If
+ the prompt wraps lines (lendiff clamped at nmax), we can't. */
+ if (lendiff == local_prompt_len)
+ _rl_last_c_pos = prompt_physical_chars + modmark;
+ else
+ /* We take wrap_offset into account here so we can pass correct
+ information to _rl_move_cursor_relative. */
+ _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff, 1) - wrap_offset + modmark;
cpos_adjusted = 1;
}
else
@@ -1885,10 +2140,11 @@ update_line (char *old, char *new, int current_line, int omax, int nmax, int inv
to just output the prompt from the beginning of the line up to the
first difference, but you don't know the number of invisible
characters in that case.
- This needs a lot of work to be efficient. */
+ This needs a lot of work to be efficient, but it usually doesn't matter. */
if ((od <= prompt_last_invisible || nd <= prompt_last_invisible))
{
nfd = new + lendiff; /* number of characters we output above */
+ nfdf = new_face + lendiff;
nd = lendiff;
/* Do a dumb update and return */
@@ -1896,7 +2152,7 @@ dumb_update:
temp = ne - nfd;
if (temp > 0)
{
- _rl_output_some_chars (nfd, temp);
+ puts_face (nfd, nfdf, temp);
if (mb_cur_max > 1 && rl_byte_oriented == 0)
{
_rl_last_c_pos += _rl_col_width (new, nd, ne - new, 1);
@@ -1910,16 +2166,33 @@ dumb_update:
current_line == prompt_last_screen_line &&
prompt_physical_chars > _rl_screenwidth &&
_rl_horizontal_scroll_mode == 0)
- {
- _rl_last_c_pos -= wrap_offset - prompt_invis_chars_first_line;
- cpos_adjusted = 1;
- }
+ ADJUST_CPOS (wrap_offset - prompt_invis_chars_first_line);
+
+ /* If we just output a new line including the prompt, and
+ the prompt includes invisible characters, we need to
+ account for them in the _rl_last_c_pos calculation, since
+ _rl_col_width does not. This happens when other code does
+ a goto dumb_update; */
+ else if (current_line == 0 &&
+ nfd == new &&
+ prompt_invis_chars_first_line &&
+ local_prompt_len <= temp &&
+ wrap_offset >= prompt_invis_chars_first_line &&
+ _rl_horizontal_scroll_mode == 0)
+ ADJUST_CPOS (prompt_invis_chars_first_line);
}
else
_rl_last_c_pos += temp;
}
+ /* This is a useful heuristic, but what we really want is to clear
+ if the new number of visible screen characters is less than the
+ old number of visible screen characters. If the prompt has changed,
+ we don't really have enough information about the visible line to
+ know for sure, so we use another heuristic calclulation below. */
if (nmax < omax)
goto clear_rest_of_line; /* XXX */
+ else if ((nmax - W_OFFSET(current_line, wrap_offset)) < (omax - W_OFFSET (current_line, visible_wrap_offset)))
+ goto clear_rest_of_line;
else
return;
}
@@ -1930,7 +2203,7 @@ dumb_update:
/* When this function returns, _rl_last_c_pos is correct, and an absolute
cursor position in multibyte mode, but a buffer index when not in a
multibyte locale. */
- _rl_move_cursor_relative (od, old);
+ _rl_move_cursor_relative (od, old, old_face);
#if defined (HANDLE_MULTIBYTE)
/* We need to indicate that the cursor position is correct in the presence of
@@ -1948,15 +2221,76 @@ dumb_update:
When not using multibyte characters, these are equal */
lendiff = (nls - nfd) - (ols - ofd);
if (mb_cur_max > 1 && rl_byte_oriented == 0)
- col_lendiff = _rl_col_width (new, nfd - new, nls - new, 1) - _rl_col_width (old, ofd - old, ols - old, 1);
+ {
+ int newchars, newwidth, newind;
+ int oldchars, oldwidth, oldind;
+
+ newchars = nls - new;
+ oldchars = ols - old;
+
+ /* If we can do it, try to adjust nls and ols so that nls-new will
+ contain the entire new prompt string. That way we can use
+ prompt_physical_chars and not have to recompute column widths.
+ _rl_col_width adds wrap_offset and expects the caller to compensate,
+ which we do below, so we do the same thing if we don't call
+ _rl_col_width.
+ We don't have to compare, since we know the characters are the same.
+ The check of differing numbers of invisible chars may be extraneous.
+ XXX - experimental */
+ if (current_line == 0 && nfd == new && newchars > prompt_last_invisible &&
+ newchars <= local_prompt_len &&
+ local_prompt_len <= nmax &&
+ current_invis_chars != visible_wrap_offset)
+ {
+ while (newchars < nmax && oldchars < omax && newchars < local_prompt_len)
+ {
+#if defined (HANDLE_MULTIBYTE)
+ newind = _rl_find_next_mbchar (new, newchars, 1, MB_FIND_NONZERO);
+ oldind = _rl_find_next_mbchar (old, oldchars, 1, MB_FIND_NONZERO);
+
+ nls += newind - newchars;
+ ols += oldind - oldchars;
+
+ newchars = newind;
+ oldchars = oldind;
+#else
+ nls++; ols++;
+ newchars++; oldchars++;
+#endif
+ }
+ newwidth = (newchars == local_prompt_len) ? prompt_physical_chars + wrap_offset
+ : _rl_col_width (new, 0, nls - new, 1);
+ /* if we changed nls and ols, we need to recompute lendiff */
+ lendiff = (nls - nfd) - (ols - ofd);
+
+ nlsf = new_face + (nls - new);
+ olsf = old_face + (ols - old);
+ }
+ else
+ newwidth = _rl_col_width (new, nfd - new, nls - new, 1);
+
+ oldwidth = _rl_col_width (old, ofd - old, ols - old, 1);
+
+ col_lendiff = newwidth - oldwidth;
+ }
else
col_lendiff = lendiff;
+ /* col_lendiff uses _rl_col_width(), which doesn't know about whether or not
+ the multibyte characters it counts are invisible, so unless we're printing
+ the entire prompt string (in which case we can use prompt_physical_chars)
+ the count is short by the number of bytes in the invisible multibyte
+ characters - the number of multibyte characters.
+
+ We don't have a good way to solve this without moving to something like
+ a bitmap that indicates which characters are visible and which are
+ invisible. We fix it up (imperfectly) in the caller and by trying to use
+ the entire prompt string wherever we can. */
+
/* If we are changing the number of invisible characters in a line, and
the spot of first difference is before the end of the invisible chars,
lendiff needs to be adjusted. */
- if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */
- current_invis_chars != visible_wrap_offset)
+ if (current_line == 0 && current_invis_chars != visible_wrap_offset)
{
if (mb_cur_max > 1 && rl_byte_oriented == 0)
{
@@ -1998,16 +2332,13 @@ dumb_update:
only happen in a multibyte environment. */
if (lendiff < 0)
{
- _rl_output_some_chars (nfd, temp);
- _rl_last_c_pos += col_temp; /* XXX - was _rl_col_width (nfd, 0, temp, 1); */
+ puts_face (nfd, nfdf, temp);
+ _rl_last_c_pos += col_temp;
/* If nfd begins before any invisible characters in the prompt,
adjust _rl_last_c_pos to account for wrap_offset and set
cpos_adjusted to let the caller know. */
if (current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible))
- {
- _rl_last_c_pos -= wrap_offset; /* XXX - prompt_invis_chars_first_line? */
- cpos_adjusted = 1;
- }
+ ADJUST_CPOS (wrap_offset); /* XXX - prompt_invis_chars_first_line? */
return;
}
/* Sometimes it is cheaper to print the characters rather than
@@ -2035,7 +2366,7 @@ dumb_update:
(visible_wrap_offset >= current_invis_chars))
{
open_some_spaces (col_lendiff);
- _rl_output_some_chars (nfd, bytes_to_insert);
+ puts_face (nfd, nfdf, bytes_to_insert);
if (mb_cur_max > 1 && rl_byte_oriented == 0)
_rl_last_c_pos += _rl_col_width (nfd, 0, bytes_to_insert, 1);
else
@@ -2045,22 +2376,19 @@ dumb_update:
{
/* At the end of a line the characters do not have to
be "inserted". They can just be placed on the screen. */
- _rl_output_some_chars (nfd, temp);
+ puts_face (nfd, nfdf, temp);
_rl_last_c_pos += col_temp;
return;
}
else /* just write from first difference to end of new line */
{
- _rl_output_some_chars (nfd, temp);
+ puts_face (nfd, nfdf, temp);
_rl_last_c_pos += col_temp;
/* If nfd begins before the last invisible character in the
prompt, adjust _rl_last_c_pos to account for wrap_offset
and set cpos_adjusted to let the caller know. */
if ((mb_cur_max > 1 && rl_byte_oriented == 0) && current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible))
- {
- _rl_last_c_pos -= wrap_offset; /* XXX - prompt_invis_chars_first_line? */
- cpos_adjusted = 1;
- }
+ ADJUST_CPOS (wrap_offset); /* XXX - prompt_invis_chars_first_line? */
return;
}
@@ -2070,16 +2398,13 @@ dumb_update:
prompt, adjust _rl_last_c_pos to account for wrap_offset
and set cpos_adjusted to let the caller know. */
if ((mb_cur_max > 1 && rl_byte_oriented == 0) && current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible))
- {
- _rl_last_c_pos -= wrap_offset; /* XXX - prompt_invis_chars_first_line? */
- cpos_adjusted = 1;
- }
+ ADJUST_CPOS (wrap_offset); /* XXX - prompt_invis_chars_first_line? */
}
}
else
{
/* cannot insert chars, write to EOL */
- _rl_output_some_chars (nfd, temp);
+ puts_face (nfd, nfdf, temp);
_rl_last_c_pos += col_temp;
/* If we're in a multibyte locale and were before the last invisible
char in the current line (which implies we just output some invisible
@@ -2094,10 +2419,11 @@ dumb_update:
displaying_prompt_first_line &&
wrap_offset != prompt_invis_chars_first_line &&
((nfd-new) < (prompt_last_invisible-(current_line*_rl_screenwidth+prompt_invis_chars_first_line))))
- {
- _rl_last_c_pos -= wrap_offset - prompt_invis_chars_first_line;
- cpos_adjusted = 1;
- }
+ ADJUST_CPOS (wrap_offset - prompt_invis_chars_first_line);
+
+ /* XXX - what happens if wrap_offset == prompt_invis_chars_first_line
+ and we are drawing the first line (current_line == 0)? We should
+ adjust by _rl_last_c_pos -= prompt_invis_chars_first_line */
}
}
else /* Delete characters from line. */
@@ -2132,18 +2458,18 @@ dumb_update:
characters in the prompt, we need to adjust _rl_last_c_pos
in a multibyte locale to account for the wrap offset and
set cpos_adjusted accordingly. */
- _rl_output_some_chars (nfd, bytes_to_insert);
+ puts_face (nfd, nfdf, bytes_to_insert);
if (mb_cur_max > 1 && rl_byte_oriented == 0)
{
+ /* This still doesn't take into account whether or not the
+ characters that this counts are invisible. */
_rl_last_c_pos += _rl_col_width (nfd, 0, bytes_to_insert, 1);
if (current_line == 0 && wrap_offset &&
displaying_prompt_first_line &&
- _rl_last_c_pos >= wrap_offset && /* XXX was > */
+ prompt_invis_chars_first_line &&
+ _rl_last_c_pos >= prompt_invis_chars_first_line &&
((nfd - new) <= prompt_last_invisible))
- {
- _rl_last_c_pos -= wrap_offset; /* XXX - prompt_invis_chars_first_line? */
- cpos_adjusted = 1;
- }
+ ADJUST_CPOS (prompt_invis_chars_first_line);
#if 1
#ifdef HANDLE_MULTIBYTE
@@ -2166,7 +2492,7 @@ dumb_update:
so we move there with _rl_move_cursor_relative */
if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new)))
{
- _rl_move_cursor_relative (ne-new, new);
+ _rl_move_cursor_relative (ne-new, new, new_face);
goto clear_rest_of_line;
}
}
@@ -2180,7 +2506,7 @@ dumb_update:
characters in the prompt, we need to adjust _rl_last_c_pos
in a multibyte locale to account for the wrap offset and
set cpos_adjusted accordingly. */
- _rl_output_some_chars (nfd, temp);
+ puts_face (nfd, nfdf, temp);
_rl_last_c_pos += col_temp; /* XXX */
if (mb_cur_max > 1 && rl_byte_oriented == 0)
{
@@ -2188,10 +2514,7 @@ dumb_update:
displaying_prompt_first_line &&
_rl_last_c_pos > wrap_offset &&
((nfd - new) <= prompt_last_invisible))
- {
- _rl_last_c_pos -= wrap_offset; /* XXX - prompt_invis_chars_first_line? */
- cpos_adjusted = 1;
- }
+ ADJUST_CPOS (wrap_offset); /* XXX - prompt_invis_chars_first_line? */
}
}
clear_rest_of_line:
@@ -2240,11 +2563,7 @@ rl_clear_visible_line (void)
int curr_line;
/* Make sure we move to column 0 so we clear the entire line */
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
+ _rl_cr ();
_rl_last_c_pos = 0;
/* Move to the last screen line of the current visible line */
@@ -2357,8 +2676,8 @@ rl_redraw_prompt_last_line (void)
DATA is the contents of the screen line of interest; i.e., where
the movement is being done.
DATA is always the visible line or the invisible line */
-void
-_rl_move_cursor_relative (int new, const char *data)
+static void
+_rl_move_cursor_relative (int new, const char *data, const char *dataf)
{
register int i;
int woff; /* number of invisible chars on current line */
@@ -2455,11 +2774,7 @@ _rl_move_cursor_relative (int new, const char *data)
if (dpos == 0 || CR_FASTER (dpos, _rl_last_c_pos) ||
(_rl_term_autowrap && i == _rl_screenwidth))
{
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif /* !__MSDOS__ */
+ _rl_cr ();
cpos = _rl_last_c_pos = 0;
}
@@ -2491,14 +2806,12 @@ _rl_move_cursor_relative (int new, const char *data)
}
else
{
- tputs (_rl_term_cr, 1, _rl_output_character_function);
- for (i = 0; i < new; i++)
- putc (data[i], rl_outstream);
+ _rl_cr ();
+ puts_face (data, dataf, new);
}
}
else
- for (i = cpos; i < new; i++)
- putc (data[i], rl_outstream);
+ puts_face (data + cpos, dataf + cpos, new - cpos);
}
#if defined (HANDLE_MULTIBYTE)
@@ -2526,11 +2839,7 @@ _rl_move_vert (int to)
{
for (i = 0; i < delta; i++)
putc ('\n', rl_outstream);
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
+ _rl_cr ();
_rl_last_c_pos = 0;
}
else
@@ -2871,14 +3180,18 @@ space_to_eol (int count)
}
void
-_rl_clear_screen (void)
+_rl_clear_screen (int clrscr)
{
#if defined (__DJGPP__)
ScreenClear ();
ScreenSetCursor (0, 0);
#else
if (_rl_term_clrpag)
- tputs (_rl_term_clrpag, 1, _rl_output_character_function);
+ {
+ tputs (_rl_term_clrpag, 1, _rl_output_character_function);
+ if (clrscr && _rl_term_clrscroll)
+ tputs (_rl_term_clrscroll, 1, _rl_output_character_function);
+ }
else
rl_crlf ();
#endif /* __DJGPP__ */
@@ -2973,7 +3286,7 @@ _rl_update_final (void)
/* If we've wrapped lines, remove the final xterm line-wrap flag. */
if (full_lines && _rl_term_autowrap && botline_length == _rl_screenwidth)
{
- char *last_line;
+ char *last_line, *last_face;
/* LAST_LINE includes invisible characters, so if you want to get the
last character of the first line, you have to take WOFF into account.
@@ -2981,10 +3294,12 @@ _rl_update_final (void)
which takes a buffer position as the first argument, and any direct
subscripts of LAST_LINE. */
last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]]; /* = VIS_CHARS(_rl_vis_botlin); */
+ last_face = &vis_face[vis_lbreaks[_rl_vis_botlin]]; /* = VIS_CHARS(_rl_vis_botlin); */
cpos_buffer_position = -1; /* don't know where we are in buffer */
- _rl_move_cursor_relative (_rl_screenwidth - 1 + woff, last_line); /* XXX */
+ _rl_move_cursor_relative (_rl_screenwidth - 1 + woff, last_line, last_face); /* XXX */
_rl_clear_to_eol (0);
- putc (last_line[_rl_screenwidth - 1 + woff], rl_outstream);
+ puts_face (&last_line[_rl_screenwidth - 1 + woff],
+ &last_face[_rl_screenwidth - 1 + woff], 1);
}
_rl_vis_botlin = 0;
if (botline_length > 0 || _rl_last_c_pos > 0)
@@ -2997,15 +3312,8 @@ _rl_update_final (void)
static void
cr (void)
{
- if (_rl_term_cr)
- {
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
- _rl_last_c_pos = 0;
- }
+ _rl_cr ();
+ _rl_last_c_pos = 0;
}
/* Redraw the last line of a multi-line prompt that may possibly contain
@@ -3048,24 +3356,19 @@ _rl_redisplay_after_sigwinch (void)
{
_rl_move_vert (_rl_vis_botlin);
-#if defined (__MSDOS__)
- putc ('\r', rl_outstream);
-#else
- tputs (_rl_term_cr, 1, _rl_output_character_function);
-#endif
+ _rl_cr ();
_rl_last_c_pos = 0;
-#if defined (__MSDOS__)
- space_to_eol (_rl_screenwidth);
- putc ('\r', rl_outstream);
-#else
+
+#if !defined (__MSDOS__)
if (_rl_term_clreol)
tputs (_rl_term_clreol, 1, _rl_output_character_function);
else
+#endif
{
space_to_eol (_rl_screenwidth);
- tputs (_rl_term_cr, 1, _rl_output_character_function);
+ _rl_cr ();
}
-#endif
+
if (_rl_last_v_pos > 0)
_rl_move_vert (0);
}
@@ -3130,6 +3433,14 @@ _rl_current_display_line (void)
return ret;
}
+void
+_rl_refresh_line (void)
+{
+ rl_clear_visible_line ();
+ rl_redraw_prompt_last_line ();
+ rl_keep_mark_active ();
+}
+
#if defined (HANDLE_MULTIBYTE)
/* Calculate the number of screen columns occupied by STR from START to END.
In the case of multibyte characters with stateful encoding, we have to
diff --git a/doc/history.0 b/doc/history.0
index 9133300..47c6927 100644
--- a/doc/history.0
+++ b/doc/history.0
@@ -6,7 +6,7 @@ HISTORY(3) Library Functions Manual HISTORY(3)
history - GNU History Library
[1mCOPYRIGHT[0m
- The GNU History Library is Copyright (C) 1989-2017 by the Free Software
+ The GNU History Library is Copyright (C) 1989-2020 by the Free Software
Foundation, Inc.
[1mDESCRIPTION[0m
@@ -55,10 +55,12 @@ HISTORY(3) Library Functions Manual HISTORY(3)
[1m!?[4m[22mstring[24m[1m[?][0m
Refer to the most recent command preceding the current position
in the history list containing [4mstring[24m. The trailing [1m? [22mmay be
- omitted if [4mstring[24m is followed immediately by a newline.
+ omitted if [4mstring[24m is followed immediately by a newline. If
+ [4mstring[24m is missing, the string from the most recent search is
+ used; it is an error if there is no previous search string.
[1m^[4m[22mstring1[24m[1m^[4m[22mstring2[24m[1m^[0m
Quick substitution. Repeat the last command, replacing [4mstring1[0m
- with [4mstring2[24m. Equivalent to ``!!:s/[4mstring1[24m/[4mstring2[24m/'' (see [1mMod-[0m
+ with [4mstring2[24m. Equivalent to ``!!:s^[4mstring1[24m^[4mstring2[24m^'' (see [1mMod-[0m
[1mifiers [22mbelow).
[1m!# [22mThe entire command line typed so far.
@@ -74,22 +76,26 @@ HISTORY(3) Library Functions Manual HISTORY(3)
The zeroth word. For the shell, this is the command word.
[4mn[24m The [4mn[24mth word.
[1m^ [22mThe first argument. That is, word 1.
- [1m$ [22mThe last word. This is usually the last argument, but will
- expand to the zeroth word if there is only one word in the line.
- [1m% [22mThe word matched by the most recent `?[4mstring[24m?' search.
+ [1m$ [22mThe last word. This is usually the last argument, but will ex-
+ pand to the zeroth word if there is only one word in the line.
+ [1m% [22mThe first word matched by the most recent `?[4mstring[24m?' search, if
+ the search string begins with a character that is part of a
+ word.
[4mx[24m[1m-[4m[22my[24m A range of words; `-[4my[24m' abbreviates `0-[4my[24m'.
[1m* [22mAll of the words but the zeroth. This is a synonym for `[4m1-$[24m'.
It is not an error to use [1m* [22mif there is just one word in the
event; the empty string is returned in that case.
[1mx* [22mAbbreviates [4mx-$[24m.
- [1mx- [22mAbbreviates [4mx-$[24m like [1mx*[22m, but omits the last word.
+ [1mx- [22mAbbreviates [4mx-$[24m like [1mx*[22m, but omits the last word. If [1mx [22mis miss-
+ ing, it defaults to 0.
- If a word designator is supplied without an event specification, the
+ If a word designator is supplied without an event specification, the
previous command is used as the event.
[1mModifiers[0m
- After the optional word designator, there may appear a sequence of one
- or more of the following modifiers, each preceded by a `:'.
+ After the optional word designator, there may appear a sequence of one
+ or more of the following modifiers, each preceded by a `:'. These mod-
+ ify, or edit, the word or words selected from the history event.
[1mh [22mRemove a trailing file name component, leaving only the head.
[1mt [22mRemove all leading file name components, leaving the tail.
@@ -98,24 +104,26 @@ HISTORY(3) Library Functions Manual HISTORY(3)
[1mp [22mPrint the new command but do not execute it.
[1mq [22mQuote the substituted words, escaping further substitutions.
[1mx [22mQuote the substituted words as with [1mq[22m, but break into words at
- [1mblanks [22mand newlines.
+ [1mblanks [22mand newlines. The [1mq [22mand [1mx [22mmodifiers are mutually exclu-
+ sive; the last one supplied is used.
[1ms/[4m[22mold[24m[1m/[4m[22mnew[24m[1m/[0m
- Substitute [4mnew[24m for the first occurrence of [4mold[24m in the event
- line. Any delimiter can be used in place of /. The final
- delimiter is optional if it is the last character of the event
- line. The delimiter may be quoted in [4mold[24m and [4mnew[24m with a single
- backslash. If & appears in [4mnew[24m, it is replaced by [4mold[24m. A sin-
- gle backslash will quote the &. If [4mold[24m is null, it is set to
- the last [4mold[24m substituted, or, if no previous history substitu-
- tions took place, the last [4mstring[24m in a [1m!?[4m[22mstring[24m[1m[?] [22msearch.
+ Substitute [4mnew[24m for the first occurrence of [4mold[24m in the event
+ line. Any character may be used as the delimiter in place of /.
+ The final delimiter is optional if it is the last character of
+ the event line. The delimiter may be quoted in [4mold[24m and [4mnew[24m with
+ a single backslash. If & appears in [4mnew[24m, it is replaced by [4mold[24m.
+ A single backslash will quote the &. If [4mold[24m is null, it is set
+ to the last [4mold[24m substituted, or, if no previous history substi-
+ tutions took place, the last [4mstring[24m in a [1m!?[4m[22mstring[24m[1m[?] [22msearch.
+ If [4mnew[24m is null, each matching [4mold[24m is deleted.
[1m& [22mRepeat the previous substitution.
[1mg [22mCause changes to be applied over the entire event line. This is
used in conjunction with `[1m:s[22m' (e.g., `[1m:gs/[4m[22mold[24m[1m/[4m[22mnew[24m[1m/[22m') or `[1m:&[22m'.
If used with `[1m:s[22m', any delimiter can be used in place of /, and
the final delimiter is optional if it is the last character of
the event line. An [1ma [22mmay be used as a synonym for [1mg[22m.
- [1mG [22mApply the following `[1ms[22m' modifier once to each word in the event
- line.
+ [1mG [22mApply the following `[1ms[22m' or `[1m&[22m' modifier once to each word in the
+ event line.
[1mPROGRAMMING WITH HISTORY FUNCTIONS[0m
This section describes how to use the History library in other pro-
@@ -136,17 +144,16 @@ HISTORY(3) Library Functions Manual HISTORY(3)
commands. The basic history manipulation commands are identical to the
history substitution provided by [1mbash[22m.
- If the programmer desires, he can use the Readline library, which
- includes some history manipulation by default, and has the added advan-
+ If the programmer desires, he can use the Readline library, which in-
+ cludes some history manipulation by default, and has the added advan-
tage of command line editing.
- Before declaring any functions using any functionality the History
- library provides in other code, an application writer should include
- the file [4m[24m 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 pub-
- lic data structures.
-
+ Before declaring any functions using any functionality the History li-
+ brary provides in other code, an application writer should include the
+ file [4m[24m 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.
[1mHistory Storage[0m
The history list is an array of history entries. A history entry is
@@ -215,21 +222,21 @@ HISTORY(3) Library Functions Manual HISTORY(3)
[4mstring[24m.
[4mHIST_ENTRY[24m [4m*[24m [1mremove_history [22m([4mint[24m [4mwhich[24m)
- Remove history entry at offset [4mwhich[24m from the history. The removed
- element is returned so you can free the line, data, and containing
- structure.
+ Remove history entry at offset [4mwhich[24m from the history. The removed el-
+ ement is returned so you can free the line, data, and containing struc-
+ ture.
[4mhistdata_t[24m [1mfree_history_entry [22m([4mHIST_ENTRY[24m [4m*histent[24m)
- Free the history entry [4mhistent[24m and any history library private data
- associated with it. Returns the application-specific data so the call-
- er can dispose of it.
+ Free the history entry [4mhistent[24m and any history library private data as-
+ sociated with it. Returns the application-specific data so the caller
+ can dispose of it.
[4mHIST_ENTRY[24m [4m*[24m [1mreplace_history_entry [22m([4mint[24m [4mwhich,[24m [4mconst[24m [4mchar[24m [4m*line,[24m [4mhist-[0m
[4mdata_t[24m [4mdata[24m)
- Make the history entry at offset [4mwhich[24m have [4mline[24m and [4mdata[24m. This
- returns the old entry so the caller can dispose of any application-spe-
- cific data. In the case of an invalid [4mwhich[24m, a [1mNULL [22mpointer is
- returned.
+ Make the history entry at offset [4mwhich[24m have [4mline[24m and [4mdata[24m. This re-
+ turns the old entry so the caller can dispose of any application-spe-
+ cific data. In the case of an invalid [4mwhich[24m, a [1mNULL [22mpointer is re-
+ turned.
[4mvoid[24m [1mclear_history [22m([4mvoid[24m)
Clear the history list by deleting all the entries.
@@ -249,12 +256,12 @@ HISTORY(3) Library Functions Manual HISTORY(3)
[1mInformation About the History List[0m
- These functions return information about the entire history list or
- individual list entries.
+ These functions return information about the entire history list or in-
+ dividual list entries.
[4mHIST_ENTRY[24m [4m**[24m [1mhistory_list [22m([4mvoid[24m)
- Return a [1mNULL [22mterminated array of [4mHIST_ENTRY[24m [4m*[24m which is the current
- input history. Element 0 of this list is the beginning of time. If
+ Return a [1mNULL [22mterminated array of [4mHIST_ENTRY[24m [4m*[24m which is the current in-
+ put history. Element 0 of this list is the beginning of time. If
there is no history, return [1mNULL[22m.
[4mint[24m [1mwhere_history [22m([4mvoid[24m)
@@ -267,8 +274,8 @@ HISTORY(3) Library Functions Manual HISTORY(3)
[4mHIST_ENTRY[24m [4m*[24m [1mhistory_get [22m([4mint[24m [4moffset[24m)
Return the history entry at position [4moffset[24m. The range of valid values
of [4moffset[24m starts at [1mhistory_base [22mand ends at [1mhistory_length [22m- 1. If
- there is no entry there, or if [4moffset[24m is outside the valid range,
- return a [1mNULL [22mpointer.
+ there is no entry there, or if [4moffset[24m is outside the valid range, re-
+ turn a [1mNULL [22mpointer.
[4mtime_t[24m [1mhistory_get_time [22m([4mHIST_ENTRY[24m [4m*[24m)
Return the time stamp associated with the history entry passed as the
@@ -304,31 +311,31 @@ HISTORY(3) Library Functions Manual HISTORY(3)
[1mSearching the History List[0m
These functions allow searching of the history list for entries con-
taining a specific string. Searching may be performed both forward and
- backward from the current history position. The search may be
- [4manchored[24m, meaning that the string must match at the beginning of the
- history entry.
+ backward from the current history position. The search may be [4man-[0m
+ [4mchored[24m, meaning that the string must match at the beginning of the his-
+ tory entry.
[4mint[24m [1mhistory_search [22m([4mconst[24m [4mchar[24m [4m*string,[24m [4mint[24m [4mdirection[24m)
Search the history for [4mstring[24m, starting at the current history offset.
- If [4mdirection[24m is less than 0, then the search is through previous
- entries, otherwise through subsequent entries. If [4mstring[24m is found,
- then the current history index is set to that history entry, and the
- value returned is the offset in the line of the entry where [4mstring[24m was
- found. Otherwise, nothing is changed, and a -1 is returned.
+ If [4mdirection[24m is less than 0, then the search is through previous en-
+ tries, otherwise through subsequent entries. If [4mstring[24m is found, then
+ the current history index is set to that history entry, and the value
+ returned is the offset in the line of the entry where [4mstring[24m was found.
+ Otherwise, nothing is changed, and a -1 is returned.
[4mint[24m [1mhistory_search_prefix [22m([4mconst[24m [4mchar[24m [4m*string,[24m [4mint[24m [4mdirection[24m)
Search the history for [4mstring[24m, starting at the current history offset.
- The search is anchored: matching lines must begin with [4mstring[24m. If
- [4mdirection[24m is less than 0, then the search is through previous entries,
+ The search is anchored: matching lines must begin with [4mstring[24m. If [4mdi-[0m
+ [4mrection[24m is less than 0, then the search is through previous entries,
otherwise through subsequent entries. If [4mstring[24m 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.
[4mint[24m [1mhistory_search_pos [22m([4mconst[24m [4mchar[24m [4m*string,[24m [4mint[24m [4mdirection,[24m [4mint[24m [4mpos[24m)
- Search for [4mstring[24m in the history list, starting at [4mpos[24m, an absolute
- index into the list. If [4mdirection[24m is negative, the search proceeds
- backward from [4mpos[24m, otherwise forward. Returns the absolute index of
- the history element where [4mstring[24m was found, or -1 otherwise.
+ Search for [4mstring[24m in the history list, starting at [4mpos[24m, an absolute in-
+ dex into the list. If [4mdirection[24m is negative, the search proceeds back-
+ ward from [4mpos[24m, otherwise forward. Returns the absolute index of the
+ history element where [4mstring[24m was found, or -1 otherwise.
[1mManaging the History File[0m
@@ -390,9 +397,8 @@ HISTORY(3) Library Functions Manual HISTORY(3)
[4mchar[24m [4m**[24m [1mhistory_tokenize [22m([4mconst[24m [4mchar[24m [4m*string[24m)
Return an array of tokens parsed out of [4mstring[24m, much as the shell
- might. The tokens are split on the characters in the [1mhis-[0m
- [1mtory_word_delimiters [22mvariable, and shell quoting conventions are
- obeyed.
+ might. The tokens are split on the characters in the [1mhistory_word_de-[0m
+ [1mlimiters [22mvariable, and shell quoting conventions are obeyed.
[4mchar[24m [4m*[24m [1mhistory_arg_extract [22m([4mint[24m [4mfirst,[24m [4mint[24m [4mlast,[24m [4mconst[24m [4mchar[24m [4m*string[24m)
Extract a string segment consisting of the [4mfirst[24m through [4mlast[24m arguments
@@ -413,12 +419,12 @@ HISTORY(3) Library Functions Manual HISTORY(3)
The maximum number of history entries. This must be changed using [1msti-[0m
[1mfle_history()[22m.
- [4mint[24m [1mhistory_wite_timestamps[0m
+ [4mint[24m [1mhistory_write_timestamps[0m
If non-zero, timestamps are written to the history file, so they can be
preserved between sessions. The default value is 0, meaning that time-
- stamps are not saved. The current timestamp format uses the value of
- [4mhistory_comment_char[24m to delimit timestamp entries in the history file.
- If that variable does not have a value (the default), timestamps will
+ stamps are not saved. The current timestamp format uses the value of
+ [4mhistory_comment_char[24m to delimit timestamp entries in the history file.
+ If that variable does not have a value (the default), timestamps will
not be written.
[4mchar[24m [1mhistory_expansion_char[0m
@@ -430,37 +436,37 @@ HISTORY(3) Library Functions Manual HISTORY(3)
line. The default is [1m^[22m.
[4mchar[24m [1mhistory_comment_char[0m
- 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.
+ 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.
[4mchar[24m [4m*[24m [1mhistory_word_delimiters[0m
- The characters that separate tokens for [1mhistory_tokenize()[22m. The
- default value is [1m" \t\n()<>;&|"[22m.
+ The characters that separate tokens for [1mhistory_tokenize()[22m. The de-
+ fault value is [1m" \t\n()<>;&|"[22m.
[4mchar[24m [4m*[24m [1mhistory_no_expand_chars[0m
The list of characters which inhibit history expansion if found immedi-
- ately following [1mhistory_expansion_char[22m. The default is space, tab,
+ ately following [1mhistory_expansion_char[22m. The default is space, tab,
newline, [1m\r[22m, and [1m=[22m.
[4mchar[24m [4m*[24m [1mhistory_search_delimiter_chars[0m
- The list of additional characters which can delimit a history search
- string, in addition to space, tab, [4m:[24m and [4m?[24m in the case of a substring
+ The list of additional characters which can delimit a history search
+ string, in addition to space, tab, [4m:[24m and [4m?[24m in the case of a substring
search. The default is empty.
[4mint[24m [1mhistory_quotes_inhibit_expansion[0m
If non-zero, double-quoted words are not scanned for the history expan-
- sion character or the history comment character. The default value is
+ sion character or the history comment character. The default value is
0.
[4mrl_linebuf_func_t[24m [4m*[24m [1mhistory_inhibit_expansion_function[0m
- This should be set to the address of a function that takes two argu-
- ments: a [1mchar * [22m([4mstring[24m) and an [1mint [22mindex into that string ([4mi[24m). It
- should return a non-zero value if the history expansion starting at
- [4mstring[i][24m should not be performed; zero if the expansion should be
- done. It is intended for use by applications like [1mbash [22mthat use the
- history expansion character for additional purposes. By default, this
+ This should be set to the address of a function that takes two argu-
+ ments: a [1mchar * [22m([4mstring[24m) and an [1mint [22mindex into that string ([4mi[24m). It
+ should return a non-zero value if the history expansion starting at
+ [4mstring[i][24m should not be performed; zero if the expansion should be
+ done. It is intended for use by applications like [1mbash [22mthat use the
+ history expansion character for additional purposes. By default, this
variable is set to [1mNULL[22m.
[1mFILES[0m
@@ -481,14 +487,14 @@ HISTORY(3) Library Functions Manual HISTORY(3)
chet.ramey@case.edu
[1mBUG REPORTS[0m
- If you find a bug in the [1mhistory [22mlibrary, 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 [1mhistory [22mlibrary that you have.
-
- Once you have determined that a bug actually exists, mail a bug report
- to [4mbug-readline[24m@[4mgnu.org[24m. If you have a fix, you are welcome to mail
- that as well! Suggestions and `philosophical' bug reports may be
- mailed to [4mbug-readline[24m@[4mgnu.org[24m or posted to the Usenet newsgroup
+ If you find a bug in the [1mhistory [22mlibrary, you should report it. But
+ first, you should make sure that it really is a bug, and that it ap-
+ pears in the latest version of the [1mhistory [22mlibrary that you have.
+
+ Once you have determined that a bug actually exists, mail a bug report
+ to [4mbug-readline[24m@[4mgnu.org[24m. If you have a fix, you are welcome to mail
+ that as well! Suggestions and `philosophical' bug reports may be
+ mailed to [4mbug-readline[24m@[4mgnu.org[24m or posted to the Usenet newsgroup
[1mgnu.bash.bug[22m.
Comments and bug reports concerning this manual page should be directed
@@ -496,4 +502,4 @@ HISTORY(3) Library Functions Manual HISTORY(3)
-GNU History 6.3 2017 October 8 HISTORY(3)
+GNU History 8.0 2019 November 15 HISTORY(3)
diff --git a/doc/history.3 b/doc/history.3
index 8de64f6..35b45e6 100644
--- a/doc/history.3
+++ b/doc/history.3
@@ -6,9 +6,9 @@
.\" Case Western Reserve University
.\" chet.ramey@case.edu
.\"
-.\" Last Change: Sun Oct 8 11:43:43 EDT 2017
+.\" Last Change: Fri Nov 15 09:39:27 EST 2019
.\"
-.TH HISTORY 3 "2017 October 8" "GNU History 6.3"
+.TH HISTORY 3 "2019 November 15" "GNU History 8.0"
.\"
.\" File Name macro. This used to be `.PN', for Path Name,
.\" but Sun doesn't seem to like that very much.
@@ -40,8 +40,8 @@
.SH NAME
history \- GNU History Library
.SH COPYRIGHT
-.if t The GNU History Library is Copyright \(co 1989-2017 by the Free Software Foundation, Inc.
-.if n The GNU History Library is Copyright (C) 1989-2017 by the Free Software Foundation, Inc.
+.if t The GNU History Library is Copyright \(co 1989-2020 by the Free Software Foundation, Inc.
+.if n The GNU History Library is Copyright (C) 1989-2020 by the Free Software Foundation, Inc.
.SH DESCRIPTION
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
@@ -49,7 +49,6 @@ data with each line, and utilize information from previous lines in
composing new ones.
.PP
.SH "HISTORY EXPANSION"
-.PP
The history library supports a history expansion feature that
is identical to the history expansion in
.BR bash.
@@ -80,7 +79,6 @@ history expansion character, which is \^\fB!\fP\^ by default.
Only backslash (\^\fB\e\fP\^) and single quotes can quote
the history expansion character.
.SS Event Designators
-.PP
An event designator is a reference to a command line entry in the
history list.
Unless the reference is absolute, events are relative to the current
@@ -118,6 +116,8 @@ containing
The trailing \fB?\fP may be omitted if
.I string
is followed immediately by a newline.
+If \fIstring\fP is missing, the string from the most recent search is used;
+it is an error if there is no previous search string.
.TP
.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u
Quick substitution. Repeat the last command, replacing
@@ -125,14 +125,13 @@ Quick substitution. Repeat the last command, replacing
with
.IR string2 .
Equivalent to
-``!!:s/\fIstring1\fP/\fIstring2\fP/''
+``!!:s\d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u''
(see \fBModifiers\fP below).
.TP
.B !#
The entire command line typed so far.
.PD
.SS Word Designators
-.PP
Word designators are used to select desired words from the event.
A
.B :
@@ -165,7 +164,8 @@ The last word. This is usually the last argument, but will expand to the
zeroth word if there is only one word in the line.
.TP
.B %
-The word matched by the most recent `?\fIstring\fR?' search.
+The first word matched by the most recent `?\fIstring\fR?' search,
+if the search string begins with a character that is part of a word.
.TP
.I x\fB\-\fPy
A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'.
@@ -182,14 +182,15 @@ Abbreviates \fIx\-$\fP.
.TP
.B x\-
Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word.
+If \fBx\fP is missing, it defaults to 0.
.PD
.PP
If a word designator is supplied without an event specification, the
previous command is used as the event.
.SS Modifiers
-.PP
After the optional word designator, there may appear a sequence of
one or more of the following modifiers, each preceded by a `:'.
+These modify, or edit, the word or words selected from the history event.
.PP
.PD 0
.PP
@@ -219,15 +220,19 @@ Quote the substituted words as with
but break into words at
.B blanks
and newlines.
+The \fBq\fP and \fBx\fP modifiers are mutually exclusive; the last one
+supplied is used.
.TP
.B s/\fIold\fP/\fInew\fP/
Substitute
.I new
for the first occurrence of
.I old
-in the event line. Any delimiter can be used in place of /. The
-final delimiter is optional if it is the last character of the
-event line. The delimiter may be quoted in
+in the event line.
+Any character may be used as the delimiter in place of /.
+The final delimiter is optional if it is the last character of the
+event line.
+The delimiter may be quoted in
.I old
and
.I new
@@ -235,7 +240,8 @@ with a single backslash. If & appears in
.IR new ,
it is replaced by
.IR old .
-A single backslash will quote the &. If
+A single backslash will quote the &.
+If
.I old
is null, it is set to the last
.I old
@@ -245,6 +251,11 @@ the last
in a
.B !?\fIstring\fR\fB[?]\fR
search.
+If
+.I new
+is null, each matching
+.I old
+is deleted.
.TP
.B &
Repeat the previous substitution.
@@ -259,12 +270,12 @@ if it is the last character of the event line.
An \fBa\fP may be used as a synonym for \fBg\fP.
.TP
.B G
-Apply the following `\fBs\fP' modifier once to each word in the event line.
+Apply the following `\fBs\fP' or `\fB&\fP' modifier once to each word
+in the event line.
.PD
.SH "PROGRAMMING WITH HISTORY FUNCTIONS"
This section describes how to use the History library in other programs.
.SS Introduction to History
-.PP
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
@@ -292,9 +303,7 @@ 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.
-
.SS History Storage
-.PP
The history list is an array of history entries. A history entry is
declared as follows:
.PP
@@ -330,7 +339,6 @@ typedef struct _hist_state {
If the flags member includes \fBHS_STIFLED\fP, the history has been
stifled.
.SH "History Functions"
-.PP
This section describes the calling sequence for the various functions
exported by the GNU History library.
.SS Initializing History and State Management
@@ -349,7 +357,6 @@ Return a structure describing the current state of the input history.
Set the state of the history list according to \fIstate\fP.
.SS History List Management
-
These functions manage individual entries on the history list, or set
parameters managing the list itself.
@@ -583,7 +590,7 @@ The number of entries currently stored in the history list.
The maximum number of history entries. This must be changed using
\fBstifle_history()\fP.
-.Vb int history_wite_timestamps
+.Vb int history_write_timestamps
If non-zero, timestamps are written to the history file, so they can be
preserved between sessions. The default value is 0, meaning that
timestamps are not saved.
diff --git a/doc/history.dvi b/doc/history.dvi
index 28af1c791a1c8c515bf33137ff0b57f3e12c6dc9..30a5ba753d22209d295874ff59414fb66d304065 100644
GIT binary patch
delta 2134
zc-mD}eQZ-z6yLk=wUam)E$i5rW1D=8X)WEDXr_+f*PJ>M6^u$iUfWyx>}%h6@0D$k
zSVTdSxyjp+`m~Nof{TFhV--P(2E#uRqk(8NMg?EvB2g4#{6o};=iav!U6$_LyK~RS
z@BGfM+uoF3e@EI??{5o-!plRg;f~hp+in;vD=QP=RKr5+fs?)`19d&}u8F1rOB|24
zh1V#tC$@rO=w!7zaG?Suf^ffIqemX{tsIEkS8n&6BcGs#k
zc)RB=#V|E}fH|m2M3?med&%bA6HQb%6fJGv7zzh1^7X}byGMoro8@ca7qZ=}Ya4Yr
zl~U3hhpYC_T(*oCU~0R1PHSooi-Y&bd;#DaQr`folBNb|ap=|QW<|>w>HwJbKrcGe
z7{DTNt+y@AA8p-vExaxE3F8oylK5#$N$>cO6}tE`%=)Yv8a(Uq@^Q~r;Vbyl^K|9D
zp|Rh}%7%tUgb$Zfrxlz;0ABS5Nlky@bMFp8tlPezu=a|p1hLY*y|87*^AZ|&6nwK%
zM6BL^b>WHGiv`hl=s`H(dlut%__NZO@6Z}}-@h7x7M5Mv}FT`~%#gK=TW|*MUs5_eB
zy+hVL#SVkYdi14mglCAl{oMo-I9jK
zI1gAqJUweB!e+ctNgL3om+7<&EZK0jzj)n3r#Ua)(yS^;1dsx|yT)loyzg(1WK3I2DW<`zQf0%m`_PF+
zw50b>bjR%t#eSz5GuoHObbmYI9HVhLqngIlJWP%4R~YLUvYLEd-SM2{hh+UALI{7<
zzmm12Knsa1{+IjJ$msK8(W^|pVqm<2QQd47=)cKI3q`70M0NdRR&m%`yrU6Cj
zq$di~)1JaM#q}#E)dS}S=XzeM&yL9M*kV*waE8bZC2jYrvYT;3aVbO7ds}q%|9sqN
zwi{|wMnk0V-Bc>K%u^Q}IUUPM(J|hj=Ye+}#>Ko8-6I1dflBR&Toc7WNdrlf2wCNU
zo!uaP>#hI2hH%qnyC!Le}5U{2d(}Gua
zp{BTY#X4|G>V?4Fw}VL{$9dzsOb_ulZS!`dgXeH(P`OgFiGP@QxouBgV2(Ibiaqcc
zIOD1ID$+83opg@J|3eG>D(PkQ%PKZHrIMw(8Q>*-(Oh~K-nzO)@FJ-ZbNF(>qogrk
zxM5*K1zCIqw_|QW3!l1@w0+HN(8A4yZ8smOAf3lc=l<@&N^;N9()qTB*Hx0WJ4@&9
z6TX=wxnSzNun^jOdFXTD6}Xm}KVc
zqk-AvgDz%n`lQxJK7EauUw+%`BWGqZbL7{H739JRW`6b8Sugo#*5Qwc@UxeAZhZlb
ay2B@C2;K@(vGnk%fG{qU*K8qY@aJEp1bj9C
delta 1440
zc-lo%U2GIp813AdU8%OxUE1=qg;Isqg}QXxMjIfhm?%`G25n=Nf;+o=mz{KXW;-+6
zQjM+{ktRUxsWm}(GDt+fds}fHCTHf}
zd(QdJ_uY@rNUwb=jjk;Zw}ryZp>W&QaJaP<8ofd5+3x}eZZ&mkCr{T608K-5boW)N
zTVf&6+!StuR^jK|Xd-#s^80qWT}j2rd-`YM+Su-^v22>Eqo?akh*Kk`D^Z&o}97&~1@bwklqXbUwpTAp8=mL}-b>;apm?L}!|
zx~8B@c}TFMeMmT(Y8iWP%HsSkq93S&6e0;2*M=gdc)lu^=%w
zAWD701Ze#Iqcnu?ZqLht3zs}cgm2+_@6#mE=1h4H3u4Xq7f$oC8bPcOe9oTI6A}Wy
zGhd!2;!0fVsi+r3|HVJxknfl@>A!d#?)B${0$BboB>mOj&-I+16+yvQNJN<}EKQ|@
z=$b-fRg=&S69-qq?D|dcZq;O$JR&b=a6utS9*J5EyyRz!6+Gfx(`re)ThJh?f~
zXLy|4{0(O=4mljUOp1*h@<*^64IxXK+>d$wPXUXE7cZXOpVdq}h!(gVF}cl^)j04f
z#09|}RLmsEOR@&`IEAf=SW!8KBz*>^n?#B8`HsZ67#Yn)iuD+toZ<5<>xRvUk;`qg
zM0Hp(K{0Hda*LSv81un&UB+>8hb2aGiyD9e_9Fd~_MnnV<)z>aZg^Y@UT4{Ixsc^e
zzS6~#R(HuMxKpUD7@%cLy!`lAN!VQd&P>>>fTXO;F_wv@F3FgSqvv#Q3<_|hzL(Tq
zaOUc3%gBbivE$pE9W9^SLz*^oyt#e4jBKys`2MFxmXnThj<4;FEGIozI6m4}Sx%B!
zXX4=PQj$IIOuYV-7mXXp!
Q=W?rrf>2uZ4VmT7zreRw?*IS*
diff --git a/doc/history.html b/doc/history.html
index bc3ce3b..91ffd82 100644
--- a/doc/history.html
+++ b/doc/history.html
@@ -1,6 +1,6 @@
-
+
+
-
+
digit-argument (M-0, M-1, ... M--)
--
+
-
Add this digit to the argument already accumulating, or start a new
argument. M-- starts a negative argument.
-
+
universal-argument ()
--
+
-
This is another way to specify an argument.
If this command is followed by one or more digits, optionally with a
leading minus sign, those digits define the argument.
@@ -1990,33 +2022,33 @@ By default, this is not bound to a key.
-
+
complete (TAB)
--
+
-
Attempt to perform completion on the text before point.
The actual completion performed is application-specific.
The default is filename completion.
-
+
possible-completions (M-?)
--
+
-
List the possible completions of the text before point.
When displaying completions, Readline sets the number of columns used
for display to the value of
completion-display-width
, the value of
the environment variable COLUMNS
, or the screen width, in that order.
-
+
insert-completions (M-*)
--
+
-
Insert all completions of the text before point that would have
been generated by
possible-completions
.
-
+
menu-complete ()
--
+
-
Similar to
complete
, but replaces the word to be completed
with a single match from the list of possible completions.
Repeated execution of menu-complete
steps through the list
@@ -2031,17 +2063,17 @@ This command is intended to be bound to TAB, but is unbound
by default.
-
+
menu-complete-backward ()
--
+
-
Identical to
menu-complete
, but moves backward through the list
of possible completions, as if menu-complete
had been given a
negative argument.
-
+
delete-char-or-list ()
--
+
-
Deletes the character under the cursor if not at the beginning or
end of the line (like
delete-char
).
If at the end of the line, behaves identically to
@@ -2070,29 +2102,29 @@ This command is unbound by default.
-
+
start-kbd-macro (C-x ()
--
+
-
Begin saving the characters typed into the current keyboard macro.
-
+
end-kbd-macro (C-x ))
--
+
-
Stop saving the characters typed into the current keyboard macro
and save the definition.
-
+
call-last-kbd-macro (C-x e)
--
+
-
Re-execute the last keyboard macro defined, by making the characters
in the macro appear as if typed at the keyboard.
-
+
print-last-kbd-macro ()
--
+
-
Print the last keboard macro defined in a format suitable for the
inputrc file.
@@ -2118,88 +2150,88 @@ Print the last keboard macro defined in a format suitable for the
-
+
re-read-init-file (C-x C-r)
--
+
-
Read in the contents of the inputrc file, and incorporate
any bindings or variable assignments found there.
-
+
abort (C-g)
--
+
-
Abort the current editing command and
ring the terminal's bell (subject to the setting of
bell-style
).
-
+
do-lowercase-version (M-A, M-B, M-x, ...)
--
+
-
If the metafied character x is upper case, run the command
that is bound to the corresponding metafied lower case character.
The behavior is undefined if x is already lower case.
-
+
prefix-meta (ESC)
--
+
-
Metafy the next character typed. This is for keyboards
without a meta key. Typing `ESC f' is equivalent to typing
M-f.
-
+
undo (C-_ or C-x C-u)
--
+
-
Incremental undo, separately remembered for each line.
-
+
revert-line (M-r)
--
+
-
Undo all changes made to this line. This is like executing the
undo
command enough times to get back to the beginning.
-
+
tilde-expand (M-~)
--
+
-
Perform tilde expansion on the current word.
-
+
set-mark (C-@)
--
+
-
Set the mark to the point. If a
numeric argument is supplied, the mark is set to that position.
-
+
exchange-point-and-mark (C-x C-x)
--
+
-
Swap the point with the mark. The current cursor position is set to
the saved position, and the old cursor position is saved as the mark.
-
+
character-search (C-])
--
+
-
A character is read and point is moved to the next occurrence of that
character. A negative count searches for previous occurrences.
-
+
character-search-backward (M-C-])
--
+
-
A character is read and point is moved to the previous occurrence
of that character. A negative count searches for subsequent
occurrences.
-
+
skip-csi-sequence ()
--
+
-
Read enough characters to consume a multi-key sequence such as those
defined for keys like Home and End. Such sequences begin with a
Control Sequence Indicator (CSI), usually ESC-[. If this sequence is
@@ -2209,9 +2241,9 @@ stray characters into the editing buffer. This is unbound by default,
but usually bound to ESC-[.
-
+
insert-comment (M-#)
--
+
-
Without a numeric argument, the value of the
comment-begin
variable is inserted at the beginning of the current line.
If a numeric argument is supplied, this command acts as a toggle: if
@@ -2222,43 +2254,43 @@ the line.
In either case, the line is accepted as if a newline had been typed.
-
+
dump-functions ()
--
+
-
Print all of the functions and their key bindings to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an inputrc file. This command is unbound by default.
-
+
dump-variables ()
--
+
-
Print all of the settable variables and their values to the
Readline output stream. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an inputrc file. This command is unbound by default.
-
+
dump-macros ()
--
+
-
Print all of the Readline key sequences bound to macros and the
strings they output. If a numeric argument is supplied,
the output is formatted in such a way that it can be made part
of an inputrc file. This command is unbound by default.
-
+
emacs-editing-mode (C-e)
--
+
-
When in
vi
command mode, this causes a switch to emacs
editing mode.
-
+
vi-editing-mode (M-C-j)
--
+
-
When in
emacs
editing mode, this causes a switch to vi
editing mode.
@@ -2309,7 +2341,7 @@ in the consistency of user interface across discrete programs that need
to provide a command line interface.
-Copyright (C) 1988--2016 Free Software Foundation, Inc.
+Copyright (C) 1988--2020 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of
@@ -2393,8 +2425,8 @@ the simplest way possible, perhaps to replace calls in your code to
gets()
or fgets()
.
-
-
+
+
The function readline()
prints a prompt prompt
@@ -2717,7 +2749,7 @@ command functions.
These variables are available to function writers.
-
+
- Variable: char * rl_line_buffer
- This is the line gathered so far. You are welcome to modify the
@@ -2727,7 +2759,7 @@ the memory allocated to
rl_line_buffer
.
-
+
- Variable: int rl_point
- The offset of the current cursor position in
rl_line_buffer
@@ -2735,7 +2767,7 @@ the memory allocated to rl_line_buffer
.
-
+
- Variable: int rl_end
- The number of characters present in
rl_line_buffer
. When
@@ -2744,7 +2776,7 @@ the memory allocated to rl_line_buffer
.
-
+
- Variable: int rl_mark
- The mark (saved position) in the current line. If set, the mark
@@ -2752,7 +2784,7 @@ and point define a region.
-
+
- Variable: int rl_done
- Setting this to a non-zero value causes Readline to return the current
@@ -2760,7 +2792,7 @@ line immediately.
-
+
- Variable: int rl_num_chars_to_read
- Setting this to a positive value before calling
readline()
causes
@@ -2769,7 +2801,7 @@ than reading up to a character bound to accept-line
.
-
+
- Variable: int rl_pending_input
- Setting this to a value makes it the next keystroke read. This is a
@@ -2777,7 +2809,7 @@ way to stuff a single character into the input stream.
-
+
- Variable: int rl_dispatching
- Set to a non-zero value if a function is being called from a key binding;
@@ -2786,7 +2818,7 @@ they were called directly or by Readline's dispatching mechanism.
-
+
- Variable: int rl_erase_empty_line
- Setting this to a non-zero value causes Readline to completely erase
@@ -2796,7 +2828,7 @@ the beginning of the newly-blank line.
-
+
- Variable: char * rl_prompt
- The prompt Readline uses. This is set from the argument to
@@ -2806,7 +2838,7 @@ be used to modify the prompt string after calling
readline()
.
-
+
- Variable: char * rl_display_prompt
- The string displayed as the prompt. This is usually identical to
@@ -2815,7 +2847,7 @@ use the prompt string as a message area, such as incremental search.
-
+
- Variable: int rl_already_prompted
- If an application wishes to display the prompt itself, rather than have
@@ -2828,14 +2860,14 @@ never sets it.
-
+
- 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
@@ -2846,7 +2878,7 @@ value 0x0402.
-
+
- Variable: int rl_gnu_readline_p
- Always set to 1, denoting that this is GNU readline rather than some
@@ -2854,7 +2886,7 @@ emulation.
-
+
- Variable: const char * rl_terminal_name
- The terminal type, used for initialization. If not set by the application,
@@ -2863,7 +2895,7 @@ the first time it is called.
-
+
- Variable: const char * rl_readline_name
- This variable is set to a unique name by each application using Readline.
@@ -2872,7 +2904,7 @@ The value allows conditional parsing of the inputrc file
-
+
- Variable: FILE * rl_instream
- The stdio stream from which Readline reads input.
@@ -2880,7 +2912,7 @@ If
NULL
, Readline defaults to stdin.
-
+
- Variable: FILE * rl_outstream
- The stdio stream to which Readline performs output.
@@ -2888,7 +2920,7 @@ If
NULL
, Readline defaults to stdout.
-
+
- Variable: int rl_prefer_env_winsize
- If non-zero, Readline gives values found in the
LINES
and
@@ -2897,7 +2929,7 @@ from the kernel when computing the screen dimensions.
-
+
- Variable: rl_command_func_t * rl_last_func
- The address of the last command function Readline executed. May be used to
@@ -2906,7 +2938,7 @@ example.
-
+
- Variable: rl_hook_func_t * rl_startup_hook
- If non-zero, this is the address of a function to call just
@@ -2914,7 +2946,7 @@ before
readline
prints the first prompt.
-
+
- Variable: rl_hook_func_t * rl_pre_input_hook
- If non-zero, this is the address of a function to call after
@@ -2923,7 +2955,7 @@ starts reading input characters.
-
+
- Variable: rl_hook_func_t * rl_event_hook
- If non-zero, this is the address of a function to call periodically
@@ -2933,7 +2965,7 @@ is no keyboard input.
-
+
- Variable: rl_getc_func_t * rl_getc_function
- If non-zero, Readline will call indirectly through this pointer
@@ -2945,7 +2977,7 @@ setting rl_input_available_hook as well.
-
+
- Variable: rl_hook_func_t * rl_signal_event_hook
- If non-zero, this is the address of a function to call if a read system
@@ -2953,7 +2985,7 @@ call is interrupted when Readline is reading terminal input.
-
+
- Variable: rl_hook_func_t * rl_input_available_hook
- If non-zero, Readline will use this function's return value when it needs
@@ -2978,7 +3010,7 @@ setting rl_input_available_hook as well.
-
+
- Variable: rl_voidfunc_t * rl_redisplay_function
- If non-zero, Readline will call indirectly through this pointer
@@ -2988,7 +3020,7 @@ redisplay function (see section 2.4.6 Redisplay
-
+
- Variable: rl_vintfunc_t * rl_prep_term_function
- If non-zero, Readline will call indirectly through this pointer
@@ -2999,7 +3031,7 @@ By default, this is set to
rl_prep_terminal
-
+
- Variable: rl_voidfunc_t * rl_deprep_term_function
- If non-zero, Readline will call indirectly through this pointer
@@ -3010,7 +3042,7 @@ By default, this is set to
rl_deprep_terminal
-
+
- Variable: Keymap rl_executing_keymap
- This variable is set to the keymap (see section 2.4.2 Selecting a Keymap) in which the
@@ -3018,7 +3050,7 @@ currently executing readline function was found.
-
+
- Variable: Keymap rl_binding_keymap
- This variable is set to the keymap (see section 2.4.2 Selecting a Keymap) in which the
@@ -3026,21 +3058,21 @@ last key binding occurred.
-
+
- Variable: char * rl_executing_macro
- This variable is set to the text of any currently-executing macro.
-
+
- Variable: int rl_executing_key
- The key that caused the dispatch to the currently-executing Readline function.
-
+
- Variable: char * rl_executing_keyseq
- The full key sequence that caused the dispatch to the currently-executing
@@ -3048,14 +3080,14 @@ Readline function.
-
+
- Variable: int rl_key_sequence_length
- The number of characters in rl_executing_keyseq.
-
+
- Variable: int rl_readline_state
- A variable with bit values that encapsulate the current Readline state.
@@ -3125,7 +3157,7 @@ and is about to return the line to the caller.
-
+
- Variable: int rl_explicit_arg
- Set to a non-zero value if an explicit numeric argument was specified by
@@ -3133,7 +3165,7 @@ the user. Only valid in a bindable command function.
-
+
- Variable: int rl_numeric_arg
- Set to the value of any numeric argument explicitly specified by the user
@@ -3142,7 +3174,7 @@ command function.
-
+
- Variable: int rl_editing_mode
- Set to a value denoting Readline's current editing mode. A value of
@@ -3221,7 +3253,7 @@ programmer, should bind the functions you write to descriptive names as
well. Readline provides a function for doing that:
-
+
- Function: int rl_add_defun (const char *name, rl_command_func_t *function, int key)
- Add name to the list of named functions. Make function be
@@ -3261,7 +3293,7 @@ get run. You can make your own keymaps, copy existing keymaps, and tell
Readline which keymap to use.
-
+
- Function: Keymap rl_make_bare_keymap (void)
- Returns a new, empty keymap. The space for the keymap is allocated with
@@ -3270,14 +3302,14 @@ Readline which keymap to use.
-
+
- Function: Keymap rl_copy_keymap (Keymap map)
- Return a new keymap which is a copy of map.
-
+
- Function: Keymap rl_make_keymap (void)
- Return a new keymap with the printing characters bound to rl_insert,
@@ -3286,7 +3318,7 @@ the Meta digits bound to produce numeric arguments.
-
+
- Function: void rl_discard_keymap (Keymap keymap)
- Free the storage associated with the data in keymap.
@@ -3294,7 +3326,7 @@ The caller should free keymap.
-
+
- Function: void rl_free_keymap (Keymap keymap)
- Free all storage associated with keymap. This calls
@@ -3302,7 +3334,7 @@ The caller should free keymap.
-
+
- Function: int rl_empty_keymap (Keymap keymap)
- Return non-zero if there are no keys bound to functions in keymap;
@@ -3314,21 +3346,21 @@ Readline has several internal keymaps. These functions allow you to
change which keymap is active.
-
+
- Function: Keymap rl_get_keymap (void)
- Returns the currently active keymap.
-
+
- Function: void rl_set_keymap (Keymap keymap)
- Makes keymap the currently active keymap.
-
+
- Function: Keymap rl_get_keymap_by_name (const char *name)
- Return the keymap matching name. name is one which would
@@ -3336,7 +3368,7 @@ be supplied in a
set keymap
inputrc line (see section
+
- Function: char * rl_get_keymap_name (Keymap keymap)
- Return the name matching keymap. name is one which would
@@ -3344,7 +3376,7 @@ be supplied in a
set keymap
inputrc line (see section
+
- Function: int rl_set_keymap_name (const char *name, Keymap keymap)
- Set the name of keymap. This name will then be "registered" and
@@ -3402,7 +3434,7 @@ initialization function assigned to the
rl_startup_hook
variable
These functions manage key bindings.
-
+
- Function: int rl_bind_key (int key, rl_command_func_t *function)
- Binds key to function in the currently active keymap.
@@ -3410,7 +3442,7 @@ Returns non-zero in the case of an invalid key.
-
+
- Function: int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map)
- Bind key to function in map.
@@ -3418,7 +3450,7 @@ Returns non-zero in the case of an invalid key.
-
+
- Function: int rl_bind_key_if_unbound (int key, rl_command_func_t *function)
- Binds key to function if it is not already bound in the
@@ -3428,7 +3460,7 @@ already bound.
-
+
- Function: int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map)
- Binds key to function if it is not already bound in map.
@@ -3437,7 +3469,7 @@ already bound.
-
+
- Function: int rl_unbind_key (int key)
- Bind key to the null function in the currently active keymap.
@@ -3445,7 +3477,7 @@ Returns non-zero in case of error.
-
+
- Function: int rl_unbind_key_in_map (int key, Keymap map)
- Bind key to the null function in map.
@@ -3453,21 +3485,21 @@ Returns non-zero in case of error.
-
+
- Function: int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map)
- Unbind all keys that execute function in map.
-
+
- Function: int rl_unbind_command_in_map (const char *command, Keymap map)
- Unbind all keys that are bound to command in map.
-
+
- Function: int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function)
- Bind the key sequence represented by the string keyseq to the function
@@ -3477,7 +3509,7 @@ The return value is non-zero if keyseq is invalid.
-
+
- Function: int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
- Bind the key sequence represented by the string keyseq to the function
@@ -3487,14 +3519,14 @@ The return value is non-zero if keyseq is invalid.
-
+
- Function: int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map)
- Equivalent to
rl_bind_keyseq_in_map
.
-
+
- Function: int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function)
- Binds keyseq to function if it is not already bound in the
@@ -3504,7 +3536,7 @@ already bound.
-
+
- Function: int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
- Binds keyseq to function if it is not already bound in map.
@@ -3513,7 +3545,7 @@ already bound.
-
+
- Function: int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
- Bind the key sequence represented by the string keyseq to the arbitrary
@@ -3524,7 +3556,7 @@ necessary. The initial keymap in which to do bindings is map.
-
+
- Function: int rl_parse_and_bind (char *line)
- Parse line as if it had been read from the
inputrc
file and
@@ -3533,7 +3565,7 @@ perform any key bindings and variable assignments found
-
+
- Function: int rl_read_init_file (const char *filename)
- Read keybindings and variable assignments from filename
@@ -3564,14 +3596,14 @@ and the functions invoked by a particular key sequence. You may also
associate a new function name with an arbitrary function.
-
+
- Function: rl_command_func_t * rl_named_function (const char *name)
- Return the function with name name.
-
+
- Function: rl_command_func_t * rl_function_of_keyseq (const char *keyseq, Keymap map, int *type)
- Return the function invoked by keyseq in keymap map.
@@ -3583,7 +3615,7 @@ can include NUL.
-
+
- Function: rl_command_func_t * rl_function_of_keyseq_len (const char *keyseq, size_t len, Keymap map, int *type)
- Return the function invoked by keyseq of length len
@@ -3594,7 +3626,7 @@ can include NUL.
-
+
- Function: char ** rl_invoking_keyseqs (rl_command_func_t *function)
- Return an array of strings representing the key sequences used to
@@ -3602,7 +3634,7 @@ invoke function in the current keymap.
-
+
- Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map)
- Return an array of strings representing the key sequences used to
@@ -3610,7 +3642,7 @@ invoke function in the keymap map.
-
+
- Function: void rl_function_dumper (int readable)
- Print the readline function names and the key sequences currently
@@ -3620,14 +3652,14 @@ the list is formatted in such a way that it can be made part of an
-
+
- Function: void rl_list_funmap_names (void)
- Print the names of all bindable Readline functions to
rl_outstream
.
-
+
- Function: const char ** rl_funmap_names (void)
- Return a NULL terminated array of known function names. The array is
@@ -3637,7 +3669,7 @@ should free the array, but not the pointers, using
free
or
-
+
- Function: int rl_add_funmap_entry (const char *name, rl_command_func_t *function)
- Add name to the list of bindable Readline command names, and make
@@ -3692,7 +3724,7 @@ tells what to undo, not how to undo it.
UNDO_BEGIN
and
rl_end_undo_group()
.
-
+
- Function: int rl_begin_undo_group (void)
- Begins saving undo information in a group construct. The undo
@@ -3702,7 +3734,7 @@ information usually comes from calls to
rl_insert_text()
and
-
+
- Function: int rl_end_undo_group (void)
- Closes the current undo group started with
rl_begin_undo_group
@@ -3711,7 +3743,7 @@ for each call to rl_begin_undo_group()
.
-
+
- Function: void rl_add_undo (enum undo_code what, int start, int end, char *text)
- Remember how to undo an event (according to what). The affected
@@ -3719,14 +3751,14 @@ text runs from start to end, and encompasses text
-
+
- Function: void rl_free_undo_list (void)
- Free the existing undo list.
-
+
- Function: int rl_do_undo (void)
- Undo the first thing on the undo list. Returns
0
if there was
@@ -3740,7 +3772,7 @@ once, just before you modify the text. You must supply the indices of
the text range that you are going to modify.
-
+
- Function: int rl_modifying (int start, int end)
- Tell Readline to save the text between start and end as a
@@ -3767,7 +3799,7 @@ that text.
-
+
- Function: void rl_redisplay (void)
- Change what's displayed on the screen to reflect the current contents
@@ -3775,7 +3807,7 @@ of
rl_line_buffer
.
-
+
- Function: int rl_forced_update_display (void)
- Force the line to be updated and redisplayed, whether or not
@@ -3783,7 +3815,7 @@ Readline thinks the screen display is correct.
-
+
- Function: int rl_on_new_line (void)
- Tell the update functions that we have moved onto a new (empty) line,
@@ -3791,7 +3823,7 @@ usually after outputting a newline.
-
+
- Function: int rl_on_new_line_with_prompt (void)
- Tell the update functions that we have moved onto a new line, with
@@ -3803,14 +3835,14 @@ It should be used after setting rl_already_prompted.
-
+
- Function: int rl_clear_visible_line (void)
- Clear the screen lines corresponding to the current line's contents.
-
+
- Function: int rl_reset_line_state (void)
- Reset the display state to a clean state and redisplay the current line
@@ -3818,14 +3850,14 @@ starting on a new line.
-
+
- Function: int rl_crlf (void)
- Move the cursor to the start of the next screen line.
-
+
- Function: int rl_show_char (int c)
- Display character c on
rl_outstream
.
@@ -3836,7 +3868,7 @@ redisplay.
-
+
- Function: int rl_message (const char *, ...)
- The arguments are a format string as would be supplied to
printf
,
@@ -3849,7 +3881,7 @@ before calling this function.
-
+
- Function: int rl_clear_message (void)
- Clear the message in the echo area. If the prompt was saved with a call to
@@ -3858,7 +3890,7 @@ call
rl_restore_prompt
before calling this function.
-
+
- Function: void rl_save_prompt (void)
- Save the local Readline prompt display state in preparation for
@@ -3866,7 +3898,7 @@ displaying a new message in the message area with
rl_message()
.
-
+
- Function: void rl_restore_prompt (void)
- Restore the local Readline prompt display state saved by the most
@@ -3877,7 +3909,7 @@ corresponding call to
rl_clear_message
.
-
+
- Function: int rl_expand_prompt (char *prompt)
- Expand any special character sequences in prompt and set up the
@@ -3895,7 +3927,7 @@ be used to embed terminal-specific escape sequences in prompts.
-
+
- Function: int rl_set_prompt (const char *prompt)
- Make Readline use prompt for subsequent redisplay. This calls
@@ -3922,7 +3954,7 @@ to the result.
-
+
- Function: int rl_insert_text (const char *text)
- Insert text into the line at the current cursor position.
@@ -3930,7 +3962,7 @@ Returns the number of characters inserted.
-
+
- Function: int rl_delete_text (int start, int end)
- Delete the text between start and end in the current line.
@@ -3938,7 +3970,7 @@ Returns the number of characters deleted.
-
+
- Function: char * rl_copy_text (int start, int end)
- Return a copy of the text between start and end in
@@ -3946,7 +3978,7 @@ the current line.
-
+
- Function: int rl_kill_text (int start, int end)
- Copy the text between start and end in the current line
@@ -3958,7 +3990,7 @@ not a kill, a new kill ring slot is used.
-
+
- Function: int rl_push_macro_input (char *macro)
- Cause macro to be inserted into the line, as if it had been invoked
@@ -3985,7 +4017,7 @@ by a key bound to a macro. Not especially useful; use
-
+
- Function: int rl_read_key (void)
- Return the next character available from Readline's current input stream.
@@ -3997,7 +4029,7 @@ the
rl_event_hook
variable.
-
+
- Function: int rl_getc (FILE *stream)
- Return the next character available from stream, which is assumed to
@@ -4005,7 +4037,7 @@ be the keyboard.
-
+
- Function: int rl_stuff_char (int c)
- Insert c into the Readline input stream. It will be "read"
@@ -4016,7 +4048,7 @@ before Readline attempts to read characters from the terminal with
-
+
- Function: int rl_execute_next (int c)
- Make c be the next command to be executed when
rl_read_key()
@@ -4024,7 +4056,7 @@ is called. This sets rl_pending_input.
-
+
- Function: int rl_clear_pending_input (void)
- Unset rl_pending_input, effectively negating the effect of any
@@ -4033,7 +4065,7 @@ pending input has not already been read with
rl_read_key()
.
-
+
- Function: int rl_set_keyboard_input_timeout (int u)
- While waiting for keyboard input in
rl_read_key()
, Readline will
@@ -4063,7 +4095,7 @@ Returns the old timeout value.
-
+
- Function: void rl_prep_terminal (int meta_flag)
- Modify the terminal settings for Readline's use, so
readline()
@@ -4073,7 +4105,7 @@ read eight-bit input.
-
+
- Function: void rl_deprep_terminal (void)
- Undo the effects of
rl_prep_terminal()
, leaving the terminal in
@@ -4082,7 +4114,7 @@ the state in which it was before the most recent call to
-
+
- Function: void rl_tty_set_default_bindings (Keymap kmap)
- Read the operating system's terminal editing characters (as would be
@@ -4091,7 +4123,7 @@ The bindings are performed in kmap.
-
+
- Function: void rl_tty_unset_default_bindings (Keymap kmap)
- Reset the bindings manipulated by
rl_tty_set_default_bindings
so
@@ -4100,7 +4132,7 @@ The bindings are performed in kmap.
-
+
- Function: int rl_tty_set_echoing (int value)
- Set Readline's idea of whether or not it is echoing output to its output
@@ -4111,7 +4143,7 @@ This function returns the previous value.
-
+
- Function: int rl_reset_terminal (const char *terminal_name)
- Reinitialize Readline's idea of the terminal settings using
@@ -4139,7 +4171,7 @@ environment variable is used.
-
+
- Function: int rl_save_state (struct readline_state *sp)
- Save a snapshot of Readline's internal state to sp.
@@ -4149,7 +4181,7 @@ The caller is responsible for allocating the structure.
-
+
- Function: int rl_restore_state (struct readline_state *sp)
- Restore Readline's internal state to that stored in sp, which must
@@ -4160,7 +4192,7 @@ The caller is responsible for freeing the structure.
-
+
- Function: void rl_free (void *mem)
- Deallocate the memory pointed to by mem. mem must have been
@@ -4168,7 +4200,7 @@ allocated by
malloc
.
-
+
- Function: void rl_replace_line (const char *text, int clear_undo)
- Replace the contents of
rl_line_buffer
with text.
@@ -4178,7 +4210,7 @@ current line is cleared.
-
+
- Function: void rl_extend_line_buffer (int len)
- Ensure that
rl_line_buffer
has enough space to hold len
@@ -4186,7 +4218,7 @@ characters, possibly reallocating it if necessary.
-
+
- Function: int rl_initialize (void)
- Initialize or re-initialize Readline's internal state.
@@ -4195,21 +4227,21 @@ reading any input.
-
+
- Function: int rl_ding (void)
- Ring the terminal bell, obeying the setting of
bell-style
.
-
+
- Function: int rl_alphabetic (int c)
- Return 1 if c is an alphabetic character.
-
+
- Function: void rl_display_match_list (char **matches, int len, int max)
- A convenience function for displaying a list of strings in
@@ -4229,28 +4261,28 @@ The following are implemented as macros, defined in
chardefs.h
.
Applications should refrain from using them.
-
+
- Function: int _rl_uppercase_p (int c)
- Return 1 if c is an uppercase alphabetic character.
-
+
- Function: int _rl_lowercase_p (int c)
- Return 1 if c is a lowercase alphabetic character.
-
+
- Function: int _rl_digit_p (int c)
- Return 1 if c is a numeric character.
-
+
- Function: int _rl_to_upper (int c)
- If c is a lowercase alphabetic character, return the corresponding
@@ -4258,7 +4290,7 @@ uppercase character.
-
+
- Function: int _rl_to_lower (int c)
- If c is an uppercase alphabetic character, return the corresponding
@@ -4266,7 +4298,7 @@ lowercase character.
-
+
- Function: int _rl_digit_value (int c)
- If c is a number, return the value it represents.
@@ -4291,7 +4323,7 @@ lowercase character.
-
+
- Function: int rl_macro_bind (const char *keyseq, const char *macro, Keymap map)
- Bind the key sequence keyseq to invoke the macro macro.
@@ -4301,7 +4333,7 @@ use
rl_generic_bind()
instead.
-
+
- Function: void rl_macro_dumper (int readable)
- Print the key sequences bound to macros and their values, using
@@ -4311,7 +4343,7 @@ that it can be made part of an
inputrc
file and re-read.
-
+
- Function: int rl_variable_bind (const char *variable, const char *value)
- Make the Readline variable variable have value.
@@ -4321,7 +4353,7 @@ file (see section 1.3.1 Readline Init File Syntax<
-
+
- Function: char * rl_variable_value (const char *variable)
- Return a string representing the value of the Readline variable variable.
@@ -4329,7 +4361,7 @@ For boolean variables, this string is either `on' or `off'
-
+
- Function: void rl_variable_dumper (int readable)
- Print the readline variable names and their current values
@@ -4339,7 +4371,7 @@ that it can be made part of an
inputrc
file and re-read.
-
+
- Function: int rl_set_paren_blink_timeout (int u)
- Set the time interval (in microseconds) that Readline waits when showing
@@ -4347,7 +4379,7 @@ 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.
@@ -4359,7 +4391,7 @@ values for only those capabilities Readline uses.
-
+
- Function: void rl_clear_history (void)
- Clear the history list by deleting all of the entries, in the same manner
@@ -4395,7 +4427,7 @@ also be invoked as a `callback' function from an event loop. There
are functions available to make this easy.
-
+
- Function: void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)
- Set up the terminal for readline I/O and display the initial
@@ -4408,7 +4440,7 @@ line when it it finished with it.
-
+
- Function: void rl_callback_read_char (void)
- Whenever an application determines that keyboard input is available, it
@@ -4428,7 +4460,7 @@ the terminal settings are modified for Readline's use again.
-
+
- Function: void rl_callback_sigcleanup (void)
- Clean up any internal state the callback interface uses to maintain state
@@ -4439,7 +4471,7 @@ calls this when appropriate.
-
+
- Function: void rl_callback_handler_remove (void)
- Restore the terminal to its initial state and remove the line handler.
@@ -4758,7 +4790,7 @@ values of these variables only when calling
readline()
, not in
a signal handler, so Readline's internal signal state is not corrupted.
-
+
- Variable: int rl_catch_signals
- If this variable is non-zero, Readline will install signal handlers for
@@ -4770,7 +4802,7 @@ The default value of
rl_catch_signals
is 1.
-
+
- Variable: int rl_catch_sigwinch
- If this variable is set to a non-zero value,
@@ -4781,7 +4813,7 @@ The default value of
rl_catch_sigwinch
is 1.
-
+
- Variable: int rl_persistent_signal_handlers
- If an application using the callback interface wishes Readline's signal
@@ -4794,7 +4826,7 @@ The default value of
rl_persistent_signal_handlers
is 0.
-
+
- Variable: int rl_change_environment
- If this variable is set to a non-zero value,
@@ -4814,7 +4846,7 @@ Readline provides convenience functions to do the necessary terminal
and internal state cleanup upon receipt of a signal.
-
+
- Function: int rl_pending_signal (void)
- Return the signal number of the most recent signal Readline received but
@@ -4822,7 +4854,7 @@ has not yet handled, or 0 if there is no pending signal.
-
+
- Function: void rl_cleanup_after_signal (void)
- This function will reset the state of the terminal to what it was before
@@ -4832,7 +4864,7 @@ all signals, depending on the values of
rl_catch_signals
and
-
+
- Function: void rl_free_line_state (void)
- This will free any partial state associated with the current input line
@@ -4844,7 +4876,7 @@ current input line.
-
+
- Function: void rl_reset_after_signal (void)
- This will reinitialize the terminal and reinstall any Readline signal
@@ -4861,7 +4893,7 @@ a custom
rl_getc_function
(see section
+
- Function: void rl_check_signals (void)
- If there are any pending signals, call Readline's internal signal handling
@@ -4872,11 +4904,11 @@ to determine whether or not there are any pending signals.
If an application does not wish Readline to catch
SIGWINCH
, it may
call rl_resize_terminal()
or rl_set_screen_size()
to force
-Readline to update its idea of the terminal size when a SIGWINCH
-is received.
+Readline to update its idea of the terminal size when it receives
+a SIGWINCH
.
-
+
- Function: void rl_echo_signal_char (int sig)
- If an application wishes to install its own signal handlers, but still
@@ -4886,28 +4918,31 @@ function with sig set to
SIGINT
, SIGQUIT
, o
-
+
- Function: void rl_resize_terminal (void)
- Update Readline's internal screen size by reading values from the kernel.
-
+
- Function: void rl_set_screen_size (int rows, int cols)
- Set Readline's idea of the terminal size to rows rows and
cols columns. If either rows or columns is less than
or equal to 0, Readline's idea of that terminal dimension is unchanged.
+This is intended to tell Readline the physical dimensions of the terminal,
+and is used internally to calculate the maximum number of characters that
+may appear on a single line and on the screen.
If an application does not want to install a SIGWINCH
handler, but
-is still interested in the screen dimensions, Readline's idea of the screen
-size may be queried.
+is still interested in the screen dimensions, it may query Readline's idea
+of the screen size.
-
+
- Function: void rl_get_screen_size (int *rows, int *cols)
- Return Readline's idea of the terminal's size in the
@@ -4915,7 +4950,7 @@ variables pointed to by the arguments.
-
+
- Function: void rl_reset_screen_size (void)
- Cause Readline to reobtain the screen size and recalculate its dimensions.
@@ -4925,7 +4960,7 @@ variables pointed to by the arguments.
The following functions install and remove Readline's signal handlers.
-
+
- Function: int rl_set_signals (void)
- Install Readline's signal handler for
SIGINT
, SIGQUIT
,
@@ -4935,7 +4970,7 @@ The following functions install and remove Readline's signal handlers.
-
+
- Function: int rl_clear_signals (void)
- Remove all of the Readline signal handlers installed by
@@ -5048,7 +5083,7 @@ Such a generator function is referred to as an
-
+
- Function: int rl_complete (int ignore, int invoking_key)
- Complete the word at or before point. You have supplied the function
@@ -5057,7 +5092,7 @@ that does the initial simple matching selection algorithm (see
-
+
- Variable: rl_compentry_func_t * rl_completion_entry_function
- This is a pointer to the generator function for
@@ -5093,7 +5128,7 @@ Here is the complete list of callable completion functions present in
Readline.
-
+
- Function: int rl_complete_internal (int what_to_do)
- Complete the word at or before point. what_to_do says what to do
@@ -5107,7 +5142,7 @@ a common prefix.
-
+
- Function: int rl_complete (int ignore, int invoking_key)
- Complete the word at or before point. You have supplied the function
@@ -5119,7 +5154,7 @@ argument depending on invoking_key.
-
+
- Function: int rl_possible_completions (int count, int invoking_key)
- List the possible completions. See description of
rl_complete
@@ -5128,7 +5163,7 @@ argument depending on invoking_key.
-
+
- Function: int rl_insert_completions (int count, int invoking_key)
- Insert the list of possible completions into the line, deleting the
@@ -5137,7 +5172,7 @@ This calls
rl_complete_internal()
with an argument of `*'
-
+
- Function: int rl_completion_mode (rl_command_func_t *cfunc)
- Returns the appropriate value to pass to
rl_complete_internal()
@@ -5149,7 +5184,7 @@ the same interface as rl_complete()
.
-
+
- Function: char ** rl_completion_matches (const char *text, rl_compentry_func_t *entry_func)
- Returns an array of strings which is a list of completions for
@@ -5167,7 +5202,7 @@ when there are no more matches.
-
+
- Function: char * rl_filename_completion_function (const char *text, int state)
- A generator function for filename completion in the general case.
@@ -5178,7 +5213,7 @@ Readline functions).
-
+
- Function: char * rl_username_completion_function (const char *text, int state)
- A completion generator for usernames. text contains a partial
@@ -5206,7 +5241,7 @@ for subsequent calls.
-
+
- Variable: rl_compentry_func_t * rl_completion_entry_function
- A pointer to the generator function for
rl_completion_matches()
.
@@ -5215,7 +5250,7 @@ the default filename completer.
-
+
- Variable: rl_completion_func_t * rl_attempted_completion_function
- A pointer to an alternative function to create matches.
@@ -5232,7 +5267,7 @@ completion even if this function returns no matches.
-
+
- Variable: rl_quote_func_t * rl_filename_quoting_function
- A pointer to a function that will quote a filename in an
@@ -5249,7 +5284,7 @@ to reset this character.
-
+
- Variable: rl_dequote_func_t * rl_filename_dequoting_function
- A pointer to a function that will remove application-specific quoting
@@ -5262,7 +5297,7 @@ that delimits the filename (usually `'' or `"'). If
-
+
- Variable: rl_linebuf_func_t * rl_char_is_quoted_p
- A pointer to a function to call that determines whether or not a specific
@@ -5275,7 +5310,7 @@ used to break words for the completer.
-
+
- Variable: rl_compignore_func_t * rl_ignore_some_completions_function
- This function, if defined, is called by the completer when real filename
@@ -5288,7 +5323,7 @@ from the array must be freed.
-
+
- Variable: rl_icppfunc_t * rl_directory_completion_hook
- This function, if defined, is allowed to modify the directory portion
@@ -5311,7 +5346,7 @@ The function should not modify the directory argument if it returns 0.
-
+
- Variable: rl_icppfunc_t * rl_directory_rewrite_hook;
- If non-zero, this is the address of a function to call when completing
@@ -5326,12 +5361,12 @@ be passed directly to
opendir()
.
The directory rewrite hook returns an integer that should be non-zero if
-the function modfies its directory argument.
+the function modifies its directory argument.
The function should not modify the directory argument if it returns 0.
-
+
- Variable: rl_icppfunc_t * rl_filename_stat_hook
- If non-zero, this is the address of a function for the completer to
@@ -5342,12 +5377,12 @@ This function does not need to remove quote characters from the filename.
The stat hook returns an integer that should be non-zero if
-the function modfies its directory argument.
+the function modifies its directory argument.
The function should not modify the directory argument if it returns 0.
-
+
- Variable: rl_dequote_func_t * rl_filename_rewrite_hook
- If non-zero, this is the address of a function called when reading
@@ -5366,7 +5401,7 @@ allocated string.
-
+
- Variable: rl_compdisp_func_t * rl_completion_display_matches_hook
- If non-zero, then this is the address of a function to call when
@@ -5383,7 +5418,7 @@ You may call that function from this hook.
-
+
- Variable: const char * rl_basic_word_break_characters
- The basic list of characters that signal a break between words for the
@@ -5393,14 +5428,14 @@ which break words for completion in Bash:
-
+
- Variable: const char * rl_basic_quote_characters
- A list of quote characters which can cause a word break.
-
+
- Variable: const char * rl_completer_word_break_characters
- The list of characters that signal a break between words for
@@ -5409,7 +5444,7 @@ which break words for completion in Bash:
-
+
- Variable: rl_cpvfunc_t * rl_completion_word_break_hook
- If non-zero, this is the address of a function to call when Readline is
@@ -5421,7 +5456,7 @@ returns
NULL
, rl_completer_word_break_characters
is us
-
+
- Variable: const char * rl_completer_quote_characters
- A list of characters which can be used to quote a substring of the line.
@@ -5431,7 +5466,7 @@ unless they also appear within this list.
-
+
- Variable: const char * rl_filename_quote_characters
- A list of characters that cause a filename to be quoted by the completer
@@ -5439,7 +5474,7 @@ when they appear in a completed filename. The default is the null string.
-
+
- Variable: const char * rl_special_prefixes
- The list of characters that are word break characters, but should be
@@ -5450,7 +5485,7 @@ shell variables and hostnames.
-
+
- Variable: int rl_completion_query_items
- Up to this many items will be displayed in response to a
@@ -5460,7 +5495,7 @@ indicates that Readline should never ask the user.
-
+
- Variable: int rl_completion_append_character
- When a single completion alternative matches at the end of the command
@@ -5475,7 +5510,7 @@ is called, and may only be changed within such a function.
-
+
- Variable: int rl_completion_suppress_append
- If non-zero, rl_completion_append_character is not appended to
@@ -5485,7 +5520,7 @@ is called, and may only be changed within such a function.
-
+
- Variable: int rl_completion_quote_character
- When Readline is completing quoted text, as delimited by one of the
@@ -5495,7 +5530,7 @@ This is set before any application-specific completion function is called.
-
+
- Variable: int rl_completion_suppress_quote
- If non-zero, Readline does not append a matching quote character when
@@ -5505,7 +5540,7 @@ is called, and may only be changed within such a function.
-
+
- Variable: int rl_completion_found_quote
- When Readline is completing quoted text, it sets this variable
@@ -5515,7 +5550,7 @@ This is set before any application-specific completion function is called.
-
+
- Variable: int rl_completion_mark_symlink_dirs
- If non-zero, a slash will be appended to completed filenames that are
@@ -5530,7 +5565,7 @@ function modifies the value, the user's preferences are honored.
-
+
- Variable: int rl_ignore_completion_duplicates
- If non-zero, then duplicates in the matches are removed.
@@ -5538,7 +5573,7 @@ The default is 1.
-
+
- Variable: int rl_filename_completion_desired
- Non-zero means that the results of the matches are to be treated as
@@ -5552,7 +5587,7 @@ characters in
rl_filename_quote_characters
and
-
+
- Variable: int rl_filename_quoting_desired
- Non-zero means that the results of the matches are to be quoted using
@@ -5566,7 +5601,7 @@ by
rl_filename_quoting_function
.
-
+
- Variable: int rl_attempted_completion_over
- If an application-specific completion function assigned to
@@ -5577,7 +5612,7 @@ It should be set only by an application's completion function.
-
+
- Variable: int rl_sort_completion_matches
- If an application sets this variable to 0, Readline will not sort the
@@ -5589,7 +5624,7 @@ matches.
-
+
- Variable: int rl_completion_type
- Set to a character describing the type of completion Readline is currently
@@ -5601,7 +5636,7 @@ the same interface as
rl_complete()
.
-
+
- Variable: int rl_completion_invoking_key
- Set to the final character in the key sequence that invoked one of the
@@ -5611,7 +5646,7 @@ function is called.
-
+
- Variable: int rl_inhibit_completion
- If this variable is non-zero, completion is inhibited. The completion
@@ -6023,7 +6058,7 @@ com_help (arg)
if (!printed)
{
- printf ("No commands match `%s'. Possibilties are:\n", arg);
+ printf ("No commands match `%s'. Possibilities are:\n", arg);
for (i = 0; commands[i].name; i++)
{
@@ -6758,7 +6793,7 @@ to permit their use in free software.
| notation, readline | 1.2.1 Readline Bare Essentials |
|
R | | |
- | readline, function | 2.1 Basic Behavior |
+ | readline, function | 2.1 Basic Behavior |
|
V | | |
| variables, readline | 1.3.1 Readline Init File Syntax |
@@ -6850,455 +6885,461 @@ to permit their use in free software.
| Index Entry | Section |
|
_ | | |
- | _rl_digit_p | 2.4.10 Utility Functions |
- | _rl_digit_value | 2.4.10 Utility Functions |
- | _rl_lowercase_p | 2.4.10 Utility Functions |
- | _rl_to_lower | 2.4.10 Utility Functions |
- | _rl_to_upper | 2.4.10 Utility Functions |
- | _rl_uppercase_p | 2.4.10 Utility Functions |
+ | _rl_digit_p | 2.4.10 Utility Functions |
+ | _rl_digit_value | 2.4.10 Utility Functions |
+ | _rl_lowercase_p | 2.4.10 Utility Functions |
+ | _rl_to_lower | 2.4.10 Utility Functions |
+ | _rl_to_upper | 2.4.10 Utility Functions |
+ | _rl_uppercase_p | 2.4.10 Utility Functions |
|
A | | |
- | abort (C-g) | 1.4.8 Some Miscellaneous Commands |
- | abort (C-g) | 1.4.8 Some Miscellaneous Commands |
- | accept-line (Newline or Return) | 1.4.2 Commands For Manipulating The History |
- | accept-line (Newline or Return) | 1.4.2 Commands For Manipulating The History |
+ | abort (C-g) | 1.4.8 Some Miscellaneous Commands |
+ | abort (C-g) | 1.4.8 Some Miscellaneous Commands |
+ | accept-line (Newline or Return) | 1.4.2 Commands For Manipulating The History |
+ | accept-line (Newline or Return) | 1.4.2 Commands For Manipulating The History |
|
B | | |
| backward-char (C-b) | 1.4.1 Commands For Moving |
| backward-char (C-b) | 1.4.1 Commands For Moving |
- | backward-delete-char (Rubout) | 1.4.3 Commands For Changing Text |
- | backward-delete-char (Rubout) | 1.4.3 Commands For Changing Text |
- | backward-kill-line (C-x Rubout) | 1.4.4 Killing And Yanking |
- | backward-kill-line (C-x Rubout) | 1.4.4 Killing And Yanking |
- | backward-kill-word (M-DEL) | 1.4.4 Killing And Yanking |
- | backward-kill-word (M-DEL) | 1.4.4 Killing And Yanking |
+ | backward-delete-char (Rubout) | 1.4.3 Commands For Changing Text |
+ | backward-delete-char (Rubout) | 1.4.3 Commands For Changing Text |
+ | backward-kill-line (C-x Rubout) | 1.4.4 Killing And Yanking |
+ | backward-kill-line (C-x Rubout) | 1.4.4 Killing And Yanking |
+ | backward-kill-word (M-DEL) | 1.4.4 Killing And Yanking |
+ | backward-kill-word (M-DEL) | 1.4.4 Killing And Yanking |
| backward-word (M-b) | 1.4.1 Commands For Moving |
| backward-word (M-b) | 1.4.1 Commands For Moving |
- | beginning-of-history (M-<) | 1.4.2 Commands For Manipulating The History |
- | beginning-of-history (M-<) | 1.4.2 Commands For Manipulating The History |
+ | beginning-of-history (M-<) | 1.4.2 Commands For Manipulating The History |
+ | beginning-of-history (M-<) | 1.4.2 Commands For Manipulating The History |
| beginning-of-line (C-a) | 1.4.1 Commands For Moving |
| beginning-of-line (C-a) | 1.4.1 Commands For Moving |
| bell-style | 1.3.1 Readline Init File Syntax |
| bind-tty-special-chars | 1.3.1 Readline Init File Syntax |
| blink-matching-paren | 1.3.1 Readline Init File Syntax |
- | bracketed-paste-begin () | 1.4.3 Commands For Changing Text |
- | bracketed-paste-begin () | 1.4.3 Commands For Changing Text |
+ | bracketed-paste-begin () | 1.4.3 Commands For Changing Text |
+ | bracketed-paste-begin () | 1.4.3 Commands For Changing Text |
|
C | | |
- | call-last-kbd-macro (C-x e) | 1.4.7 Keyboard Macros |
- | call-last-kbd-macro (C-x e) | 1.4.7 Keyboard Macros |
- | capitalize-word (M-c) | 1.4.3 Commands For Changing Text |
- | capitalize-word (M-c) | 1.4.3 Commands For Changing Text |
- | character-search (C-]) | 1.4.8 Some Miscellaneous Commands |
- | character-search (C-]) | 1.4.8 Some Miscellaneous Commands |
- | character-search-backward (M-C-]) | 1.4.8 Some Miscellaneous Commands |
- | character-search-backward (M-C-]) | 1.4.8 Some Miscellaneous Commands |
- | clear-screen (C-l) | 1.4.1 Commands For Moving |
- | clear-screen (C-l) | 1.4.1 Commands For Moving |
+ | call-last-kbd-macro (C-x e) | 1.4.7 Keyboard Macros |
+ | call-last-kbd-macro (C-x e) | 1.4.7 Keyboard Macros |
+ | capitalize-word (M-c) | 1.4.3 Commands For Changing Text |
+ | capitalize-word (M-c) | 1.4.3 Commands For Changing Text |
+ | character-search (C-]) | 1.4.8 Some Miscellaneous Commands |
+ | character-search (C-]) | 1.4.8 Some Miscellaneous Commands |
+ | character-search-backward (M-C-]) | 1.4.8 Some Miscellaneous Commands |
+ | character-search-backward (M-C-]) | 1.4.8 Some Miscellaneous Commands |
+ | clear-display (M-C-l) | 1.4.1 Commands For Moving |
+ | clear-display (M-C-l) | 1.4.1 Commands For Moving |
+ | clear-screen (C-l) | 1.4.1 Commands For Moving |
+ | clear-screen (C-l) | 1.4.1 Commands For Moving |
| colored-completion-prefix | 1.3.1 Readline Init File Syntax |
| colored-stats | 1.3.1 Readline Init File Syntax |
| comment-begin | 1.3.1 Readline Init File Syntax |
- | complete (TAB) | 1.4.6 Letting Readline Type For You |
- | complete (TAB) | 1.4.6 Letting Readline Type For You |
+ | complete (TAB) | 1.4.6 Letting Readline Type For You |
+ | complete (TAB) | 1.4.6 Letting Readline Type For You |
| completion-display-width | 1.3.1 Readline Init File Syntax |
| completion-ignore-case | 1.3.1 Readline Init File Syntax |
| completion-map-case | 1.3.1 Readline Init File Syntax |
| completion-prefix-display-length | 1.3.1 Readline Init File Syntax |
| completion-query-items | 1.3.1 Readline Init File Syntax |
| convert-meta | 1.3.1 Readline Init File Syntax |
- | copy-backward-word () | 1.4.4 Killing And Yanking |
- | copy-backward-word () | 1.4.4 Killing And Yanking |
- | copy-forward-word () | 1.4.4 Killing And Yanking |
- | copy-forward-word () | 1.4.4 Killing And Yanking |
- | copy-region-as-kill () | 1.4.4 Killing And Yanking |
- | copy-region-as-kill () | 1.4.4 Killing And Yanking |
+ | copy-backward-word () | 1.4.4 Killing And Yanking |
+ | copy-backward-word () | 1.4.4 Killing And Yanking |
+ | copy-forward-word () | 1.4.4 Killing And Yanking |
+ | copy-forward-word () | 1.4.4 Killing And Yanking |
+ | copy-region-as-kill () | 1.4.4 Killing And Yanking |
+ | copy-region-as-kill () | 1.4.4 Killing And Yanking |
|
D | | |
- | delete-char (C-d) | 1.4.3 Commands For Changing Text |
- | delete-char (C-d) | 1.4.3 Commands For Changing Text |
- | delete-char-or-list () | 1.4.6 Letting Readline Type For You |
- | delete-char-or-list () | 1.4.6 Letting Readline Type For You |
- | delete-horizontal-space () | 1.4.4 Killing And Yanking |
- | delete-horizontal-space () | 1.4.4 Killing And Yanking |
- | digit-argument (M-0, M-1, <small>...</small> M--) | 1.4.5 Specifying Numeric Arguments |
- | digit-argument (M-0, M-1, <small>...</small> M--) | 1.4.5 Specifying Numeric Arguments |
+ | delete-char (C-d) | 1.4.3 Commands For Changing Text |
+ | delete-char (C-d) | 1.4.3 Commands For Changing Text |
+ | delete-char-or-list () | 1.4.6 Letting Readline Type For You |
+ | delete-char-or-list () | 1.4.6 Letting Readline Type For You |
+ | delete-horizontal-space () | 1.4.4 Killing And Yanking |
+ | delete-horizontal-space () | 1.4.4 Killing And Yanking |
+ | digit-argument (M-0, M-1, <small>...</small> M--) | 1.4.5 Specifying Numeric Arguments |
+ | digit-argument (M-0, M-1, <small>...</small> M--) | 1.4.5 Specifying Numeric Arguments |
| disable-completion | 1.3.1 Readline Init File Syntax |
- | do-lowercase-version (M-A, M-B, M-x, <small>...</small>) | 1.4.8 Some Miscellaneous Commands |
- | do-lowercase-version (M-A, M-B, M-x, <small>...</small>) | 1.4.8 Some Miscellaneous Commands |
- | downcase-word (M-l) | 1.4.3 Commands For Changing Text |
- | downcase-word (M-l) | 1.4.3 Commands For Changing Text |
- | dump-functions () | 1.4.8 Some Miscellaneous Commands |
- | dump-functions () | 1.4.8 Some Miscellaneous Commands |
- | dump-macros () | 1.4.8 Some Miscellaneous Commands |
- | dump-macros () | 1.4.8 Some Miscellaneous Commands |
- | dump-variables () | 1.4.8 Some Miscellaneous Commands |
- | dump-variables () | 1.4.8 Some Miscellaneous Commands |
+ | do-lowercase-version (M-A, M-B, M-x, <small>...</small>) | 1.4.8 Some Miscellaneous Commands |
+ | do-lowercase-version (M-A, M-B, M-x, <small>...</small>) | 1.4.8 Some Miscellaneous Commands |
+ | downcase-word (M-l) | 1.4.3 Commands For Changing Text |
+ | downcase-word (M-l) | 1.4.3 Commands For Changing Text |
+ | dump-functions () | 1.4.8 Some Miscellaneous Commands |
+ | dump-functions () | 1.4.8 Some Miscellaneous Commands |
+ | dump-macros () | 1.4.8 Some Miscellaneous Commands |
+ | dump-macros () | 1.4.8 Some Miscellaneous Commands |
+ | dump-variables () | 1.4.8 Some Miscellaneous Commands |
+ | dump-variables () | 1.4.8 Some Miscellaneous Commands |
|
E | | |
| echo-control-characters | 1.3.1 Readline Init File Syntax |
| editing-mode | 1.3.1 Readline Init File Syntax |
- | emacs-editing-mode (C-e) | 1.4.8 Some Miscellaneous Commands |
- | emacs-editing-mode (C-e) | 1.4.8 Some Miscellaneous Commands |
+ | emacs-editing-mode (C-e) | 1.4.8 Some Miscellaneous Commands |
+ | emacs-editing-mode (C-e) | 1.4.8 Some Miscellaneous Commands |
| emacs-mode-string | 1.3.1 Readline Init File Syntax |
| enable-bracketed-paste | 1.3.1 Readline Init File Syntax |
| enable-keypad | 1.3.1 Readline Init File Syntax |
- | end-kbd-macro (C-x )) | 1.4.7 Keyboard Macros |
- | end-kbd-macro (C-x )) | 1.4.7 Keyboard Macros |
- | end-of-file (usually C-d) | 1.4.3 Commands For Changing Text |
- | end-of-file (usually C-d) | 1.4.3 Commands For Changing Text |
- | end-of-history (M->) | 1.4.2 Commands For Manipulating The History |
- | end-of-history (M->) | 1.4.2 Commands For Manipulating The History |
+ | end-kbd-macro (C-x )) | 1.4.7 Keyboard Macros |
+ | end-kbd-macro (C-x )) | 1.4.7 Keyboard Macros |
+ | end-of-file (usually C-d) | 1.4.3 Commands For Changing Text |
+ | end-of-file (usually C-d) | 1.4.3 Commands For Changing Text |
+ | end-of-history (M->) | 1.4.2 Commands For Manipulating The History |
+ | end-of-history (M->) | 1.4.2 Commands For Manipulating The History |
| end-of-line (C-e) | 1.4.1 Commands For Moving |
| end-of-line (C-e) | 1.4.1 Commands For Moving |
- | exchange-point-and-mark (C-x C-x) | 1.4.8 Some Miscellaneous Commands |
- | exchange-point-and-mark (C-x C-x) | 1.4.8 Some Miscellaneous Commands |
+ | exchange-point-and-mark (C-x C-x) | 1.4.8 Some Miscellaneous Commands |
+ | exchange-point-and-mark (C-x C-x) | 1.4.8 Some Miscellaneous Commands |
| expand-tilde | 1.3.1 Readline Init File Syntax |
|
F | | |
- | forward-backward-delete-char () | 1.4.3 Commands For Changing Text |
- | forward-backward-delete-char () | 1.4.3 Commands For Changing Text |
+ | forward-backward-delete-char () | 1.4.3 Commands For Changing Text |
+ | forward-backward-delete-char () | 1.4.3 Commands For Changing Text |
| forward-char (C-f) | 1.4.1 Commands For Moving |
| forward-char (C-f) | 1.4.1 Commands For Moving |
- | forward-search-history (C-s) | 1.4.2 Commands For Manipulating The History |
- | forward-search-history (C-s) | 1.4.2 Commands For Manipulating The History |
+ | forward-search-history (C-s) | 1.4.2 Commands For Manipulating The History |
+ | forward-search-history (C-s) | 1.4.2 Commands For Manipulating The History |
| forward-word (M-f) | 1.4.1 Commands For Moving |
| forward-word (M-f) | 1.4.1 Commands For Moving |
|
H | | |
| history-preserve-point | 1.3.1 Readline Init File Syntax |
- | history-search-backward () | 1.4.2 Commands For Manipulating The History |
- | history-search-backward () | 1.4.2 Commands For Manipulating The History |
- | history-search-forward () | 1.4.2 Commands For Manipulating The History |
- | history-search-forward () | 1.4.2 Commands For Manipulating The History |
+ | history-search-backward () | 1.4.2 Commands For Manipulating The History |
+ | history-search-backward () | 1.4.2 Commands For Manipulating The History |
+ | history-search-forward () | 1.4.2 Commands For Manipulating The History |
+ | history-search-forward () | 1.4.2 Commands For Manipulating The History |
| history-size | 1.3.1 Readline Init File Syntax |
- | history-substring-search-backward () | 1.4.2 Commands For Manipulating The History |
- | history-substring-search-backward () | 1.4.2 Commands For Manipulating The History |
- | history-substring-search-forward () | 1.4.2 Commands For Manipulating The History |
- | history-substring-search-forward () | 1.4.2 Commands For Manipulating The History |
+ | history-substring-search-backward () | 1.4.2 Commands For Manipulating The History |
+ | history-substring-search-backward () | 1.4.2 Commands For Manipulating The History |
+ | history-substring-search-forward () | 1.4.2 Commands For Manipulating The History |
+ | history-substring-search-forward () | 1.4.2 Commands For Manipulating The History |
| horizontal-scroll-mode | 1.3.1 Readline Init File Syntax |
|
I | | |
| input-meta | 1.3.1 Readline Init File Syntax |
- | insert-comment (M-#) | 1.4.8 Some Miscellaneous Commands |
- | insert-comment (M-#) | 1.4.8 Some Miscellaneous Commands |
- | insert-completions (M-*) | 1.4.6 Letting Readline Type For You |
- | insert-completions (M-*) | 1.4.6 Letting Readline Type For You |
+ | insert-comment (M-#) | 1.4.8 Some Miscellaneous Commands |
+ | insert-comment (M-#) | 1.4.8 Some Miscellaneous Commands |
+ | insert-completions (M-*) | 1.4.6 Letting Readline Type For You |
+ | insert-completions (M-*) | 1.4.6 Letting Readline Type For You |
| isearch-terminators | 1.3.1 Readline Init File Syntax |
|
K | | |
| keymap | 1.3.1 Readline Init File Syntax |
- | kill-line (C-k) | 1.4.4 Killing And Yanking |
- | kill-line (C-k) | 1.4.4 Killing And Yanking |
- | kill-region () | 1.4.4 Killing And Yanking |
- | kill-region () | 1.4.4 Killing And Yanking |
- | kill-whole-line () | 1.4.4 Killing And Yanking |
- | kill-whole-line () | 1.4.4 Killing And Yanking |
- | kill-word (M-d) | 1.4.4 Killing And Yanking |
- | kill-word (M-d) | 1.4.4 Killing And Yanking |
+ | kill-line (C-k) | 1.4.4 Killing And Yanking |
+ | kill-line (C-k) | 1.4.4 Killing And Yanking |
+ | kill-region () | 1.4.4 Killing And Yanking |
+ | kill-region () | 1.4.4 Killing And Yanking |
+ | kill-whole-line () | 1.4.4 Killing And Yanking |
+ | kill-whole-line () | 1.4.4 Killing And Yanking |
+ | kill-word (M-d) | 1.4.4 Killing And Yanking |
+ | kill-word (M-d) | 1.4.4 Killing And Yanking |
|
M | | |
| mark-modified-lines | 1.3.1 Readline Init File Syntax |
| mark-symlinked-directories | 1.3.1 Readline Init File Syntax |
| match-hidden-files | 1.3.1 Readline Init File Syntax |
- | menu-complete () | 1.4.6 Letting Readline Type For You |
- | menu-complete () | 1.4.6 Letting Readline Type For You |
- | menu-complete-backward () | 1.4.6 Letting Readline Type For You |
- | menu-complete-backward () | 1.4.6 Letting Readline Type For You |
+ | menu-complete () | 1.4.6 Letting Readline Type For You |
+ | menu-complete () | 1.4.6 Letting Readline Type For You |
+ | menu-complete-backward () | 1.4.6 Letting Readline Type For You |
+ | menu-complete-backward () | 1.4.6 Letting Readline Type For You |
| menu-complete-display-prefix | 1.3.1 Readline Init File Syntax |
| meta-flag | 1.3.1 Readline Init File Syntax |
|
N | | |
- | next-history (C-n) | 1.4.2 Commands For Manipulating The History |
- | next-history (C-n) | 1.4.2 Commands For Manipulating The History |
+ | next-history (C-n) | 1.4.2 Commands For Manipulating The History |
+ | next-history (C-n) | 1.4.2 Commands For Manipulating The History |
| next-screen-line () | 1.4.1 Commands For Moving |
| next-screen-line () | 1.4.1 Commands For Moving |
- | non-incremental-forward-search-history (M-n) | 1.4.2 Commands For Manipulating The History |
- | non-incremental-forward-search-history (M-n) | 1.4.2 Commands For Manipulating The History |
- | non-incremental-reverse-search-history (M-p) | 1.4.2 Commands For Manipulating The History |
- | non-incremental-reverse-search-history (M-p) | 1.4.2 Commands For Manipulating The History |
+ | non-incremental-forward-search-history (M-n) | 1.4.2 Commands For Manipulating The History |
+ | non-incremental-forward-search-history (M-n) | 1.4.2 Commands For Manipulating The History |
+ | non-incremental-reverse-search-history (M-p) | 1.4.2 Commands For Manipulating The History |
+ | non-incremental-reverse-search-history (M-p) | 1.4.2 Commands For Manipulating The History |
|
O | | |
+ | operate-and-get-next (C-o) | 1.4.2 Commands For Manipulating The History |
+ | operate-and-get-next (C-o) | 1.4.2 Commands For Manipulating The History |
| output-meta | 1.3.1 Readline Init File Syntax |
- | overwrite-mode () | 1.4.3 Commands For Changing Text |
- | overwrite-mode () | 1.4.3 Commands For Changing Text |
+ | overwrite-mode () | 1.4.3 Commands For Changing Text |
+ | overwrite-mode () | 1.4.3 Commands For Changing Text |
|
P | | |
| page-completions | 1.3.1 Readline Init File Syntax |
- | possible-completions (M-?) | 1.4.6 Letting Readline Type For You |
- | possible-completions (M-?) | 1.4.6 Letting Readline Type For You |
- | prefix-meta (ESC) | 1.4.8 Some Miscellaneous Commands |
- | prefix-meta (ESC) | 1.4.8 Some Miscellaneous Commands |
- | previous-history (C-p) | 1.4.2 Commands For Manipulating The History |
- | previous-history (C-p) | 1.4.2 Commands For Manipulating The History |
+ | possible-completions (M-?) | 1.4.6 Letting Readline Type For You |
+ | possible-completions (M-?) | 1.4.6 Letting Readline Type For You |
+ | prefix-meta (ESC) | 1.4.8 Some Miscellaneous Commands |
+ | prefix-meta (ESC) | 1.4.8 Some Miscellaneous Commands |
+ | previous-history (C-p) | 1.4.2 Commands For Manipulating The History |
+ | previous-history (C-p) | 1.4.2 Commands For Manipulating The History |
| previous-screen-line () | 1.4.1 Commands For Moving |
| previous-screen-line () | 1.4.1 Commands For Moving |
- | print-last-kbd-macro () | 1.4.7 Keyboard Macros |
- | print-last-kbd-macro () | 1.4.7 Keyboard Macros |
+ | print-last-kbd-macro () | 1.4.7 Keyboard Macros |
+ | print-last-kbd-macro () | 1.4.7 Keyboard Macros |
|
Q | | |
- | quoted-insert (C-q or C-v) | 1.4.3 Commands For Changing Text |
- | quoted-insert (C-q or C-v) | 1.4.3 Commands For Changing Text |
+ | quoted-insert (C-q or C-v) | 1.4.3 Commands For Changing Text |
+ | quoted-insert (C-q or C-v) | 1.4.3 Commands For Changing Text |
|
R | | |
- | re-read-init-file (C-x C-r) | 1.4.8 Some Miscellaneous Commands |
- | re-read-init-file (C-x C-r) | 1.4.8 Some Miscellaneous Commands |
- | readline | 2.1 Basic Behavior |
- | redraw-current-line () | 1.4.1 Commands For Moving |
- | redraw-current-line () | 1.4.1 Commands For Moving |
- | reverse-search-history (C-r) | 1.4.2 Commands For Manipulating The History |
- | reverse-search-history (C-r) | 1.4.2 Commands For Manipulating The History |
+ | re-read-init-file (C-x C-r) | 1.4.8 Some Miscellaneous Commands |
+ | re-read-init-file (C-x C-r) | 1.4.8 Some Miscellaneous Commands |
+ | readline | 2.1 Basic Behavior |
+ | redraw-current-line () | 1.4.1 Commands For Moving |
+ | redraw-current-line () | 1.4.1 Commands For Moving |
+ | reverse-search-history (C-r) | 1.4.2 Commands For Manipulating The History |
+ | reverse-search-history (C-r) | 1.4.2 Commands For Manipulating The History |
| revert-all-at-newline | 1.3.1 Readline Init File Syntax |
- | revert-line (M-r) | 1.4.8 Some Miscellaneous Commands |
- | revert-line (M-r) | 1.4.8 Some Miscellaneous Commands |
- | rl_add_defun | 2.4.1 Naming a Function |
- | rl_add_funmap_entry | 2.4.4 Associating Function Names and Bindings |
- | rl_add_undo | 2.4.5 Allowing Undoing |
- | rl_alphabetic | 2.4.10 Utility Functions |
- | rl_already_prompted | 2.3 Readline Variables |
- | rl_attempted_completion_function | 2.6.3 Completion Variables |
- | rl_attempted_completion_over | 2.6.3 Completion Variables |
- | rl_basic_quote_characters | 2.6.3 Completion Variables |
- | rl_basic_word_break_characters | 2.6.3 Completion Variables |
- | rl_begin_undo_group | 2.4.5 Allowing Undoing |
- | rl_bind_key | 2.4.3 Binding Keys |
- | rl_bind_key_if_unbound | 2.4.3 Binding Keys |
- | rl_bind_key_if_unbound_in_map | 2.4.3 Binding Keys |
- | rl_bind_key_in_map | 2.4.3 Binding Keys |
- | rl_bind_keyseq | 2.4.3 Binding Keys |
- | rl_bind_keyseq_if_unbound | 2.4.3 Binding Keys |
- | rl_bind_keyseq_if_unbound_in_map | 2.4.3 Binding Keys |
- | rl_bind_keyseq_in_map | 2.4.3 Binding Keys |
- | rl_binding_keymap | 2.3 Readline Variables |
- | rl_callback_handler_install | 2.4.12 Alternate Interface |
- | rl_callback_handler_remove | 2.4.12 Alternate Interface |
- | rl_callback_read_char | 2.4.12 Alternate Interface |
- | rl_callback_sigcleanup | 2.4.12 Alternate Interface |
- | rl_catch_signals | 2.5 Readline Signal Handling |
- | rl_catch_sigwinch | 2.5 Readline Signal Handling |
- | rl_change_environment | 2.5 Readline Signal Handling |
- | rl_char_is_quoted_p | 2.6.3 Completion Variables |
- | rl_check_signals | 2.5 Readline Signal Handling |
- | rl_cleanup_after_signal | 2.5 Readline Signal Handling |
- | rl_clear_history | 2.4.11 Miscellaneous Functions |
- | rl_clear_message | 2.4.6 Redisplay |
- | rl_clear_pending_input | 2.4.8 Character Input |
- | rl_clear_signals | 2.5 Readline Signal Handling |
- | rl_clear_visible_line | 2.4.6 Redisplay |
- | rl_complete | 2.6.1 How Completing Works |
- | rl_complete | 2.6.2 Completion Functions |
- | rl_complete_internal | 2.6.2 Completion Functions |
- | rl_completer_quote_characters | 2.6.3 Completion Variables |
- | rl_completer_word_break_characters | 2.6.3 Completion Variables |
- | rl_completion_append_character | 2.6.3 Completion Variables |
- | rl_completion_display_matches_hook | 2.6.3 Completion Variables |
- | rl_completion_entry_function | 2.6.1 How Completing Works |
- | rl_completion_entry_function | 2.6.3 Completion Variables |
- | rl_completion_found_quote | 2.6.3 Completion Variables |
- | rl_completion_invoking_key | 2.6.3 Completion Variables |
- | rl_completion_mark_symlink_dirs | 2.6.3 Completion Variables |
- | rl_completion_matches | 2.6.2 Completion Functions |
- | rl_completion_mode | 2.6.2 Completion Functions |
- | rl_completion_query_items | 2.6.3 Completion Variables |
- | rl_completion_quote_character | 2.6.3 Completion Variables |
- | rl_completion_suppress_append | 2.6.3 Completion Variables |
- | rl_completion_suppress_quote | 2.6.3 Completion Variables |
- | rl_completion_type | 2.6.3 Completion Variables |
- | rl_completion_word_break_hook | 2.6.3 Completion Variables |
- | rl_copy_keymap | 2.4.2 Selecting a Keymap |
- | rl_copy_text | 2.4.7 Modifying Text |
- | rl_crlf | 2.4.6 Redisplay |
- | rl_delete_text | 2.4.7 Modifying Text |
- | rl_deprep_term_function | 2.3 Readline Variables |
- | rl_deprep_terminal | 2.4.9 Terminal Management |
- | rl_ding | 2.4.10 Utility Functions |
- | rl_directory_completion_hook | 2.6.3 Completion Variables |
- | rl_directory_rewrite_hook; | 2.6.3 Completion Variables |
- | rl_discard_keymap | 2.4.2 Selecting a Keymap |
- | rl_dispatching | 2.3 Readline Variables |
- | rl_display_match_list | 2.4.10 Utility Functions |
- | rl_display_prompt | 2.3 Readline Variables |
- | rl_do_undo | 2.4.5 Allowing Undoing |
- | rl_done | 2.3 Readline Variables |
- | rl_echo_signal_char | 2.5 Readline Signal Handling |
- | rl_editing_mode | 2.3 Readline Variables |
- | rl_empty_keymap | 2.4.2 Selecting a Keymap |
- | rl_end | 2.3 Readline Variables |
- | rl_end_undo_group | 2.4.5 Allowing Undoing |
- | rl_erase_empty_line | 2.3 Readline Variables |
- | rl_event_hook | 2.3 Readline Variables |
- | rl_execute_next | 2.4.8 Character Input |
- | rl_executing_key | 2.3 Readline Variables |
- | rl_executing_keymap | 2.3 Readline Variables |
- | rl_executing_keyseq | 2.3 Readline Variables |
- | rl_executing_macro | 2.3 Readline Variables |
- | rl_expand_prompt | 2.4.6 Redisplay |
- | rl_explicit_arg | 2.3 Readline Variables |
- | rl_extend_line_buffer | 2.4.10 Utility Functions |
- | rl_filename_completion_desired | 2.6.3 Completion Variables |
- | rl_filename_completion_function | 2.6.2 Completion Functions |
- | rl_filename_dequoting_function | 2.6.3 Completion Variables |
- | rl_filename_quote_characters | 2.6.3 Completion Variables |
- | rl_filename_quoting_desired | 2.6.3 Completion Variables |
- | rl_filename_quoting_function | 2.6.3 Completion Variables |
- | rl_filename_rewrite_hook | 2.6.3 Completion Variables |
- | rl_filename_stat_hook | 2.6.3 Completion Variables |
- | rl_forced_update_display | 2.4.6 Redisplay |
- | rl_free | 2.4.10 Utility Functions |
- | rl_free_keymap | 2.4.2 Selecting a Keymap |
- | rl_free_line_state | 2.5 Readline Signal Handling |
- | rl_free_undo_list | 2.4.5 Allowing Undoing |
- | rl_function_dumper | 2.4.4 Associating Function Names and Bindings |
- | rl_function_of_keyseq | 2.4.4 Associating Function Names and Bindings |
- | rl_function_of_keyseq_len | 2.4.4 Associating Function Names and Bindings |
- | rl_funmap_names | 2.4.4 Associating Function Names and Bindings |
- | rl_generic_bind | 2.4.3 Binding Keys |
- | rl_get_keymap | 2.4.2 Selecting a Keymap |
- | rl_get_keymap_by_name | 2.4.2 Selecting a Keymap |
- | rl_get_keymap_name | 2.4.2 Selecting a Keymap |
- | rl_get_screen_size | 2.5 Readline Signal Handling |
- | rl_get_termcap | 2.4.11 Miscellaneous Functions |
- | rl_getc | 2.4.8 Character Input |
- | rl_getc_function | 2.3 Readline Variables |
- | rl_gnu_readline_p | 2.3 Readline Variables |
- | rl_ignore_completion_duplicates | 2.6.3 Completion Variables |
- | rl_ignore_some_completions_function | 2.6.3 Completion Variables |
- | rl_inhibit_completion | 2.6.3 Completion Variables |
- | rl_initialize | 2.4.10 Utility Functions |
- | rl_input_available_hook | 2.3 Readline Variables |
- | rl_insert_completions | 2.6.2 Completion Functions |
- | rl_insert_text | 2.4.7 Modifying Text |
- | rl_instream | 2.3 Readline Variables |
- | rl_invoking_keyseqs | 2.4.4 Associating Function Names and Bindings |
- | rl_invoking_keyseqs_in_map | 2.4.4 Associating Function Names and Bindings |
- | rl_key_sequence_length | 2.3 Readline Variables |
- | rl_kill_text | 2.4.7 Modifying Text |
- | rl_last_func | 2.3 Readline Variables |
- | rl_library_version | 2.3 Readline Variables |
- | rl_line_buffer | 2.3 Readline Variables |
- | rl_list_funmap_names | 2.4.4 Associating Function Names and Bindings |
- | rl_macro_bind | 2.4.11 Miscellaneous Functions |
- | rl_macro_dumper | 2.4.11 Miscellaneous Functions |
- | rl_make_bare_keymap | 2.4.2 Selecting a Keymap |
- | rl_make_keymap | 2.4.2 Selecting a Keymap |
- | rl_mark | 2.3 Readline Variables |
- | rl_message | 2.4.6 Redisplay |
- | rl_modifying | 2.4.5 Allowing Undoing |
- | rl_named_function | 2.4.4 Associating Function Names and Bindings |
- | rl_num_chars_to_read | 2.3 Readline Variables |
- | rl_numeric_arg | 2.3 Readline Variables |
- | rl_on_new_line | 2.4.6 Redisplay |
- | rl_on_new_line_with_prompt | 2.4.6 Redisplay |
- | rl_outstream | 2.3 Readline Variables |
- | rl_parse_and_bind | 2.4.3 Binding Keys |
- | rl_pending_input | 2.3 Readline Variables |
- | rl_pending_signal | 2.5 Readline Signal Handling |
- | rl_persistent_signal_handlers | 2.5 Readline Signal Handling |
- | rl_point | 2.3 Readline Variables |
- | rl_possible_completions | 2.6.2 Completion Functions |
- | rl_pre_input_hook | 2.3 Readline Variables |
- | rl_prefer_env_winsize | 2.3 Readline Variables |
- | rl_prep_term_function | 2.3 Readline Variables |
- | rl_prep_terminal | 2.4.9 Terminal Management |
- | rl_prompt | 2.3 Readline Variables |
- | rl_push_macro_input | 2.4.7 Modifying Text |
- | rl_read_init_file | 2.4.3 Binding Keys |
- | rl_read_key | 2.4.8 Character Input |
- | rl_readline_name | 2.3 Readline Variables |
- | rl_readline_state | 2.3 Readline Variables |
- | rl_readline_version | 2.3 Readline Variables |
- | rl_redisplay | 2.4.6 Redisplay |
- | rl_redisplay_function | 2.3 Readline Variables |
- | rl_replace_line | 2.4.10 Utility Functions |
- | rl_reset_after_signal | 2.5 Readline Signal Handling |
- | rl_reset_line_state | 2.4.6 Redisplay |
- | rl_reset_screen_size | 2.5 Readline Signal Handling |
- | rl_reset_terminal | 2.4.9 Terminal Management |
- | rl_resize_terminal | 2.5 Readline Signal Handling |
- | rl_restore_prompt | 2.4.6 Redisplay |
- | rl_restore_state | 2.4.10 Utility Functions |
- | rl_save_prompt | 2.4.6 Redisplay |
- | rl_save_state | 2.4.10 Utility Functions |
- | rl_set_key | 2.4.3 Binding Keys |
- | rl_set_keyboard_input_timeout | 2.4.8 Character Input |
- | rl_set_keymap | 2.4.2 Selecting a Keymap |
- | rl_set_keymap_name | 2.4.2 Selecting a Keymap |
- | rl_set_paren_blink_timeout | 2.4.11 Miscellaneous Functions |
- | rl_set_prompt | 2.4.6 Redisplay |
- | rl_set_screen_size | 2.5 Readline Signal Handling |
- | rl_set_signals | 2.5 Readline Signal Handling |
- | rl_show_char | 2.4.6 Redisplay |
- | rl_signal_event_hook | 2.3 Readline Variables |
- | rl_sort_completion_matches | 2.6.3 Completion Variables |
- | rl_special_prefixes | 2.6.3 Completion Variables |
- | rl_startup_hook | 2.3 Readline Variables |
- | rl_stuff_char | 2.4.8 Character Input |
- | rl_terminal_name | 2.3 Readline Variables |
- | rl_tty_set_default_bindings | 2.4.9 Terminal Management |
- | rl_tty_set_echoing | 2.4.9 Terminal Management |
- | rl_tty_unset_default_bindings | 2.4.9 Terminal Management |
- | rl_unbind_command_in_map | 2.4.3 Binding Keys |
- | rl_unbind_function_in_map | 2.4.3 Binding Keys |
- | rl_unbind_key | 2.4.3 Binding Keys |
- | rl_unbind_key_in_map | 2.4.3 Binding Keys |
- | rl_username_completion_function | 2.6.2 Completion Functions |
- | rl_variable_bind | 2.4.11 Miscellaneous Functions |
- | rl_variable_dumper | 2.4.11 Miscellaneous Functions |
- | rl_variable_value | 2.4.11 Miscellaneous Functions |
+ | revert-line (M-r) | 1.4.8 Some Miscellaneous Commands |
+ | revert-line (M-r) | 1.4.8 Some Miscellaneous Commands |
+ | rl_add_defun | 2.4.1 Naming a Function |
+ | rl_add_funmap_entry | 2.4.4 Associating Function Names and Bindings |
+ | rl_add_undo | 2.4.5 Allowing Undoing |
+ | rl_alphabetic | 2.4.10 Utility Functions |
+ | rl_already_prompted | 2.3 Readline Variables |
+ | rl_attempted_completion_function | 2.6.3 Completion Variables |
+ | rl_attempted_completion_over | 2.6.3 Completion Variables |
+ | rl_basic_quote_characters | 2.6.3 Completion Variables |
+ | rl_basic_word_break_characters | 2.6.3 Completion Variables |
+ | rl_begin_undo_group | 2.4.5 Allowing Undoing |
+ | rl_bind_key | 2.4.3 Binding Keys |
+ | rl_bind_key_if_unbound | 2.4.3 Binding Keys |
+ | rl_bind_key_if_unbound_in_map | 2.4.3 Binding Keys |
+ | rl_bind_key_in_map | 2.4.3 Binding Keys |
+ | rl_bind_keyseq | 2.4.3 Binding Keys |
+ | rl_bind_keyseq_if_unbound | 2.4.3 Binding Keys |
+ | rl_bind_keyseq_if_unbound_in_map | 2.4.3 Binding Keys |
+ | rl_bind_keyseq_in_map | 2.4.3 Binding Keys |
+ | rl_binding_keymap | 2.3 Readline Variables |
+ | rl_callback_handler_install | 2.4.12 Alternate Interface |
+ | rl_callback_handler_remove | 2.4.12 Alternate Interface |
+ | rl_callback_read_char | 2.4.12 Alternate Interface |
+ | rl_callback_sigcleanup | 2.4.12 Alternate Interface |
+ | rl_catch_signals | 2.5 Readline Signal Handling |
+ | rl_catch_sigwinch | 2.5 Readline Signal Handling |
+ | rl_change_environment | 2.5 Readline Signal Handling |
+ | rl_char_is_quoted_p | 2.6.3 Completion Variables |
+ | rl_check_signals | 2.5 Readline Signal Handling |
+ | rl_cleanup_after_signal | 2.5 Readline Signal Handling |
+ | rl_clear_history | 2.4.11 Miscellaneous Functions |
+ | rl_clear_message | 2.4.6 Redisplay |
+ | rl_clear_pending_input | 2.4.8 Character Input |
+ | rl_clear_signals | 2.5 Readline Signal Handling |
+ | rl_clear_visible_line | 2.4.6 Redisplay |
+ | rl_complete | 2.6.1 How Completing Works |
+ | rl_complete | 2.6.2 Completion Functions |
+ | rl_complete_internal | 2.6.2 Completion Functions |
+ | rl_completer_quote_characters | 2.6.3 Completion Variables |
+ | rl_completer_word_break_characters | 2.6.3 Completion Variables |
+ | rl_completion_append_character | 2.6.3 Completion Variables |
+ | rl_completion_display_matches_hook | 2.6.3 Completion Variables |
+ | rl_completion_entry_function | 2.6.1 How Completing Works |
+ | rl_completion_entry_function | 2.6.3 Completion Variables |
+ | rl_completion_found_quote | 2.6.3 Completion Variables |
+ | rl_completion_invoking_key | 2.6.3 Completion Variables |
+ | rl_completion_mark_symlink_dirs | 2.6.3 Completion Variables |
+ | rl_completion_matches | 2.6.2 Completion Functions |
+ | rl_completion_mode | 2.6.2 Completion Functions |
+ | rl_completion_query_items | 2.6.3 Completion Variables |
+ | rl_completion_quote_character | 2.6.3 Completion Variables |
+ | rl_completion_suppress_append | 2.6.3 Completion Variables |
+ | rl_completion_suppress_quote | 2.6.3 Completion Variables |
+ | rl_completion_type | 2.6.3 Completion Variables |
+ | rl_completion_word_break_hook | 2.6.3 Completion Variables |
+ | rl_copy_keymap | 2.4.2 Selecting a Keymap |
+ | rl_copy_text | 2.4.7 Modifying Text |
+ | rl_crlf | 2.4.6 Redisplay |
+ | rl_delete_text | 2.4.7 Modifying Text |
+ | rl_deprep_term_function | 2.3 Readline Variables |
+ | rl_deprep_terminal | 2.4.9 Terminal Management |
+ | rl_ding | 2.4.10 Utility Functions |
+ | rl_directory_completion_hook | 2.6.3 Completion Variables |
+ | rl_directory_rewrite_hook; | 2.6.3 Completion Variables |
+ | rl_discard_keymap | 2.4.2 Selecting a Keymap |
+ | rl_dispatching | 2.3 Readline Variables |
+ | rl_display_match_list | 2.4.10 Utility Functions |
+ | rl_display_prompt | 2.3 Readline Variables |
+ | rl_do_undo | 2.4.5 Allowing Undoing |
+ | rl_done | 2.3 Readline Variables |
+ | rl_echo_signal_char | 2.5 Readline Signal Handling |
+ | rl_editing_mode | 2.3 Readline Variables |
+ | rl_empty_keymap | 2.4.2 Selecting a Keymap |
+ | rl_end | 2.3 Readline Variables |
+ | rl_end_undo_group | 2.4.5 Allowing Undoing |
+ | rl_erase_empty_line | 2.3 Readline Variables |
+ | rl_event_hook | 2.3 Readline Variables |
+ | rl_execute_next | 2.4.8 Character Input |
+ | rl_executing_key | 2.3 Readline Variables |
+ | rl_executing_keymap | 2.3 Readline Variables |
+ | rl_executing_keyseq | 2.3 Readline Variables |
+ | rl_executing_macro | 2.3 Readline Variables |
+ | rl_expand_prompt | 2.4.6 Redisplay |
+ | rl_explicit_arg | 2.3 Readline Variables |
+ | rl_extend_line_buffer | 2.4.10 Utility Functions |
+ | rl_filename_completion_desired | 2.6.3 Completion Variables |
+ | rl_filename_completion_function | 2.6.2 Completion Functions |
+ | rl_filename_dequoting_function | 2.6.3 Completion Variables |
+ | rl_filename_quote_characters | 2.6.3 Completion Variables |
+ | rl_filename_quoting_desired | 2.6.3 Completion Variables |
+ | rl_filename_quoting_function | 2.6.3 Completion Variables |
+ | rl_filename_rewrite_hook | 2.6.3 Completion Variables |
+ | rl_filename_stat_hook | 2.6.3 Completion Variables |
+ | rl_forced_update_display | 2.4.6 Redisplay |
+ | rl_free | 2.4.10 Utility Functions |
+ | rl_free_keymap | 2.4.2 Selecting a Keymap |
+ | rl_free_line_state | 2.5 Readline Signal Handling |
+ | rl_free_undo_list | 2.4.5 Allowing Undoing |
+ | rl_function_dumper | 2.4.4 Associating Function Names and Bindings |
+ | rl_function_of_keyseq | 2.4.4 Associating Function Names and Bindings |
+ | rl_function_of_keyseq_len | 2.4.4 Associating Function Names and Bindings |
+ | rl_funmap_names | 2.4.4 Associating Function Names and Bindings |
+ | rl_generic_bind | 2.4.3 Binding Keys |
+ | rl_get_keymap | 2.4.2 Selecting a Keymap |
+ | rl_get_keymap_by_name | 2.4.2 Selecting a Keymap |
+ | rl_get_keymap_name | 2.4.2 Selecting a Keymap |
+ | rl_get_screen_size | 2.5 Readline Signal Handling |
+ | rl_get_termcap | 2.4.11 Miscellaneous Functions |
+ | rl_getc | 2.4.8 Character Input |
+ | rl_getc_function | 2.3 Readline Variables |
+ | rl_gnu_readline_p | 2.3 Readline Variables |
+ | rl_ignore_completion_duplicates | 2.6.3 Completion Variables |
+ | rl_ignore_some_completions_function | 2.6.3 Completion Variables |
+ | rl_inhibit_completion | 2.6.3 Completion Variables |
+ | rl_initialize | 2.4.10 Utility Functions |
+ | rl_input_available_hook | 2.3 Readline Variables |
+ | rl_insert_completions | 2.6.2 Completion Functions |
+ | rl_insert_text | 2.4.7 Modifying Text |
+ | rl_instream | 2.3 Readline Variables |
+ | rl_invoking_keyseqs | 2.4.4 Associating Function Names and Bindings |
+ | rl_invoking_keyseqs_in_map | 2.4.4 Associating Function Names and Bindings |
+ | rl_key_sequence_length | 2.3 Readline Variables |
+ | rl_kill_text | 2.4.7 Modifying Text |
+ | rl_last_func | 2.3 Readline Variables |
+ | rl_library_version | 2.3 Readline Variables |
+ | rl_line_buffer | 2.3 Readline Variables |
+ | rl_list_funmap_names | 2.4.4 Associating Function Names and Bindings |
+ | rl_macro_bind | 2.4.11 Miscellaneous Functions |
+ | rl_macro_dumper | 2.4.11 Miscellaneous Functions |
+ | rl_make_bare_keymap | 2.4.2 Selecting a Keymap |
+ | rl_make_keymap | 2.4.2 Selecting a Keymap |
+ | rl_mark | 2.3 Readline Variables |
+ | rl_message | 2.4.6 Redisplay |
+ | rl_modifying | 2.4.5 Allowing Undoing |
+ | rl_named_function | 2.4.4 Associating Function Names and Bindings |
+ | rl_num_chars_to_read | 2.3 Readline Variables |
+ | rl_numeric_arg | 2.3 Readline Variables |
+ | rl_on_new_line | 2.4.6 Redisplay |
+ | rl_on_new_line_with_prompt | 2.4.6 Redisplay |
+ | rl_outstream | 2.3 Readline Variables |
+ | rl_parse_and_bind | 2.4.3 Binding Keys |
+ | rl_pending_input | 2.3 Readline Variables |
+ | rl_pending_signal | 2.5 Readline Signal Handling |
+ | rl_persistent_signal_handlers | 2.5 Readline Signal Handling |
+ | rl_point | 2.3 Readline Variables |
+ | rl_possible_completions | 2.6.2 Completion Functions |
+ | rl_pre_input_hook | 2.3 Readline Variables |
+ | rl_prefer_env_winsize | 2.3 Readline Variables |
+ | rl_prep_term_function | 2.3 Readline Variables |
+ | rl_prep_terminal | 2.4.9 Terminal Management |
+ | rl_prompt | 2.3 Readline Variables |
+ | rl_push_macro_input | 2.4.7 Modifying Text |
+ | rl_read_init_file | 2.4.3 Binding Keys |
+ | rl_read_key | 2.4.8 Character Input |
+ | rl_readline_name | 2.3 Readline Variables |
+ | rl_readline_state | 2.3 Readline Variables |
+ | rl_readline_version | 2.3 Readline Variables |
+ | rl_redisplay | 2.4.6 Redisplay |
+ | rl_redisplay_function | 2.3 Readline Variables |
+ | rl_replace_line | 2.4.10 Utility Functions |
+ | rl_reset_after_signal | 2.5 Readline Signal Handling |
+ | rl_reset_line_state | 2.4.6 Redisplay |
+ | rl_reset_screen_size | 2.5 Readline Signal Handling |
+ | rl_reset_terminal | 2.4.9 Terminal Management |
+ | rl_resize_terminal | 2.5 Readline Signal Handling |
+ | rl_restore_prompt | 2.4.6 Redisplay |
+ | rl_restore_state | 2.4.10 Utility Functions |
+ | rl_save_prompt | 2.4.6 Redisplay |
+ | rl_save_state | 2.4.10 Utility Functions |
+ | rl_set_key | 2.4.3 Binding Keys |
+ | rl_set_keyboard_input_timeout | 2.4.8 Character Input |
+ | rl_set_keymap | 2.4.2 Selecting a Keymap |
+ | rl_set_keymap_name | 2.4.2 Selecting a Keymap |
+ | rl_set_paren_blink_timeout | 2.4.11 Miscellaneous Functions |
+ | rl_set_prompt | 2.4.6 Redisplay |
+ | rl_set_screen_size | 2.5 Readline Signal Handling |
+ | rl_set_signals | 2.5 Readline Signal Handling |
+ | rl_show_char | 2.4.6 Redisplay |
+ | rl_signal_event_hook | 2.3 Readline Variables |
+ | rl_sort_completion_matches | 2.6.3 Completion Variables |
+ | rl_special_prefixes | 2.6.3 Completion Variables |
+ | rl_startup_hook | 2.3 Readline Variables |
+ | rl_stuff_char | 2.4.8 Character Input |
+ | rl_terminal_name | 2.3 Readline Variables |
+ | rl_tty_set_default_bindings | 2.4.9 Terminal Management |
+ | rl_tty_set_echoing | 2.4.9 Terminal Management |
+ | rl_tty_unset_default_bindings | 2.4.9 Terminal Management |
+ | rl_unbind_command_in_map | 2.4.3 Binding Keys |
+ | rl_unbind_function_in_map | 2.4.3 Binding Keys |
+ | rl_unbind_key | 2.4.3 Binding Keys |
+ | rl_unbind_key_in_map | 2.4.3 Binding Keys |
+ | rl_username_completion_function | 2.6.2 Completion Functions |
+ | rl_variable_bind | 2.4.11 Miscellaneous Functions |
+ | rl_variable_dumper | 2.4.11 Miscellaneous Functions |
+ | rl_variable_value | 2.4.11 Miscellaneous Functions |
|
S | | |
- | self-insert (a, b, A, 1, !, <small>...</small>) | 1.4.3 Commands For Changing Text |
- | self-insert (a, b, A, 1, !, <small>...</small>) | 1.4.3 Commands For Changing Text |
- | set-mark (C-@) | 1.4.8 Some Miscellaneous Commands |
- | set-mark (C-@) | 1.4.8 Some Miscellaneous Commands |
+ | self-insert (a, b, A, 1, !, <small>...</small>) | 1.4.3 Commands For Changing Text |
+ | self-insert (a, b, A, 1, !, <small>...</small>) | 1.4.3 Commands For Changing Text |
+ | set-mark (C-@) | 1.4.8 Some Miscellaneous Commands |
+ | set-mark (C-@) | 1.4.8 Some Miscellaneous Commands |
+ | shell-transpose-words (M-C-t) | 1.4.4 Killing And Yanking |
+ | shell-transpose-words (M-C-t) | 1.4.4 Killing And Yanking |
| show-all-if-ambiguous | 1.3.1 Readline Init File Syntax |
| show-all-if-unmodified | 1.3.1 Readline Init File Syntax |
| show-mode-in-prompt | 1.3.1 Readline Init File Syntax |
| skip-completed-text | 1.3.1 Readline Init File Syntax |
- | skip-csi-sequence () | 1.4.8 Some Miscellaneous Commands |
- | skip-csi-sequence () | 1.4.8 Some Miscellaneous Commands |
- | start-kbd-macro (C-x () | 1.4.7 Keyboard Macros |
- | start-kbd-macro (C-x () | 1.4.7 Keyboard Macros |
+ | skip-csi-sequence () | 1.4.8 Some Miscellaneous Commands |
+ | skip-csi-sequence () | 1.4.8 Some Miscellaneous Commands |
+ | start-kbd-macro (C-x () | 1.4.7 Keyboard Macros |
+ | start-kbd-macro (C-x () | 1.4.7 Keyboard Macros |
|
T | | |
- | tab-insert (M-TAB) | 1.4.3 Commands For Changing Text |
- | tab-insert (M-TAB) | 1.4.3 Commands For Changing Text |
- | tilde-expand (M-~) | 1.4.8 Some Miscellaneous Commands |
- | tilde-expand (M-~) | 1.4.8 Some Miscellaneous Commands |
- | transpose-chars (C-t) | 1.4.3 Commands For Changing Text |
- | transpose-chars (C-t) | 1.4.3 Commands For Changing Text |
- | transpose-words (M-t) | 1.4.3 Commands For Changing Text |
- | transpose-words (M-t) | 1.4.3 Commands For Changing Text |
+ | tab-insert (M-TAB) | 1.4.3 Commands For Changing Text |
+ | tab-insert (M-TAB) | 1.4.3 Commands For Changing Text |
+ | tilde-expand (M-~) | 1.4.8 Some Miscellaneous Commands |
+ | tilde-expand (M-~) | 1.4.8 Some Miscellaneous Commands |
+ | transpose-chars (C-t) | 1.4.3 Commands For Changing Text |
+ | transpose-chars (C-t) | 1.4.3 Commands For Changing Text |
+ | transpose-words (M-t) | 1.4.3 Commands For Changing Text |
+ | transpose-words (M-t) | 1.4.3 Commands For Changing Text |
|
U | | |
- | undo (C-_ or C-x C-u) | 1.4.8 Some Miscellaneous Commands |
- | undo (C-_ or C-x C-u) | 1.4.8 Some Miscellaneous Commands |
- | universal-argument () | 1.4.5 Specifying Numeric Arguments |
- | universal-argument () | 1.4.5 Specifying Numeric Arguments |
- | unix-filename-rubout () | 1.4.4 Killing And Yanking |
- | unix-filename-rubout () | 1.4.4 Killing And Yanking |
- | unix-line-discard (C-u) | 1.4.4 Killing And Yanking |
- | unix-line-discard (C-u) | 1.4.4 Killing And Yanking |
- | unix-word-rubout (C-w) | 1.4.4 Killing And Yanking |
- | unix-word-rubout (C-w) | 1.4.4 Killing And Yanking |
- | upcase-word (M-u) | 1.4.3 Commands For Changing Text |
- | upcase-word (M-u) | 1.4.3 Commands For Changing Text |
+ | undo (C-_ or C-x C-u) | 1.4.8 Some Miscellaneous Commands |
+ | undo (C-_ or C-x C-u) | 1.4.8 Some Miscellaneous Commands |
+ | universal-argument () | 1.4.5 Specifying Numeric Arguments |
+ | universal-argument () | 1.4.5 Specifying Numeric Arguments |
+ | unix-filename-rubout () | 1.4.4 Killing And Yanking |
+ | unix-filename-rubout () | 1.4.4 Killing And Yanking |
+ | unix-line-discard (C-u) | 1.4.4 Killing And Yanking |
+ | unix-line-discard (C-u) | 1.4.4 Killing And Yanking |
+ | unix-word-rubout (C-w) | 1.4.4 Killing And Yanking |
+ | unix-word-rubout (C-w) | 1.4.4 Killing And Yanking |
+ | upcase-word (M-u) | 1.4.3 Commands For Changing Text |
+ | upcase-word (M-u) | 1.4.3 Commands For Changing Text |
|
V | | |
| vi-cmd-mode-string | 1.3.1 Readline Init File Syntax |
- | vi-editing-mode (M-C-j) | 1.4.8 Some Miscellaneous Commands |
- | vi-editing-mode (M-C-j) | 1.4.8 Some Miscellaneous Commands |
+ | vi-editing-mode (M-C-j) | 1.4.8 Some Miscellaneous Commands |
+ | vi-editing-mode (M-C-j) | 1.4.8 Some Miscellaneous Commands |
| vi-ins-mode-string | 1.3.1 Readline Init File Syntax |
| visible-stats | 1.3.1 Readline Init File Syntax |
|
Y | | |
- | yank (C-y) | 1.4.4 Killing And Yanking |
- | yank (C-y) | 1.4.4 Killing And Yanking |
- | yank-last-arg (M-. or M-_) | 1.4.2 Commands For Manipulating The History |
- | yank-last-arg (M-. or M-_) | 1.4.2 Commands For Manipulating The History |
- | yank-nth-arg (M-C-y) | 1.4.2 Commands For Manipulating The History |
- | yank-nth-arg (M-C-y) | 1.4.2 Commands For Manipulating The History |
- | yank-pop (M-y) | 1.4.4 Killing And Yanking |
- | yank-pop (M-y) | 1.4.4 Killing And Yanking |
+ | yank (C-y) | 1.4.4 Killing And Yanking |
+ | yank (C-y) | 1.4.4 Killing And Yanking |
+ | yank-last-arg (M-. or M-_) | 1.4.2 Commands For Manipulating The History |
+ | yank-last-arg (M-. or M-_) | 1.4.2 Commands For Manipulating The History |
+ | yank-nth-arg (M-C-y) | 1.4.2 Commands For Manipulating The History |
+ | yank-nth-arg (M-C-y) | 1.4.2 Commands For Manipulating The History |
+ | yank-pop (M-y) | 1.4.4 Killing And Yanking |
+ | yank-pop (M-y) | 1.4.4 Killing And Yanking |
|
Jump to: | _
@@ -7507,7 +7548,7 @@ to permit their use in free software.
| [ ? ] |
---|
About this document
-This document was generated by chet on December, 18 2018
+This document was generated by Chet Ramey on June, 10 2020
using texi2html
@@ -7669,7 +7710,7 @@ the following structure:
This document was generated
-by chet on December, 18 2018
+by Chet Ramey on June, 10 2020
using texi2html
diff --git a/doc/readline.info b/doc/readline.info
index a0f841c..5549f69 100644
--- a/doc/readline.info
+++ b/doc/readline.info
@@ -1,10 +1,10 @@
-This is readline.info, produced by makeinfo version 6.5 from rlman.texi.
+This is readline.info, produced by makeinfo version 6.7 from rlman.texi.
-This manual describes the GNU Readline Library (version 8.0, 30 November
-2018), a library which aids in the consistency of user interface across
+This manual describes the GNU Readline Library (version 8.0, 4 May
+2020), a library which aids in the consistency of user interface across
discrete programs which provide a command line interface.
- Copyright (C) 1988-2016 Free Software Foundation, Inc.
+ Copyright (C) 1988-2020 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License,
@@ -510,7 +510,9 @@ Variable Settings
to 'on' means that the text of the lines being edited will
scroll horizontally on a single screen line when they are
longer than the width of the screen, instead of wrapping onto
- a new screen line. By default, this variable is set to 'off'.
+ a new screen line. This variable is automatically set to 'on'
+ for terminals of height 1. By default, this variable is set
+ to 'off'.
'input-meta'
If set to 'on', Readline will enable eight-bit input (it will
@@ -1029,8 +1031,13 @@ File: readline.info, Node: Commands For Moving, Next: Commands For History, U
physical line or if the length of the current Readline line is not
greater than the length of the prompt plus the screen width.
+'clear-display (M-C-l)'
+ Clear the screen and, if possible, the terminal's scrollback
+ buffer, then redraw the current line, leaving the current line at
+ the top of the screen.
+
'clear-screen (C-l)'
- Clear the screen and redraw the current line, leaving the current
+ Clear the screen, then redraw the current line, leaving the current
line at the top of the screen.
'redraw-current-line ()'
@@ -1127,6 +1134,13 @@ File: readline.info, Node: Commands For History, Next: Commands For Text, Pre
history expansion facilities are used to extract the last argument,
as if the '!$' history expansion had been specified.
+'operate-and-get-next (C-o)'
+ Accept the current line for return to the calling application as if
+ a newline had been entered, and fetch the next line relative to the
+ current line from the history for editing. A numeric argument, if
+ supplied, specifies the history entry to use instead of the current
+ line.
+
File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
@@ -1237,6 +1251,13 @@ File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Pre
Kill the word behind point. Word boundaries are the same as
'backward-word'.
+'shell-transpose-words (M-C-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. Word
+ boundaries are the same as 'shell-forward-word' and
+ 'shell-backward-word'.
+
'unix-word-rubout (C-w)'
Kill the word behind point, using white space as a word boundary.
The killed text is saved on the kill-ring.
@@ -1485,7 +1506,7 @@ and subsequent lines with 'j', and so forth.
aiding in the consistency of user interface across discrete programs
that need to provide a command line interface.
- Copyright (C) 1988-2016 Free Software Foundation, Inc.
+ Copyright (C) 1988-2020 Free Software Foundation, Inc.
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice pare
@@ -3090,7 +3111,7 @@ signals received while waiting for input.
If an application does not wish Readline to catch 'SIGWINCH', it may
call 'rl_resize_terminal()' or 'rl_set_screen_size()' to force Readline
-to update its idea of the terminal size when a 'SIGWINCH' is received.
+to update its idea of the terminal size when it receives a 'SIGWINCH'.
-- Function: void rl_echo_signal_char (int sig)
If an application wishes to install its own signal handlers, but
@@ -3105,11 +3126,14 @@ to update its idea of the terminal size when a 'SIGWINCH' is received.
-- Function: void rl_set_screen_size (int rows, int cols)
Set Readline's idea of the terminal size to ROWS rows and COLS
columns. If either ROWS or COLUMNS is less than or equal to 0,
- Readline's idea of that terminal dimension is unchanged.
+ Readline's idea of that terminal dimension is unchanged. This is
+ intended to tell Readline the physical dimensions of the terminal,
+ and is used internally to calculate the maximum number of
+ characters that may appear on a single line and on the screen.
If an application does not want to install a 'SIGWINCH' handler, but
-is still interested in the screen dimensions, Readline's idea of the
-screen size may be queried.
+is still interested in the screen dimensions, it may query Readline's
+idea of the screen size.
-- Function: void rl_get_screen_size (int *rows, int *cols)
Return Readline's idea of the terminal's size in the variables
@@ -3377,7 +3401,7 @@ File: readline.info, Node: Completion Variables, Next: A Short Completion Exam
passed directly to 'opendir()'.
The directory rewrite hook returns an integer that should be
- non-zero if the function modfies its directory argument. The
+ non-zero if the function modifies its directory argument. The
function should not modify the directory argument if it returns 0.
-- Variable: rl_icppfunc_t * rl_filename_stat_hook
@@ -3389,7 +3413,7 @@ File: readline.info, Node: Completion Variables, Next: A Short Completion Exam
characters from the filename.
The stat hook returns an integer that should be non-zero if the
- function modfies its directory argument. The function should not
+ function modifies its directory argument. The function should not
modify the directory argument if it returns 0.
-- Variable: rl_dequote_func_t * rl_filename_rewrite_hook
@@ -3962,7 +3986,7 @@ command names, line editing features, and access to the history list.
if (!printed)
{
- printf ("No commands match `%s'. Possibilties are:\n", arg);
+ printf ("No commands match `%s'. Possibilities are:\n", arg);
for (i = 0; commands[i].name; i++)
{
@@ -4599,7 +4623,8 @@ Function and Variable Index
(line 42)
* character-search-backward (M-C-]): Miscellaneous Commands.
(line 47)
-* clear-screen (C-l): Commands For Moving. (line 40)
+* clear-display (M-C-l): Commands For Moving. (line 40)
+* clear-screen (C-l): Commands For Moving. (line 45)
* colored-completion-prefix: Readline Init File Syntax.
(line 52)
* colored-stats: Readline Init File Syntax.
@@ -4621,16 +4646,16 @@ Function and Variable Index
* convert-meta: Readline Init File Syntax.
(line 105)
* copy-backward-word (): Commands For Killing.
- (line 49)
+ (line 56)
* copy-forward-word (): Commands For Killing.
- (line 54)
+ (line 61)
* copy-region-as-kill (): Commands For Killing.
- (line 45)
+ (line 52)
* delete-char (C-d): Commands For Text. (line 12)
* delete-char-or-list (): Commands For Completion.
(line 39)
* delete-horizontal-space (): Commands For Killing.
- (line 37)
+ (line 44)
* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6)
* disable-completion: Readline Init File Syntax.
(line 113)
@@ -4684,37 +4709,37 @@ Function and Variable Index
* horizontal-scroll-mode: Readline Init File Syntax.
(line 177)
* input-meta: Readline Init File Syntax.
- (line 184)
+ (line 186)
* insert-comment (M-#): Miscellaneous Commands.
(line 61)
* insert-completions (M-*): Commands For Completion.
(line 18)
* isearch-terminators: Readline Init File Syntax.
- (line 192)
+ (line 194)
* keymap: Readline Init File Syntax.
- (line 199)
+ (line 201)
* kill-line (C-k): Commands For Killing.
(line 6)
* kill-region (): Commands For Killing.
- (line 41)
+ (line 48)
* kill-whole-line (): Commands For Killing.
(line 15)
* kill-word (M-d): Commands For Killing.
(line 19)
* mark-modified-lines: Readline Init File Syntax.
- (line 229)
+ (line 231)
* mark-symlinked-directories: Readline Init File Syntax.
- (line 234)
+ (line 236)
* match-hidden-files: Readline Init File Syntax.
- (line 239)
+ (line 241)
* menu-complete (): Commands For Completion.
(line 22)
* menu-complete-backward (): Commands For Completion.
(line 34)
* menu-complete-display-prefix: Readline Init File Syntax.
- (line 246)
+ (line 248)
* meta-flag: Readline Init File Syntax.
- (line 184)
+ (line 186)
* next-history (C-n): Commands For History.
(line 16)
* next-screen-line (): Commands For Moving. (line 33)
@@ -4722,11 +4747,13 @@ Function and Variable Index
(line 40)
* non-incremental-reverse-search-history (M-p): Commands For History.
(line 34)
+* operate-and-get-next (C-o): Commands For History.
+ (line 91)
* output-meta: Readline Init File Syntax.
- (line 251)
+ (line 253)
* overwrite-mode (): Commands For Text. (line 68)
* page-completions: Readline Init File Syntax.
- (line 257)
+ (line 259)
* possible-completions (M-?): Commands For Completion.
(line 11)
* prefix-meta (): Miscellaneous Commands.
@@ -4739,11 +4766,11 @@ Function and Variable Index
* re-read-init-file (C-x C-r): Miscellaneous Commands.
(line 6)
* readline: Basic Behavior. (line 12)
-* redraw-current-line (): Commands For Moving. (line 44)
+* redraw-current-line (): Commands For Moving. (line 49)
* reverse-search-history (C-r): Commands For History.
(line 26)
* revert-all-at-newline: Readline Init File Syntax.
- (line 267)
+ (line 269)
* revert-line (M-r): Miscellaneous Commands.
(line 26)
* rl_add_defun: Function Naming. (line 18)
@@ -4791,7 +4818,7 @@ Function and Variable Index
* rl_clear_message: Redisplay. (line 51)
* rl_clear_pending_input: Character Input. (line 29)
* rl_clear_signals: Readline Signal Handling.
- (line 179)
+ (line 182)
* rl_clear_visible_line: Redisplay. (line 25)
* rl_complete: How Completing Works.
(line 46)
@@ -4903,7 +4930,7 @@ Function and Variable Index
* rl_get_keymap_by_name: Keymaps. (line 46)
* rl_get_keymap_name: Keymaps. (line 51)
* rl_get_screen_size: Readline Signal Handling.
- (line 162)
+ (line 165)
* rl_get_termcap: Miscellaneous Functions.
(line 41)
* rl_gnu_readline_p: Readline Variables. (line 82)
@@ -4973,7 +5000,7 @@ Function and Variable Index
(line 121)
* rl_reset_line_state: Redisplay. (line 29)
* rl_reset_screen_size: Readline Signal Handling.
- (line 166)
+ (line 169)
* rl_reset_terminal: Terminal Management. (line 34)
* rl_resize_terminal: Readline Signal Handling.
(line 149)
@@ -4991,7 +5018,7 @@ Function and Variable Index
* rl_set_screen_size: Readline Signal Handling.
(line 153)
* rl_set_signals: Readline Signal Handling.
- (line 173)
+ (line 176)
* rl_show_char: Redisplay. (line 36)
* rl_signal_event_hook: Readline Variables. (line 136)
* rl_sort_completion_matches: Completion Variables.
@@ -5019,14 +5046,16 @@ Function and Variable Index
* self-insert (a, b, A, 1, !, ...): Commands For Text. (line 33)
* set-mark (C-@): Miscellaneous Commands.
(line 33)
+* shell-transpose-words (M-C-t): Commands For Killing.
+ (line 28)
* show-all-if-ambiguous: Readline Init File Syntax.
- (line 273)
+ (line 275)
* show-all-if-unmodified: Readline Init File Syntax.
- (line 279)
+ (line 281)
* show-mode-in-prompt: Readline Init File Syntax.
- (line 288)
+ (line 290)
* skip-completed-text: Readline Init File Syntax.
- (line 294)
+ (line 296)
* skip-csi-sequence (): Miscellaneous Commands.
(line 52)
* start-kbd-macro (C-x (): Keyboard Macros. (line 6)
@@ -5039,84 +5068,89 @@ Function and Variable Index
(line 23)
* universal-argument (): Numeric Arguments. (line 10)
* unix-filename-rubout (): Commands For Killing.
- (line 32)
+ (line 39)
* unix-line-discard (C-u): Commands For Killing.
(line 12)
* unix-word-rubout (C-w): Commands For Killing.
- (line 28)
+ (line 35)
* upcase-word (M-u): Commands For Text. (line 56)
* vi-cmd-mode-string: Readline Init File Syntax.
- (line 307)
+ (line 309)
* vi-editing-mode (M-C-j): Miscellaneous Commands.
(line 92)
* vi-ins-mode-string: Readline Init File Syntax.
- (line 318)
+ (line 320)
* visible-stats: Readline Init File Syntax.
- (line 329)
+ (line 331)
* yank (C-y): Commands For Killing.
- (line 59)
+ (line 66)
* yank-last-arg (M-. or M-_): Commands For History.
(line 79)
* yank-nth-arg (M-C-y): Commands For History.
(line 70)
* yank-pop (M-y): Commands For Killing.
- (line 62)
+ (line 69)
Tag Table:
-Node: Top865
-Node: Command Line Editing1590
-Node: Introduction and Notation2242
-Node: Readline Interaction3866
-Node: Readline Bare Essentials5058
-Node: Readline Movement Commands6842
-Node: Readline Killing Commands7803
-Node: Readline Arguments9722
-Node: Searching10767
-Node: Readline Init File12920
-Node: Readline Init File Syntax14074
-Node: Conditional Init Constructs34233
-Node: Sample Init File38430
-Node: Bindable Readline Commands41548
-Node: Commands For Moving42603
-Node: Commands For History44170
-Node: Commands For Text48435
-Node: Commands For Killing51877
-Node: Numeric Arguments54044
-Node: Commands For Completion55184
-Node: Keyboard Macros57153
-Node: Miscellaneous Commands57841
-Node: Readline vi Mode61763
-Node: Programming with GNU Readline63580
-Node: Basic Behavior64566
-Node: Custom Functions68249
-Node: Readline Typedefs69732
-Node: Function Writing71366
-Node: Readline Variables72680
-Node: Readline Convenience Functions85352
-Node: Function Naming86424
-Node: Keymaps87686
-Node: Binding Keys90765
-Node: Associating Function Names and Bindings95313
-Node: Allowing Undoing98092
-Node: Redisplay100642
-Node: Modifying Text104666
-Node: Character Input105913
-Node: Terminal Management107811
-Node: Utility Functions109634
-Node: Miscellaneous Functions112962
-Node: Alternate Interface115551
-Node: A Readline Example118293
-Node: Alternate Interface Example120232
-Node: Readline Signal Handling123764
-Node: Custom Completers132813
-Node: How Completing Works133533
-Node: Completion Functions136840
-Node: Completion Variables140414
-Node: A Short Completion Example156205
-Node: GNU Free Documentation License168984
-Node: Concept Index194158
-Node: Function and Variable Index195679
+Node: Top859
+Node: Command Line Editing1584
+Node: Introduction and Notation2236
+Node: Readline Interaction3860
+Node: Readline Bare Essentials5052
+Node: Readline Movement Commands6836
+Node: Readline Killing Commands7797
+Node: Readline Arguments9716
+Node: Searching10761
+Node: Readline Init File12914
+Node: Readline Init File Syntax14068
+Node: Conditional Init Constructs34318
+Node: Sample Init File38515
+Node: Bindable Readline Commands41633
+Node: Commands For Moving42688
+Node: Commands For History44447
+Node: Commands For Text49044
+Node: Commands For Killing52486
+Node: Numeric Arguments54982
+Node: Commands For Completion56122
+Node: Keyboard Macros58091
+Node: Miscellaneous Commands58779
+Node: Readline vi Mode62701
+Node: Programming with GNU Readline64518
+Node: Basic Behavior65504
+Node: Custom Functions69187
+Node: Readline Typedefs70670
+Node: Function Writing72304
+Node: Readline Variables73618
+Node: Readline Convenience Functions86290
+Node: Function Naming87362
+Node: Keymaps88624
+Node: Binding Keys91703
+Node: Associating Function Names and Bindings96251
+Node: Allowing Undoing99030
+Node: Redisplay101580
+Node: Modifying Text105604
+Node: Character Input106851
+Node: Terminal Management108749
+Node: Utility Functions110572
+Node: Miscellaneous Functions113900
+Node: Alternate Interface116489
+Node: A Readline Example119231
+Node: Alternate Interface Example121170
+Node: Readline Signal Handling124702
+Node: Custom Completers133961
+Node: How Completing Works134681
+Node: Completion Functions137988
+Node: Completion Variables141562
+Node: A Short Completion Example157355
+Node: GNU Free Documentation License170135
+Node: Concept Index195309
+Node: Function and Variable Index196830
End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/doc/readline.pdf b/doc/readline.pdf
index 95f99b9e9d084e89846edbdee8171bb88735f0bb..ae9b84d4cea8a8c182b600ad8b8bcf6418c2027a 100644
GIT binary patch
delta 108315
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