]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20100902 snapshot
authorChet Ramey <chet.ramey@case.edu>
Tue, 13 Dec 2011 03:05:32 +0000 (22:05 -0500)
committerChet Ramey <chet.ramey@case.edu>
Tue, 13 Dec 2011 03:05:32 +0000 (22:05 -0500)
26 files changed:
CWRU/CWRU.chlog
CWRU/CWRU.chlog~
doc/bash.1
doc/bash.1~
doc/version.texi
doc/version.texi~
execute_cmd.c~
lib/readline/bind.c
lib/readline/bind.c~
lib/readline/complete.c
lib/readline/complete.c~
lib/readline/doc/readline.3
lib/readline/doc/readline.3~
lib/readline/doc/rluser.texi
lib/readline/doc/rluser.texi~
lib/readline/doc/version.texi
lib/readline/doc/version.texi~
lib/readline/isearch.c
lib/readline/isearch.c~
lib/readline/rlprivate.h
lib/readline/rlprivate.h~
shell.c
shell.c~
subst.c~
support/signames.c
support/signames.c~ [new file with mode: 0644]

index 68b83600dee4b447a86b69843ff61c2657ae34d1..1f4898cc5d890f3add12ff24b1dfc26d45b33f73 100644 (file)
@@ -6088,7 +6088,8 @@ lib/readline/complete.c
        - new variable, rl_menu_completion_entry_function, generator for
          rl_menu_complete
        - new menu completion `browsing' implementation, with several
-         improvements over the old code.  Inspired by Sami
+         improvements over the old code.  Inspired by Sami Pietila
+         <sami.pietila@gmail.com>
 
 lib/readline/readline.h
        - extern declaration for rl_menu_completion_entry_function
@@ -10363,12 +10364,48 @@ pathexp.c
                                   8/28
                                   ----
 lib/readline/rlprivate.h
-       - add member to search_cxt to save _rl_keymap
+       - add members to search_cxt to save _rl_keymap
        - new flag for isearch context: SF_CHGKMAP, set if we changed the
          keymap while reading a character for the search string that
          translated to a command
 
 lib/readline/isearch.c
-       - save current readline keymap in cxt->keymap in _rl_scxt_alloc
+       - save current readline keymap in cxt->keymap and cxt->okeymap
+         in _rl_scxt_alloc
        - in _rl_isearch_dispatch, only check for cxt->lastc as a member of
          cxt->search_terminators if it's > 0 (i.e., not an isearch opcode)
+
+                                   9/3
+                                   ---
+support/signames.c
+       - add Solaris SIGJVM1 and SIGJVM2.  Update from Stefan Teleman
+         <stefan.teleman@oracle.com>
+
+shell.c
+       - instead of closing all fds 3-20 at shell startup, just set them to
+         be close-on-exec.  Report from Rainer Müller<raimue@macports.org>
+
+lib/readline/isearch.c
+       - in _rl_isearch_dispatch, if the current character maps to ISKMAP,
+         move to the indicated keymap (using cxt->keymap) and go on to
+         read another character.  Fixes problem reported by Davor
+         Cubranic <cubranic@stat.ubc.ca>
+       - in _rl_isearch_dispatch, after translating key to possible opcode,
+         restore _rl_keymap from cxt->okeymap if necessary
+       - in _rl_isearch_dispatch, use key sequences that map to default
+         functions that ^G, ^W, and ^Y map to as equivalent to those chars
+
+lib/readline/complete.c
+       - new variable, _rl_menu_complete_prefix_first, zero by default
+       - change menu_complete to display common prefix (matches[0]) first
+         before cycling through rest of match list if
+         _rl_menu_complete_prefix_first is non-zero.  Suggested by Sami
+         Pietila <sami.pietila@gmail.com>
+
+lib/readline/bind.c
+       - new bindable readline variable, "menu-complete-display-prefix",
+         controls setting of _rl_menu_complete_prefix_first
+
+doc/{bash.1,bashref.texi},lib/readline/doc/{readline.3,rluser.texi}
+       - added description of menu-complete-display-prefix bindable
+         readline variable
index 6aa07bcb9c4581cb48e95480d5356c0abae71eba..66240427d357f441a167226998ad9625573190b5 100644 (file)
@@ -6088,7 +6088,8 @@ lib/readline/complete.c
        - new variable, rl_menu_completion_entry_function, generator for
          rl_menu_complete
        - new menu completion `browsing' implementation, with several
-         improvements over the old code.  Inspired by Sami
+         improvements over the old code.  Inspired by Sami Pietila
+         <sami.pietila@gmail.com>
 
 lib/readline/readline.h
        - extern declaration for rl_menu_completion_entry_function
@@ -10363,9 +10364,46 @@ pathexp.c
                                   8/28
                                   ----
 lib/readline/rlprivate.h
-       - add member to search_cxt to save _rl_keymap
+       - add members to search_cxt to save _rl_keymap
+       - new flag for isearch context: SF_CHGKMAP, set if we changed the
+         keymap while reading a character for the search string that
+         translated to a command
 
 lib/readline/isearch.c
-       - save current readline keymap in cxt->keymap in _rl_scxt_alloc
+       - save current readline keymap in cxt->keymap and cxt->okeymap
+         in _rl_scxt_alloc
        - in _rl_isearch_dispatch, only check for cxt->lastc as a member of
          cxt->search_terminators if it's > 0 (i.e., not an isearch opcode)
+
+                                   9/3
+                                   ---
+support/signames.c
+       - add Solaris SIGJVM1 and SIGJVM2.  Update from Stefan Teleman
+         <stefan.teleman@oracle.com>
+
+shell.c
+       - instead of closing all fds 3-20 at shell startup, just set them to
+         be close-on-exec.  Report from Rainer Müller<raimue@macports.org>
+
+lib/readline/isearch.c
+       - in _rl_isearch_dispatch, if the current character maps to ISKMAP,
+         move to the indicated keymap (using cxt->keymap) and go on to
+         read another character.  Fixes problem reported by Davor
+         Cubranic <cubranic@stat.ubc.ca>
+       - in _rl_isearch_dispatch, after translating key to possible opcode,
+         restore _rl_keymap from cxt->okeymap if necessary
+       - in _rl_isearch_dispatch, use key sequences that map to default
+         functions that ^G, ^W, and ^Y map to as equivalent to those chars
+
+lib/readline/complete.c
+       - new variable, _rl_menu_complete_prefix_first, zero by default
+       - change menu_complete to display common prefix (matches[0]) first
+         before cycling through rest of match list if
+         _rl_menu_complete_prefix_first is non-zero.  Suggested by Sami
+         Pietila <sami.pietila@gmail.com>
+
+lib/readline/bind.c
+       - new bindable readline variable, "menu-complete-display-prefix",
+         controls setting of _rl_menu_complete_prefix_first
+
+
index 1f935acf9e7a4867d401ec50845745576512ac51..ad79859255d36d09f73d91689b9f00f66316172a 100644 (file)
@@ -5,12 +5,12 @@
 .\"    Case Western Reserve University
 .\"    chet@po.cwru.edu
 .\"
-.\"    Last Change: Sat Aug 28 18:55:45 EDT 2010
+.\"    Last Change: Mon Sep  6 22:07:38 EDT 2010
 .\"
 .\" bash_builtins, strip all but Built-Ins section
 .if \n(zZ=1 .ig zZ
 .if \n(zY=1 .ig zY
-.TH BASH 1 "2010 August 28" "GNU Bash-4.2"
+.TH BASH 1 "2010 September 6" "GNU Bash-4.2"
 .\"
 .\" There's some problem with having a `@'
 .\" in a tagged paragraph with the BSD man macros.
@@ -5227,6 +5227,11 @@ completion.
 If set to \fBOff\fP, the leading `.' must be
 supplied by the user in the filename to be completed.
 .TP
+.B menu\-complete\-display\-prefix (Off)
+If set to \fBOn\fP, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list.
+.TP
 .B output\-meta (Off)
 If set to \fBOn\fP, readline will display characters with the
 eighth bit set directly rather than as a meta-prefixed escape
index 33b0d30983ab42ae33b46f9ec3a308a1ae121d72..70709cd31bd326fd4f95e9664deebb3b3af8e272 100644 (file)
@@ -5,12 +5,12 @@
 .\"    Case Western Reserve University
 .\"    chet@po.cwru.edu
 .\"
-.\"    Last Change: Tue Aug  3 15:24:33 EDT 2010
+.\"    Last Change: Sat Aug 28 18:55:45 EDT 2010
 .\"
 .\" bash_builtins, strip all but Built-Ins section
 .if \n(zZ=1 .ig zZ
 .if \n(zY=1 .ig zY
-.TH BASH 1 "2010 August 3" "GNU Bash-4.2"
+.TH BASH 1 "2010 August 28" "GNU Bash-4.2"
 .\"
 .\" There's some problem with having a `@'
 .\" in a tagged paragraph with the BSD man macros.
@@ -408,7 +408,7 @@ No other startup files are read.
 .PP
 .B Bash
 attempts to determine when it is being run with its standard input
-connected to a network connection, as if by the remote shell
+connected to a network connection, as when executed by the remote shell
 daemon, usually \fIrshd\fP, or the secure shell daemon \fIsshd\fP.
 If
 .B bash
@@ -938,7 +938,7 @@ command (see
 below).
 The file descriptors can be utilized as arguments to shell commands
 and redirections using standard word expansions.
-The process id of the shell spawned to execute the coprocess is
+The process ID of the shell spawned to execute the coprocess is
 available as the value of the variable \fINAME\fP_PID.
 The \fBwait\fP
 builtin command may be used to wait for the coprocess to terminate.
@@ -1213,7 +1213,7 @@ builtin commands.
 In the context where an assignment statement is assigning a value
 to a shell variable or array index, the += operator can be used to
 append to or add to the variable's previous value.
-When += is applied to a variable for which the integer attribute has been
+When += is applied to a variable for which the \fIinteger\fP attribute has been
 set, \fIvalue\fP is evaluated as an arithmetic expression and added to the
 variable's current value, which is also evaluated.
 When += is applied to an array variable using compound assignment (see
@@ -1373,7 +1373,7 @@ reading any startup files.
 This variable is read-only.
 .TP
 .B BASHPID
-Expands to the process id of the current \fBbash\fP process.
+Expands to the process ID of the current \fBbash\fP process.
 This differs from \fB$$\fP under certain circumstances, such as subshells
 that do not require \fBbash\fP to be re-initialized.
 .TP
@@ -2680,7 +2680,7 @@ a level of variable indirection is introduced.
 expanded and that value is used in the rest of the substitution, rather
 than the value of \fIparameter\fP itself.
 This is known as \fIindirect expansion\fP.
-The exceptions to this are the expansions of ${!\fIprefix\fP*} and
+The exceptions to this are the expansions of ${\fB!\\fPfIprefix\fP\fB*\fP} and
 ${\fB!\fP\fIname\fP[\fI@\fP]} described below.
 The exclamation point must immediately follow the left brace in order to
 introduce indirection.
@@ -2740,7 +2740,7 @@ ${\fIparameter\fP\fB:\fP\fIoffset\fP}
 .TP
 ${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP}
 .PD
-\fBSubstring Expansion.\fP
+\fBSubstring Expansion\fP.
 Expands to up to \fIlength\fP characters of \fIparameter\fP
 starting at the character specified by \fIoffset\fP.
 If \fIlength\fP is omitted, expands to the substring of
@@ -2778,7 +2778,7 @@ ${\fB!\fP\fIprefix\fP\fB*\fP}
 .TP
 ${\fB!\fP\fIprefix\fP\fB@\fP}
 .PD
-\fBNames matching prefix.\fP
+\fBNames matching prefix\fP.
 Expands to the names of variables whose names begin with \fIprefix\fP,
 separated by the first character of the
 .SM
@@ -2792,7 +2792,7 @@ ${\fB!\fP\fIname\fP[\fI@\fP]}
 .TP
 ${\fB!\fP\fIname\fP[\fI*\fP]}
 .PD
-\fBList of array keys.\fP
+\fBList of array keys\fP.
 If \fIname\fP is an array variable, expands to the list of array indices
 (keys) assigned in \fIname\fP.
 If \fIname\fP is not an array, expands to 0 if \fIname\fP is set and null
@@ -2801,7 +2801,7 @@ When \fI@\fP is used and the expansion appears within double quotes, each
 key expands to a separate word.
 .TP
 ${\fB#\fP\fIparameter\fP}
-\fBParameter length.\fP
+\fBParameter length\fP.
 The length in characters of the value of \fIparameter\fP is substituted.
 If
 .I parameter
@@ -2823,7 +2823,7 @@ ${\fIparameter\fP\fB#\fP\fIword\fP}
 .TP
 ${\fIparameter\fP\fB##\fP\fIword\fP}
 .PD
-\fBRemove matching prefix pattern.\fP
+\fBRemove matching prefix pattern\fP.
 The 
 .I word
 is expanded to produce a pattern just as in pathname
@@ -2856,7 +2856,7 @@ ${\fIparameter\fP\fB%\fP\fIword\fP}
 .TP
 ${\fIparameter\fP\fB%%\fP\fIword\fP}
 .PD
-\fBRemove matching suffix pattern.\fP
+\fBRemove matching suffix pattern\fP.
 The \fIword\fP is expanded to produce a pattern just as in
 pathname expansion.
 If the pattern matches a trailing portion of the expanded value of
@@ -2883,7 +2883,7 @@ the pattern removal operation is applied to each member of the
 array in turn, and the expansion is the resultant list.
 .TP
 ${\fIparameter\fP\fB/\fP\fIpattern\fP\fB/\fP\fIstring\fP}
-\fBPattern substitution.\fP
+\fBPattern substitution\fP.
 The \fIpattern\fP is expanded to produce a pattern just as in
 pathname expansion.
 \fIParameter\fP is expanded and the longest match of \fIpattern\fP
@@ -2922,7 +2922,7 @@ ${\fIparameter\fP\fB,\fP\fIpattern\fP}
 .TP
 ${\fIparameter\fP\fB,,\fP\fIpattern\fP}
 .PD
-\fBCase modification.\fP
+\fBCase modification\fP.
 This expansion modifies the case of alphabetic characters in \fIparameter\fP.
 The \fIpattern\fP is expanded to produce a pattern just as in
 pathname expansion.
@@ -3786,7 +3786,7 @@ function become the positional parameters
 during its execution.
 The special parameter
 .B #
-is updated to reflect the change.  Special parameter 0
+is updated to reflect the change.  Special parameter \fB0\fP
 is unchanged.
 The first element of the
 .SM
@@ -3956,7 +3956,7 @@ The value of a variable is evaluated as an arithmetic expression
 when it is referenced, or when a variable which has been given the
 \fIinteger\fP attribute using \fBdeclare -i\fP is assigned a value.
 A null value evaluates to 0.
-A shell variable need not have its integer attribute
+A shell variable need not have its \fIinteger\fP attribute
 turned on to be used in an expression.
 .PP
 Constants with a leading 0 are interpreted as octal numbers.
@@ -4308,8 +4308,8 @@ subshell environment.  Changes made to the subshell environment
 cannot affect the shell's execution environment.
 .PP
 Subshells spawned to execute command substitutions inherit the value of
-the \fB\-e\fP option from the parent shell.  When not in posix mode,
-Bash clears the \fB\-e\fP option in such subshells.
+the \fB\-e\fP option from the parent shell.  When not in \fIposix\fP mode,
+\fBbash\fP clears the \fB\-e\fP option in such subshells.
 .PP
 If a command is followed by a \fB&\fP and job control is not active, the
 default standard input for the command is the empty file \fI/dev/null\fP.
@@ -4804,7 +4804,7 @@ shell, unless the
 option is given at shell invocation.
 Line editing is also used when using the \fB\-e\fP option to the
 \fBread\fP builtin.
-By default, the line editing commands are similar to those of emacs.
+By default, the line editing commands are similar to those of Emacs.
 A vi-style line editing interface is also available.
 Line editing can be enabled at any time using the
 .B \-o emacs
@@ -4825,7 +4825,7 @@ options to the
 builtin.
 .SS "Readline Notation"
 .PP
-In this section, the emacs-style notation is used to denote
+In this section, the Emacs-style notation is used to denote
 keystrokes.  Control keys are denoted by C\-\fIkey\fR, e.g., C\-n
 means Control\-N.  Similarly, 
 .I meta
@@ -5142,7 +5142,7 @@ mapped to \fBself-insert\fP.
 .TP
 .B editing\-mode (emacs)
 Controls whether readline begins with a set of key bindings similar
-to \fIemacs\fP or \fIvi\fP.
+to \fIEmacs\fP or \fIvi\fP.
 .B editing\-mode
 can be set to either
 .B emacs
@@ -5165,11 +5165,11 @@ key the terminal claims to support when it is called.  On many terminals,
 the meta key is used to send eight-bit characters.
 .TP
 .B expand\-tilde (Off)
-If set to \fBon\fP, tilde expansion is performed when readline
+If set to \fBOn\fP, tilde expansion is performed when readline
 attempts word completion.
 .TP
 .B history\-preserve\-point (Off)
-If set to \fBon\fP, the history code attempts to place point at the
+If set to \fBOn\fP, the history code attempts to place point at the
 same location on each history line retrieved with \fBprevious-history\fP
 or \fBnext-history\fP.
 .TP
@@ -5227,6 +5227,11 @@ completion.
 If set to \fBOff\fP, the leading `.' must be
 supplied by the user in the filename to be completed.
 .TP
+.B menu\-complete\-display\-prefix (Off)
+If set to \fBOn\fP, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list.
+.TP
 .B output\-meta (Off)
 If set to \fBOn\fP, readline will display characters with the
 eighth bit set directly rather than as a meta-prefixed escape
@@ -5241,7 +5246,7 @@ If set to \fBOn\fP, readline will display completions with matches
 sorted horizontally in alphabetical order, rather than down the screen.
 .TP 
 .B revert\-all\-at\-newline (Off)
-If set to \fBon\fP, readline will undo all changes to history lines 
+If set to \fBOn\fP, readline will undo all changes to history lines 
 before returning when \fBaccept\-line\fP is executed.  By default,
 history lines may be modified and retain individual undo lists across
 calls to \fBreadline\fP.
@@ -5249,7 +5254,7 @@ calls to \fBreadline\fP.
 .B show\-all\-if\-ambiguous (Off)
 This alters the default behavior of the completion functions.  If
 set to
-.BR on ,
+.BR On ,
 words which have more than one possible completion cause the
 matches to be listed immediately instead of ringing the bell.
 .TP
@@ -5257,7 +5262,7 @@ matches to be listed immediately instead of ringing the bell.
 This alters the default behavior of the completion functions in
 a fashion similar to \fBshow\-all\-if\-ambiguous\fP.
 If set to
-.BR on ,
+.BR On ,
 words which have more than one possible completion without any
 possible partial completion (the possible completions don't share
 a common prefix) cause the matches to be listed immediately instead
@@ -5317,7 +5322,7 @@ library sets the \fIapplication name\fP, and an initialization
 file can test for a particular value.
 This could be used to bind key sequences to functions useful for
 a specific program.  For instance, the following command adds a
-key sequence that quotes the current or previous word in Bash:
+key sequence that quotes the current or previous word in \fBbash\fP:
 .sp 1
 .RS
 .nf
@@ -5755,7 +5760,7 @@ through the list.
 This command is intended to be bound to \fBTAB\fP, but is unbound
 by default.
 .TP
-.B menu\-complete-\backward
+.B menu\-complete\-backward
 Identical to \fBmenu\-complete\fP, but moves backward through the list
 of possible completions, as if \fBmenu\-complete\fP had been given a
 negative argument.  This command is unbound by default.
@@ -5892,7 +5897,7 @@ character.  A negative count searches for previous occurrences.
 A character is read and point is moved to the previous occurrence of that
 character.  A negative count searches for subsequent occurrences.
 .TP
-.B skip\-csi\-sequence ()
+.B 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
@@ -5976,7 +5981,7 @@ If the command word is a full pathname, a compspec for the full
 pathname is searched for first.
 If no compspec is found for the full pathname, an attempt is made to
 find a compspec for the portion following the final slash.
-If those searches to not result in a compspec, any compspec defined with
+If those searches do not result in a compspec, any compspec defined with
 the \fB\-D\fP option to \fBcomplete\fP is used as the default.
 .PP
 Once a compspec has been found, it is used to generate the list of
@@ -7670,7 +7675,7 @@ return value greater than zero.
 .SM
 .B OPTIND
 is set to the index of the first non-option argument,
-and \fBname\fP is set to ?.
+and \fIname\fP is set to ?.
 .sp 1
 .B getopts
 normally parses the positional parameters, but if more arguments are
@@ -8419,10 +8424,10 @@ the return status is false.
 Any command associated with the \fBRETURN\fP trap is executed
 before execution resumes after the function or script.
 .TP
-\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\fP] [\fIarg\fP ...]
+\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fIarg\fP ...]
 .PD 0
 .TP
-\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\fP] [\fIarg\fP ...]
+\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fIarg\fP ...]
 .PD
 Without options, the name and value of each shell variable are displayed
 in a format that can be reused as input
@@ -8904,20 +8909,21 @@ easy re-editing of multi-line commands.
 If set,
 .B bash
 changes its behavior to that of version 3.1 with respect to quoted
-arguments to the conditional command's =~ operator.
+arguments to the conditional command's \fB=~\fP operator.
 .TP 8
 .B compat32
 If set,
 .B bash
 changes its behavior to that of version 3.2 with respect to locale-specific
-string comparison when using the conditional command's < and > operators.
+string comparison when using the conditional command's \fB<\fP and \fB>\fP
+operators.
 .TP 8
 .B compat40
 If set,
 .B bash
 changes its behavior to that of version 4.0 with respect to locale-specific
-string comparison when using the conditional command's < and > operators
-and the effect of interrupting a command list.
+string comparison when using the conditional command's \fB<\fP and \fB>\fP
+operators and the effect of interrupting a command list.
 .TP 8
 .B compat41
 @item compat41
@@ -9720,7 +9726,7 @@ as an argument to the
 .B .
 builtin command
 .IP \(bu
-Specifying a filename containing a slash as an argument to the
+specifying a filename containing a slash as an argument to the
 .B \-p
 option to the
 .B hash
@@ -9747,7 +9753,7 @@ options to the
 .B enable
 builtin command
 .IP \(bu
-Using the \fBenable\fP builtin command to enable disabled shell builtins
+using the \fBenable\fP builtin command to enable disabled shell builtins
 .IP \(bu
 specifying the
 .B \-p
index 061b86ac9751245933e2b8d9ae4562c1d9c1ca51..a68f5e7969e44008244a5aaf5e7f3cac2b593a8a 100644 (file)
@@ -2,9 +2,9 @@
 Copyright (C) 1988-2010 Free Software Foundation, Inc.
 @end ignore
 
-@set LASTCHANGE Sat Aug 28 18:56:04 EDT 2010
+@set LASTCHANGE Mon Sep  6 22:08:10 EDT 2010
 
 @set EDITION 4.2
 @set VERSION 4.2
-@set UPDATED 28 August 2010
-@set UPDATED-MONTH August 2010
+@set UPDATED 6 September 2010
+@set UPDATED-MONTH September 2010
index b88cc4623d2b94db5e927abb1e58030572b65349..061b86ac9751245933e2b8d9ae4562c1d9c1ca51 100644 (file)
@@ -2,9 +2,9 @@
 Copyright (C) 1988-2010 Free Software Foundation, Inc.
 @end ignore
 
-@set LASTCHANGE Wed Jul 21 08:54:40 EDT 2010
+@set LASTCHANGE Sat Aug 28 18:56:04 EDT 2010
 
 @set EDITION 4.2
 @set VERSION 4.2
-@set UPDATED 21 July 2010
-@set UPDATED-MONTH July 2010
+@set UPDATED 28 August 2010
+@set UPDATED-MONTH August 2010
index e5e2a8eb9416b203ba835ad197073eb080be041a..131c8301c8dce2033a0643536b3f4386d81e4ac4 100644 (file)
@@ -735,7 +735,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
          execute_simple_command (command->value.Simple, pipe_in, pipe_out,
                                  asynchronous, fds_to_close);
        line_number = save_line_number;
-
+itrace("execute_simple_command (%s) returns %d", command->value.Simple->words->word->word, exec_result);
        /* The temporary environment should be used for only the simple
           command immediately following its definition. */
        dispose_used_env_vars ();
@@ -4329,7 +4329,6 @@ execute_shell_function (var, words)
   int ret;
   struct fd_bitmap *bitmap;
 
-itrace("execute_shell_function: %s", var->name);
   bitmap = new_fd_bitmap (FD_BITMAP_DEFAULT_SIZE);
   begin_unwind_frame ("execute-shell-function");
   add_unwind_protect (dispose_fd_bitmap, (char *)bitmap);
index 00d559ca0aaf544edf2b42c8e43db4cfc9285694..b552abb3baa81513fb465a91624daf151f688ccd 100644 (file)
@@ -1438,6 +1438,7 @@ static const struct {
   { "mark-modified-lines",     &_rl_mark_modified_lines,       0 },
   { "mark-symlinked-directories", &_rl_complete_mark_symlink_dirs, 0 },
   { "match-hidden-files",      &_rl_match_hidden_files,        0 },
+  { "menu-complete-display-prefix", &_rl_menu_complete_prefix_first, 0 },
   { "meta-flag",               &_rl_meta_flag,                 0 },
   { "output-meta",             &_rl_output_meta_chars,         0 },
   { "page-completions",                &_rl_page_completions,          0 },
index fea60dcede04b5252cd7efb3c0986820fb2cefb1..00d559ca0aaf544edf2b42c8e43db4cfc9285694 100644 (file)
@@ -1,6 +1,6 @@
 /* bind.c -- key binding and startup file support for the readline library. */
 
-/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2010 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.
index 7501978f513cb9c158342a0072d1dd1a1f3ab7cf..c1ee0f1bf681924fa1422a8313494ae46bc695ed 100644 (file)
@@ -195,6 +195,10 @@ int rl_visible_stats = 0;
    after the `e' in `Makefile' won't result in `Makefilefile'. */
 int _rl_skip_completed_text = 0;
 
+/* If non-zero, menu completion displays the common prefix first in the
+   cycle of possible completions instead of the last. */
+int _rl_menu_complete_prefix_first = 0;
+
 /* If non-zero, then this is the address of a function to call when
    completing on a directory name.  The function is called with
    the address of a string (the current directory name) as an arg. */
@@ -2481,7 +2485,7 @@ rl_menu_complete (count, ignore)
   static int full_completion = 0;      /* set to 1 if menu completion should reinitialize on next call */
   static int orig_start, orig_end;
   static char quote_char;
-  static int delimiter;
+  static int delimiter, cstate;
 
   /* The first time through, we generate the list of matches and set things
      up to insert them. */
@@ -2589,6 +2593,11 @@ rl_menu_complete (count, ignore)
          full_completion = 1;
          return (0);
        }
+      else if (_rl_menu_complete_prefix_first && match_list_size > 1)
+       {
+         rl_ding ();
+         return (0);
+       }
     }
 
   /* Now we have the list of matches.  Replace the text between
index 92609447cb09447b9e370ff4635422883c6776cd..764030fcd05dba42557c7cc94f5f9f41dd292157 100644 (file)
@@ -195,6 +195,10 @@ int rl_visible_stats = 0;
    after the `e' in `Makefile' won't result in `Makefilefile'. */
 int _rl_skip_completed_text = 0;
 
+/* If non-zero, menu completion displays the common prefix first in the
+   cycle of possible completions instead of the last. */
+int _rl_menu_complete_prefix_first = 1;
+
 /* If non-zero, then this is the address of a function to call when
    completing on a directory name.  The function is called with
    the address of a string (the current directory name) as an arg. */
@@ -847,7 +851,7 @@ print_filename (to_print, full_pathname, prefix_bytes)
          if (path_isdir (new_full_pathname))
            extension_char = '/';
 
-         free (new_full_pathname);
+         xfree (new_full_pathname);
          to_print[-1] = c;
        }
       else
@@ -862,7 +866,7 @@ print_filename (to_print, full_pathname, prefix_bytes)
              extension_char = '/';
        }
 
-      free (s);
+      xfree (s);
       if (extension_char)
        {
          putc (extension_char, rl_outstream);
@@ -1099,7 +1103,7 @@ remove_duplicate_matches (matches)
     {
       if (strcmp (matches[i], matches[i + 1]) == 0)
        {
-         free (matches[i]);
+         xfree (matches[i]);
          matches[i] = (char *)&dead_slot;
        }
       else
@@ -1117,7 +1121,7 @@ remove_duplicate_matches (matches)
   temp_array[j] = (char *)NULL;
 
   if (matches[0] != (char *)&dead_slot)
-    free (matches[0]);
+    xfree (matches[0]);
 
   /* Place the lowest common denominator back in [0]. */
   temp_array[0] = lowest_common;
@@ -1127,7 +1131,7 @@ remove_duplicate_matches (matches)
      insert. */
   if (j == 2 && strcmp (temp_array[0], temp_array[1]) == 0)
     {
-      free (temp_array[1]);
+      xfree (temp_array[1]);
       temp_array[1] = (char *)NULL;
     }
   return (temp_array);
@@ -1306,7 +1310,7 @@ postprocess_matches (matchesp, matching_filenames)
   if (rl_ignore_completion_duplicates)
     {
       temp_matches = remove_duplicate_matches (matches);
-      free (matches);
+      xfree (matches);
       matches = temp_matches;
     }
 
@@ -1648,7 +1652,7 @@ insert_match (match, start, mtype, qc)
       else
        _rl_replace_text (replacement, start, end);
       if (replacement != match)
-        free (replacement);
+        xfree (replacement);
     }
 }
 
@@ -1715,7 +1719,7 @@ append_to_match (text, delimiter, quote_char, nontrivial_match)
          if (rl_point == rl_end && temp_string_index)
            rl_insert_text (temp_string);
        }
-      free (filename);
+      xfree (filename);
     }
   else
     {
@@ -1751,7 +1755,7 @@ insert_all_matches (matches, point, qc)
          rl_insert_text (rp);
          rl_insert_text (" ");
          if (rp != matches[i])
-           free (rp);
+           xfree (rp);
        }
     }
   else
@@ -1760,7 +1764,7 @@ insert_all_matches (matches, point, qc)
       rl_insert_text (rp);
       rl_insert_text (" ");
       if (rp != matches[0])
-       free (rp);
+       xfree (rp);
     }
   rl_end_undo_group ();
 }
@@ -1775,8 +1779,8 @@ _rl_free_match_list (matches)
     return;
 
   for (i = 0; matches[i]; i++)
-    free (matches[i]);
-  free (matches);
+    xfree (matches[i]);
+  xfree (matches);
 }
 
 /* Complete the word at or before point.
@@ -1831,7 +1835,7 @@ rl_complete_internal (what_to_do)
   if (what_to_do == '!' || what_to_do == '@')
     tlen = strlen (text);
 #endif
-  free (text);
+  xfree (text);
 
   if (matches == 0)
     {
@@ -1936,7 +1940,7 @@ rl_complete_internal (what_to_do)
   if (saved_line_buffer)
     {
       completion_changed_buffer = strcmp (rl_line_buffer, saved_line_buffer) != 0;
-      free (saved_line_buffer);
+      xfree (saved_line_buffer);
     }
 
   RL_UNSETSTATE(RL_STATE_COMPLETING);
@@ -2003,7 +2007,7 @@ rl_completion_matches (text, entry_function)
     compute_lcd_of_matches (match_list, matches, text);
   else                         /* There were no matches. */
     {
-      free (match_list);
+      xfree (match_list);
       match_list = (char **)NULL;
     }
   return (match_list);
@@ -2092,8 +2096,8 @@ complete_fncmp (convfn, convlen, filename, filename_len)
        return 1;
       if (convlen < filename_len)
        return 0;
-      s1 = convfn;
-      s2 = filename;
+      s1 = (char *)convfn;
+      s2 = (char *)filename;
       len = filename_len;
       do
        {
@@ -2197,7 +2201,7 @@ rl_filename_completion_function (text, state)
       if (*dirname == '~')
        {
          temp = tilde_expand (dirname);
-         free (dirname);
+         xfree (dirname);
          dirname = temp;
        }
 
@@ -2208,14 +2212,14 @@ rl_filename_completion_function (text, state)
         dequoting. */
       if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&dirname))
        {
-         free (users_dirname);
+         xfree (users_dirname);
          users_dirname = savestring (dirname);
        }
       else if (rl_completion_found_quote && rl_filename_dequoting_function)
        {
          /* delete single and double quotes */
          temp = (*rl_filename_dequoting_function) (dirname, rl_completion_quote_character);
-         free (dirname);
+         xfree (dirname);
          dirname = temp;
        }
       directory = opendir (dirname);
@@ -2225,7 +2229,7 @@ rl_filename_completion_function (text, state)
        {
          /* delete single and double quotes */
          temp = (*rl_filename_dequoting_function) (filename, rl_completion_quote_character);
-         free (filename);
+         xfree (filename);
          filename = temp;
        }
       filename_len = strlen (filename);
@@ -2281,17 +2285,17 @@ rl_filename_completion_function (text, state)
        }
       if (dirname)
        {
-         free (dirname);
+         xfree (dirname);
          dirname = (char *)NULL;
        }
       if (filename)
        {
-         free (filename);
+         xfree (filename);
          filename = (char *)NULL;
        }
       if (users_dirname)
        {
-         free (users_dirname);
+         xfree (users_dirname);
          users_dirname = (char *)NULL;
        }
 
@@ -2331,7 +2335,7 @@ rl_filename_completion_function (text, state)
        temp = savestring (convfn);
 
       if (convfn != dentry)
-       free (convfn);
+       xfree (convfn);
 
       return (temp);
     }
@@ -2481,7 +2485,7 @@ rl_menu_complete (count, ignore)
   static int full_completion = 0;      /* set to 1 if menu completion should reinitialize on next call */
   static int orig_start, orig_end;
   static char quote_char;
-  static int delimiter;
+  static int delimiter, cstate;
 
   /* The first time through, we generate the list of matches and set things
      up to insert them. */
@@ -2589,6 +2593,11 @@ rl_menu_complete (count, ignore)
          full_completion = 1;
          return (0);
        }
+      else if (_rl_menu_complete_prefix_first && match_list_size > 1)
+       {
+         rl_ding ();
+         return (0);
+       }
     }
 
   /* Now we have the list of matches.  Replace the text between
index 60a9caf8081d2cef7fe39e506ebdb0acaba80668..90baa176c5e7cbb4f9162bf0035fa4ea6290e68b 100644 (file)
@@ -492,6 +492,11 @@ completion.
 If set to \fBOff\fP, the leading `.' must be
 supplied by the user in the filename to be completed.
 .TP
+.B menu\-complete\-display\-prefix (Off)
+If set to \fBOn\fP, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list.
+.TP
 .B output\-meta (Off)
 If set to \fBOn\fP, readline will display characters with the
 eighth bit set directly rather than as a meta-prefixed escape
index e83e39061e84031fc90335dd9114b0adbee122fd..60a9caf8081d2cef7fe39e506ebdb0acaba80668 100644 (file)
@@ -6,9 +6,9 @@
 .\"    Case Western Reserve University
 .\"    chet@ins.CWRU.Edu
 .\"
-.\"    Last Change: Thu Apr 22 18:59:21 EDT 2010
+.\"    Last Change: Sat Aug 28 18:56:32 EDT 2010
 .\"
-.TH READLINE 3 "2010 April 22" "GNU Readline 6.2"
+.TH READLINE 3 "2010 August 28" "GNU Readline 6.2"
 .\"
 .\" File Name macro.  This used to be `.PN', for Path Name,
 .\" but Sun doesn't seem to like that very much.
@@ -76,7 +76,7 @@ is read with a non\-empty line, it is
 treated as a newline.
 .SH NOTATION
 .LP
-An emacs-style notation is used to denote
+An Emacs-style notation is used to denote
 keystrokes.  Control keys are denoted by C\-\fIkey\fR, e.g., C\-n
 means Control\-N.  Similarly, 
 .I meta
@@ -407,7 +407,7 @@ mapped to \fBself-insert\fP.
 .TP
 .B editing\-mode (emacs)
 Controls whether readline begins with a set of key bindings similar
-to emacs or vi.
+to \fIEmacs\fP or \fIvi\fP.
 .B editing\-mode
 can be set to either
 .B emacs
@@ -430,11 +430,11 @@ key the terminal claims to support when it is called.  On many terminals,
 the meta key is used to send eight-bit characters.
 .TP
 .B expand\-tilde (Off)
-If set to \fBon\fP, tilde expansion is performed when readline
+If set to \fBOn\fP, tilde expansion is performed when readline
 attempts word completion.
 .TP
 .B history\-preserve\-point (Off)
-If set to \fBon\fP, the history code attempts to place point at the 
+If set to \fBOn\fP, the history code attempts to place point at the 
 same location on each history line retrieved with \fBprevious-history\fP 
 or \fBnext-history\fP.
 .TP
@@ -506,7 +506,7 @@ If set to \fBOn\fP, readline will display completions with matches
 sorted horizontally in alphabetical order, rather than down the screen.
 .TP
 .B revert\-all\-at\-newline (Off)
-If set to \fBon\fP, readline will undo all changes to history lines
+If set to \fBOn\fP, readline will undo all changes to history lines
 before returning when \fBaccept\-line\fP is executed.  By default,
 history lines may be modified and retain individual undo lists across
 calls to \fBreadline\fP.
@@ -514,7 +514,7 @@ calls to \fBreadline\fP.
 .B show\-all\-if\-ambiguous (Off)
 This alters the default behavior of the completion functions.  If
 set to
-.BR on ,
+.BR On ,
 words which have more than one possible completion cause the
 matches to be listed immediately instead of ringing the bell.
 .TP
@@ -522,7 +522,7 @@ matches to be listed immediately instead of ringing the bell.
 This alters the default behavior of the completion functions in
 a fashion similar to \fBshow\-all\-if\-ambiguous\fP.
 If set to
-.BR on , 
+.BR On , 
 words which have more than one possible completion without any
 possible partial completion (the possible completions don't share 
 a common prefix) cause the matches to be listed immediately instead
@@ -582,7 +582,7 @@ library sets the \fIapplication name\fP, and an initialization
 file can test for a particular value.
 This could be used to bind key sequences to functions useful for
 a specific program.  For instance, the following command adds a
-key sequence that quotes the current or previous word in Bash:
+key sequence that quotes the current or previous word in \fBbash\fP:
 .sp 1
 .RS
 .nf
@@ -962,7 +962,7 @@ through the list.
 This command is intended to be bound to \fBTAB\fP, but is unbound
 by default.
 .TP
-.B menu\-complete-\backward
+.B menu\-complete\-backward
 Identical to \fBmenu\-complete\fP, but moves backward through the list
 of possible completions, as if \fBmenu\-complete\fP had been given a
 negative argument.  This command is unbound by default.
@@ -1040,7 +1040,7 @@ character.  A negative count searches for previous occurrences.
 A character is read and point is moved to the previous occurrence of that
 character.  A negative count searches for subsequent occurrences.
 .TP
-.B skip\-csi\-sequence ()
+.B 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
index f34aad515aa4677c34acd292dae4d7a6447f4ec7..43049296c9ffe301fd429dd5d515b38f7acee873 100644 (file)
@@ -591,6 +591,12 @@ If set to @samp{off}, the leading @samp{.} must be
 supplied by the user in the filename to be completed.
 This variable is @samp{on} by default.
 
+@item menu-complete-display-prefix
+@vindex menu-complete-display-prefix
+If set to @samp{on}, menu completion displays the common prefix of the
+list of possible completions (which may be empty) before cycling through
+the list.  The default is @samp{off}.
+
 @item output-meta
 @vindex output-meta
 If set to @samp{on}, Readline will display characters with the
index 173d1bbb883e41728dd6c9dac1edb047b4880734..f34aad515aa4677c34acd292dae4d7a6447f4ec7 100644 (file)
@@ -51,7 +51,7 @@ Command line editing is enabled by default when using an interactive shell,
 unless the @option{--noediting} option is supplied at shell invocation.
 Line editing is also used when using the @option{-e} option to the
 @code{read} builtin command (@pxref{Bash Builtins}).
-By default, the line editing commands are similar to those of emacs.
+By default, the line editing commands are similar to those of Emacs.
 A vi-style line editing interface is also available.
 Line editing can be enabled at any time using the @option{-o emacs} or
 @option{-o vi} options to the @code{set} builtin command
index 181e4ad2f5535812bee03633847e6ab34c445be2..033c5307b209e9e57c742855e33609dc2cf8304e 100644 (file)
@@ -4,7 +4,7 @@ Copyright (C) 1988-2010 Free Software Foundation, Inc.
 
 @set EDITION 6.2
 @set VERSION 6.2
-@set UPDATED August 28 2010
-@set UPDATED-MONTH August 2010
+@set UPDATED September 6 2010
+@set UPDATED-MONTH September 2010
 
-@set LASTCHANGE Sat Aug 28 18:57:07 EDT 2010
+@set LASTCHANGE Mon Sep  6 22:07:10 EDT 2010
index f25776752171971ae9caa6d514bbb9f8dd5cae82..181e4ad2f5535812bee03633847e6ab34c445be2 100644 (file)
@@ -4,7 +4,7 @@ Copyright (C) 1988-2010 Free Software Foundation, Inc.
 
 @set EDITION 6.2
 @set VERSION 6.2
-@set UPDATED August 12 2010
+@set UPDATED August 28 2010
 @set UPDATED-MONTH August 2010
 
-@set LASTCHANGE Thu Aug 12 22:24:28 EDT 2010
+@set LASTCHANGE Sat Aug 28 18:57:07 EDT 2010
index ddaf0af74d9b3028b3fff62454fa80fa07b33de4..712b9ea8ece0eacaf135d338ff5be514a3a59868 100644 (file)
@@ -105,6 +105,7 @@ _rl_scxt_alloc (type, flags)
   cxt->save_undo_list = 0;
 
   cxt->keymap = _rl_keymap;
+  cxt->okeymap = _rl_keymap;
 
   cxt->history_pos = 0;
   cxt->direction = 0;
@@ -338,10 +339,9 @@ _rl_isearch_dispatch (cxt, c)
       return -1;
     }
 
-#if 0
   /* If we are moving into a new keymap, modify cxt->keymap and go on.
      This can be a problem if c == ESC and we want to terminate the
-     incremental search */
+     incremental search, so we check */
   if (c >= 0 && cxt->keymap[c].type == ISKMAP && strchr (cxt->search_terminators, cxt->lastc) == 0)
     {
       cxt->keymap = FUNCTION_TO_KEYMAP (cxt->keymap, c);
@@ -350,7 +350,6 @@ _rl_isearch_dispatch (cxt, c)
         something useful if this doesn't end up mapping to a command. */
       return 1;
     }
-#endif
 
   /* Translate the keys we do something with to opcodes. */
   if (c >= 0 && cxt->keymap[c].type == ISFUNC)
@@ -363,14 +362,22 @@ _rl_isearch_dispatch (cxt, c)
        cxt->lastc = (cxt->sflags & SF_REVERSE) ? -2 : -1;
       else if (f == rl_rubout)
        cxt->lastc = -3;
-      else if (c == CTRL ('G'))
+      else if (c == CTRL ('G') || f == rl_abort)
        cxt->lastc = -4;
-      else if (c == CTRL ('W'))        /* XXX */
+      else if (c == CTRL ('W') || f == rl_unix_word_rubout)    /* XXX */
        cxt->lastc = -5;
-      else if (c == CTRL ('Y'))        /* XXX */
+      else if (c == CTRL ('Y') || f == rl_yank)        /* XXX */
        cxt->lastc = -6;
     }
 
+  /* If we changed the keymap earlier while translating a key sequence into
+     a command, restore it now that we've succeeded. */
+  if (cxt->sflags & SF_CHGKMAP)
+    {
+      cxt->keymap = cxt->okeymap;
+      cxt->sflags &= ~SF_CHGKMAP;
+    }
+
   /* The characters in isearch_terminators (set from the user-settable
      variable isearch-terminators) are used to terminate the search but
      not subsequently execute the character as a command.  The default
@@ -415,16 +422,6 @@ _rl_isearch_dispatch (cxt, c)
        return (0);
       }
 
-#if 0
-  /* If we changed the keymap earlier while translating a key sequence into
-     a command, restore it now that we've succeeded. */
-  if (cxt->sflags & SF_CHGKMAP)
-    {
-      cxt->keymap = _rl_keymap;
-      cxt->sflags &= ~SF_CHGKMAP;
-    }
-#endif
-
   /* Now dispatch on the character.  `Opcodes' affect the search string or
      state.  Other characters are added to the string.  */
   switch (cxt->lastc)
index b9c176f811b81d98f28289b80ef133b5fec824cb..82d9520a1a680f9f8b11bb9aab58f2fd59ba529b 100644 (file)
@@ -105,6 +105,7 @@ _rl_scxt_alloc (type, flags)
   cxt->save_undo_list = 0;
 
   cxt->keymap = _rl_keymap;
+  cxt->okeymap = _rl_keymap;
 
   cxt->history_pos = 0;
   cxt->direction = 0;
@@ -338,19 +339,17 @@ _rl_isearch_dispatch (cxt, c)
       return -1;
     }
 
-#if 0
-  /* If we are moving into a new keymap, modify cxt->keymap and go on */
+  /* If we are moving into a new keymap, modify cxt->keymap and go on.
+     This can be a problem if c == ESC and we want to terminate the
+     incremental search, so we check */
   if (c >= 0 && cxt->keymap[c].type == ISKMAP && strchr (cxt->search_terminators, cxt->lastc) == 0)
     {
       cxt->keymap = FUNCTION_TO_KEYMAP (cxt->keymap, c);
       cxt->sflags |= SF_CHGKMAP;
       /* XXX - we should probably save this sequence, so we can do
-        something useful if this doesn't end up mapping to a command.
-        This can be a problem if c == ESC and we want to terminate
-        the incremental search */
+        something useful if this doesn't end up mapping to a command. */
       return 1;
     }
-#endif
 
   /* Translate the keys we do something with to opcodes. */
   if (c >= 0 && cxt->keymap[c].type == ISFUNC)
@@ -371,6 +370,14 @@ _rl_isearch_dispatch (cxt, c)
        cxt->lastc = -6;
     }
 
+  /* If we changed the keymap earlier while translating a key sequence into
+     a command, restore it now that we've succeeded. */
+  if (cxt->sflags & SF_CHGKMAP)
+    {
+      cxt->keymap = cxt->okeymap;
+      cxt->sflags &= ~SF_CHGKMAP;
+    }
+
   /* The characters in isearch_terminators (set from the user-settable
      variable isearch-terminators) are used to terminate the search but
      not subsequently execute the character as a command.  The default
@@ -415,16 +422,6 @@ _rl_isearch_dispatch (cxt, c)
        return (0);
       }
 
-#if 0
-  /* If we changed the keymap earlier while translating a key sequence into
-     a command, restore it now that we've succeeded. */
-  if (cxt->sflags & SF_CHGKMAP)
-    {
-      cxt->keymap = _rl_keymap;
-      cxt->sflags &= ~SF_CHGKMAP;
-    }
-#endif
-
   /* Now dispatch on the character.  `Opcodes' affect the search string or
      state.  Other characters are added to the string.  */
   switch (cxt->lastc)
index 312aca82532d0990e0a58d5b7de212fa690e026d..e3c44ce4bc00c95752480b477a64d85e2e959ff7 100644 (file)
@@ -81,6 +81,7 @@ typedef struct  __rl_search_context
   UNDO_LIST *save_undo_list;
 
   Keymap keymap;       /* used when dispatching commands in search string */
+  Keymap okeymap;      /* original keymap */
 
   int history_pos;
   int direction;
@@ -417,6 +418,7 @@ extern int _rl_completion_case_map;
 extern int _rl_match_hidden_files;
 extern int _rl_page_completions;
 extern int _rl_skip_completed_text;
+extern int _rl_menu_complete_prefix_first;
 
 /* display.c */
 extern int _rl_vis_botlin;
index 3f657c7853cc3eb917912f217374953650154884..404341a242e03a953d1b5caf8f201cd0e63e1097 100644 (file)
@@ -56,6 +56,7 @@
 #define SF_REVERSE             0x01
 #define SF_FOUND               0x02
 #define SF_FAILED              0x04
+#define SF_CHGKMAP             0x08
 
 typedef struct  __rl_search_context
 {
@@ -80,6 +81,7 @@ typedef struct  __rl_search_context
   UNDO_LIST *save_undo_list;
 
   Keymap keymap;       /* used when dispatching commands in search string */
+  Keymap okeymap;      /* original keymap */
 
   int history_pos;
   int direction;
diff --git a/shell.c b/shell.c
index 4f2faa773e55fc0334e725a9cdaa67914ad6e752..55bed65bfd19402b6d9793fadbba2d60c92cd60f 100644 (file)
--- a/shell.c
+++ b/shell.c
@@ -526,21 +526,20 @@ main (argc, argv, env)
   else
     init_noninteractive ();
 
-#define CLOSE_FDS_AT_LOGIN
-#if defined (CLOSE_FDS_AT_LOGIN)
   /*
    * Some systems have the bad habit of starting login shells with lots of open
    * file descriptors.  For instance, most systems that have picked up the
    * pre-4.0 Sun YP code leave a file descriptor open each time you call one
    * of the getpw* functions, and it's set to be open across execs.  That
-   * means one for login, one for xterm, one for shelltool, etc.
+   * means one for login, one for xterm, one for shelltool, etc.  There are
+   * also systems that open persistent FDs to other agents or files as part
+   * of process startup; these need to be set to be close-on-exec.
    */
   if (login_shell && interactive_shell)
     {
       for (i = 3; i < 20; i++)
-       close (i);
+       SET_CLOSE_ON_EXEC (i);
     }
-#endif /* CLOSE_FDS_AT_LOGIN */
 
   /* If we're in a strict Posix.2 mode, turn on interactive comments,
      alias expansion in non-interactive shells, and other Posix.2 things. */
index 9074050d4a3231f33b4868bb0b08b2622c5981df..4f2faa773e55fc0334e725a9cdaa67914ad6e752 100644 (file)
--- a/shell.c~
+++ b/shell.c~
@@ -1,6 +1,6 @@
 /* shell.c -- GNU's idea of the POSIX shell specification. */
 
-/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2010 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
index 54b152244ba1a4bf762c88775f45f248181d630c..b4601e794304a68815abd132e2ac7d1e4a4c29ee 100644 (file)
--- a/subst.c~
+++ b/subst.c~
@@ -1692,7 +1692,7 @@ skip_to_delim (string, start, delims, flags)
 {
   int i, pass_next, backq, si, c, invert, skipquote, skipcmd;
   size_t slen;
-  char *temp;
+  char *temp, open[3];
   DECLARE_MBSTATE;
 
   slen = strlen (string + start) + start;
@@ -1775,6 +1775,25 @@ skip_to_delim (string, start, delims, flags)
          continue;
        }
 #endif /* PROCESS_SUBSTITUTION */
+#if defined (EXTENDED_GLOB)
+      else if ((flags & SD_EXTGLOB) && extended_glob && string[i+1] == LPAREN && member (c, "?*+!@"))
+       {
+         si = i + 2;
+         if (string[si] == '\0')
+           CQ_RETURN(si);
+
+         open[0] = c;
+         open[1] = LPAREN;
+         open[2] = '\0';
+         temp = extract_delimited_string (string, &si, open, "(", ")", SX_NOALLOC); /* ) */
+
+         i = si;
+         if (string[i] == '\0')        /* don't increment i past EOS in loop */
+           break;
+         i++;
+         continue;
+       }
+#endif
       else if ((skipquote || invert) && (member (c, delims) == 0))
        break;
       else
@@ -7430,6 +7449,7 @@ param_expand (string, sindex, quoted, expanded_something,
     /* $? -- return value of the last synchronous command. */
     case '?':
       temp = itos (last_command_exit_value);
+itrace("last_command_exit_value = %d", last_command_exit_value);
       break;
 
     /* $- -- flags supplied to the shell on invocation or by `set'. */
index 137826f68ccd18ba084954a8a852ec3d74fb5f70..abbcd1e18c385f85e1d573015d077231088d6a7e 100644 (file)
@@ -192,26 +192,34 @@ initialize_signames ()
 #endif
 
 /* SunOS5 */
-#if defined (SIGLWP)   /* special signal used by thread library */
+#if defined (SIGLWP)   /* Solaris: special signal used by thread library */
   signal_names[SIGLWP] = "SIGLWP";
 #endif
 
-#if defined (SIGFREEZE)        /* special signal used by CPR */
+#if defined (SIGFREEZE)        /* Solaris: special signal used by CPR */
   signal_names[SIGFREEZE] = "SIGFREEZE";
 #endif
 
-#if defined (SIGTHAW)  /* special signal used by CPR */
+#if defined (SIGTHAW)  /* Solaris: special signal used by CPR */
   signal_names[SIGTHAW] = "SIGTHAW";
 #endif
 
-#if defined (SIGCANCEL)        /* thread cancellation signal used by libthread */
+#if defined (SIGCANCEL)        /* Solaris: thread cancellation signal used by libthread */
   signal_names[SIGCANCEL] = "SIGCANCEL";
 #endif
 
-#if defined (SIGXRES)  /* resource control exceeded */
+#if defined (SIGXRES)  /* Solaris: resource control exceeded */
   signal_names[SIGXRES] = "SIGXRES";
 #endif
 
+#if defined (SIGJVM1)  /* Solaris: Java Virtual Machine 1 */
+  signal_names[SIGJVM1] = "SIGJVM1";
+#endif
+
+#if defined (SIGJVM2)  /* Solaris: Java Virtual Machine 2 */
+  signal_names[SIGJVM2] = "SIGJVM2";
+#endif
+
 /* HP-UX */
 #if defined (SIGDIL)   /* DIL signal (?) */
   signal_names[SIGDIL] = "SIGDIL";
diff --git a/support/signames.c~ b/support/signames.c~
new file mode 100644 (file)
index 0000000..137826f
--- /dev/null
@@ -0,0 +1,393 @@
+/* signames.c -- Create an array of signal names. */
+
+/* Copyright (C) 2006 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <config.h>
+
+#include <stdio.h>
+
+#include <sys/types.h>
+#include <signal.h>
+
+#if defined (HAVE_STDLIB_H)
+#  include <stdlib.h>
+#else
+#  include "ansi_stdlib.h"
+#endif /* HAVE_STDLIB_H */
+
+#if !defined (NSIG)
+#  define NSIG 64
+#endif
+
+/*
+ * Special traps:
+ *     EXIT == 0
+ *     DEBUG == NSIG
+ *     ERR == NSIG+1
+ *     RETURN == NSIG+2
+ */
+#define LASTSIG NSIG+2
+
+char *signal_names[2 * (LASTSIG)];
+
+#define signal_names_size (sizeof(signal_names)/sizeof(signal_names[0]))
+
+/* AIX 4.3 defines SIGRTMIN and SIGRTMAX as 888 and 999 respectively.
+   I don't want to allocate so much unused space for the intervening signal
+   numbers, so we just punt if SIGRTMAX is past the bounds of the
+   signal_names array (handled in configure). */
+#if defined (SIGRTMAX) && defined (UNUSABLE_RT_SIGNALS)
+#  undef SIGRTMAX
+#  undef SIGRTMIN
+#endif
+
+#if defined (SIGRTMAX) || defined (SIGRTMIN)
+#  define RTLEN 14
+#  define RTLIM 256
+#endif
+
+#if defined (BUILDTOOL)
+extern char *progname;
+#endif
+
+void
+initialize_signames ()
+{
+  register int i;
+#if defined (SIGRTMAX) || defined (SIGRTMIN)
+  int rtmin, rtmax, rtcnt;
+#endif
+
+  for (i = 1; i < signal_names_size; i++)
+    signal_names[i] = (char *)NULL;
+
+  /* `signal' 0 is what we do on exit. */
+  signal_names[0] = "EXIT";
+
+  /* Place signal names which can be aliases for more common signal
+     names first.  This allows (for example) SIGABRT to overwrite SIGLOST. */
+
+  /* POSIX 1003.1b-1993 real time signals, but take care of incomplete
+     implementations. Acoording to the standard, both, SIGRTMIN and
+     SIGRTMAX must be defined, SIGRTMIN must be stricly less than
+     SIGRTMAX, and the difference must be at least 7, that is, there
+     must be at least eight distinct real time signals. */
+
+  /* The generated signal names are SIGRTMIN, SIGRTMIN+1, ...,
+     SIGRTMIN+x, SIGRTMAX-x, ..., SIGRTMAX-1, SIGRTMAX. If the number
+     of RT signals is odd, there is an extra SIGRTMIN+(x+1).
+     These names are the ones used by ksh and /usr/xpg4/bin/sh on SunOS5. */
+
+#if defined (SIGRTMIN)
+  rtmin = SIGRTMIN;
+  signal_names[rtmin] = "SIGRTMIN";
+#endif
+
+#if defined (SIGRTMAX)
+  rtmax = SIGRTMAX;
+  signal_names[rtmax] = "SIGRTMAX";
+#endif
+
+#if defined (SIGRTMAX) && defined (SIGRTMIN)
+  if (rtmax > rtmin)
+    {
+      rtcnt = (rtmax - rtmin - 1) / 2;
+      /* croak if there are too many RT signals */
+      if (rtcnt >= RTLIM/2)
+       {
+         rtcnt = RTLIM/2-1;
+#ifdef BUILDTOOL
+         fprintf(stderr, "%s: error: more than %d real time signals, fix `%s'\n",
+                 progname, RTLIM, progname);
+#endif
+       }
+
+      for (i = 1; i <= rtcnt; i++)
+       {
+         signal_names[rtmin+i] = (char *)malloc(RTLEN);
+         if (signal_names[rtmin+i])
+           sprintf (signal_names[rtmin+i], "SIGRTMIN+%d", i);
+         signal_names[rtmax-i] = (char *)malloc(RTLEN);
+         if (signal_names[rtmax-i])
+           sprintf (signal_names[rtmax-i], "SIGRTMAX-%d", i);
+       }
+
+      if (rtcnt < RTLIM/2-1 && rtcnt != (rtmax-rtmin)/2)
+       {
+         /* Need an extra RTMIN signal */
+         signal_names[rtmin+rtcnt+1] = (char *)malloc(RTLEN);
+         if (signal_names[rtmin+rtcnt+1])
+           sprintf (signal_names[rtmin+rtcnt+1], "SIGRTMIN+%d", rtcnt+1);
+       }
+    }
+#endif /* SIGRTMIN && SIGRTMAX */
+
+#if defined (SIGLOST)  /* resource lost (eg, record-lock lost) */
+  signal_names[SIGLOST] = "SIGLOST";
+#endif
+
+/* AIX */
+#if defined (SIGMSG)   /* HFT input data pending */
+  signal_names[SIGMSG] = "SIGMSG";
+#endif
+
+#if defined (SIGDANGER)        /* system crash imminent */
+  signal_names[SIGDANGER] = "SIGDANGER";
+#endif
+
+#if defined (SIGMIGRATE) /* migrate process to another CPU */
+  signal_names[SIGMIGRATE] = "SIGMIGRATE";
+#endif
+
+#if defined (SIGPRE)   /* programming error */
+  signal_names[SIGPRE] = "SIGPRE";
+#endif
+
+#if defined (SIGVIRT)  /* AIX virtual time alarm */
+  signal_names[SIGVIRT] = "SIGVIRT";
+#endif
+
+#if defined (SIGALRM1) /* m:n condition variables */
+  signal_names[SIGALRM1] = "SIGALRM1";
+#endif
+
+#if defined (SIGWAITING)       /* m:n scheduling */
+  signal_names[SIGWAITING] = "SIGWAITING";
+#endif
+
+#if defined (SIGGRANT) /* HFT monitor mode granted */
+  signal_names[SIGGRANT] = "SIGGRANT";
+#endif
+
+#if defined (SIGKAP)   /* keep alive poll from native keyboard */
+  signal_names[SIGKAP] = "SIGKAP";
+#endif
+
+#if defined (SIGRETRACT) /* HFT monitor mode retracted */
+  signal_names[SIGRETRACT] = "SIGRETRACT";
+#endif
+
+#if defined (SIGSOUND) /* HFT sound sequence has completed */
+  signal_names[SIGSOUND] = "SIGSOUND";
+#endif
+
+#if defined (SIGSAK)   /* Secure Attention Key */
+  signal_names[SIGSAK] = "SIGSAK";
+#endif
+
+/* SunOS5 */
+#if defined (SIGLWP)   /* special signal used by thread library */
+  signal_names[SIGLWP] = "SIGLWP";
+#endif
+
+#if defined (SIGFREEZE)        /* special signal used by CPR */
+  signal_names[SIGFREEZE] = "SIGFREEZE";
+#endif
+
+#if defined (SIGTHAW)  /* special signal used by CPR */
+  signal_names[SIGTHAW] = "SIGTHAW";
+#endif
+
+#if defined (SIGCANCEL)        /* thread cancellation signal used by libthread */
+  signal_names[SIGCANCEL] = "SIGCANCEL";
+#endif
+
+#if defined (SIGXRES)  /* resource control exceeded */
+  signal_names[SIGXRES] = "SIGXRES";
+#endif
+
+/* HP-UX */
+#if defined (SIGDIL)   /* DIL signal (?) */
+  signal_names[SIGDIL] = "SIGDIL";
+#endif
+
+/* System V */
+#if defined (SIGCLD)   /* Like SIGCHLD.  */
+  signal_names[SIGCLD] = "SIGCLD";
+#endif
+
+#if defined (SIGPWR)   /* power state indication */
+  signal_names[SIGPWR] = "SIGPWR";
+#endif
+
+#if defined (SIGPOLL)  /* Pollable event (for streams)  */
+  signal_names[SIGPOLL] = "SIGPOLL";
+#endif
+
+/* Unknown */
+#if defined (SIGWINDOW)
+  signal_names[SIGWINDOW] = "SIGWINDOW";
+#endif
+
+/* Linux */
+#if defined (SIGSTKFLT)
+  signal_names[SIGSTKFLT] = "SIGSTKFLT";
+#endif
+
+/* FreeBSD */
+#if defined (SIGTHR)   /* thread interrupt */
+  signal_names[SIGTHR] = "SIGTHR";
+#endif
+
+/* Common */
+#if defined (SIGHUP)   /* hangup */
+  signal_names[SIGHUP] = "SIGHUP";
+#endif
+
+#if defined (SIGINT)   /* interrupt */
+  signal_names[SIGINT] = "SIGINT";
+#endif
+
+#if defined (SIGQUIT)  /* quit */
+  signal_names[SIGQUIT] = "SIGQUIT";
+#endif
+
+#if defined (SIGILL)   /* illegal instruction (not reset when caught) */
+  signal_names[SIGILL] = "SIGILL";
+#endif
+
+#if defined (SIGTRAP)  /* trace trap (not reset when caught) */
+  signal_names[SIGTRAP] = "SIGTRAP";
+#endif
+
+#if defined (SIGIOT)   /* IOT instruction */
+  signal_names[SIGIOT] = "SIGIOT";
+#endif
+
+#if defined (SIGABRT)  /* Cause current process to dump core. */
+  signal_names[SIGABRT] = "SIGABRT";
+#endif
+
+#if defined (SIGEMT)   /* EMT instruction */
+  signal_names[SIGEMT] = "SIGEMT";
+#endif
+
+#if defined (SIGFPE)   /* floating point exception */
+  signal_names[SIGFPE] = "SIGFPE";
+#endif
+
+#if defined (SIGKILL)  /* kill (cannot be caught or ignored) */
+  signal_names[SIGKILL] = "SIGKILL";
+#endif
+
+#if defined (SIGBUS)   /* bus error */
+  signal_names[SIGBUS] = "SIGBUS";
+#endif
+
+#if defined (SIGSEGV)  /* segmentation violation */
+  signal_names[SIGSEGV] = "SIGSEGV";
+#endif
+
+#if defined (SIGSYS)   /* bad argument to system call */
+  signal_names[SIGSYS] = "SIGSYS";
+#endif
+
+#if defined (SIGPIPE)  /* write on a pipe with no one to read it */
+  signal_names[SIGPIPE] = "SIGPIPE";
+#endif
+
+#if defined (SIGALRM)  /* alarm clock */
+  signal_names[SIGALRM] = "SIGALRM";
+#endif
+
+#if defined (SIGTERM)  /* software termination signal from kill */
+  signal_names[SIGTERM] = "SIGTERM";
+#endif
+
+#if defined (SIGURG)   /* urgent condition on IO channel */
+  signal_names[SIGURG] = "SIGURG";
+#endif
+
+#if defined (SIGSTOP)  /* sendable stop signal not from tty */
+  signal_names[SIGSTOP] = "SIGSTOP";
+#endif
+
+#if defined (SIGTSTP)  /* stop signal from tty */
+  signal_names[SIGTSTP] = "SIGTSTP";
+#endif
+
+#if defined (SIGCONT)  /* continue a stopped process */
+  signal_names[SIGCONT] = "SIGCONT";
+#endif
+
+#if defined (SIGCHLD)  /* to parent on child stop or exit */
+  signal_names[SIGCHLD] = "SIGCHLD";
+#endif
+
+#if defined (SIGTTIN)  /* to readers pgrp upon background tty read */
+  signal_names[SIGTTIN] = "SIGTTIN";
+#endif
+
+#if defined (SIGTTOU)  /* like TTIN for output if (tp->t_local&LTOSTOP) */
+  signal_names[SIGTTOU] = "SIGTTOU";
+#endif
+
+#if defined (SIGIO)    /* input/output possible signal */
+  signal_names[SIGIO] = "SIGIO";
+#endif
+
+#if defined (SIGXCPU)  /* exceeded CPU time limit */
+  signal_names[SIGXCPU] = "SIGXCPU";
+#endif
+
+#if defined (SIGXFSZ)  /* exceeded file size limit */
+  signal_names[SIGXFSZ] = "SIGXFSZ";
+#endif
+
+#if defined (SIGVTALRM)        /* virtual time alarm */
+  signal_names[SIGVTALRM] = "SIGVTALRM";
+#endif
+
+#if defined (SIGPROF)  /* profiling time alarm */
+  signal_names[SIGPROF] = "SIGPROF";
+#endif
+
+#if defined (SIGWINCH) /* window changed */
+  signal_names[SIGWINCH] = "SIGWINCH";
+#endif
+
+/* 4.4 BSD */
+#if defined (SIGINFO) && !defined (_SEQUENT_)  /* information request */
+  signal_names[SIGINFO] = "SIGINFO";
+#endif
+
+#if defined (SIGUSR1)  /* user defined signal 1 */
+  signal_names[SIGUSR1] = "SIGUSR1";
+#endif
+
+#if defined (SIGUSR2)  /* user defined signal 2 */
+  signal_names[SIGUSR2] = "SIGUSR2";
+#endif
+
+#if defined (SIGKILLTHR)       /* BeOS: Kill Thread */
+  signal_names[SIGKILLTHR] = "SIGKILLTHR";
+#endif
+
+  for (i = 0; i < NSIG; i++)
+    if (signal_names[i] == (char *)NULL)
+      {
+       signal_names[i] = (char *)malloc (18);
+       if (signal_names[i])
+         sprintf (signal_names[i], "SIGJUNK(%d)", i);
+      }
+
+  signal_names[NSIG] = "DEBUG";
+  signal_names[NSIG+1] = "ERR";
+  signal_names[NSIG+2] = "RETURN";
+}