diff options
Diffstat (limited to 'Completion/Zsh/Function')
-rw-r--r-- | Completion/Zsh/Function/_zsh-mime-handler | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Completion/Zsh/Function/_zsh-mime-handler b/Completion/Zsh/Function/_zsh-mime-handler index c11e5aba9..000be2b5c 100644 --- a/Completion/Zsh/Function/_zsh-mime-handler +++ b/Completion/Zsh/Function/_zsh-mime-handler @@ -1,9 +1,19 @@ #compdef zsh-mime-handler +# Given that the handler is likely to change the start of the command +# line, we'll try to maintain the position from the end of the words +# array. Hence for example CURRENT gets decremented by one if the +# handler drops off the start. +integer end_offset=$(( ${#words} - CURRENT )) + # zsh-mime-handler -l is supposed to print out the command line # with quoting to turn it into a full executable line. So # we need to use shell splitting to turn it into words and # then unquoting on those words. -words=(${(Q)${(z)"$(zsh-mime-handler -l ${words[2,-1]})"}}) +words=(${(z)"$(zsh-mime-handler -l "${(@)words[2,-1]}")"}) +# Careful unquoting: we need to keep a '' as a separate word. +words=("${(@Q)words}") + +(( CURRENT = ${#words} - end_offset )) _normal |