mirror of
https://https.git.savannah.gnu.org/git/bash.git
synced 2026-06-23 22:07:58 +02:00
commit bash-20171226 snapshot
This commit is contained in:
@@ -14722,3 +14722,21 @@ builtins/hash.def
|
||||
array.c,arrayfunc.c,...
|
||||
- many changes to clean up unused variables and functions. From a
|
||||
report from Siteshwar Vashisht <svashisht@redhat.com>
|
||||
|
||||
12/28
|
||||
-----
|
||||
lib/readline/terminal.c
|
||||
- _rl_term_clrscroll: save the `E3' termcap capability, which clears
|
||||
the scrollback buffer where supported. Unused right now
|
||||
|
||||
lib/readline/rlprivate.h
|
||||
- _rl_term_clrscroll: extern declaration
|
||||
|
||||
lib/readline/bind.c
|
||||
- parser_if: added simple variable comparison capability. Allowable
|
||||
operators are `=', `==', and `!='; boolean variables must be
|
||||
compared to either `on' or `off'; variable names must be separated
|
||||
from the operator by whitespace
|
||||
|
||||
doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
|
||||
- document new `if variable comparison value' construct
|
||||
|
||||
+17
-5
@@ -5,12 +5,12 @@
|
||||
.\" Case Western Reserve University
|
||||
.\" chet.ramey@case.edu
|
||||
.\"
|
||||
.\" Last Change: Tue Dec 19 09:56:59 EST 2017
|
||||
.\" Last Change: Thu Dec 28 14:50:35 EST 2017
|
||||
.\"
|
||||
.\" bash_builtins, strip all but Built-Ins section
|
||||
.if \n(zZ=1 .ig zZ
|
||||
.if \n(zY=1 .ig zY
|
||||
.TH BASH 1 "2017 December 19" "GNU Bash 4.4"
|
||||
.TH BASH 1 "2017 December 28" "GNU Bash 4.4"
|
||||
.\"
|
||||
.\" There's some problem with having a `@'
|
||||
.\" in a tagged paragraph with the BSD man macros.
|
||||
@@ -5898,8 +5898,9 @@ The
|
||||
.B $if
|
||||
construct allows bindings to be made based on the
|
||||
editing mode, the terminal being used, or the application using
|
||||
readline. The text of the test extends to the end of the line;
|
||||
no characters are required to isolate it.
|
||||
readline. The text of the test, after any comparison operator,
|
||||
extends to the end of the line;
|
||||
unless otherwise noted, no characters are required to isolate it.
|
||||
.RS
|
||||
.IP \fBmode\fP
|
||||
The \fBmode=\fP form of the \fB$if\fP directive is used to test
|
||||
@@ -5939,6 +5940,8 @@ The version number supplied on the right side of the operator consists
|
||||
of a major version number, an optional decimal point, and an optional
|
||||
minor version (e.g., \fB7.1\fP). If the minor version is omitted, it
|
||||
is assumed to be \fB0\fP.
|
||||
The operator may be separated from the string \fBversion\fP
|
||||
and from the version number argument by whitespace.
|
||||
.IP \fBapplication\fP
|
||||
The \fBapplication\fP construct is used to include
|
||||
application-specific settings. Each program using the readline
|
||||
@@ -5956,6 +5959,15 @@ key sequence that quotes the current or previous word in \fBbash\fP:
|
||||
\fB$endif\fP
|
||||
.fi
|
||||
.RE
|
||||
.IP \fIvariable\fP
|
||||
The \fIvariable\fP construct provides simple equality tests for readline
|
||||
variables and values.
|
||||
The permitted comparison operators are \fI=\fP, \fI==\fP, and \fI!=\fP.
|
||||
The variable name must be separated from the comparison operator by
|
||||
whitespace; the operator may be separated from the value on the right hand
|
||||
side by whitespace.
|
||||
Both string and boolean variables may be tested. Boolean variables must be
|
||||
tested against the values \fIon\fP and \fIoff\fP.
|
||||
.RE
|
||||
.IP \fB$endif\fP
|
||||
This command, as seen in the previous example, terminates an
|
||||
@@ -9191,7 +9203,7 @@ is omitted, the return status is that of the last command
|
||||
executed in the function body.
|
||||
If \fBreturn\fP is executed by a trap handler, the last command used to
|
||||
determine the status is the last command executed before the trap handler.
|
||||
if \fBreturn\fP is executed during a \fBDEBUG\fP trap, the last command
|
||||
If \fBreturn\fP is executed during a \fBDEBUG\fP trap, the last command
|
||||
used to determine the status is the last command executed by the trap
|
||||
handler before \fBreturn\fP was invoked.
|
||||
If
|
||||
|
||||
+1
-1
@@ -3666,7 +3666,7 @@ If @var{n} is not supplied, the return value is the exit status of the
|
||||
last command executed in the function.
|
||||
If @code{return} is executed by a trap handler, the last command used to
|
||||
determine the status is the last command executed before the trap handler.
|
||||
if @code{return} is executed during a @code{DEBUG} trap, the last command
|
||||
If @code{return} is executed during a @code{DEBUG} trap, the last command
|
||||
used to determine the status is the last command executed by the trap
|
||||
handler before @code{return} was invoked.
|
||||
@code{return} may also be used to terminate execution of a script
|
||||
|
||||
@@ -862,6 +862,16 @@ fprintf(stderr, "extmatch: flags = %d\n", flags);
|
||||
if (pnext == prest)
|
||||
break;
|
||||
}
|
||||
|
||||
#if 0 /* NOTYET */
|
||||
/* Report from Eric Cook <llua@gmx.com> 12/29/2017 */
|
||||
/* If nothing matched, but the string starts with a period and we
|
||||
need to match periods explicitly, don't return this as a match,
|
||||
even for negation. */
|
||||
if (m1 == 0 && *s == '.' && (flags & FNM_PERIOD))
|
||||
return (FNM_NOMATCH);
|
||||
#endif
|
||||
|
||||
/* if srest > s, we are not at start of string */
|
||||
xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags;
|
||||
if (m1 == 0 && GMATCH (srest, se, prest, pe, NULL, xflags) == 0)
|
||||
|
||||
+66
-1
@@ -87,6 +87,9 @@ static int glean_key_from_name PARAMS((char *));
|
||||
static int find_boolean_var PARAMS((const char *));
|
||||
static int find_string_var PARAMS((const char *));
|
||||
|
||||
static const char *boolean_varname PARAMS((int));
|
||||
static const char *string_varname PARAMS((int));
|
||||
|
||||
static char *_rl_get_string_variable_value PARAMS((const char *));
|
||||
static int substring_member_of_array PARAMS((const char *, const char * const *));
|
||||
|
||||
@@ -103,6 +106,7 @@ static int _rl_prefer_visible_bell = 1;
|
||||
#define OP_LE 6
|
||||
|
||||
#define OPSTART(c) ((c) == '=' || (c) == '!' || (c) == '<' || (c) == '>')
|
||||
#define CMPSTART(c) ((c) == '=' || (c) == '!')
|
||||
|
||||
/* **************************************************************** */
|
||||
/* */
|
||||
@@ -1100,7 +1104,9 @@ static int if_stack_size;
|
||||
static int
|
||||
parser_if (char *args)
|
||||
{
|
||||
int i, llen;
|
||||
int i, llen, boolvar, strvar;
|
||||
|
||||
boolvar = strvar = -1;
|
||||
|
||||
/* Push parser state. */
|
||||
if (if_stack_depth + 1 >= if_stack_size)
|
||||
@@ -1246,6 +1252,53 @@ parser_if (char *args)
|
||||
value stored in rl_readline_name. */
|
||||
else if (_rl_stricmp (args, rl_readline_name) == 0)
|
||||
_rl_parsing_conditionalized_out = 0;
|
||||
else if ((boolvar = find_boolean_var (args)) >= 0 || (strvar = find_string_var (args)) >= 0)
|
||||
{
|
||||
int op, previ;
|
||||
size_t vlen;
|
||||
const char *vname;
|
||||
char *valuearg, *vval, prevc;
|
||||
|
||||
_rl_parsing_conditionalized_out = 1;
|
||||
vname = (boolvar >= 0) ? boolean_varname (boolvar) : string_varname (strvar);
|
||||
vlen = strlen (vname);
|
||||
if (i > 0 && i <= llen && args[i-1] == '\0')
|
||||
args[i-1] = ' ';
|
||||
args[llen] = '\0'; /* just in case */
|
||||
for (i = vlen; whitespace (args[i]); i++)
|
||||
;
|
||||
if (CMPSTART(args[i]) == 0)
|
||||
{
|
||||
_rl_init_file_error ("equality comparison operator expected, found `%s'", args[i] ? args + i : "end-of-line");
|
||||
return 0;
|
||||
}
|
||||
previ = i;
|
||||
op = parse_comparison_op (args, &i);
|
||||
if (op != OP_EQ && op != OP_NE)
|
||||
{
|
||||
_rl_init_file_error ("equality comparison operator expected, found `%s'", args+previ);
|
||||
return 0;
|
||||
}
|
||||
for ( ; args[i] && whitespace (args[i]); i++)
|
||||
;
|
||||
if (args[i] == 0)
|
||||
{
|
||||
_rl_init_file_error ("argument expected, found `%s'", args+i);
|
||||
return 0;
|
||||
}
|
||||
previ = i;
|
||||
valuearg = args + i;
|
||||
for ( ; args[i] && whitespace (args[i]) == 0; i++)
|
||||
;
|
||||
prevc = args[i];
|
||||
args[i] = '\0'; /* null-terminate valuearg */
|
||||
vval = rl_variable_value (vname);
|
||||
if (op == OP_EQ)
|
||||
_rl_parsing_conditionalized_out = _rl_stricmp (vval, valuearg) != 0;
|
||||
else if (op == OP_NE)
|
||||
_rl_parsing_conditionalized_out = _rl_stricmp (vval, valuearg) == 0;
|
||||
args[i] = prevc;
|
||||
}
|
||||
else
|
||||
_rl_parsing_conditionalized_out = 1;
|
||||
return 0;
|
||||
@@ -1722,6 +1775,12 @@ find_boolean_var (const char *name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static const char *
|
||||
boolean_varname (int i)
|
||||
{
|
||||
return ((i >= 0) ? boolean_varlist[i].name : (char *)NULL);
|
||||
}
|
||||
|
||||
/* Hooks for handling special boolean variables, where a
|
||||
function needs to be called or another variable needs
|
||||
to be changed when they're changed. */
|
||||
@@ -1805,6 +1864,12 @@ find_string_var (const char *name)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static const char *
|
||||
string_varname (int i)
|
||||
{
|
||||
return ((i >= 0) ? string_varlist[i].name : (char *)NULL);
|
||||
}
|
||||
|
||||
/* 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
|
||||
values result in 0 (false). */
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
.\" Case Western Reserve University
|
||||
.\" chet.ramey@case.edu
|
||||
.\"
|
||||
.\" Last Change: Thu Dec 14 11:44:43 EST 2017
|
||||
.\" Last Change: Thu Dec 28 14:49:51 EST 2017
|
||||
.\"
|
||||
.TH READLINE 3 "2017 December 14" "GNU Readline 7.0"
|
||||
.TH READLINE 3 "2017 December 28" "GNU Readline 7.0"
|
||||
.\"
|
||||
.\" File Name macro. This used to be `.PN', for Path Name,
|
||||
.\" but Sun doesn't seem to like that very much.
|
||||
@@ -643,8 +643,9 @@ The
|
||||
.B $if
|
||||
construct allows bindings to be made based on the
|
||||
editing mode, the terminal being used, or the application using
|
||||
readline. The text of the test extends to the end of the line;
|
||||
no characters are required to isolate it.
|
||||
readline. The text of the test, after any comparison operator,
|
||||
extends to the end of the line;
|
||||
unless otherwise noted, no characters are required to isolate it.
|
||||
.RS
|
||||
.IP \fBmode\fP
|
||||
The \fBmode=\fP form of the \fB$if\fP directive is used to test
|
||||
@@ -684,6 +685,8 @@ The version number supplied on the right side of the operator consists
|
||||
of a major version number, an optional decimal point, and an optional
|
||||
minor version (e.g., \fB7.1\fP). If the minor version is omitted, it
|
||||
is assumed to be \fB0\fP.
|
||||
The operator may be separated from the string \fBversion\fP
|
||||
and from the version number argument by whitespace.
|
||||
.IP \fBapplication\fP
|
||||
The \fBapplication\fP construct is used to include
|
||||
application-specific settings. Each program using the readline
|
||||
@@ -701,6 +704,15 @@ key sequence that quotes the current or previous word in \fBbash\fP:
|
||||
\fB$endif\fP
|
||||
.fi
|
||||
.RE
|
||||
.IP \fIvariable\fP
|
||||
The \fIvariable\fP construct provides simple equality tests for readline
|
||||
variables and values.
|
||||
The permitted comparison operators are \fI=\fP, \fI==\fP, and \fI!=\fP.
|
||||
The variable name must be separated from the comparison operator by
|
||||
whitespace; the operator may be separated from the value on the right hand
|
||||
side by whitespace.
|
||||
Both string and boolean variables may be tested. Boolean variables must be
|
||||
tested against the values \fIon\fP and \fIoff\fP.
|
||||
.RE
|
||||
.IP \fB$endif\fP
|
||||
This command, as seen in the previous example, terminates an
|
||||
|
||||
@@ -917,8 +917,9 @@ of tests. There are four parser directives used.
|
||||
@item $if
|
||||
The @code{$if} construct allows bindings to be made based on the
|
||||
editing mode, the terminal being used, or the application using
|
||||
Readline. The text of the test extends to the end of the line;
|
||||
no characters are required to isolate it.
|
||||
Readline. The text of the test, after any comparison operator,
|
||||
extends to the end of the line;
|
||||
unless otherwise noted, no characters are required to isolate it.
|
||||
|
||||
@table @code
|
||||
@item mode
|
||||
@@ -949,6 +950,8 @@ The version number supplied on the right side of the operator consists
|
||||
of a major version number, an optional decimal point, and an optional
|
||||
minor version (e.g., @samp{7.1}). If the minor version is omitted, it
|
||||
is assumed to be @samp{0}.
|
||||
The operator may be separated from the string @code{version} and
|
||||
from the version number argument by whitespace.
|
||||
The following example sets a variable if the Readline version being used
|
||||
is 7.0 or newer:
|
||||
@example
|
||||
@@ -956,6 +959,7 @@ $if version >= 7.0
|
||||
set show-mode-in-prompt on
|
||||
$endif
|
||||
@end example
|
||||
|
||||
@item application
|
||||
The @var{application} construct is used to include
|
||||
application-specific settings. Each program using the Readline
|
||||
@@ -970,6 +974,23 @@ $if Bash
|
||||
"\C-xq": "\eb\"\ef\""
|
||||
$endif
|
||||
@end example
|
||||
|
||||
@item variable
|
||||
The @var{variable} construct provides simple equality tests for Readline
|
||||
variables and values.
|
||||
The permitted comparison operators are @samp{=}, @samp{==}, and @samp{!=}.
|
||||
The variable name must be separated from the comparison operator by
|
||||
whitespace; the operator may be separated from the value on the right hand
|
||||
side by whitespace.
|
||||
Both string and boolean variables may be tested. Boolean variables must be
|
||||
tested against the values @var{on} and @var{off}.
|
||||
The following example is equivalent to the @code{mode=emacs} test described
|
||||
above:
|
||||
@example
|
||||
$if editing-mode == emacs
|
||||
set show-mode-in-prompt on
|
||||
$endif
|
||||
@end example
|
||||
@end table
|
||||
|
||||
@item $endif
|
||||
|
||||
@@ -4,7 +4,7 @@ Copyright (C) 1988-2017 Free Software Foundation, Inc.
|
||||
|
||||
@set EDITION 7.0
|
||||
@set VERSION 7.0
|
||||
@set UPDATED 14 December 2017
|
||||
@set UPDATED 28 December 2017
|
||||
@set UPDATED-MONTH December 2017
|
||||
|
||||
@set LASTCHANGE Thu Dec 14 11:43:43 EST 2017
|
||||
@set LASTCHANGE Thu Dec 28 14:44:16 EST 2017
|
||||
|
||||
@@ -538,6 +538,7 @@ extern int _rl_enable_keypad;
|
||||
extern int _rl_enable_meta;
|
||||
extern char *_rl_term_clreol;
|
||||
extern char *_rl_term_clrpag;
|
||||
extern char *_rl_term_clrscroll;
|
||||
extern char *_rl_term_im;
|
||||
extern char *_rl_term_ic;
|
||||
extern char *_rl_term_ei;
|
||||
|
||||
@@ -112,6 +112,7 @@ char PC, *BC, *UP;
|
||||
/* Some strings to control terminal actions. These are output by tputs (). */
|
||||
char *_rl_term_clreol;
|
||||
char *_rl_term_clrpag;
|
||||
char *_rl_term_clrscroll;
|
||||
char *_rl_term_cr;
|
||||
char *_rl_term_backspace;
|
||||
char *_rl_term_goto;
|
||||
@@ -385,6 +386,7 @@ static const struct _tc_string tc_strings[] =
|
||||
{
|
||||
{ "@7", &_rl_term_at7 },
|
||||
{ "DC", &_rl_term_DC },
|
||||
{ "E3", &_rl_term_clrscroll },
|
||||
{ "IC", &_rl_term_IC },
|
||||
{ "ce", &_rl_term_clreol },
|
||||
{ "cl", &_rl_term_clrpag },
|
||||
@@ -438,7 +440,7 @@ _rl_init_terminal_io (const char *terminal_name)
|
||||
int tty, tgetent_ret;
|
||||
|
||||
term = terminal_name ? terminal_name : sh_get_env_value ("TERM");
|
||||
_rl_term_clrpag = _rl_term_cr = _rl_term_clreol = (char *)NULL;
|
||||
_rl_term_clrpag = _rl_term_cr = _rl_term_clreol = _rl_term_clrscroll = (char *)NULL;
|
||||
tty = rl_instream ? fileno (rl_instream) : 0;
|
||||
|
||||
if (term == 0)
|
||||
@@ -451,7 +453,7 @@ _rl_init_terminal_io (const char *terminal_name)
|
||||
_rl_term_mm = _rl_term_mo = (char *)NULL;
|
||||
_rl_terminal_can_insert = term_has_meta = _rl_term_autowrap = 0;
|
||||
_rl_term_cr = "\r";
|
||||
_rl_term_clreol = _rl_term_clrpag = _rl_term_backspace = (char *)NULL;
|
||||
_rl_term_backspace = (char *)NULL;
|
||||
_rl_term_goto = _rl_term_pc = _rl_term_ip = (char *)NULL;
|
||||
_rl_term_ks = _rl_term_ke =_rl_term_vs = _rl_term_ve = (char *)NULL;
|
||||
_rl_term_kh = _rl_term_kH = _rl_term_at7 = _rl_term_kI = (char *)NULL;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
BUILD_DIR=/usr/local/build/chet/bash/bash-current
|
||||
BUILD_DIR=/usr/local/build/bash/bash-current
|
||||
THIS_SH=$BUILD_DIR/bash
|
||||
PATH=$PATH:$BUILD_DIR
|
||||
|
||||
|
||||
Reference in New Issue
Block a user