From 2b361ad11671444831fef3b04bd610c26c2e19e9 Mon Sep 17 00:00:00 2001 From: Peter Stephenson Date: Thu, 25 Nov 2010 15:43:14 +0000 Subject: users/15580: fix MIME handler completion on fallthrough --- ChangeLog | 6 +++++- Completion/Zsh/Function/_zsh-mime-handler | 12 +++++++++++- Functions/MIME/zsh-mime-handler | 6 +++++- 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 + * 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 -- cgit 1.4.1