Questão Conclusão da guia Command dos argumentos da pasta


É possível criar uma lista de conclusões para um comando com base em alguns arquivos da pasta?

Digamos que eu queira executar o Sublime Text 2 em um dos meus projetos, que são salvos como ~/sublime_projects/*.sublime-project. Comportamento desejado:

 subl<tab><tab>
   foo bar project2

caso haja foo.sublime-project, bar.sublime-project, project2.sublime-project arquivos em ~/sublime_projects.


4
2017-08-24 09:06


origem




Respostas:


Você pode usar a seguinte função bash, adicioná-lo em você .bashrc

Observe o caminho do diretório para a variável PROJECTS_DIR

# bash completion for sublime projects in ~/projects
_subl()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    PROJECTS_DIR="/home/mreq/projects/"
    LOOK_FOR="*.sublime-project"
    cd ${PROJECTS_DIR}
    PROJECTS=$(ls ${LOOK_FOR})
    COMPREPLY=( $(compgen -W "${PROJECTS}" -- $cur) )
}
complete -F _subl subl

O que faz:

  • quando você digita subl TAB TAB TAB lista todos os projetos no diretório de projetos

  • quando você digita subl ANY_LETTER TAB auto completa o nome do projeto se o ANY_LETTER_TAB corresponde ao primeiro caractere do projeto.

Por exemplo, se você tem dentro ~/projects Os seguintes: test.sublime-project e foo.sublime-project e digite subl t TAB no terminal você terá subl test.sublime-project

ATUALIZAR o script abaixo não muda o PWD Eu estou deixando ambos para referência futura.

# bash completion for sublime projects in ~/projects
_subl()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    PROJECTS_DIR="/home/mreq/projects/"
    LOOK_FOR=".sublime-project"
    # cd ${PROJECTS_DIR}
    PROJECTS=$(ls ${PROJECTS_DIR} | grep "^${cur}.*${LOOK_FOR}")
    COMPREPLY=${PROJECTS_DIR}${PROJECTS}
}
complete -F _subl subl

O segundo script procura um caractere digitado depois subl e o substitui pelo caminho completo do nome do arquivo correspondente. Por exemplo, se houver test.sublime-project dentro ~/projects digitando subl t será substituído por subl /home/USERNAME/projects/test.sublime-project


4
2017-08-24 11:32



Incrível, exatamente o que eu estava procurando. Obrigado. - mreq
Uma coisa: isso muda seu $PWD para $PROJECTS_DIR. Existe uma maneira de manter o atual? Eu tentei salvá-lo e restaurar depois COMPREPLY atribuição, mas isso não funcionou. - mreq
Obrigado pela edição! Infelizmente, o segundo script não funciona com o espaço em branco <tab> conclusões de projetos. Usando o primeiro - é estranho, que digitar cd - depois de $PWD mudança foi feita não te leva de volta para onde você estava. - mreq
Não vai te pegar de volta porque o script retorna. Quanto ao segundo script, você pode passar para subl curinga * e TAB para listar projetos, mas não de uma boa aparência. Pessoalmente eu prefiro o primeiro script. - Stef K