2 votes

Comment rendre l'invite de chemin plus facile à lire en codant en couleur chaque `/` (barre oblique) ?

J'aimerais obtenir une autre configuration pour le chemin, plus un détail qu'une réelle demande :

Ci-dessous un exemple de zsh PROMPT :

prompt zsh

Afin de faciliter la lecture du chemin, je voudrais changer dynamiquement la couleur, sauf pour la première barre oblique (en ~/ ) de chaque barre oblique du chemin en bleu (plus précisément %F{75} ) par la couleur rose ( %F{13} ) Mais j'aimerais pouvoir utiliser un chemin plus profond, qui m'aiderait à mieux me situer dans l'arbre.

Sur l'image ci-dessus, il s'agirait d'une seule barre oblique rose modifiée ( Phd_2019_2020 / Travail_3_... ).

Voici ma situation actuelle PROMPT :

PROMPT='%F{13}|%F{green}%n@%F{cyan}%m%F{13}|%f%T%F{13}|%F{75}%~%F{13}|%F{7} '

Est-il possible d'effectuer ce changement dynamique de couleur avec zsh-5.8 ?

5voto

Douglas Points 10417

Si je comprends bien la question, vous voulez que l'invite affiche l'adresse tout le site de votre répertoire actuel en bleu, mais avec chacune des barres obliques ("/") en rose.

Malheureusement, vous ne pouvez pas faire cela dans votre invite.

Utilisez la fonction intégrée precmd () fonction.

ZSH nous donne un precmd qui est similaire à la fonction PROMPT_COMMAND . Ils permettent de lancer une commande avant l'affichage de l'invite.

Je ne recommanderais pas non plus une invite longue de toute façon, car elle rend l'utilisation très difficile lors de la saisie des commandes. Mettre le répertoire complet au-dessus de votre invite est bien meilleure du point de vue de l'interface utilisateur. Le code suivant accomplit cela.

Il suffit de mettre les éléments suivants dans votre ~/.zprofile .

precmd ()  { printf "\n"; pwd | awk -F "/" ' {for (i=1; i<=NF; i++) printf "\033[01;34m"$i"\033[38;5;206m/"; printf"\n" }' }

Et voici les résultats :

iTerm Window with precmd results

La capture d'écran ci-dessus est ma fenêtre iTerm montrant que j'ai traversé profondément dans mon /Applications/Firefox.app avec le répertoire courant formaté en bleu, séparé par des barres obliques roses.


Comment ça marche...

J'ai élargi la ligne premcmd ci-dessus pour qu'elle soit multi-lignes et nous avons ajouté quelques variables pour mieux voir ce qui se passe.

precmd() {
printf "\n";
pwd | awk -F "/" '{ blue="\033[01;34m"; \
                    pink="\033[38;5;206m"; \
                    for (i=1; i<=NF; i++) \
                      printf blue $i pink "/"; \
                      printf "\n"
                   }'
} 

Voici ce que cela signifie :

  • printf "\n" imprime une nouvelle ligne de caractères. Ceci est pour l'esthétique.
  • pwd renvoie le nom du répertoire de travail ( man pwd ) qui est alors canalisation ("|") à la commande suivante, awk ( man awk ).
  • -F "/" définit le séparateur de champ à la barre oblique ; awk par défaut est un espace. J'ai gardé mon invite à sa configuration courte et succincte.

Dans le "programme" awk, délimité par les accolades ("{" et "}"), nous avons ce qui suit :

  • variables blue y pink sont fixés à leur Codes d'échappement ANSI \033[01;34m y \033[38;5;206m respectivement.
  • Nous avons ensuite une boucle for/do qui itère à travers chacun des champs qui awk a été traité. NF est le nombre total de champs.
  • printf blue $i y printf pink "/" imprime le nom du répertoire en bleu et la barre oblique en rose.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X