about summary refs log tree commit diff
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.tar.xz
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