summaryrefslogtreecommitdiff
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
parentfc6c76519b863f38ab650e0e82fce574c5dc98e1 (diff)
downloadzsh-2b361ad11671444831fef3b04bd610c26c2e19e9.tar.gz
zsh-2b361ad11671444831fef3b04bd610c26c2e19e9.zip
users/15580: fix MIME handler completion on fallthrough
-rw-r--r--ChangeLog6
-rw-r--r--Completion/Zsh/Function/_zsh-mime-handler12
-rw-r--r--Functions/MIME/zsh-mime-handler6
3 files changed, 21 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index a68c01534..fc91e92c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2010-11-25 Peter Stephenson <pws@csr.com>
+ * users/15580: Completion/Zsh/Function/_zsh-mime-handler,
+ Functions/MIME/zsh-mime-handler: fixes for completion when
+ dropping through to normal completion.
+
* 28434: Doc/Zsh/expn.yo, Src/subst.c, Test/D04parameter.ztst:
Make ${NAME:OFFSET} always use zero-offset.
@@ -13843,5 +13847,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.5126 $
+* $Revision: 1.5127 $
*****************************************************
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
diff --git a/Functions/MIME/zsh-mime-handler b/Functions/MIME/zsh-mime-handler
index 8d15b4688..9a40e67bb 100644
--- a/Functions/MIME/zsh-mime-handler
+++ b/Functions/MIME/zsh-mime-handler
@@ -144,7 +144,11 @@ if [[ ! -e $1 ]]; then
fi
done
if [[ -z $nonex_ok ]]; then
- "$@"
+ if (( list )); then
+ print -r -- "${(q)@}"
+ else
+ "$@"
+ fi
return
fi
fi