Como permitir a conclusão de arquivos para o resto de _arguments?

0

Eu tenho _arguments "1: :($(/usr/local/bin/aliases-drush.php))" \ funcionando, o que é realmente ótimo - é um script PHP imprimindo uma possibilidade de argumento para cada linha - mas o restante dos argumentos pode ser arquivos locais e tentei continuar com '*:file:_files' , mas não mais longo conclui o argumento 2, 3, etc.

    
por chx 27.07.2018 / 10:41

1 resposta

1

#compdef foo
local ret=1
_arguments \
  '1:first:(a b c)' \
  '*:files:_files' \
  && ret=0
return $ret

conclui a b ou c para mim e, em seguida, pelo menos dois arquivos em teste. Alterando o manipulador do primeiro argumento

  '1: :($(print -l a b c))' \

também funciona para mim. Se você tiver espaços na saída do que quer que seu programa faça, isso será um problema para a conclusão do primeiro argumento, mas não quebrará a conclusão dos arquivos subseqüentes para mim:

  '1: :($(< ~/tmp/opts))' \

e depois:

 % print -l "a b" c d > ~/tmp/opts
 % rm ~/.zcompdump
 % exec zsh -l
 % foo
 a  b  c  d

apresenta a ou b não a b : em geral, um deles verá coisas como ${(f)"$(...)"} para dividir apenas em novas linhas, cd $fpath[-1] normalmente terá o ZSH fornecido scripts de conclusão para estudar.

Mas não consigo reproduzir a declaração "conclusão de arquivos não funcionando"; talvez com o script de conclusão completo e saída adequada do programa?

Observe os comandos rm ~/.zcompdump ; exec zsh -l que removem o cache de conclusão e iniciam uma nova instância do ZSH; uma alternativa menos intrusiva pode ser um descarregamento específico no nome do comando específico:

function zbouncecompdef { unfunction _$1; autoload -U _$1; }
    
por 27.07.2018 / 16:06