Petit update pour mon prompt
Rédigé le . Édité le .Dans ce que je présentais précédemment au sujet de mon .bashrc
, je ne sais pas si ça vous a plu, mais il y a une chose qui m'énerve. En effet, je me suis rendu compte à force d'utiliser git
que l'état de mon repository, ainsi que la branche sur laquelle j'étais, m'obligeaient à régulièrement faire un git status
.
Alors pour ceux qui connaissent ma fainéantise, j'ai updaté mon prompt
pour faire ça à ma place :
function gitB() {
LANG=C git status 2>&1 | awk 'BEGIN {b=c=0;} /^On branch/ {b="[" $NF "] ";} /working directory clean/ {c=1;} END {if (b!=0){if (c!=0) print "\[\e[1;32m\]" b; else print "\[\e[1;31m\]" b;}}'
}
function puser() {
echo -ne "$CYAN( $( LANG=C last | awk '$0 ~ /still logged in/ && $2 ~ /'"$(tty |awk -F'/' '{print $3}')"'/ && $2 ~ /'"$(tty |awk -F'/' '{print $4}')"'/ {if (a == "") {a=$1;print;};}' | awk '{print $1}' ))"
}
PROMPT_COMMAND='if [ ${?} -eq 0 ]; then rcl="${LIGHT_CYAN}"; else rcl="${RED}"; fi; \
gitSt="$( gitB )"; \
idl="${LIGHT_CYAN}"; [[ ${UID} -eq 0 ]] && _prevUser="$( puser )" && idl="$RED"; \
PS1="\n${LIGHT_CYAN}: ${idl}$SQUARE $CYAN[\j] ${idl}\u${_prevUser} @ \h ${gitSt}$LIGHT_CYAN\w\n: ${rcl}$SQUARE $CYAN\t $GRAY#\!$LIGHT_CYAN \$; \[\033[0;39m\]";'
Et là, vous allez me dire, c'est quoi la différence avec avant ?!
Simple elle tient en une ligne : la dernière (celle qui début par PROMPT_COMMAND
).
PROMPT_COMMAND
, c'est quoi ?
PROMPT_COMMAND
Si existante, sa valeur est exécutée comme commande préalablement à l'affichage de chaque invite de base.
Grosso-modo, ça dit : Je fais un eval
du contenu de PROMPT_COMMAND
avant d'afficher PS1
.
Donc, ça va évaluer ce que je veux et dans mon cas je set
PS1
à chaque fois que j'appelle ENTER
.
Ainsi, si je suis dans un dépôt, la branche courante est indiquée en vert lorsque c'est propre et en rouge si un update a été fait.
Oui, j'aurais pu utiliser Powerline (voir précédent billet), mais où aurait été la joie de réussir par moi même ?