O código add-space
em $fpath[-1]/_expand
parece não estar envolvido com sua conclusão via _values
; isso pode ser verificado definindo add-space
como false em todos os lugares ou chamando _complete_debug
e vendo qual código a conclusão passou:
% bindkey -M viins "^t" _complete_debug
% foo
Trace output left in /tmp/zsh438foo2 (up-history to view)
Uma solução é usar o recurso -s ...
de _values
, que pode opcionalmente inserir um separador normalmente usado para unir vários valores e desativar esse recurso se o separador tiver sido usado:
#compdef foo
local curcontext="$curcontext" state line
choices=(aaa bbb ccc)
_arguments '1:dir:->folders' && return 0
case "$state" in
folders)
if ! compset -P '*/'; then
_values -s / folders $choices
fi
;;
esac
O que em uma guia foo a
deve acrescentar uma barra, e como o /
agora aparece, o teste compset
deve impedir conclusões adicionais.