Como posso usar as funções de preenchimento automático bash e filtrar padrões juntos?

1

Meu bash preenche corretamente os comandos (por exemplo, find , git , etc.), mas isso parece ser interrompido assim que eu uso filtros para impedir a conclusão de certos padrões de arquivo, por exemplo:

complete -f -X '*.@(cmi|cmo)' git

Os itens acima devem impedir que o preenchimento automático selecione nomes de arquivos correspondentes a *.cmi e *.cmo para git . Isso realmente funciona como pretendido. Infelizmente, isso também interrompe o preenchimento automático de comandos e sinalizadores git . Mudar a ordem de carregamento dos arquivos de conclusão e a definição acima não parece importar.

Alguma idéia de como fazer com que os dois recursos funcionem juntos?

    
por Markus Mottl 23.09.2016 / 03:26

1 resposta

0

Você instruiu o bash a usar o mecanismo interno de conclusão de arquivos para git , em vez de chamar a função de conclusão externa que entende a sintaxe do comando git . Há apenas um mecanismo de conclusão, não uma série de filtros. Se você quer uma série de filtros, você tem que codificar.

Felizmente, o script de conclusão git de 2,7 kLoC suporta padrões excluindo de git add da maneira natural: adicione esses padrões a .gitignore .

printf '%s\n' '*.cm[aiox]' '*.cmxa' '*.[ao]' >>.gitignore

Se você quiser excluir arquivos da git add completion sem adicioná-los à lista de ignorados do git, acho que você terá que mergulhar no script de conclusão do git. _git_add chamadas __git_complete_index_file que chama __git_index_files para gerar a lista de arquivos candidatos e, por sua vez, chama __git_ls_files_helper , que chama git ls-files com as opções que foram transmitidas até o fim de _git_add . Então, em _git_add você pode mudar

    __git_complete_index_file "--others --modified --directory --no-empty-directory"

para adicionar algumas opções como --exclude=*.cm[aiox] (cuidado com os problemas de citação: os curingas são eventualmente unidos no comando, então -x *.cm[aiox] não funcionaria porque o padrão seria expandido no diretório atual).

    
por 25.09.2016 / 02:26