mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-01-01 05:16:05 +01:00
29892: fix regular expression replacements in replace-string
improve variable save and restore in read-from-minibuffer
This commit is contained in:
parent
45faf8f5b2
commit
a6e039e12e
3 changed files with 21 additions and 27 deletions
|
@ -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 $
|
||||
*****************************************************
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}}
|
||||
|
|
Loading…
Reference in a new issue