diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Functions/Zle/edit-command-line | 10 |
2 files changed, 10 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog index 497092813..afb3ce8da 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2017-10-15 Barton E. Schaefer <schaefer@zsh.org> + + * 41898: Functions/Zle/edit-command-line: handle multi-word values + of $VISUAL et al., and line counting of buffer for emacs startup + 2017-10-13 Barton E. Schaefer <schaefer@zsh.org> * 41873: Src/lex.c: temporarily disable effects of ${(Z:n:)...} diff --git a/Functions/Zle/edit-command-line b/Functions/Zle/edit-command-line index 353f2609a..e17893e93 100644 --- a/Functions/Zle/edit-command-line +++ b/Functions/Zle/edit-command-line @@ -15,15 +15,15 @@ (( $+zle_bracketed_paste )) && print -r -n - $zle_bracketed_paste[2] # Open the editor, placing the cursor at the right place if we know how. - local editor=${${VISUAL:-${EDITOR:-vi}}} + local editor=( "${(@Q)${(z)${VISUAL:-${EDITOR:-vi}}}}" ) case $editor in (*vim*) integer byteoffset=$(( $#PREBUFFER + $#LBUFFER + 1 )) - ${=editor} -c "normal! ${byteoffset}go" -- $1;; + "${(@)editor}" -c "normal! ${byteoffset}go" -- $1;; (*emacs*) - local lines=( ${(f):-"$PREBUFFER$LBUFFER"} ) - ${=editor} +${#lines}:$((${#lines[-1]} + 1)) $1;; - (*) ${=editor} $1;; + local lines=( "${(@f):-"$PREBUFFER$LBUFFER"}" ) + "${(@)editor}" +${#lines}:$((${#lines[-1]} + 1)) $1;; + (*) "${(@)editor}" $1;; esac (( $+zle_bracketed_paste )) && print -r -n - $zle_bracketed_paste[1] |