diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2011-11-04 14:31:23 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2011-11-04 14:31:23 +0000 |
commit | a6e039e12e5b9e480b876971ff644c3180efb2bc (patch) | |
tree | a6f25cf495e08c034b265354d3415a44827741a7 | |
parent | 45faf8f5b2758a638e0958928262ca9d26980885 (diff) | |
download | zsh-a6e039e12e5b9e480b876971ff644c3180efb2bc.tar.gz zsh-a6e039e12e5b9e480b876971ff644c3180efb2bc.tar.xz zsh-a6e039e12e5b9e480b876971ff644c3180efb2bc.zip |
29892: fix regular expression replacements in replace-string
improve variable save and restore in read-from-minibuffer
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | Functions/Zle/read-from-minibuffer | 35 | ||||
-rw-r--r-- | Functions/Zle/replace-string-again | 6 |
3 files changed, 21 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog index d2a18fd80..8eda2f415 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2011-11-04 Peter Stephenson <pws@csr.com> + * 29892: Functions/Zle/read-from-minibuffer, + Functions/Zle/replace-string: fix regular expression + replacements right of the cursor; make save and restore + in read-from-minibuffer more automated. + * 29891: Doc/Zsh/zle.yo, Src/Zle/zle_thingy.c: allow "zle -lL" with arguments to list in -L format. @@ -15538,5 +15543,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.5492 $ +* $Revision: 1.5493 $ ***************************************************** diff --git a/Functions/Zle/read-from-minibuffer b/Functions/Zle/read-from-minibuffer index fce6b5319..57e926884 100644 --- a/Functions/Zle/read-from-minibuffer +++ b/Functions/Zle/read-from-minibuffer @@ -19,26 +19,19 @@ while getopts "k:" opt; do done (( OPTIND > 1 )) && shift $(( OPTIND - 1 )) +local readprompt="$1" lbuf_init="$2" rbuf_init="$3" + +# Use anonymous function to make sure special values get restored, +# even if this function is called as a widget. +# local +h ensures special parameters stay special. +() { local pretext="$PREDISPLAY$LBUFFER$RBUFFER$POSTDISPLAY " -# We could use the local variables mechanism to save these -# values, but if read-from-minibuffer is called as a widget -# (which isn't actually all that useful) the values won't be -# restored because the variables are already local at the current -# level and don't get restored when they go out of scope. -# We could do it with an additional function level. - local save_lbuffer=$LBUFFER - local save_rbuffer=$RBUFFER - local save_predisplay=$PREDISPLAY - local save_postdisplay=$POSTDISPLAY - local -a save_region_highlight - save_region_highlight=("${region_highlight[@]}") - -{ - LBUFFER="$2" - RBUFFER="$3" - PREDISPLAY="$pretext${1:-? }" - POSTDISPLAY= + local +h LBUFFER="$lbuf_init" + local +h RBUFFER="$rbuf_init" + local +h PREDISPLAY="$pretext${readprompt:-? }" + local +h POSTDISPLAY= + local +h -a region_highlight region_highlight=("P${#pretext} ${#PREDISPLAY} bold") if [[ -n $keys ]]; then @@ -50,12 +43,6 @@ done stat=$? (( stat )) || REPLY=$BUFFER fi -} always { - LBUFFER=$save_lbuffer - RBUFFER=$save_rbuffer - PREDISPLAY=$save_predisplay - POSTDISPLAY=$save_postdisplay - region_highlight=("${save_region_highlight[@]}") } return $stat diff --git a/Functions/Zle/replace-string-again b/Functions/Zle/replace-string-again index f24c14f88..dac3db755 100644 --- a/Functions/Zle/replace-string-again +++ b/Functions/Zle/replace-string-again @@ -40,8 +40,10 @@ if [[ $curwidget = *(pattern|regex)* ]]; then rep2+=$rep if [[ $curwidget = *regex* ]]; then autoload -Uz regexp-replace - regexp-replace LBUFFER $_replace_string_src $rep2 || return 1 - regexp-replace RBUFFER $_replace_string_src $rep2 || return 1 + integer ret=1 + regexp-replace LBUFFER $_replace_string_src $rep2 && ret=0 + regexp-replace RBUFFER $_replace_string_src $rep2 && ret=0 + return ret else LBUFFER=${LBUFFER//(#bm)$~_replace_string_src/${(e)rep2}} RBUFFER=${RBUFFER//(#bm)$~_replace_string_src/${(e)rep2}} |