Je voudrais une invite zsh sur plusieurs lignes avec une partie alignée à droite, qui ressemblera à ceci:
2.nate@host:/current/dir 16:00
->
Je connais RPROMPT dans zsh, mais cela a une invite alignée à droite en face de votre invite normale, qui se trouve sur la même ligne de texte que votre saisie.
Existe-t-il un moyen d'avoir une partie alignée à droite sur la première ligne d'une invite de commande multiligne? Je recherche soit une directive dans la variable PS1 qui dit «aligner à droite maintenant» ou une variable qui est à PS1 ce que RPROMPT est à PROMPT.
Merci!
Voici comment j'ai configuré cette chose tout à l'heure. Cette approche ne nécessite aucune manipulation de séquence d'échappement, mais vous aurez deux variables différentes pour l'invite principale:
PS1
avec coloration etNPS1
sans.Notez l'utilisation de
print -P
pour l'expansion rapide,${#variable}
pour obtenir la longueur de la chaîne stockée dans une variable etprintf "%Nd"
pour le remplissage à gauche avec desN
espaces. Les deuxprint
etprintf
sont des commandes intégrées, donc il ne devrait y avoir aucun impact sur les performances.la source
Définissons l'invite avec cette disposition:
Pour ce faire, nous aurons besoin d'une fonction qui nous indique combien de caractères une chaîne donnée prend lors de l'impression.
Nous aurons besoin d'une autre fonction qui prend deux arguments et affiche une amende complète avec ces arguments sur les côtés opposés de l'écran.
Enfin, nous pouvons définir une fonction qui définit
PROMPT
etRPROMPT
, demander à ZSH de l'appeler avant chaque invite, et définir les options d'extension d'invite appropriées:Cela produit l'invite suivante:
#
si root,%
sinon; vert en cas de succès, rouge en cas d'erreur.Vous pouvez trouver des détails supplémentaires dans l' invite multiligne: l'ingrédient manquant et le code complet dans cet essentiel .
la source