summary refs log tree commit diff
path: root/Completion/Zsh
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Zsh')
-rw-r--r--Completion/Zsh/Function/_zsh-mime-handler12
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