zsh completion: obtendo nomes de arquivos de um diretório específico

8

OK, um pouco de experiência: uso um Mac e faço o máximo possível na CLI.

Em particular, eu frequentemente coloco um pendrive USB, cp ou mv um arquivo, e depois desejo imediatamente ejetar (desmontar e desconectar) o arquivo. Isso geralmente pode ser feito em um punhado de pressionamentos de tecla, exceto para desmontá-lo, o que requer (em 10.7) indo para um espaço vazio da área de trabalho (geralmente dois espaços de pelo menos), selecionando o disco e pressionando "command-e". Francamente, esse procedimento de desmontagem é, em várias ordens de magnitude, a parte mais tediosa e demorada do processo.

Seria muito mais natural e eficiente simplesmente poder digitar, digamos:

ej<tab> J<tab>

Digamos que meu stick USB seja montado em / Volumes / Jefferson. O que eu esperaria dos meus 6 toques no teclado é o seguinte:

eject /Volumes/Jefferson

Isso deve executar o comando:

diskutil unmount /Volumes/Jefferson

Então, escrevi uma pequena função:

eject() {
    diskutil unmount /Volumes/$1
}

E uma função de conclusão para acompanhar:

compdef '_files -g "/Volumes/*"' eject  

Há um problema com isso, no entanto. A função _files gera caminhos completos. Agora, eu poderia alterar a linha da minha função "eject" para diskutil unmount $1 , e as coisas funcionariam, mas não tenho capacidade de digitar a primeira letra do nome do ponto de montagem, pois o caminho começa com / Volumes /. Por exemplo, se eu digitar J<tab , receberei o preenchimento automático dos arquivos no PWD. Eu teria que digitar /Volumes/J<tab> para obter a conclusão desejada.

Então, existe uma função de conclusão que pega nomes de arquivos de uma localização específica pré-definida, ao invés de gerar caminhos completos?

Eu realmente gostaria de baixar isso para 6 teclas.

    
por Marshall Eubanks 16.02.2013 / 17:58

1 resposta

9
_files -W /Volumes

Consulte a documentação de _path_files .

    
por 17.02.2013 / 12:42