Est-il possible de créer une liste de finitions pour une commande basée sur les fichiers de certains dossiers?
Dites que je veux exécuter Sublime Text 2 sur l'un de mes projets, qui sont enregistrés sous le nom ~/sublime_projects/*.sublime-project
. Comportement souhaité:
subl<tab><tab>
foo bar project2
au cas où il y aurait foo.sublime-project, bar.sublime-project, project2.sublime-project
fichiers dans ~/sublime_projects
.
Vous pouvez utiliser la fonction bash suivante, ajoutez-la en vous .bashrc
Notez le chemin de répertoire pour la variable 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
Ce qu'il fait:
lorsque vous tapez subl TAB TAB TAB
, il répertorie tous les projets dans le répertoire des projets.
lorsque vous tapez subl ANY_LETTER TAB
, il termine automatiquement le nom du projet si ANY_LETTER_TAB
correspond au premier caractère du projet.
Par exemple, si vous avez dans ~/projects
ce qui suit: test.sublime-project
et foo.sublime-project
et tapez subl t TAB
dans le terminal, vous obtiendrez subl test.sublime-project
UPDATE le script ci-dessous ne modifie pas la PWD
je laisse les deux pour référence future.
# 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
Le second script recherche un caractère saisi après subl
et le remplace par le chemin d'accès complet du nom de fichier correspondant. Par exemple, s'il y a un test.sublime-project
dans ~/projects
en tapant subl t
sera remplacé par subl /home/USERNAME/projects/test.sublime-project