summary refs log tree commit diff
path: root/Completion/Zsh/Function/_zsh-mime-handler
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2010-11-25 15:43:14 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2010-11-25 15:43:14 +0000
commit2b361ad11671444831fef3b04bd610c26c2e19e9 (patch)
treeb10e67651fa3deebb5b24e175e351e5289676df1 /Completion/Zsh/Function/_zsh-mime-handler
parentfc6c76519b863f38ab650e0e82fce574c5dc98e1 (diff)
downloadzsh-2b361ad11671444831fef3b04bd610c26c2e19e9.tar.gz
zsh-2b361ad11671444831fef3b04bd610c26c2e19e9.tar.xz
zsh-2b361ad11671444831fef3b04bd610c26c2e19e9.zip
users/15580: fix MIME handler completion on fallthrough
Diffstat (limited to 'Completion/Zsh/Function/_zsh-mime-handler')
-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