Comparaison critique de systèmes d'invite de commande

Posté par  (site web personnel, Mastodon) . Édité par Ysabeau 🧶 et gUI. Modéré par Ysabeau 🧶. Licence CC By‑SA.
60
17
nov.
2023
Ligne de commande

Cet article a été écrit à l’occasion de l’imminence de la sortie de la version 2.2 de Liquid Prompt et vous aurez l’occasion de pouvoir en discuter avec son auteur lors des journées Toulouse Capitole du Libre, qui proposera une conférence sur Liquid Prompt : repenser en profondeur le design du prompt shell.

TL;DR: résumé

Si vous utilisez la ligne de commande, vous gagneriez à utiliser un bon système d’invite de commande (« prompt ») au lieu de la configuration par défaut. Parmi les sept systèmes de prompt les plus connus, certains sont mieux conçus et d’autres prennent mieux en charge certaines fonctionnalités.

Mes principales conclusions sont les suivantes :

  • Si vous recherchez le système qui offre la meilleure expérience globale à l’utilisateur, vous devriez probablement utiliser Liquid Prompt.
  • Si la faible latence est plus importante pour vous que les fonctionnalités, vous devriez miser sur PowerLevel10k.
  • Si vous êtes un développeur qui jongle en permanence avec plusieurs jeux d’outils, Starship semble être la meilleure option pour vous.

Cet article est divisé en deux parties principales : la première introduit le sujet et présente les principales évaluations ; la deuxième partie entre dans les détails des designs et des fonctionnalités. Enfin, la conclusion donne des conseils sur le choix d’un prompt et propose quelques idées sur l’avenir des systèmes de prompts.

Sommaire

Introduction

Avertissement : je suis l’auteur original de Liquid Prompt. Au début, j’ai fait cette étude approfondie pour savoir si je devais continuer à m’intéresser à Liquid Prompt ou passer à un autre système. Je vais essayer d’expliquer ici pourquoi je pense toujours que c’est l’un des meilleurs systèmes de prompt du marché.

Tous les systèmes de prompt comparés ici sont de bons logiciels libres, je me concentrerai donc ici sur l’utilité de leurs fonctionnalités, plutôt que de m’attarder sur la qualité du code ou la facilité d’installation.

Qu’est-ce qu’un prompt ?

Il existe deux types d’informaticien·ne·s : celleux qui utilisent la ligne de commande et celleux qui sont à la retraite. Même les développeurs qui adoptent des interfaces de développement très intégrées disposent d’une sorte de terminal dans certains panneaux de leur IDE. Qu’on le veuille ou non, l’interpréteur de commandes fait partie intégrante de la vie quotidienne de la plupart des personnes qui attendent de leur ordinateur qu’il travaille pour elles.

L’interpréteur de commandes (le « shell ») a accès à de nombreuses informations sur l’ordinateur. Et la plupart de ces informations concernent l’état actuel de l’environnement de travail, ce qui est du plus haut intérêt pour l’utilisateur. Cependant, par défaut, le shell n’affiche que très peu d’informations, à moins que vous ne les demandiez expressément. En outre, le seul endroit de l’écran disponible pour l’affichage permanent de quoi que ce soit est le prompt.

Le prompt est cette chaine de caractères affichée juste devant la ligne où vous tapez vos commandes. Dans la configuration par défaut la plus courante, elle n’affiche que trois informations : l’utilisateur, le nom d’hôte et le chemin d’accès user@hostname:path $.

Mais il peut en afficher davantage ! C’est l’objectif des systèmes de prompt. Ces prompts (pour faire court) ajoutent en fait beaucoup d’informations à cette partie de la ligne de commande. Par exemple, la fonctionnalité la plus courante est d’afficher l’état du dépôt Git dans lequel se trouve l’utilisateur.

Les concurrents

Comme c’est souvent le cas avec les logiciels destinés aux utilisateurs chevronnés, le marché est très fragmenté : il existe une tonne de prompts disponibles. Beaucoup de gens semblent aimer programmer leur prompt à partir de zéro et le déposer sur GitHub.

Dans le cadre de cet article, je n’ai pris en compte que sept prompts. Parmi les plus populaires, d’après le nombre d’articles de fans trouvés par Google et d’après les étoiles sur GitHub :

  • PowerLevel10k, le plus populaire,
  • Starship, celui programmé en Rust, et Spaceship, son origine (dans ce qui suit, les deux sont considérés comme un seul système, étant donné leur similarité, mais vous voudrez probablement utiliser Starship de toute façon),
  • Powerline, qui fait des lignes de statut,
  • Pure, le système minimal au succès surprenant,
  • Oh-My-Posh, le système portable,
  • Liquid Prompt, le plus ancien (historiquement parlant).

Il convient de noter que le nombre d’étoiles n’est pas nécessairement lié à l’âge du logiciel. Par exemple, Liquid Prompt a été lancé en 2010, tandis que Powerlevel* a été lancé en 2015 et Starship en 2019.

Ce dont vous avez besoin, c’est du design de l’information

La raison d’être d’un prompt c’est qu’il est utile d’avoir un accès immédiat à l’état actuel du système. Le fait de voir un changement d’état à l’endroit même où l’utilisateur regarde habituellement est un très bon retour d’information sur ses actions. Mais, bien entendu, ce retour d’information ne doit pas entraver le travail de l’utilisateur.

Les états doivent être choisis et affichés en fonction de leur importance pour le travail de l’utilisateur. Plus précisément, un bon prompt est un prompt qui est :

  • focus : il vise les états qui sont réellement utiles à l’utilisateur au cours d’une session de travail,
  • transparent : il n’entraîne pas de friction avec le processus de travail de l’utilisateur,
  • ciblé : il vise des états qui peuvent changer d’eux-mêmes ou être changés par l’utilisateur,
  • mesuré : il tient compte du fait que certains états changent moins souvent que d’autres (et évite ainsi d’être une simple collection d’états qui ne changent que rarement),
  • accentué : il rend plus visible le retour d’information concernant les changements d’état les plus importants, tout en ne polluant pas la visibilité des états stables/anecdotiques,
  • configurable : il est facile d’adapter immédiatement l’affichage des informations, si nécessaire.

En d’autres termes, un bon système d’alerte doit être bien conçu.

Mon évaluation de la conception générale des candidats est résumée dans le tableau suivant :

Prompt Focus Transparent Ciblé Mesuré Accentué Configurable
Liquid Prompt 🌟🌟🌟 ⭐⭐ ⭐⭐ 🌟🌟🌟 🌟🌟🌟 🌟🌟🌟
PowerLevel10k ⭐⭐ 🌟🌟🌟 ⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐
Oh-My-Posh ⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐
Pure ⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐ ⭐⭐
*ship ⭐⭐ ⭐⭐
Powerline ⭐⭐

La section « design » de l’article (voir ci-dessous) explique plus en détail pourquoi.

Toutes les fonctionnalités ne naissent pas égales

Quels types de fonctionnalités nos six candidats proposent-ils ? On peut considérer six catégories (de la plus importante à la moins importante) :

  • l’essentiel du shell : les fonctionnalités que l’on trouve habituellement dans un prompt classique (chemin, utilisateur, codes de sortie…), qui sont utiles au quotidien (tâches, capteurs, intégration de multiplexeurs…), ou qui sont généralement considérées comme importantes (thèmes…).
  • la gestion de version : Git, Mercurial, etc.
  • environnements : détection de configuration dynamique (virtual env, variables shell, conteneurs…).
  • versions des outils : version actuelle d’outils spécifiques (langages de programmation, chaines de construction, outils…).
  • fonctions diverses : fonctions liées au shell considérées comme moins importantes (réseau, titre du terminal, liens hypertextes…).
  • services : services fonctionnant en permanence, en ligne ou sur la machine (musique, météo…).

Ces catégories sont délimitées en fonction de l’utilisation principale du terminal :

  • Les fonctionnalités de la catégorie « l’essentiel du shell » sont celles dont vous aurez le plus souvent besoin, quoi que vous fassiez dans votre terminal.
  • Si vous êtes programmeur, vous porterez une attention particulière aux catégories gestion de version et environnements.
  • Si vous êtes développeur, la catégorie version des outils vous intéressera également.
  • Si vous faites de l’administration système, la catégorie divers peut contenir des fonctionnalités marginalement intéressantes.
  • Si vous avez besoin de fonctionnalités dans la catégorie des services, vous avez probablement mal compris ce qu’est une interface de ligne de commande, ou vous recherchez une barre d’état (ce qu’un système de prompt peut être).

Mon évaluation de la prise en charge globale de chaque ensemble de fonctionnalités est résumée dans le tableau suivant :

Prompt Essentiels Gestion de version Environnements Versions d’outils Divers Services
Liquid Prompt 🌟🌟🌟 🌟🌟🌟 🌟🌟🌟 ⭐⭐ _
*ship ⭐⭐ ⭐⭐ 🌟🌟🌟 🌟🌟🌟 _
PowerLevel10k ⭐⭐ 🌟🌟🌟 ⭐⭐ ⭐⭐
Oh-My-Posh ⭐⭐ ⭐⭐ ⭐⭐
Powerline _ ⭐⭐ 🌟🌟🌟
Pure _ _ _ _

La section « fonctionnalités » ci-dessous explique en détail comment certains prompts prennent en charge certaines de ces catégories.

Design

Chaque système de prompt possède une culture sous-jacente, née de son histoire, qui transparait dans sa conception.

Par exemple, Powerline a eu un impact considérable sur l’adoption de caractères supplémentaires dans les polices « patchées ». Liquid Prompt a ciblé, dès le début, des caractéristiques proches du shell lui-même, tout en mettant l’accent sur le design. D’un autre côté, PowerLevel10k a été conçu pour être aussi rapide que possible. Étonnamment, Starship a également commencé avec la promesse d’être rapide, bien qu’il ne se rapproche même pas de PowerLevel10k (un bon exemple de la façon dont l’impact des langages est surestimé). Il rassemble cependant une grande communauté, qui à son tour fournit des tonnes d’outils de support. A titre de contre-exemple, Pure a démarré sur la promesse d’être ascétique en termes de fonctionnalités, et s’en est tenu à cette idée.

Si vous vous sentez sexy, vous avez l’air sexy

En ce qui concerne le design, les prompts candidats peuvent être répartis en trois catégories :

  • ceux qui soutiennent que le plus simple est le mieux (Pure et *ship),
  • ceux qui aiment le look classique des « chevrons » (Powerline et Oh-My-Posh),
  • ceux qui accordent une attention particulière au design (Liquid Prompt et PowerLevel10k).

L’équipe de Pure, par exemple, affirme très clairement qu’il est « joli et minimal ». Et par joli, elle entend « livré avec le parfait caractère de prompt » (sic, c’est « ❯ ») et utilise des couleurs pastel. Son aspect par défaut est assez clairement partagé avec Starship, même s’il permet de configurer certains thèmes en utilisant également le look chevrons. Dans la documentation de cette catégorie de design de prompts, il n’y a pas beaucoup d’explications sur la raison pour laquelle les choses sont affichées (ou non).

La deuxième catégorie suit plus ou moins la même philosophie, en pensant seulement que ce qui est joli, c’est d’avoir un arrière-plan coloré au lieu d’un avant-plan, d’utiliser une police de caractères patchée pour séparer joliment les segments, et d’utiliser des icônes partout.

Bien entendu, vous trouverez des systèmes permettant une certaine configuration des icônes ou des couleurs, afin de reproduire l’un ou l’autre style (Starship et Oh-My-Posh proposent des thèmes dans les deux styles, Liquid Prompt et PowerLevel10k ont des thèmes reproduisant les deux, fonctionnalités comprises).

La dernière catégorie, cependant, va plus loin dans les détails lorsqu’il s’agit d’expliquer pourquoi elle montre les choses de telle ou telle manière, et permet plus généralement un ensemble plus varié de thèmes.

PowerLevel10k va jusqu’à fournir un assistant de configuration pour construire le thème que vous préférez, en combinant plusieurs caractéristiques (nombre de lignes, caractère de séparation, etc.) Cependant, en dehors des capacités techniques impressionnantes, l’approche globale de la conception consiste à afficher ce qui doit être affiché sous forme de segments colorés flashy avec des icônes.

Liquid Prompt fournit des thèmes prêts à l’emploi et dispose de l’ensemble le plus diversifié. Certains de ses thèmes n’ont pas d’équivalent chez les autres systèmes, et changent beaucoup de la « série de segments » de tous les autres prompts.

Un segment pour les gouverner tous

Un exemple intéressant de l’importance de l’approche de design est la façon dont Powerline et Liquid Prompt indiquent à l’utilisateur qu’il se trouve dans une session multiplexée (ce sont les deux seuls à disposer de cette fonctionnalité). Les multiplexeurs de terminaux sont des systèmes qui permettent d’avoir plusieurs sessions permanentes sur une machine, et de les détacher/attacher à volonté. Les plus connus sont screen et tmux.

Powerline affichera un segment coloré indiquant le nombre de clients tmux attachés à la session. Liquid Prompt a divisé son support en deux informations différentes : il affichera d’abord le nombre de sessions détachées, et colorera ensuite les crochets entourant le noyau de l’invite (nom d’utilisateur, hôte, chemin) s’il se trouve actuellement dans une session multiplexeur. L’indice visuel est subtil, mais si l’on y réfléchit, il est logique, car c’est « autour » de ce qui change avec la connexion. Il n’est pas nécessaire d’utiliser beaucoup d’espace pour rappeler à l’utilisateur cette information, qui sera constante au cours d’une session de travail.

Un autre exemple est la façon dont Starship et Liquid Prompt indiquent que sudo est actif. Starship affichera une icône (d’un assistant), tandis que Liquid Prompt changera la couleur de la marque d’invite, près de l’endroit où l’utilisateur tape des commandes, puisque les informations d’identification sudo peuvent avoir un impact considérable sur leur effet.

Le même type de différence se produit lors d’une connexion SSH : Starship affiche une autre icône, à côté du nom d’hôte. Liquid Prompt affiche le nom d’hôte avec sa propre couleur. Les deux peuvent être configurés pour n’afficher le nom d’hôte que lors d’une connexion via SSH. Oh-My-Posh affiche un segment avec une icône, et PowerLevel10k affiche à la fois le nom d’utilisateur et le nom d’hôte sous SSH, mais n’indique pas si l’utilisateur a été commuté localement, comme les autres.

La même approche s’applique à l’affichage des droits d’écriture ou du support X11 : Liquid Prompt change la couleur d’un caractère existant, tandis que les autres prompts ont tendance à ajouter un nouveau segment/une nouvelle icône.

Vous pouvez commencer à voir la tendance ici : la plupart des prompts ont été conçues avec l’idée qu’un état atomique doit être ajouté à la liste des états, ou non. En d’autres termes, ils ont tendance à ajouter un nouveau segment (et/ou une nouvelle icône) à la liste des segments. Liquid Prompt est peut-être le seul à avoir réfléchi à l’idée de maximiser la réutilisation des indices visuels et à les positionner avec précaution.

Essentiellement, la plupart des systèmes de prompts donnent la priorité à la question « saviez-vous que ? » (par exemple, « saviez-vous que vous avez la version 3.14 de Python ? ») tandis que Liquid Prompt donne la priorité à la question « vous devriez noter que » (par exemple, « vous devriez noter qu’il est temps de git pull »).

La force réside dans la diversité, pas dans la similitude

Bien entendu, la plupart des systèmes de prompts ont en commun le fait que de nombreux éléments sont configurables. Un utilisateur peut réorganiser ce qui est affiché et changer complètement le look and feel de son message. C’est flagrant quand on regarde la diversité des thèmes compatibles.

Ici, Oh-My-Posh a fait beaucoup d’efforts pour promouvoir un très grand nombre de thèmes. En plus des prompts *ship, ils utilisent un langage de configuration déclaratif qui prétend être le moyen le plus simple d’assembler un nouveau thème.

Je vois deux problèmes à cette idée, qui semble être très répandue parmi les informaticiens, même loin de la configuration des invites (pensez aux systèmes de construction, par exemple) :

  1. la simplicité ne passe pas à l’échelle,
  2. elle introduit trop de contraintes et limite l’innovation.

La simplicité ne passe pas à l’échelle

Le premier problème est relativement évident si vous essayez d’interpréter une configuration de prompt complète, par exemple cette configuration aléatoire de Oh-My-Posh/atomicBit :

<#ffffff>[</>{{ .HEAD }}{{ if .Staging.Changed }}<#00AA00> \u25cf {{ .Staging.String }}</>{{ end }}{{ if .Working.Changed }}<#D75F00> \u25cf {{ .Working.String }}</>{{ end }}<#ffffff>]-</>"

Je ne fais même pas de sélection ; j’ai choisi celui-ci parce qu’il est en fait plus simple que le modèle par défaut. Que fait-elle en réalité ? Je ne suis pas sûr de vouloir faire les efforts nécessaires pour le comprendre. Par contre, je peux très bien voir l’intérêt de faire la même chose en script shell, avec des instructions if/then communément comprises, au lieu d’une soupe de parenthèses en notation polonaise inversée.

Je pense que, dans Liquid Prompt, cela ressemblerait à (non testé, juste ici pour donner une idée) :

    LP_COLOR_CHANGES=$GREEN
    LP_COLOR_COMMITS=$MAGENTA

    lp_git=""
    if _lp_vcs_head_status; then
        lp_git+="$lp_vcs_head_status"
    fi
    if _lp_vcs_unstaged_lines; then
        lp_git+="$LP_COLOR_CHANGES ○+$lp_vcs_unstaged_i_lines/-$lp_vcs_unstaged_d_lines"
    fi
    if _lp_vcs_commits_off_remote; then
        lp_git+="$LP_COLOR_COMMITS ○+$lp_vcs_commit_ahead$NO_COL/$LP_COLOR_COMMITS_BEHIND-$lp_vcs_commit_behind$NO_COL"
    fi

Notez que la logique d’affichage (ou non) est découplée du schéma de coloration. Cela ne vous semble peut-être pas plus simple, mais au moins vous pouvez le lire sans avoir mal à la tête, et il me semble que vous pouvez l’adapter plus facilement à un plus grand nombre de cas d’utilisation, et qu’il a une granularité plus fine sur l’information qu’il peut afficher.

Maintenant, tout comme il est très difficile de concevoir de bons systèmes de build (qui sont un mélange de programmes déclaratifs et impératifs), c’est un problème notoirement difficile que de concevoir un système de configuration (pour les mêmes raisons). Ne soyez donc pas trop durs avec les développeurs, il n’y a pas de solution miracle.

Déclaration contre Innovation

Le deuxième problème se manifeste dans la diversité des thèmes que les gens peuvent produire dans la pratique. La liste des thèmes disponibles pour Oh-My-Posh est impressionnante. Il ne fait aucun doute que l’approche déclarative incite les gens à créer des thèmes. Toutefois, lorsque l’on parcourt la longue liste, il est évident qu’ils se ressemblent tous. Il ne faut pas s’attendre à des designs très différents avec ce prompt, ce ne sont que des listes de segments colorés.

Ici, Liquid Prompt présente une différence intéressante. Vous pouvez reconfigurer les thèmes avec l’approche classique clé=valeur, mais plus généralement, les thèmes sont de purs scripts shell qui arrangent les informations disponibles. Cela permet toutes sortes de subtilités, et plus généralement d’afficher n’importe quelle information sous n’importe quelle forme, pour n’importe quelle combinaison d’états, ce qui est totalement impossible à faire de manière efficace avec une approche déclarative.

Par ailleurs, l’approche utilisée par Liquid Prompt permet de combiner facilement des configurations (appelées presets). Ainsi, vous pouvez utiliser un thème, puis utiliser un preset pour modifier certaines de ses couleurs (par exemple si vous êtes daltonien).

L’impact de cette approche est visible dans la diversité des thèmes proposés par Liquid Prompt. Il ne s’agit pas seulement de changer les couleurs et les icônes, mais de modifier l’ensemble de l’expérience utilisateur. Par exemple, le thème GitCrux reprend le thème par défaut, mais ajoute des indications visuelles sur les commandes Git qui peuvent être utiles compte tenu de l’état du référentiel actuel. Pour ce thème, Liquid Prompt est plutôt un fournisseur de données, un* moteur de thème* qu’il utilise à ses propres fins.

On peut également voir une certaine innovation dans le thème DotMatrix, où certaines informations sont affichées non pas avec des icônes/segments, mais simplement avec des espaces orientés. Par exemple, dans Dotmatrix, lorsque vous êtes connecté via SSH, un espace entouré de flèches vers la gauche est inséré entre le type de terminal (c’est-à-dire une session purement textuelle ou graphique) et l’utilisateur. Il en va de même pour indiquer une session multiplexée : un espace est inséré entre l’utilisateur et le nom d’hôte. Le thème utilise la même idée pour le contrôle de version, et pour indiquer que des commits attendent d’être poussés (flèches espacées vers la gauche — là où se trouve le serveur) ou retirés (flèches espacées vers la droite — là où vous vous trouvez).

Ce type de conception nécessiterait une refonte complète du moteur de thème dans d’autres systèmes de prompt, mais ne requiert qu’un développeur motivé connaissant un peu de shell avec Liquid Prompt.

Fonctionnalités

Le design, c’est bien, mais en fin de compte, les logiciels doivent avoir les fonctionnalités qui comptent. Vous savez, genre avoir quelque chose à afficher.

Pour entrer dans les détails des fonctionnalités, j’ai dressé la liste de toutes les fonctionnalités de chaque système d’invite, puis j’ai vérifié lesquels les prenaient également en charge. J’ai ensuite évalué la qualité de cette prise en charge :

  1. aucune prise en charge,
  2. prise en charge et conception de base,
  3. bon ensemble de fonctionnalités, mais ergonomie médiocre,
  4. bonnes fonctionnalités et ergonomie.

Les résultats sont présentés dans le tableau suivant, et les réflexions sur ce que cela signifie dans les sections suivantes.

Dans ce tableau, les nombres dans les cellules indiquent le niveau de qualité de la fonctionnalité. La popularité est la somme des niveaux de la ligne. Les lignes « support » correspondent à la somme des niveaux de la colonne, pour chaque catégorie. Les catégories sont triées de haut en bas en fonction de leur popularité moyenne. Les projets sont triés de gauche à droite, en fonction de leur score de support dans la section des essentiels du shell.

Les sections suivantes abordent certains des ensembles de fonctionnalités présentés dans ce tableau et les comparaisons entre les systèmes d’invite.

Tableau de support des principaux systèmes de prompts

Les fonctionnalités essentielles sont essentielles

Le shell est un logiciel assez ancien. Vieux dans le bon sens du terme : il a été testé et mis à jour pour atteindre un niveau de qualité qui permet de travailler efficacement. De plus, il est fort probable que vous y passiez la plupart de votre temps à travailler sur quelques types de tâches : développeur, sysadmin, devops, analyste de données, ou n’importe quelle variante de ces familles. Quel que soit votre travail, il vous serait probablement utile de connaitre (et d’utiliser) un ensemble de fonctionnalités pour utilisateurs « chevronnés ». Si vous avez lu cet article jusqu’ici, il y a de fortes chances que vous soyez à l’aise avec le shell et que vous soyez un utilisateur expérimenté, ou que vous aspiriez à l’être.

La tâche principale du shell est d’afficher une sorte d’état lié à la machine, au shell/à l’environnement ou au répertoire courant. Les états les plus importants sont soit ceux fournis par le shell lui-même, soit ceux qui peuvent gêner votre travail (probablement l’état de l’ordinateur lui-même). Ces fonctionnalités sont essentielles, et elles devraient avoir une place de premier ordre dans l’invite.

Dans le tableau ci-dessus, j’ai séparé les fonctionnalités liées à la machine et au shell en deux catégories : les fonctionnalités essentielles et les fonctionnalités diverses. La catégorie « divers » contient les fonctionnalités liées au réseau, car elles sont notoirement criblées de toutes sortes d’écueils. J’ai également placé la fonction « dir stack » (les commandes pushd et popd) dans cette catégorie, car elle n’est pas fréquemment utilisée par les utilisateurs. C’est dommage, car il s’agit d’une fonctionnalité puissante. J’y ai également placé direnv. Bien qu’il ne s’agisse pas d’une fonctionnalité principale de l’interpréteur de commandes (il s’agit après tout d’un logiciel externe), elle est très proche d’une fonctionnalité principale de l’interpréteur de commandes et j’ai pensé qu’elle méritait plus que la catégorie « contexte de développement ».

Dans notre tableau, les prompts sont classés en fonction de leur capacité à prendre en charge ces fonctionnalités essentielles. Il devrait être évident en voyant le tableau que Liquid Prompt a de loin le meilleur support. Les autres prompts sont bien moins équipés, Starship a un bon support, bien qu’avec des choix ergonomiques discutables (comme nous l’avons vu dans la section Design), suivi par Oh-My-Posh et Powerlevel10k, tous deux avec un support moyen et une ergonomie générale moyenne. Pure a un support médiocre de par sa conception même, ce qui ne peut lui être reproché, mais si vous êtes un utilisateur expérimenté plutôt qu’un ascète, vous pourriez avoir une opinion peu amène quant à ce choix.

Prendre soin de l’environnement

Pour les tâches du développeur, il est essentiel de connaitre le contexte logiciel dans lequel vous travaillez. Bien entendu, il faut diviser ce contexte en fonction de la prise en charge de tel ou tel logiciel. Il existe deux catégories générales à cet égard : les logiciels qui manipulent la configuration actuelle de votre session (environnements virtuels proprement dits) et la version actuelle de tout outil lié à la tâche en cours (toolset). Si vous jouez avec des conteneurs toute la journée, vous allez adorer ces fonctionnalités (une fois que vous aurez trouvé un moyen d’y installer un prompt).

En ce qui concerne la catégorie « environnements », le support est assez faible parmi les principaux concurrents (Liquid Prompt, *ship, et PowerLevel10k), Starship ayant le meilleur support global et la meilleure ergonomie. Oh-My-Posh est un peu en retrait, et Powerline presque nulle part. Pure, comme d’habitude, a décidé de ne pas supporter ce genre de choses.

Mais le vrai clivage est dans la catégorie toolset, avec Pure et Powerline qui ont décidé de ne pas supporter ce genre de fonctionnalités, Liquid Prompt qui ne supporte que deux outils, et *ship, Oh-My-Posh et PowerLevel10k qui misent à fond dessus. Parmi eux, Starship est le vainqueur incontesté, avec une liste impressionnante d’outils pris en charge.

Cependant, cette catégorie a tendance à avoir une expérience utilisateur très limitée, chaque fonctionnalité étant réduite à « afficher simplement l’icône & la version ». Pour la plupart d’entre elles (comme les langages de programmation), cela peut être facilement compris, puisqu’il n’y a pas grand-chose à signaler de toute façon. Pour d’autres (comme les systèmes de build), je pense que les prompts peuvent mieux faire.

Dans l’ensemble, je ne suis pas complètement convaincu que cette catégorie de fonctionnalités soit suffisamment importante pour remplir le prompt avec des icônes et des chiffres, mais puisque Starship semble le juger crucial, il y a surement des cas d’usage pour cela.

En passant, on peut voir que Starship se dit « minimal » sur sa page d’accueil, ce qui ne correspond pas tout à fait au niveau de support qu’il a pour ces toolsets… mais je m’éloigne du sujet.

Il est temps

La rapidité du prompt — c’est-à-dire le temps nécessaire pour l’afficher après l’exécution d’une commande — est une caractéristique qui fait l’objet de discussions constantes de la part des utilisateurs.

Vous pourriez penser qu’il s’agit d’une fonctionnalité très importante et qu’aucun compromis ne doit être fait à ce sujet. Mon point de vue est légèrement différent.

L’interpréteur de commandes est une interface de commande. C’est-à-dire que vous tapez, entrez, regardez le résultat de la commande, puis réfléchissez à la suivante. Il y a de fortes chances que vous ne tapiez jamais frénétiquement Entrée après une commande qui a été très rapide à produire son résultat. Vous tapez, vous réfléchissez, vous tapez la commande suivante. Vous n’avez pas besoin de la latence d’un jeu de tir à la première personne.

Bien sûr, il existe un seuil au-delà duquel la latence de l’affichage commence à produire des frictions. L’auteur de PowerLevel10k a discuté en détail de ce qui est impossible à distinguer d’une absence de latence, ce qui vous donne une idée de la plus petite latence que vous pouvez remarquer, mais pas tout à fait celle que vous tolèreriez dans une session typique.

De ce point de vue, il y a un vainqueur incontestable : PowerLevel10k est incroyablement rapide. Il est allé très loin pour réduire sa latence, et a réussi quelques tours de force techniques très impressionnants, comme l’affichage asynchrone d’éléments lents, grâce à une « évaluation paresseuse ». Cela explique aussi en grande partie pourquoi il ne supporte que Zsh.

Je comprends l’intérêt de réduire les frictions liées à l’attente de la frappe ; mais je pense que l’on surestime souvent l’intérêt d’une latence ultra-faible, quand le prix à payer est que l’information intéressante peut ne pas être affichée au moment où l’on a besoin d’y penser.

Un fait intéressant concernant la latence est la curieuse affirmation de Starship à ce sujet. Sur sa page d’accueil, il affirme que Starship est « incroyablement rapide », parce qu’il est programmé en Rust, qui « apporte la meilleure vitesse, toutes catégories ». Cette affirmation ne tient pas vraiment la route face à la vraie vie. Non seulement Starship est beaucoup plus lent que PowerLevel10k, mais il est également plus lent que Liquid Prompt — tous deux écrits en pur script shell — dans la plupart des cas d’utilisation simple ! Oh-My-Posh — écrit en Go — ne se risque pas à faire le même genre d’affirmation, par exemple.

Romkatv explique pourquoi dans son étude :

« Starship est implémenté en tant que binaire externe, il doit donc payer le prix d’au moins un fork+exec supplémentaire pour chaque commande par rapport aux prompts natifs de zsh. Un seul fork+exec ne peut pas expliquer le décalage élevé dont Starship fait preuve, alors qu’est-ce qui se passe ? Dans les conditions de référence, Starship clone 158 fois ! C’est coûteux. »

C’est peut-être contre-intuitif pour la plupart des informaticiens peu expérimentés, mais le langage est loin d’être l’aspect le plus important de la programmation.

Conclusion

Si vous entrez suffisamment dans les détails, vous pourrez probablement toujours argumenter que tel ou tel système de prompt est le meilleur pour tel ou tel utilisation très spécifique. Grâce aux informations fournies dans cet article, j’espère que vous pourrez décider par vous-même. Maintenant, si vous préférez une évaluation globale, je pense qu’il est clair qu’il y a quelques systèmes qui conviennent mieux à certaines utilisations majeures.

Certains sont out

Tout d’abord, je pense que l’on peut affirmer sans risque de se tromper qu’il y a très peu d’intérêt à choisir Pure, si ce n’est pour signaler que vous vous positionnez comme étant aligné avec ses valeurs (c’est-à-dire que vous croyez au « one size does fit all », ou « je n’utilise pas vraiment le shell de toute façon »). La plupart des autres candidats ont des thèmes qui reproduisent son (absence) de fonctionnalité, et proposent même d’avoir le même style, mais en supportant plus de cas d’utilisation (d’autres systèmes de version, plus d’alertes sur l’état de l’ordinateur, etc.).

De même, Powerline n’est probablement pas très utile en dehors de son marché principal, qui est de produire des lignes d’état. Et même les autres prompts peuvent généralement fournir beaucoup plus d’informations pour ce faire, à l’exception de certains services en ligne spécifiques.

En outre, Spaceship peut également être mis de côté en toute sécurité, étant donné qu’il a été en pratique remplacé par Starship, qui prend en charge davantage de fonctionnalités (à moins que vous n’ayez besoin d’une identification très spécifique de l’ensemble d’outils, voir le tableau ci-dessus).

Après avoir longuement hésité, j’ai décidé de mettre également de côté Oh-My-Posh. Cela n’a pas été facile, étant donné qu’il est assez bon sur presque tous les critères d’évaluation que j’ai développés dans cet article, ce qui est déjà une belle réussite. Mais c’est là que réside son défaut : il n’est que moyen partout.

Certains sont in

Il nous reste donc Liquid Prompt, Starship et PowerLevel10k.

PowerLevel10k est le plus populaire (selon la métrique des étoiles de Github) et est le choix évident si vous vous souciez plus de la latence que des fonctionnalités. Il a un support plutôt moyen de chaque catégorie de fonctionnalités, mais a travaillé très dur pour fournir une latence ultra-faible entre deux commandes. Je ne suis pas sûr que cela vaille la peine de réduire les fonctionnalités et la portabilité, étant donné que je suis très rarement ennuyé par de grandes latences lorsqu’elles se produisent dans d’autres systèmes de prompts, mais votre appréciation peut différer (chacun ses fixettes). Il a néanmoins quelques choix de design très modernes et innovants, que j’aime beaucoup, même si j’ai l’impression qu’ils sont plus des paillettes techniques impressionnantes qu’un design vraiment utile ancré dans l’expérience de l’utilisateur.

Starship n’est pas loin derrière en termes d’étoiles, et brille évidemment par son soutien à l’identification des versions d’outils. L’utilité de ce système pour vous dépend de la fréquence à laquelle vous jonglez avec des tâches de développement complexes. En tant qu’ingénieur de recherche, je jongle constamment avec un ensemble de tâches très diverses, et je suis donc plus attiré par des systèmes qui couvrent bien les fonctionnalités de base du shell que par l’énumération des versions, mais je suppose que cela peut être débattu. Quoi qu’il en soit, si vous avez besoin de la portabilité vers PowerShell, Starship est un choix sûr. Gardez également à l’esprit que ses revendications en matière de latence sont exagérées.

Bien qu’il soit le plus ancien de tous, Liquid Prompt est aussi le moins connu. Cependant, il offre le meilleur support des fonctionnalités essentielles. Je dirais aussi qu’il a prêté plus d’attention à son design, permettant des prompts très denses, par exemple. Il est également très configurable, ce qui a permis de créer des thèmes très originaux en termes d’expérience utilisateur. C’est probablement le prompt qui servira le plus grand nombre de cas d’utilisation et d’utilisateurs, en particulier les personnes souhaitant apprendre le shell en expérimentant toutes ses fonctionnalités.

Vers le service et au-delà

Cet article vous a donné quelques opinions basées sur une analyse à un moment donné d’un marché qui continue d’évoluer. En tant que tel, il ne constitue qu’un point dans le temps et peut très bien être rendu obsolète par un changement soudain dans l’activité de l’un ou l’autre projet.

Au cours de l’histoire des systèmes de prompts, tous ont découplé la collecte des données et leur affichage. Et la collecte des données est l’opération la plus couteuse, qui retient toute l’attention lorsque le temps d’exécution doit être optimisé. PowerLevel10k, par exemple, a complètement découplé les deux opérations, qui s’exécutent désormais dans des coroutines parallèles. Son auteur a même mis en place un service de status pour Git totalement précurseur, qui permet d’accélérer considérablement les prompts.

Une autre tendance intéressante consiste à découpler la collecte des données en éléments logiciels atomiques, comme les plugins. Starship n’aurait probablement pas eu son impressionnant support d’outils s’il n’y avait pas eu sa base de code propre et modulaire.

En même temps, Liquid Prompt a fait de gros efforts pour permettre aux thèmes de décider de ce qu’il faut afficher et (plus important) comment et quand l’afficher, allant plus loin que de considérer les thèmes comme de simples configurations.

Je pense que ces trois tendances convergent vers l’idée d’un service d’invite, où le serveur est responsable de la collecte et de la mise en cache des données, tandis que le client est responsable de l’articulation de ces informations d’une manière qui soit utile à l’utilisateur (et pas seulement en les affichant).

L’idée a été explorée ici et là, à ma connaissance surtout par les développeurs de Liquid Prompt, avec des projets tels que AngelPS1 de Dolmen et MOST de Rycieos. Si vous aimez ça, le mainteneur de Liquid Prompt a lancé une conversation sur les « moteurs de thèmes », n’hésitez pas à la rejoindre et à participer à l’élaboration de l’avenir des systèmes de prompts !

  • # Merci pour cette comparaison

    Posté par  . Évalué à 3.

    Très intéressante!

  • # Ça manque de support shell

    Posté par  . Évalué à 10.

    Le tableau de comparaison le met pourtant bien au dessus.

    À quoi ça sert d'étudier en long en large et en travers des systèmes qui par conception ne supportent que zsh ? L'adoption est forcément délicate, puisque (pour le meilleur ou pour le pire), c'est bash qui est installé partout.

    J'utilise personnellement fish+starship. Et j'en suis très content, mais voilà, je me connecte à des centaines de serveurs qui n'ont qu'un bash. Donc je dois faire sans, la plupart du temps… Ou bien compter sur le fait que je n'aurais que bash sous la main.

    D'ailleurs, même pour mon shell personnel, si je vois un outil qui ne gère que fish, je suis assez dubitatif, ou alors c'est vraiment pour une fonctionnalité intrinsèque.

  • # Vitesse de powerline10k et gitstatus

    Posté par  . Évalué à 5. Dernière modification le 17 novembre 2023 à 14:16.

    https://github.com/romkatv/gitstatus#how-it-works

    gitstatusd reads requests from stdin and prints responses to stdout. Requests contain an ID and a directory. Responses contain the same ID and machine-readable git status for the directory. gitstatusd keeps some state in memory for the directories it has seen in order to serve future requests faster.

    Ah bah oui, un programme résident avec de la RAM, c'est plus rapide :)

    EDIT: Ceci étant dit, y a quand même du boulot de pointilleux sur le sujet : https://github.com/romkatv/gitstatus#why-fast Pour quelqu'un comme moi qui aime la performance (ou plutôt, l'efficacité), c'est plaisant à lire quand même.

    Vous en connaissez d'autres qui font ce genre d'usage ? Je ne dis pas que c'est mal, mais la comparaison entre stateless et stateful ne peut pas être ignorée.

    • [^] # Re: Vitesse de powerline10k et gitstatus

      Posté par  . Évalué à 4.

      Il fait justement des comparaison « à froid » et « à chaud », donc sans cache et avec cache. Dans les deux cas, gitstatusd est bien meilleur.

      On notera la rationalisation des appels systèmes, le choix de syscalls plus performants, un libgit2 patché… bref c'est un travail intéressant, dont une partie mériterait sans doute d'être fusionnée dans git lui-même.

  • # Adopté !

    Posté par  . Évalué à 5.

    Merci pour cette dépêche détaillée.

    J'avais vu des copies d'écrans de shells ressemblant à Powerline et ça m'intéressait beaucoup. Du coup j'ai testé… Liquidprompt (disons que je n'ai pas résisté aux sirènes de la pub de l'auteur original). Je dois dire que j'ai apprécié la vitesse d'installation, la doc est très claire, il n'y a pas de commandes ésotériques, au top ! Pour l'instant c'est juste pour avoir le joli prompt avec le thème powerline_full, mais je crois que je ne vais pas tarder à explorer plus en détail les entrailles de la bête.

    Et merci pour Liquidprompt bien sûr.

    Nec spe, nec metu

  • # PS3000

    Posté par  . Évalué à 6.

    Personnellement j'utilise PS3000. Dont je suis l'auteur. Il n'est compatible qu'avec Bash.

  • # ohmyzsh ?

    Posté par  . Évalué à 8.

    Quitte à mettre des pure zsh, pourquoi ohmyzsh est passé sous silence sachant que le critère principal semble être le nombre d'étoile sur github (164k) ?

    • [^] # Re: ohmyzsh ?

      Posté par  (site web personnel, Mastodon) . Évalué à 7.

      Il y a deux raisons : tout d'abord parce qu'il sort un peu du périmètre, vu que c'est un framework shell complet (qui comprend plus que le prompt). Ensuite, de ce que j'ai vu dans la doc, il a vraiment peu de fonctionnalités du coté du prompt. Beaucoup des systèmes de prompts cités indiquent également comment s'intégrer avec Oh-My-Zsh. Il m'a donc semblé que ça ne valait pas le coup de se prendre la tête.

      Mais je suis peut-être passé à coté de la bonne doc ? Il ne faut pas hésiter à proposer une colonne de plus dans le tableau si c'est pertinent !

  • # Job duration ?

    Posté par  (Mastodon) . Évalué à 8. Dernière modification le 17 novembre 2023 à 18:01.

    Déjà merci pour liquidprompt que j'utilise partout depuis trèèèèès longtemps. Tellement longtemps que j'avais même pas suivi le développement, je me suis copié le script dans mon environnement que je porte partout (avec mes alias, mes fonctions).

    Là du coup j'ai fais une mise à jour pour jouer avec tout plein de nouveaux trucs, mais je vois que la durée de la dernière commande a disparu ? Au moins par défaut, mais je n'arrive pas à la réactiver (et c'est un truc qui me sert souvent).

    Encore merci !

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Job duration ?

      Posté par  (site web personnel, Mastodon) . Évalué à 4. Dernière modification le 17 novembre 2023 à 18:00.

      C'est toujours là, mais il faut régler le seuil à partir duquel une commande est considérée comme « trop longue », et donc pour laquelle le temps s'affiche (cf. LP_RUNTIME_THRESHOLD, deux secondes, par défaut).

      • [^] # Re: Job duration ?

        Posté par  (Mastodon) . Évalué à 5.

        Ah bin mince, j'ai du faire une mauvaise manip, en reprenant le fichier je l'ai bien en effet. Désolé.

        Et sinon une question générale à propos de la perfo : est-ce que si on supprime du script des fonctionnalités entières (pas mettre à 0, mais carrément supprimer le code correspondant) on pourrait gagner en perfos ?

        Il y a pas mal de fonctionnalités dont je suis certain de ne pas avoir besoin (et au pire, je récupère le script original) du coup j'ai dans l'idée de me le customiser aux petits oignons à y être.

        En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

        • [^] # Re: Job duration ?

          Posté par  (site web personnel, Mastodon) . Évalué à 6.

          Désactiver la variable LP_ENABLE_* correspondante devrait suffire, le gain en perf de retirer le code devrait être minime. Retirer le code fera juste un test en moins, et retirer une dizaine de tests ne fera pas une différence notable.

  • # Typo

    Posté par  . Évalué à 2.

    Pour afficher la liste, il manque un retour chariot après

    Ces catégories sont délimitées en fonction de l’utilisation principale du terminal :

    • [^] # Re: Typo

      Posté par  (Mastodon) . Évalué à 3.

      Corrigé merci

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # Pas d'accord avec la prémisse

    Posté par  . Évalué à 5.

    Si vous utilisez la ligne de commande, vous gagneriez à utiliser un bon système d’invite de commande (« prompt ») au lieu de la configuration par défaut.

    Je ne trouve pas tellement, en fait. J'ai passé un moment à avoir des prompts sophistiqués, des configs d'Emacs aux petits oignons, et finalement avec "n'importe quel truc qui permet de taper des commandes" (xterm et bash, csh, ksh, zsh, m'en fous) et la conf presque par défaut de vim, ça fonctionne sans effort où que tu ailles.

    En particulier, je limite l'utilisation des couleurs1, qui je trouve rendent le code difficile à lire ou distrayantes dans les sorties de commande (sauf pour grep --color).

    Mais je vais quand même essayer Liquid Prompt pour voir si ça me parle ! Merci pour le journal <3 !


    1. j'aime bien avoir seulement les chaînes et les commentaires dans une couleur différente. 

    • [^] # Re: Pas d'accord avec la prémisse

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Tu peux essayer le thème DotMatrix qui a été conçu pour n'avoir que très peu de couleurs.

    • [^] # Re: Pas d'accord avec la prémisse

      Posté par  (site web personnel) . Évalué à 2.

      Je suis à moitié d'accord, je suis pour un prompt minimaliste, mais avoir une invite qui nous donne le répertoire courant, éventuellement la branche git courante, s'il y a des fichiers modifiés, c'est devenu un minimum pour moi

      • [^] # Re: Pas d'accord avec la prémisse

        Posté par  . Évalué à 5.

        le répertoire courant, éventuellement la branche git courante, s'il y a des fichiers modifiés

        C'est ce que je rajoute dans mon prompt. Avec date/heure et un [ssh] si je suis connecté… en SSH. J'ai essayé LiquidPrompt et starship mais je ne sais pas pourquoi ça me gêne plus qu'autre chose. Ça m'embête un peu parce que je trouve ça très joli… Du coup je me contente de ça :

        PS1='\D{%F %T}\n\[\e[1;33m\]\u@\h \[\e[1;34m\]/\W\[\e[1;32m\]$(__git_ps1 " (%s)")\[\e[m\] ${sshtext}\$\[\e[0m\] '

        Faya prompt

  • # Le moi d'il y a 10 ans aurait adoré

    Posté par  (site web personnel, Mastodon) . Évalué à 10. Dernière modification le 18 novembre 2023 à 12:26.

    Étude sympa et bien contruite.

    En ce qui me concerne j'adorais ce genre de tweak il y a genre 10 ans. Mais qui dit personnalisation dit question de goût, et comme je change souvent de goût j'ai fini par me lasser d'être perpétuellement en train de configurer des tas de machins, qui ne sont finallement pas rentables au niveau productivité. Avec l'âge (la sagesse peut-être ?) j'ai appris à apprécier les trucs simples dans la vie, faciles et rapides à déployer sur tout terrain : un bon bash avec max 10 lignes de conf custom, et c'est tout.

    Un gentil du net

    • [^] # Re: Le moi d'il y a 10 ans aurait adoré

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      C'est comme une voiture, de base 4 roues et un moteur suffisent avec suffisamment de place pour loger la famille et peut-être une remorque pour la déchetterie. Mais quand on l'utilise souvent et qu'on a un peu d'argent, on apprécié certaines futilité comme la peinture métallisé.

      Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.

    • [^] # Re: Le moi d'il y a 10 ans aurait adoré

      Posté par  . Évalué à 3.

      Tout comme moi.
      Plus jeune, je faisais des configurations de tout et n'importe quoi pendant des heures, embrassant tout ce que je trouvais de "fun" (et bien souvent inutile pour mon cas personnel). Un beau jour, j'ai fini par égarer ma conf emacs que je me trimbalais depuis 1998 (de mémoire de poilu). Je n'ai dès lors plus jamais reconfiguré quoique ce soit au-delà de l'extrême essentiel.

      Aujourd'hui mon prompt est de base, mon éditeur de texte est Ed et ma configuration globale est pratiquement ce qu'on appelait avant "vanilla". Je n'y vois que des avantages: pas de perte de temps dans la poursuite de l'installation/configuration idéale, transposable immédiatement quelque soit la machine, pas de comportements erratiques du fait de mes atermoiements.

      Bref, c'est extrêmement joli et certainement très utile pour la plupart des personnes, mais pas pour moi :)

      • [^] # Re: Le moi d'il y a 10 ans aurait adoré

        Posté par  (site web personnel) . Évalué à 4.

        C'est un argumentaire que je retrouve parfois, mais je ne le comprends pas.
        N'est-il pas possible de profiter d'un certain confort sur son environnement de travail, tout en sachant s'adapter dans ceux où l'outillage est plus frustre ?
        Personnellement, mes customisations ne sont pas que cosmétiques, elles me font gagner beaucoup de temps au quotidien, et je passe une grosse partie de mon temps dans mon propre environnement de travail, me forcer à n'utiliser que des outils de base parce que de temps en temps je me retrouve à poil devant un terminal basique, ça ne le justifie pas.

        • [^] # Re: Le moi d'il y a 10 ans aurait adoré

          Posté par  . Évalué à 1.

          En fait, j'ai cessé toute configuration pour plusieurs raisons: 1) le paramétrage par défaut est, la plupart du temps, largement suffisant et efficient
          Un des développeurs de GNU emacs n'a même pas de .emacs, c'est dire…
          2) ça me sort de situations éventuellement compliquées liées notamment à la configuration/personnalisation. Je ne compte plus le nombre de fois où un mauvais paramétrage donnait un comportement erratique.
          3) je ne perds plus de temps à avoir une configuration aux petits oignons. Ce temps perdu est mieux investi dans le fait de juste faire. Au final, je n'en suis pas moins productif.
          Et enfin, comme je le disais, c'est ce qu'il y a de plus rapide à mettre en oeuvre et de plus ortable d'un environnement à un autre.

          Franchement, je mets au défi quiconque de me prouver que leur paramétrage leur donne une avantage ou un confort supplémentaire. Cela relève du placebo.

          Le seul avantage que je voyais dans le "tuning" de configuration, c'était de nourrir ma procrastination; c'est plaisant de configurer mais ça n'apporte fondamentalement rien de plus que le truc bassement standard.

          • [^] # Re: Le moi d'il y a 10 ans aurait adoré

            Posté par  . Évalué à 4. Dernière modification le 24 novembre 2023 à 15:42.

            Franchement, je mets au défi quiconque de me prouver que leur paramétrage leur donne une avantage ou un confort supplémentaire. Cela relève du placebo.

            Cette demande est absurde. Je relève le défi : Que le PROMPT m'affiche la branche GIT sur laquelle je suis m'évite d'avoir à taper une commande pour savoir sur quelle branche je suis et je trouve ça plus "confortable". Voilà. Et je te mets au défi de me prouver que ce n'est pas plus "confortable"… Et je dis ça en utilisant moi même un paramétrage minimal hein, mais tu ne peux pas affirmer que comme tu n'en veux pas c'est que ça ne sert à rien aux autres. (Je ne dis pas que le paramétrage-procrastination n'existe pas, je l'ai pratiqué, mais le confort c'est relatif et ce qui ne m'est pas utile le sera à qqun d'autre)

          • [^] # Re: Le moi d'il y a 10 ans aurait adoré

            Posté par  (site web personnel) . Évalué à 3.

            Franchement, je mets au défi quiconque de me prouver que leur paramétrage leur donne une avantage ou un confort supplémentaire. Cela relève du placebo.

            Prouve moi que la restauration de mes layouts de terminaux dans mon tmux au lancement (tmux-resurrect, tmux-continuum) ne me fait pas gagner du temps.
            Tu ne peux pas ? Et moi je ne peux pas non plus te prouver le contraire, on fait comment ?
            Pareil, https://github.com/zsh-users/zsh-autosuggestions me fait gagner un temps fou pour m'appuyer sur mon historique, je ne peux pas te le chiffrer, mais tu ne peux pas non plus prouver que c'est du placebo.

            • [^] # Re: Le moi d'il y a 10 ans aurait adoré

              Posté par  . Évalué à 2.

              Ca me rappelle ce fil de disccusion:

              https://stackoverflow.com/questions/1218390/what-is-your-most-productive-shortcut-with-vim

              Mais je ne vais pas tenter de convaincre qui que ce soit que ma méthode est meilleure ou non. Dans mon cas personnel, je ne vois aucun intérêt à changer quoique ce soit, libre à chacun de faire comme il veut :)

              Tous les goûts sont dans la nature après tout.

              En attendant, après des années de GNU emacs (configuré à mort), je suis retourné au bon vieux Ed, ça fait le boulot, d'une manière assez singulière que je ne recommande pas à tout le monde mais qui me va parfaitement.

              J'ai ZSH bâteau, un prompt qui m'affiche '> ' et tout un attirail d'outil que j'utilse sans conf particulière.

              Je ne dénigre pas liquidprompt, jamais utilisé et jamais ressenti le besoin de le faire.

              • [^] # Re: Le moi d'il y a 10 ans aurait adoré

                Posté par  (site web personnel) . Évalué à 4. Dernière modification le 25 novembre 2023 à 16:32.

                Dans mon cas personnel, je ne vois aucun intérêt à changer quoique ce soit, libre à chacun de faire comme il veut :)

                Le soucis, c'est que tu ne parlais pas uniquement de toi, je te cite : "Franchement, je mets au défi quiconque de me prouver que leur paramétrage leur donne une avantage ou un confort supplémentaire. Cela relève du placebo."

                En gros, tu balayes d'un revers de la main les avantages réels de performance (notamment) de toute customisation, pour tous les outils, et pour tout le monde.
                Comme si les paramètres par défaut d'un outil (quelqu'il soit) pouvaient convenir, du débutant jusqu'à l'expert. Vraiment étonnant comme parti pris.

                • [^] # Re: Le moi d'il y a 10 ans aurait adoré

                  Posté par  . Évalué à 1.

                  Oui, oui je pense que sur un ratio au doigt mouillé, allez, on va dire 80/20, c'est au mieux inutile.
                  Mais, il m'a fallu du temps pour m'en rendre compte moi-même donc je ne jette pas l'opprobre sur les personnes qui ne sont pas d'accord avec mon assertion ;)

                  Je précise que j'ai également quitté le monde de l'IT maintenant et que je me contente de mes petits devs "maison".
                  Mon outillage de base aujourd'hui: slackware, quelques outils suckless (dwm, st, etc.), librewolf/newsboat/offpunk, ed/edbrowse.
                  Ce n'est pas pour tout le monde mais pour un amateur comme moi, c'est largement suffisant. Lorsque j'étais "pro", c'était pas plus étoffé: GNU Emacs, sed,awk, etc.

                  Mais encore une fois, je n'attends pas que les gens soient d'accord avec moi.

                  • [^] # Re: Le moi d'il y a 10 ans aurait adoré

                    Posté par  (Mastodon) . Évalué à 6.

                    Mon prompt est assez basique, il fait : user@machine:dir$

                    Mais le nom d'utilisateur est en rouge quand c'est root et en vert sinon.
                    Et le nom de la machine est d'une couleur différente selon la machine.
                    Et le répertoire est toujours complet, je déteste les répertoires réduits, juste le dernier chemin, ou des pointillés.
                    Parfois c'est moche et ça fait un prompt de 12 kilomètres.
                    Parfois.

                    Et ben ça me fait gagner un temps fou de juste voir le rouge, là, à l'endroit où j'écris ma commande, mais sans être trop intrusif non plus. D'avoir toujours conscience de si l'utilisateur du shell à l'écran peut faire des conneries ou pas.
                    C'est aussi utile pour se dépatouiller des SSH, le nom de la machine n'est pas toujours évident sans avoir besoin d'être lu, alors qu'une couleur différente, ça va sauter aux yeux qu'on est en SSH sur une autre machine.
                    En fait t'as besoin de deux couleurs : une pour la machine locale, une pour les machines accessibles uniquement à distance, après je lis le nom de la machine pour bien vérifier où je suis.
                    Et s'il n'y a aucune couleur, je sais que je suis sur une autre machine, que je ne gère pas, et donc que j'y suis pour une raison précise, et ça saute encore plus aux yeux !

                    Bah voilà, ça va pas très loin, c'est de la conf statique (la couleur est paramétrée dans le .bashrc), et pif je gagne du temps, et je perds des chances de faire des boulettes.
                    Pour un effort somme toute assez minimal de paramétrage.

                    C'est bon, j'ai relevé ton défi, j'ai gagné quoi ?

                    • Yth.
    • [^] # Re: Le moi d'il y a 10 ans aurait adoré

      Posté par  (site web personnel) . Évalué à 2.

      En ce qui me concerne j'adorais ce genre de tweak il y a genre 10 ans

      c'est exactement pour cette raison que j'utilise liquidpompt. Pas besoin d'y passer 3 heures. git clone, je source la truc dans mon bashrc et c'est fini.

      La seule fonctionnalité qui m’intéresse, c'est la gestion des repos git

  • # Décollage de la fusée Starship réussi

    Posté par  . Évalué à 1. Dernière modification le 18 novembre 2023 à 23:13.

    Merci pour ce comparatif instructif.

    J'ai découvert PowerLevel10k et Starlink (je me contentait d'un mix oh-my-zsh powerline depuis quelques années) et mon choix c'est très vite porté sur ce dernier :
    bien documenté, config au top, simplicité et proche de mes besoins.
    Ça me permet de jongler entre Zsh (tjs avec oh-my-zsh pour étendre les supers-pouvoirs) et Nushell (encore un peu jeune mais prometteur), c'est parfait.

  • # Powerline.bash

    Posté par  . Évalué à 2. Dernière modification le 19 novembre 2023 à 14:33.

    J'y vais aussi de mon outil non listé, probablement trop petit pour être connu.

    Je n'en suis pas le développeur, juste un utilisateur satisfait pour mes maigres besoins:

    https://gitlab.com/bersace/powerline.bash probablement inspiré de Powerline

    De voir tous ces prompts surchargés me fait peur, cela me semble particulièrement illisible dans certains cas.

    Je crois que c'est ce qui m'a fait éviter LiquidPrompt et les autres.

    Merci pour cet article et comparaison détaillés

    • [^] # Re: Powerline.bash

      Posté par  (site web personnel, Mastodon) . Évalué à 3.

      Le principe de base de Liquid Prompt c'est justement que tu n'as jamais un prompt surchargé, parce que :

      • il n'affiche l'info que si ça sort de l'ordinaire,
      • l'affichage est assez dense (par exemple plusieurs infos ne passent que par un changement de couleurs ou un seul caractère),
      • tu peux très facilement désactiver n'importe quelle fonctionnalité.

      Donc en pratique, avec le thème par défaut tu as un petit prompt la grande majorité du temps. En tous cas plus petit que Powerline, qui rajoute systématiquement des icônes et des espaces partout.

  • # Merci pour liquid prompt

    Posté par  (site web personnel) . Évalué à 3.

    J’en profite pour dire merci pour liquid prompt. Cet article me fait réaliser que je l’utilise depuis au moins 2012 (j’y trouve quelque patchs mineurs à mon nom dans l’historique Git à cette date, et si j’ai cru devoir l’ajuster c’est un bon indice que je l’utilisais suffisamment).

    Je n’arrive pas à imaginer ce que serait ma vie sans lui. En fait je dirai sans rougir que liquid prompt est l’interface à Git que j’utilise le plus au quotidien. Le fait d’avoir un retour immédiat de l’état courant du dépôt courant est quelque chose d’extrêmement pratique, le terminal étant l’interface informatique que j’utilise le plus.

    Bien sûr d’autres prompts font ça aussi. Quelqu’un d’autre a cité powerline de bersace< et j’ai pas essayé (j’aime pas trop les prompts en vidéo inversée) et il fait probablement très bien l’affaire aussi.

    Mais je n’imagine pas une vie sans avoir un retour immédiat sur l’état du dépôt courant à chaque prompt, et liquid prompt fait ça très bien !

    ce commentaire est sous licence cc by 4 et précédentes

  • # Dommage

    Posté par  . Évalué à -8. Dernière modification le 21 novembre 2023 à 21:37.

    Ça avait l'air intéressant… Mais je me suis arrêté à "celleux"

    • [^] # Re: Dommage

      Posté par  . Évalué à 7.

      Tu dis ça comme si c’était les autres qui avaient perdu quelque chose, alors que ben, il n’y a que toi.

    • [^] # Re: Dommage

      Posté par  (site web personnel) . Évalué à 5.

      Ho non, on va faire comment sans toi ? :-(

    • [^] # Re: Dommage

      Posté par  (Mastodon) . Évalué à 2.

      Ton commentaire avait l'air tellement intéressant !
      Mais je me suis arrêté à chaosphere.

      Dommage…

      • Yth.
  • # Merci !

    Posté par  (site web personnel, Mastodon) . Évalué à 5.

    Merci pour ce long article et surtout pour liquidprompt que j’utilise depuis le début et dont l’usage est grandement facilité par son packaging dans Debian.

    Je ne me casse pas la tête, il fait tout ce que je veux sans que je configure quoi que ce soit (ou peut-être que j’ai chipoté un peu). J’aime la simplicité et l’aspect "shell" (je déteste les "powerlines").

    Récemment, avec un upgrade, j’ai eu la surprise de découvrir que l’utilisation dans kitty est considérée comme du multiplexing (apparition d’un "L2" dans le prompt, qui n’était pas là avant). Un bug (peut-être de kitty) mais je m’en fiche, ça fonctionne.

    Alors encore une fois, merci !

    Mes livres CC By-SA : https://ploum.net/livres.html

  • # utilisation du shell fish

    Posté par  . Évalué à 4.

    Depuis des années j'utilise fish qui fournit "out of the box" toutes les fonctionnalités qu'on attend d'un shell moderne. Au lieu d'utiliser des tonnes de plugins pour bash ou zsh tout est déjà inclus.

    J'y ajoute omf (oh-my-fish) pour en ajouter quelques-uns quand même : theme, prompt, support rvm…

    Je m'étonne que la majorité des utilisateurs restent sur zsh/oh-my-zsh et ne testent pas fish pour voir ce qu'il propose par défaut.
    D'accord fish ne supporte pas le langage shell bash (mais je ne sais pas si zsh le supporte non plus) mais c'est un problème mineur : combien l'utilise en CLI sans passer par un script ? au pire, il suffit de taper "bash" :)

    • [^] # Re: utilisation du shell fish

      Posté par  . Évalué à 1.

      Je viens de re-tester (après quelques années) et je vois que ça c'est grandement amélioré !
      Je vais me contrainte a l'utiliser pour voir si je suis séduit sur le long terme. (toujours difficile d'identifier les subtilités d'un shell à l'autre en quelques minutes)

      Par contre, tu critiques Zsh et sa tonne de plugins et après tu parles de zsh/oh-my-zsh donc au final 1 plugin. Le comble étant que tu utilise aussi oh-my-fish sur fish…
      Je vois certes des avantages à Fish (outofthebox et facilité) mais je trouve tes arguments un peu maladroits.

      • [^] # Re: utilisation du shell fish

        Posté par  . Évalué à 1.

        oh-my-zsh n'est-il pas plutôt un ensemble de plein de plugins ?

        Oh My Zsh is a delightful, open source, community-driven framework for managing your Zsh configuration. It comes bundled with thousands of helpful functions, helpers, plugins, themes, and a few things that make you shout…

        Oui, j'utilise oh-my-fish comme je l'ai dit, mais il m'apporte 2-3 plugins et pas du tout le coeur du fonctionnement de fish, je pourrais aisément m'en passer, d'ailleurs je m'en passe sur mes machines distantes.
        Bref, à toi de voir et tester. Ou rester sur ce que tu connais.

    • [^] # Re: utilisation du shell fish

      Posté par  . Évalué à 1.

      Premier test non concluant sur fish :
      Je reprend mes projets python avec des avec des vm et je fais : source ./bin/activate
      Le script n'est pas reconnu.

  • # Réponse aux soucis de lenteur de Starship

    Posté par  . Évalué à 1.

    J'ai voulu mettre les devs de starship face à leurs responsabilités et leurs propos un peu trop élogieux sur la rapidité de leur prompt.

    Un début de réponse (intéressant) :
    https://github.com/starship/starship/issues/5593#issuecomment-1826065390

  • # Un peu hors sujet, mais on peut aussi évoquer byobu

    Posté par  (site web personnel) . Évalué à 1.

    Liquid Prompt a longtemps eu ma préférence, déjà par son ancienneté et ensuite car du écrit en pure shell (bash ?).

    Puis j'ai découvert byobu (https://www.byobu.org/), qui est un peu plus qu'un prompt, mais en reprend quand même selon moi des fonctionnalités.
    C'est un frontend à tmux, et ça gère une barre d'état assez sympathique à votre terminal… et bien sûr des terminaux virtuels tmux.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.