Autocompletar para regras Makefile no tcsh

4

Estou usando tcsh em uma caixa do SUSE 11 e percebi que ao digitar

make Separador

ele permite que eu complete automaticamente as regras disponíveis no Makefile, não os arquivos que estão dentro do diretório atual.

Eu testei isso com RedHat e Ubuntu no trabalho e Debian em casa (todos com tcsh ), e nenhum deles suporta esse bom comportamento (IMO).

Como isso pode ser alcançado com as outras distribuições também?
Isso é algo que eu queria ter desde muitos anos atrás.

    
por nozimica 18.02.2012 / 03:44

2 respostas

2

Você precisa adicionar chamadas ao complete no seu arquivo de inicialização do shell ( ~/.tcshrc ). Aparentemente, sua caixa SuSE tem regras predefinidas para make ; procurá-los em /etc/csh.cshrc ou algum outro arquivo fornecido ao lado de tcsh ( rpm -ql tcsh ).

A distribuição tcsh vem com algumas conclusões de exemplos (o Debian as coloca em /usr/share/doc/tcsh/examples/complete.tcsh.gz ); aqui está o da make :

complete make \
    'n/-f/f/' \
    'c/*=/f/' \
    'n@*@'cat -s GNUmakefile Makefile makefile |& sed -n -e "/No such file/d" -e "/^[^     #].*:/s/:.*//p"'@'
    
por 20.02.2012 / 03:16
1

Usando esta resposta no StackOverflow para usar o make para calcular todos os alvos disponíveis e mesclar isso no Debian exemplo de script, como mostrado na outra resposta aqui e, em seguida, adicionando um pouco mais, isso gera:

alias complete_make_target_filter 'awk -F: '"'"'/^[a-zA-Z0-9][^\$#\/\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}'"'"

complete make \
    'n/--assume-old/f/' \
    'n/--assume-new/f/' \
    'n/--directory/d/' \
    'n/--file/f/' \
    'n/--include-dir/d/' \
    'n/--makefile/f/' \
    'n/--new-file/f/' \
    'n/--old-file/f/' \
    'n/--what-if/f/' \
    'n/-d/d/' \
    'n/-f/f/' \
    'c/*=/f/' \
    'n@*@'make -qp  |& grep -v Stop |complete_make_target_filter|xargs echo --always-make --directory -d --debug -e --environment-overrides --file --makefile -i --ignore-errors -I --include-dir -j --jobs -k --keep-going -l --load-average --max-load -L --check-symlink-times -n --just-print --dry-run --recon -o --old-file --assume-old -p --print-database -q --question -r --no-builtin-rules -R --no-builtin-variables -s --silent --quiet -S --no-keep-going --stop -t --touch -v --version -w --print-directory --no-print-directory -W --what-if --new-file --assume-new --warn-undefined-variables'@'

Coloque isso junto com outros scripts de conclusão bacanas em um diretório ~/.complete/ e, em seguida, digite todos eles no seu ~/.cshrc e está tudo pronto.

    
por 07.08.2015 / 15:19