Rolinh

Rolinh' release

ZSH: Afficher Les Infos Des VCS (Git, Mercurial, Svn, Etc.) Dans Son Prompt

C’est quelque chose que je voulais mettre en place depuis un moment mais ne l’avais pas fait faute de trouver une solution qui me satisfasse.

En faisant une brève recherche sur internet, on peut trouver une foule de zshrc configurés pour afficher des informations en fonction du dépôt de VCS parcouru. Certaines solutions ne gèrent qu’un VCS, d’autres plusieurs, certaines affichent les informations de manière sobre, d’autre le font de manière plus excentrique, certaines nécessitent des scripts (oui, oui, je suis tombé sur une solution qui nécessitait un script python!). Bref, on trouve de tout et il est difficile de s’y retrouver pour faire un prompte à sa sauce.

J’ai finalement découvert que zsh possède un module nommé vcs_info permettant justement de gérer les dépôts de VCS. Il s’agit d’une contribution utilisateur et toute la doc nécessaire afin de configurer cela à votre guise se trouve ici. Décidément, zsh ne cessera pas de me surprendre!

Afin d’aller un peu plus vite, je me suis basé sur ces deux articles très bien fait: mercurial info on your zsh prompt et git info in your zsh prompt. Je peaufinerais probablement un peu ma configuration dans un avenir proche mais néanmoins voici comment j’ai procédé:

  • ajout de ces lignes à mon zshrc afin de ne charger que git et mercurial de vcs_info puisque de toute façon je n’utilise pas d’autres VCS dans les projets auxquels je participe:

    autoload -Uz vcs_info zstyle ':vcs_info:*' enable git hg

  • personnalisation de vcs_info avec zstyle (j’ai pompé et modifié la configuration trouvée ici afin de ne pas afficher trop d’informations)

  • ajout de vcs_info dans la fonction precmd
  • affichage des informations dans RPS1 (pour rappel, il s’agit de la partie du prompt affichée tout à droite)

Curieux de savoir à quoi ça peut ressembler?

Dans un dépôt mercurial:

Dans un dépôt git:

N’oubliez pas que vous pouvez trouver mon zshrc dans mon dépôt de configurations. ;)