LiquidPrompt est un prompt bash intelligent, dont l'idée générale est d'afficher élégamment des informations utiles uniquement quand le contexte le demande.
Un grand nombre de fonctionnalités, détaillées dans la suite de la dépêche, sont maintenant disponibles suite au succès fulgurant rencontré par la dernière dépêche sur le sujet.
NdM : nojhan est le papa des Geekscottes
Avec cette version 1.0, le prompt affiche :
- la charge électrique moyenne restante dans vos batteries, si elle descend en dessous d'un seuil ;
- la charge système moyenne de vos processeurs, si elle descend en dessous d'un seuil ;
- le nombre de sessions détachées du terminal courant (avec
screen
), s'il y en a ; - le nombre de processus en cours attachés au terminal courant ;
- le nombre de processus arrêtés sur le terminal ;
- l'utilisateur actuel, en blanc s'il est différent de celui qui s'est logé, en jaune vif si c'est root ;
- deux-points verts s'il a les droits en écritures dans le répertoire courant, rouges sinon ;
- le répertoire courant, éventuellement raccourcis de manière intelligente s'il est trop long, tout en préservant les deux premiers répertoires ;
- une petite flèche si un proxy HTTP est défini ;
- le nom de la branche courante, dans un dépôt versionné, en vert si tout est à jour, en jaune si des commits sont en attente, en rouge si des modifications n'ont pas été commitées ;
- le nombre de lignes impactées en cas de modifications, le nombre de commits locaux ;
- le code d'erreur de la dernière commande, si elle a planté d'une manière ou d'une autre ;
- une marque :
±
dans les dépôts git,☿
pour mercurial,‡
pour subversion, (sinon les classiques$
et#
).
Par défaut, vous aurez donc un prompt très classique :[user:~] $
Mais si vous faites en sorte de tout afficher en même temps (cas rare, normalement, ici sans les couleurs) :⌁24% ⌂42% 3d/2&/1z [user@server:~/ … /code/liquidprompt]↥ master(+10/-5,3) 125 ±
Une bonne partie des fonctionnalités du LiquidPromt sont configurables via un fichier de configuration ou des variables d'environnement, notamment :
- les seuils pour la batterie et la charge CPU,
- la taille maximale du chemin courant,
- le nombre de répertoires à garder en tête de chemin raccourcis,
- l'affichage permanent du nom d'hôte en local,
- l'inversion des couleurs noir/blanc.
Il est également possible d'agencer différemment l'affichage (comme mettre les jobs après le path) et de sélectionner les fonctionnalités à utiliser (par exemple si vous n'utilisez pas subversion, ami chanceux).
Le fichier README vous expliquera tout ça.
Aller plus loin
- Code sur github (386 clics)
- Capture d'écran (1826 clics)
- DLFP : Un prompt Bash utile sans poudre aux yeux (354 clics)
- Fichier README de LiquidPrompt (63 clics)
# Un peu lent
Posté par rootix . Évalué à 4.
Je l'utilise depuis quelques jours et il a fallu que je supprime les parties concernant git/svn/… car c'est beaucoup trop lent. Désormais c'est mieux mais ce n'est pas très réactif. J'ai ajouté l'affichage de l'horloge car ça me sert à savoir combien de temps peut prendre une tâche. Peut-être il y aurait moyen de mettre en cache certains résultats pour accélérer les calculs.
[^] # Re: Un peu lent
Posté par nojhan (site web personnel, Mastodon) . Évalué à 2.
Il y a plus classe que d'afficher l'horloge. Il semblerait qu'en ajoutant des hooks, on peut directement mesurer le temps pris par la commande exécutée : http://www.twistedmatrix.com/users/glyph/preexec.bash.txt
C'est plus intéressant, car, a priori, on peut alors n'afficher le temps pris par la dernière commande que s'il dépasse un certain seuil. J'envisage de mettre ça dans le liquid prompt, mais faut voir si ça ne deviens pas trop ingérable niveau temps d'exécution du prompt, justement.
# Joli
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 1.
Joli ! Je ne l'utiliserai pas parce que je suis sous Zsh, mais j'aime beaucoup l'idée, félicitations !
[^] # Re: Joli
Posté par Framasky (site web personnel) . Évalué à 5. Dernière modification le 11 août 2012 à 00:21.
Plus d'excuses : je viens de le porter pour zsh : https://github.com/ldidry/liquidprompt/tree/zsh :D
Ceci dit, il faudra encore un peu de travail : il y a qq problèmes de placement quand j'autocomplète avec plusieurs choix.
Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.
[^] # Re: Joli
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 1.
Magnifique !
[^] # Re: Joli
Posté par barmic . Évalué à 6.
La partie sur git/hg pourrait être bien améliorée en utilisant vcs_info.
La gestion des couleurs pourrait se faire avec colors qui s'utilise très simplement :
Ensuite, la définition de la couleur en fonction des privilège devrait pouvoir se faire directement via
%(!.iamroot.iamuser)
(voir en utilisant%#
).Ça :
pourrait être remplacé par
%(?.. [%?])
.Ligne 646 à 650 :
pourrait être remplacé par :
La version bash pourrait être
Il doit y avoir encore d'autres astuces qui ne me viennent pas à l'esprit.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Joli
Posté par nojhan (site web personnel, Mastodon) . Évalué à 2.
Je ne connais pas Zsh, mais le diff ne semble pas si différent qu'en bash… y aurait-il moyen de regrouper les deux dans le même script avec une détection du type de shell ?
[^] # Re: Joli
Posté par Framasky (site web personnel) . Évalué à 1.
Ça doit être faisable. Je me faisais la même réflexion hier soir, mais le plus important à mes yeux était d'avoir une version qui marchait, avant de merger.
Je jetterais un coup d'œil ce soir, mais avant ça, j'essayerais de résoudre mon bug d'autocomplétion : quand j'autocomplète avec plusieurs choix, la commande se complète mais en la décalant d'un grand espace vide (entre le prompt et la commande), un peu comme si le PS1 devenait :
[luc:~] $ cd truc
Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.
[^] # Re: Joli
Posté par Framasky (site web personnel) . Évalué à 1.
Trouver le shell en cours d'exécution :
ps -p $$ | tail -n1 | awk '{print $NF}'
Je ferais un merge ce soir :D
Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.
[^] # Re: Joli
Posté par Anonyme . Évalué à 3.
Est-ce que ${SHELL} n’est pas une solution.
Par exemple :
[^] # Re: Joli
Posté par Framasky (site web personnel) . Évalué à 4.
Non. Petit exemple (mon shell par défaut est zsh)
[luc:~] $ echo $SHELL
/bin/zsh
[luc:~] $ bash
luc@eddard:~$ echo $SHELL
/bin/zsh
Donc si pour une raison ou une autre tu as besoin de lancer bash sans pour autant changer de shell par défaut, ta variable d'environnement $SHELL ne change pas et liquidprompt explose en effaçant ton disque dur et en tuant des bébés chats avec des cornes de licornes mortes-nées.
Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.
[^] # Re: Joli
Posté par barmic . Évalué à 2.
Ou en évitant le tail :
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Joli
Posté par zaurus (site web personnel) . Évalué à 1.
$0
me semble bien plus simple
[^] # Re: Joli
Posté par mbussonn . Évalué à 2.
Je m'étonne que personne n'ai cité oh-my-zsh qui fait la même chose pour zsh depuis un bout de temps.
oh-my-zsh on github
# PROMPT_DIRTRIM
Posté par cel . Évalué à 8.
Hello!
Ca vaut ce que ça vaut, mais tu pourrais peut-être simplifier ta fonction __shorten_path() en utilisant la variable PROMPT_DIRTRIM:
Par exemple:
PROMPT_DIRTRIM est disponible à partir de bash 4.
My 2 cents!
# Des petits gains ?
Posté par M.Poil (site web personnel) . Évalué à 3. Dernière modification le 10 août 2012 à 23:38.
Is it a Bird? Is it a Plane?? No, it's Super Poil !!!
[^] # Re: Des petits gains ?
Posté par M.Poil (site web personnel) . Évalué à 1.
Avec sed sinon pour l'uptime
uptime | sed -e 's/.average: (:digit.:digit{2})./\1/'
Quand je mesure avec time sur 100 boucles c'est moins performant que du pure awk
Is it a Bird? Is it a Plane?? No, it's Super Poil !!!
[^] # Re: Des petits gains ?
Posté par barmic . Évalué à 4.
Si on cherche vraiment la performance je pense qu'il faut éviter les expressions régulières et faire :
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: Des petits gains ?
Posté par nojhan (site web personnel, Mastodon) . Évalué à 2.
Après mesures il semblerait que les regexp ne soient pas l'élément discriminant :
Mais tu gagnes quand même :-)
# Remarques
Posté par RB . Évalué à 2.
Hello,
j'ai un conflit avec autojump:
{: command not found
Sinon, j'aime beaucoup sauf les caractères spéciaux de tous les côtés, je n'ai pas des fontes qui les supportent, il faudrait au moins une option de config pour mettre des caractères plus classiques.
Et des thêmes :)
En tous cas ça a bien grandi depuis la dernière fois, beau boulot.
A+
[^] # Re: Remarques
Posté par Marotte ⛧ . Évalué à 1.
Euh.. Je ne connais pas LiquidPrompt, mais si ses développeurs ont choisi d'utiliser un ensemble de caractères étendu, tu vas pas leur demander de gérer parallèlement un fallback mode cohérent, si ?
Tu devrais regarder un peu les fonts dispo sur ton système, je reconnais que c'est un peu le bordel dans les packages, mais à mon avis tu peux trouver ton bonheur.
J'espère que l'auteur de ce journal pourra te dire exactement les fonts à installer !
[^] # Re: Remarques
Posté par RB . Évalué à 3.
Je pense que certains caractères sont absents de bcp de polices comme les flêches et certains signes. Plus le script grandit plus il y a de fallbacks et de prise en compte de différents OS et différentes versions des applis, c'est déjà le cas.
J'utilise Inconsolata et Terminus comme fontes de terminal, ces caractères posent problèmes avec les 2, et comme c'est parmis les fontes les plus utilisées en terminal c'est logique de signaler cela.
PS: la batterie est 'critique' entre 40 et 50% il y a une coupure dans l'interval :)
[^] # Re: Remarques
Posté par gerfaut83 (site web personnel) . Évalué à 0.
J'ai rencontré le même problème. J'utilise également
autojump
.Existe-t-il une solution ?
De même, lorsque je lance un shell avec
screen
j'obtiens :_lp_set_prompt : commande introuvable
Sinon, le concept m'intéresse beaucoup. Je n'ai jamais été très inspiré pour écrire des jolis prompts :-)
# Mise à jour de liquidprompt Zsh !
Posté par Framasky (site web personnel) . Évalué à 1.
J'ai trouvé le bug qui faisait foirer l'autocompletion ! Pensez à vous mettre à jour.
Plus qu'à merger avec la branche master en détectant le shell utilisé. (ce soir donc)
Being a sysadmin is easy. As easy as riding a bicycle. Except the bicycle is on fire, you’re on fire and you’re in Hell.
# Version mac?
Posté par Gui13 (site web personnel) . Évalué à 1.
Salut!
Je viens de tester sur ma box linux, et effectivement ça poutre. Un peu lent à cause de git/svn j'ai l'impression, mais bon ça reste correct.
Est-ce que tu as prévu une version Mac/BSD de cette chose? :)
[^] # Re: Version mac?
Posté par nojhan (site web personnel, Mastodon) . Évalué à 1.
Normalement ça marche déjà sous mac… enfin j'ai rien pour tester, mais il y a un type qui l'utilise, a priori.
# bug?
Posté par jice (site web personnel) . Évalué à 1.
A chaque affichage du prompt, ça me fait :
$ echo $BASH_VERSION
4.2.10(2)-release
[^] # Re: bug?
Posté par jice (site web personnel) . Évalué à 2.
Une piste :
$ echo $LP_OLD_PROMPT_COMMAND
history -a; echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"
$ $LP_OLD_PROMPT_COMMAND
bash: history: -; : option non valable
or si j'exécute
$ history -a; echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"
pas de problème.
Après avoir fait :
$ $LP_OLD_PROMPT_COMMAND='history -a ; echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
je n'ai plus l'erreur (noter l'espace avant le 1er point virgule).
PS: super mise en abîme : sur un journal de nojhan, je me répond à moi-même et donc un strip de nojhan s'affiche :)
(pour ceux qui ne connaissent pas : https://linuxfr.org/images/dessins/geekscottes_005.png)
[^] # Re: bug?
Posté par Joël Thieffry (site web personnel) . Évalué à 1.
nojhan, tu es démasqué, ton plan de domination
du mondede DLFP est enfin révélé.[^] # Re: bug?
Posté par nojhan (site web personnel, Mastodon) . Évalué à 1.
Ça ressemble à un vieux bug. Normalement, il ne devrait pas y avoir deux commandes dans cette variable, mais une seule… à moins que tu aies bidouillé des trucs à la main.
# Super, merci !
Posté par ploum (site web personnel, Mastodon) . Évalué à 3.
Je voulais dire que je suis un utilisateur super content de liquidprompt (et que j'ai flattré le repo github).
Mes demandes:
Un grand merci :-)
Mes livres CC By-SA : https://ploum.net/livres.html
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.