En général les utilisateurs réguliers d’un système Linux connaissent les avantages de l’utilisation du package bash_completion, et bien voici une astuce pour que cela soit applicable à un projet Symfony. Bon je ne suis pas développeur, mes bases étant un peu limitées, mais étant amené à utiliser pas mal de projets Symfony dans le cadre de mon travail, j’ai eu vent de cette astuce. Tout d’abord il faut créer un fichier dans votre home avec comme nom .bash_completion . S’il existe déjà, nous mettrons à jour ce dernier.
_symfony()
{
local cur prev action
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
action=${COMP_WORDS[1]}case « $prev » in
« init-module »| »propel-generate-crud »| »propel-init-crud »| »propel-init-admin »| »generate:module »| »propel:generate-crud »| »propel:init-admin »)
COMPREPLY=( $( compgen -W « $( ls -1 apps 2>/dev/null | sed -e ‘s/ /\\ /g’ | sed -e ‘s/\/$//g’ ) » — $cur ) )return 0
;;« init-project »| »generate:project »)
COMPREPLY=( $( compgen -W « $( pwd | perl -pe « s/^.*?([^\/]+)$/\$1/g » ) » — $cur ) )return 0
;;« init-app »| »generate:app »)
COMPREPLY=( $( compgen -W « frontend backend » — $cur ) )return 0
;;« sync »)
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W ‘go’ — $cur))
fireturn 0
;;*symfony)
SYMFONY_VERSION=$( $prev -V | sed ‘s/^symfony version //g’ | awk -F ‘.’ ‘{print $1 « . » $2;}’ )case « $SYMFONY_VERSION » in
0.*)
# Versions less than 1.0 are not supported.
COMPREPLY=()
;;« 1.0 »)
COMPREPLY=( $( compgen -W « $( $prev -T | awk ‘/^ /’ | cut -d ‘ ‘ -f 3 ) » — $cur ) )
;;*)
COMPREPLY=( $( compgen -W « $(
NAMESPACE= »
OLD_IFS=$IFSIFS=$’\n’
for line in $( $prev -T ); do
if [ $line != ‘Available tasks:’ ]; then
if [ ${line:0:2} == ‘ ‘ ]; then
TASK=$(echo $line | awk -F ‘:’ ‘{print $2;}’ | cut -d ‘ ‘ -f 1)
if [ -z $NAMESPACE ]; then
echo $TASK
else
echo $NAMESPACE:$TASK
fi
else
NAMESPACE=$line
fi
fi
doneIFS=$OLD_IFS
) » — $cur ) )# Work-around bash_completion issue where bash interprets a colon as a separator.
# Work-around borrowed from the darcs work-around for the same issue.
local colonprefixes=${cur% »${cur##*:} »}
local i=${#COMPREPLY[*]}
while [ $((–i)) -ge 0 ]; do
COMPREPLY[$i]=${COMPREPLY[$i]# »$colonprefixes »}
done
;;
esacreturn 0
;;*)
case « $action » in
« propel-generate-crud »| »propel-init-crud »| »propel-init-admin »| »propel:generate-crud »| »propel:init-admin »)
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W « $( find lib/model -maxdepth 1 -name ‘*.php’ -exec basename ‘{}’ ‘.php’ ‘;’ | grep -v ‘Peer$’ | tr [:upper:] [:lower:] ) » — $cur ) )
elif (($COMP_CWORD == 4)); then
COMPREPLY=( $( compgen -W « $( find lib/model -maxdepth 1 -name ‘*.php’ -exec basename ‘{}’ ‘.php’ ‘;’ | grep -v ‘Peer$’ ) » — $cur ) )
fireturn 0
;;
esacreturn 0
;;
esacreturn 0
}complete -F _symfony symfony
Modifier votre fichier .bashrc pour y ajouter : [ -f ~/.bash-completion ] && source ~/.bash-completion
Enfin pour bénéficier immédiatement de ses effets, relancer bash, ou plus proprement tapez « source ~/.bashrc ».
Et voilà vous aussi vous aurez ainsi accès à l’auto-complétion pour votre projet Symfony :
[user@nommachine monrep]$ ./symfony monprojet-matache matache-action:realize
Et voila pour cette astuce. Si mes souvenirs sont bons, la Source initiale provient du wiki de Symfony et notamment de la section « update » du lien précédent. Personnellement je l’ai testé sur une Mandriva 2008.1 et cela avait fonctionné.