2 points par GN⁺ 2024-10-04 | 1 commentaires | Partager sur WhatsApp
  • Les problèmes de couleurs dans le terminal relèvent moins d’une question de goût que de l’absence de standard et des différences d’implémentation : la sortie d’une même commande peut devenir difficile à lire selon la combinaison terminal, thème et application
  • Les 16 couleurs ANSI de base, les 256 couleurs et les couleurs hexadécimales 24 bits sont utilisées ensemble, mais la couleur réelle affichée pour un numéro donné varie selon l’émulateur de terminal
  • Les conflits de contraste — texte bleu sur fond noir, jaune clair sur fond blanc, mappage gris de Solarized, couleur de fond de ngrok — apparaissent quand les hypothèses du programme ne correspondent pas au thème de l’utilisateur
  • Les solutions se répartissent sur plusieurs couches : réinitialisation de la palette, base16-shell, LS_COLORS, NO_COLOR=true, --color=always, unbuffer, ou encore la prise en charge des couleurs 24 bits dans Vim/Neovim
  • Les fonctions de contraste minimal d’iTerm2, tabby, kitty, Ghostty et Windows Terminal ne résolvent pas tout, mais réduisent le risque d’une sortie illisible

ANSI, couleurs et différences selon les terminaux

  • Un terminal propose généralement 16 couleurs ANSI : noir, rouge, vert, jaune, bleu, magenta, cyan, blanc, ainsi que leurs variantes claires
  • Les programmes définissent les couleurs en affichant des codes d’échappement ANSI
    • Par exemple, la forme \033[38;5;{num}m permet de définir le numéro de couleur de premier plan
  • Le problème, c’est qu’il n’existe pas de standard cohérent sur la correspondance entre un numéro ANSI et une couleur hex réelle
    • Chaque émulateur de terminal choisit ses propres couleurs
    • Même dans les tableaux de couleurs des codes d’échappement ANSI sur Wikipedia, les écarts entre implémentations sont importants
  • À cause de ces différences, le bleu utilisé par ls pour les répertoires peut être peu lisible sur fond noir
  • Une combinaison jaune clair sur fond blanc est elle aussi presque illisible, et des problèmes similaires peuvent apparaître avec d’autres couleurs comme le vert clair

Comment réinitialiser la palette de couleurs

  • Si les couleurs ANSI par défaut ne conviennent pas ou posent des problèmes de contraste, on peut agir en réinitialisant la palette
  • Réglage dans l’émulateur de terminal

    • La plupart des émulateurs de terminal modernes permettent de redéfinir les couleurs
    • Certains fournissent des thèmes intégrés
    • Plus un émulateur de terminal est populaire, plus il peut proposer de thèmes au choix
  • Réglage via un script shell

    • On peut modifier la palette de couleurs d’un émulateur de terminal en affichant des codes d’échappement ANSI
    • Le script Solarized Light de base16-shell utilise des conventions de codes d’échappement différentes selon les terminaux
    • Le script essaie de choisir le bon style de code d’échappement en fonction de la variable d’environnement TERM
    • Cette approche par script shell facilite la conservation des mêmes réglages de couleurs même si l’on change d’émulateur de terminal
    • En revanche, tous les émulateurs de terminal ne prennent pas en charge cette modification de palette, et même lorsqu’ils la prennent en charge, le résultat peut varier légèrement

256 couleurs, 24 bits et thèmes propres aux outils

  • De nombreux terminaux prennent en charge 3 modes de définition des couleurs
    • les 16 couleurs ANSI
    • les 256 couleurs étendues
    • les couleurs hexadécimales 24 bits comme #ffea03
  • fd utilise dans sa sortie des codes d’échappement comme ^[[38;5;48m pour définir la couleur de premier plan 48
    • Cette couleur peut ressembler à un vert citron absent de la palette standard du terminal
    • Son contraste peut être mauvais avec la palette utilisée
  • bat utilise lui aussi des couleurs de manière comparable, mais sa sortie par défaut semble pensée pour fonctionner sur une grande variété de thèmes de terminal
  • Certains outils de terminal modernes comme fd, bat et delta prennent en charge des thèmes personnalisés
    • Leur thème par défaut peut entrer en conflit avec l’arrière-plan du terminal
    • En contrepartie, cela permet un contrôle plus fin du rendu que de se limiter aux 16 couleurs ANSI
  • Avec bat --theme ansi, bat utilise les couleurs ANSI configurées dans la palette standard du terminal

Conflits liés à Solarized et base16

  • Dans Solarized Light, le mappage des couleurs bright peut apparaître différemment selon l’implémentation
  • Le thème Solarized Light par défaut d’iTerm mappe, comme dans le design d’origine de Solarized, les couleurs 9 à 14 — autrement dit les variantes comme “bright blue” ou “bright red” — vers des tons de gris
    • Si ls utilise ces couleurs bright pour les répertoires et les fichiers exécutables, ils peuvent apparaître en gris
  • base16 Solarized Light peut être utilisé dans une variante qui conserve les couleurs bright comme de vraies couleurs, au lieu de les transformer en gris
  • Cette différence semble venir du fait que Solarized a été conçu à l’origine pour permettre à la palette Vim Solarized d’utiliser des gris
  • base16-shell définit aussi les couleurs 16 à 21 afin de fournir des couleurs supplémentaires à base16-vim
    • Si ngrok essaie de définir son fond avec la couleur 16, “black”, mais que cette couleur a été remappée vers un orange clair, on obtient un fond très étrange
    • Ce type de conflit est fréquent quand un programme définit une couleur de fond ANSI et que l’utilisateur a réaffecté cette couleur à une autre signification

Réduire les problèmes de contraste avec le contraste minimal

  • Certains terminaux proposent une fonction de contraste minimal qui ajuste automatiquement les couleurs quand le contraste entre premier plan et arrière-plan n’est pas suffisant
  • iTerm2, tabby, kitty avec text_fg_override_threshold, Ghostty et Windows Terminal proposent cette fonction
  • Dans iTerm, régler la valeur de contraste minimal sur 40 rend plus lisibles des sorties difficiles, comme en cas de conflit avec la couleur de fond de ngrok
  • Quand la configuration de couleurs est mauvaise ou qu’un programme entre en conflit avec le thème, le contraste minimal constitue une protection pratique contre les problèmes de lisibilité accidentels

TERM, pipes et désactivation des couleurs

  • Si le système auquel on se connecte en SSH ne prend pas en charge la valeur locale de la variable d’environnement TERM, les couleurs peuvent ne pas fonctionner correctement
  • Le système s’appuie sur la base de données terminfo, et si la valeur de TERM n’y figure pas, il devient difficile de savoir comment produire une sortie couleur adaptée au terminal
  • Même s’il n’y avait pas d’environnement reproductible, une réponse Stack Overflow proposait d’utiliser une forme comme TERM=xterm ssh plutôt que ssh
  • Les couleurs sont parfois désactivées quand on enchaîne des commandes avec un pipe
    • fd | less peut s’afficher sans couleurs
    • En général, c’est utile quand on envoie la sortie vers un outil comme grep, afin d’obtenir du texte brut sans codes d’échappement
  • Si l’on veut conserver les couleurs, on peut utiliser unbuffer fd | less -r
    • unbuffer ouvre un tty pour que la commande pense écrire dans un TTY
    • Cela règle aussi les problèmes de mise en tampon de la sortie quand on utilise un pipe
  • Certaines commandes, comme fd, proposent un drapeau --color=always pour toujours produire une sortie colorée

Désactiver ou modifier les couleurs de ls

  • Certains utilisateurs ne veulent pas de la sortie colorée de ls
    • parce que le bleu est difficile à lire sur fond noir
    • parce qu’ils ne veulent pas ajuster la palette de couleurs du terminal
    • ou parce que la couleur elle-même n’apporte pas d’aide
  • Plusieurs options existent
    • ls --color=never permet de désactiver les couleurs
    • la variable d’environnement LS_COLORS permet de personnaliser les couleurs utilisées par ls
    • certains programmes prennent en charge NO_COLOR=true, avec une liste disponible sur no-color.org
  • Par exemple, avec LS_COLORS="fi=0:di=0:ln=0:pi=0:so=0:bd=0:cd=0:or=0:ex=0" ls, on peut définir le style de couleur de plusieurs types de fichiers sur 0

Les évolutions de Vim et Neovim

  • La configuration des couleurs dans Vim a longtemps été compliquée, car il fallait faire correspondre la palette du terminal et celle de Vim
  • Dans un terminal, il existe globalement 2 façons de configurer les couleurs de Vim
    • mapper les classes de couleurs de Vim vers des numéros de couleurs ANSI
    • utiliser directement dans la palette des couleurs hexadécimales 24 bits comme #faea99
  • Il y a 20 ans, les terminaux prenant en charge les couleurs hexadécimales 24 bits étaient rares, et Vim ne permettait pas encore d’utiliser les couleurs 24 bits dans le terminal
  • Vim a ajouté la prise en charge des couleurs 24 bits en 2016
  • Neovim 0.10 est sorti en mai 2024 et, sur les terminaux compatibles 24 bits, termguicolors est activé par défaut
  • Si l’on ne prévoit pas d’utiliser en 2024 un terminal ne prenant pas en charge les couleurs 24 bits, il n’est plus nécessaire de synchroniser impérativement la palette du terminal avec celle de Vim
  • Ce changement réduit aussi la nécessité pour base16-shell de configurer de manière spéciale les couleurs 16 à 21 pour l’intégration avec Vim
    • En supprimant cette partie, on peut éviter des conflits comme le fond orange de ngrok

Expérience avec base16 et limites

  • Utiliser ensemble base16-shell et base16-vim facilite l’harmonisation des couleurs entre le terminal et Vim
  • La configuration peut se faire en ajoutant quelques lignes dans la configuration fish et quelques lignes dans .vimrc
  • base16 n’est pas une solution pour tout le monde
    • le nombre de thèmes intégrés est limité, et aucun ne peut convenir
    • le thème Solarized base16 définit les couleurs ANSI bright comme identiques aux couleurs normales, ce qui peut poser problème dans les cas où les bright doivent être différentes
    • la méthode qui consiste à définir les couleurs 16 à 21 pour fournir davantage de couleurs à base16-vim peut être inutile dans un environnement où l’on n’utilise que des terminaux compatibles 24 bits
    • la configuration des couleurs 16 à 21 peut poser problème sur des terminaux comme le terminal framebuffer Linux, qui ne prennent pas en charge les 256 couleurs
  • Il existe un fork communautaire de base16, tinted-theming

Outils de création de palettes et thèmes populaires

Des problèmes qui subsistent

  • Des problèmes de couleurs supplémentaires peuvent apparaître aux points de rencontre entre plusieurs programmes, par exemple avec la combinaison tmux, SSH et Vim
  • Choisir une bonne palette de couleurs reste en soi difficile
    • les utilisateurs daltoniens peuvent avoir du mal à trouver une palette adaptée
    • si la couleur de fond est trop proche de celle du curseur ou de la sélection, il peut devenir difficile de les repérer
    • il est difficile de trouver des couleurs qui fonctionnent bien dans tous les programmes, et des conflits comme celui de ngrok peuvent survenir
  • Des programmes qui attendent une apparence “classique” fondée sur les couleurs ANSI par défaut, comme Nethack ou Midnight Commander, peuvent sembler étranges avec des thèmes comme Solarized
  • Une solution consiste à changer la palette ANSI juste avant de lancer le programme
    • Par exemple, on peut remapper le jaune vers un jaune plus clair avant de lancer Nethack
  • Pour les utilisateurs qui veulent simplement que les couleurs fonctionnent sans effort, toute cette configuration manuelle est lourde, d’où l’importance de valeurs par défaut raisonnables et de fonctions comme le contraste minimal

1 commentaires

 
GN⁺ 2024-10-04
Commentaires sur Hacker News
  • En essayant de créer correctement un thème clair pour le système, je me suis heurté à tous ces problèmes et à bien d’autres, et deux points m’ont particulièrement intéressé.
    Avec le recul, cela paraît évident, mais j’ai été surpris de constater qu’un thème clair semble varier de façon bien plus subtile d’un écran à l’autre qu’un thème sombre. Les réglages matériels et logiciels créent certes des différences de rendu des couleurs, mais les variations centrées sur les zones claires sont perçues bien plus fortement que celles dans les zones sombres.
    Il arrive aussi qu’on doive redescendre vers des environnements aux polices et au support des couleurs sophistiquées limités, comme la console Linux ou BSD. Dans ce cas, fd ou exa/lsd/whatever peuvent devenir pénibles, voire inutilisables, surtout si l’on a mappé le second sur ls. Après de longues galères, j’ai configuré fbterm pour profiter de fonctions de terminal acceptables même sans X, mais fbterm a lui aussi ses propres problèmes. Lorsqu’on configure une palette de couleurs pour Vim, il faut soit préparer un thème de remplacement pour les consoles aux capacités réduites, soit beaucoup s’entraîner à taper les commandes Vim sans les regarder :D
    Édit : ce n’est pas pour un travail sérieux, mais voici un écran fbterm stylisé qui montre ce qu’on peut faire sans X : https://i.imgur.com/RbDRgtD.png

    • Le fait qu’un thème clair semble varier plus subtilement d’un écran à l’autre n’a rien de surprenant. Je fais des tirages argentiques en noir et blanc sur film, et il est bien connu que l’œil humain détecte beaucoup mieux les fines variations de ton dans les zones claires d’un tirage que dans les zones sombres.
      C’est pourquoi, pour obtenir la bonne exposition et le bon contraste, je passe pas mal de temps à ajuster les hautes lumières jusqu’à ce qu’elles paraissent « exactement justes ». Je ne fais pas de tirages numériques, mais le même principe devrait s’appliquer.
    • En principe, on devrait pouvoir se reposer sur une variable TERM correctement configurée, et les utilitaires en ligne de commande devraient respecter les capacités indiquées par cette variable.
      Malheureusement, les frameworks d’outils en ligne de commande « modernes », souvent écrits en JavaScript, ont tendance à l’ignorer.
      https://www.gnu.org/software/gettext/manual/html_node/The-TE...
    • J’ai récemment essayé d’afficher un grand nombre de séries de données en différentes couleurs dans un graphique Excel, et le meilleur choix pour distinguer facilement beaucoup de couleurs était un arc-en-ciel de spectre pur sur fond noir.
      Il y avait aussi un réglage permettant d’ajouter aux points de données un léger effet de « halo » de la même couleur, pour leur donner l’apparence de points lumineux. Du point de vue de la saturation des couleurs, c’est-à-dire du rapport signal/bruit sur l’ensemble du spectre, il est logique qu’un fond noir soit meilleur.
      On peut utiliser une dizaine de couleurs différentes presque sans difficulté. En outre, le jaune se situant entre le rouge et le vert, l’orange entre le rouge et le jaune, etc., cela présente aussi l’avantage de transmettre une information d’ordre/de distance, ce qui facilite la subdivision et l’interprétation de la proximité entre deux couleurs.
    • Même avec une belle police et un thème de couleurs agréable, tout peut être ruiné par un seul arrière-plan qui rend certains caractères difficiles à lire.
  • En réalité, je ne pense pas que ce soit si compliqué.
    Étape 1 : la plupart des émulateurs de terminal ont une palette de couleurs par défaut médiocre, donc il suffit de la changer. Personnellement, j’aime Solarized, surtout le thème sombre, mais le thème clair est aussi correct. Même sans Solarized, il existe beaucoup de thèmes où toutes les couleurs restent lisibles sur le fond par défaut.
    Étape 2 : il faut éviter les outils en ligne de commande qui utilisent par défaut des séquences d’échappement en couleur 8 bits ou 24 bits. C’est peut-être discutable, mais je trouve ça personnellement hostile à l’utilisateur. J’ai déjà choisi la meilleure palette de couleurs de terminal selon mes besoins de lisibilité, donc ce n’est pas utile qu’un développeur se prenne pour un faux designer et l’écrase. On peut proposer une option pour activer un thème dans l’outil, mais cela doit rester facultatif, pas le comportement par défaut.
    En tant que personne qui passe l’essentiel de sa vie dans le terminal, respecter seulement ces deux règles suffit à obtenir un environnement de terminal cohérent et lisible, presque sans effort de configuration. Le vrai problème, c’est qu’on tolère beaucoup trop que les développeurs utilisent des codes d’échappement couleur 8 bits et 24 bits.

    • Cela rejoint la question des bons réglages par défaut. Si l’utilisateur doit configurer quelque chose, il doit d’abord savoir que c’est configurable, puis effectivement le configurer. C’est une grosse barrière, et très peu d’utilisateurs vont jusque-là.
      Avec les années, je suis arrivé à la conclusion qu’il faut mettre les nouvelles fonctionnalités sous les yeux des utilisateurs, et imposer fermement de bons réglages par défaut. Sinon, elles sont très peu utilisées.
      Les couleurs 8 bits et 24 bits sont déjà des fonctionnalités optionnelles et configurables. Dans un programme de terminal bien conçu, les variables d’environnement TERM et COLORTERM déterminent s’il faut utiliser ces couleurs.
    • En particulier, Solarized Dark n’est pas très adapté à un usage dans le terminal. Son auteur a défini le “bright black” avec une couleur presque identique au fond.
      Beaucoup d’applications s’attendent à ce que le texte “bright black” reste visible sur l’arrière-plan. Il y a beaucoup d’exemples ici : https://github.com/altercation/solarized/issues/220
      Presque toutes les autres palettes représentent le “bright black” comme un gris lisible sur fond noir.
    • Même s’il existe des thèmes où toutes les couleurs restent lisibles sur le fond par défaut, certaines applications définissent à la fois la couleur du texte et celle du fond.
      Par exemple, pamix met le fond en noir, et la barre d’état de tmux ou ngrok font quelque chose de similaire. Et là, on se retrouve à tomber dans un terrier de lapin pour gérer ça.
    • Il faut d’abord se demander : « quelle est la meilleure façon de traiter ce problème ? », ce qui suppose de définir ce que veut dire meilleure. Personnellement, je préfère le principe selon lequel la personnalisation utilisateur doit se faire à un seul endroit, et l’impact sur les programmes doit être minimal, notamment en nombre de lignes de code.
      Les deux points suggèrent que la solution doit se trouver au niveau du terminal. Le programme de terminal doit déjà fournir des couleurs par défaut raisonnables : le bleu doit être un bleu identifiable, et il faut aussi tenir compte des formes courantes de daltonisme. Par exemple, un rouge pur sur fond noir est difficile à lire, donc mieux vaut ne pas utiliser seulement ff0000, mais y mélanger au moins un peu autre chose.
      Une fois que le terminal a des réglages par défaut raisonnables, les programmes en ligne de commande peuvent se contenter d’utiliser les 16 couleurs standard. Dans ce contexte, vouloir utiliser de la couleur 24 bits revient surtout à dire soit « j’abandonne l’idée que le terminal fournisse un comportement raisonnable », soit « je sais mieux que tout le monde », et au final l’utilisateur doit configurer séparément N programmes. À mon avis, la meilleure solution est de ne pas définir de thèmes dans les applications en ligne de commande.
      Je vois les sites web et les polices de la même façon. Il faut fournir le contenu en HTML pour que l’utilisateur puisse le consulter comme il le souhaite, et la mise en page doit rester fluide au lieu d’être figée comme une maquette de magazine.
      C’est similaire aussi dans les logiciels de bureau. Un compositeur Wayland devrait mémoriser la position des fenêtres. C’était absurde que chaque programme X enregistre et restaure lui-même la position de sa fenêtre. Wayland dit que connaître des informations sur l’environnement pose des problèmes de sécurité, et je suis d’accord sur ce point, mais dans ce cas cette mémoire doit relever de l’environnement de bureau. Cela permet aussi d’enlever ce code de toutes les applications.
      La question « à quel niveau de la pile logicielle faut-il gérer cela ? » revient dans beaucoup de domaines. Et pour choisir où placer cette responsabilité, il faut d’abord répondre à la question de l’objectif recherché ; pour ma part, ma réponse penche toujours vers la simplicité et la maintenabilité.
    • Je me demande à quel point il est réellement difficile d’éviter les outils en ligne de commande qui utilisent par défaut des séquences d’échappement couleur 8 bits ou 24 bits.
      Le texte de Julia mentionne aussi cette idée, mais sans entrer dans les difficultés concrètes. À ce sujet, je me demande aussi si les palettes de terminal ne gèrent que les 16 couleurs par défaut, ou si elles touchent aussi aux zones RGB et niveaux de gris. On pourrait aussi ajuster les couleurs 8 bits et 16 bits pour répondre à des exigences de lisibilité.
  • Si vous êtes dans la position de choisir des couleurs, cela vaut la peine de les vérifier avec le nouvel algorithme APCA (Advanced Perception of Colour).
    APCA est censé remplacer à terme dans WCAG 3.0 l’ancienne approche de contraste x:y, même si cela prendra probablement encore quelques années. Il prendrait en compte la taille de la police, son épaisseur, le premier plan et l’arrière-plan, voire l’éclairage ambiant, l’environnement, et même l’usage prévu.
    Ce serait assez intéressant si les émulateurs de terminal pouvaient utiliser le capteur de luminosité de l’appareil pour optimiser le contraste en fonction des facteurs environnementaux.

    • J’ai réglé ma palette de terminal actuelle moi-même de cette façon. Je n’ai trouvé aucun thème existant qui satisfasse mes exigences de contraste personnelles pour l’ensemble des couleurs ANSI.
  • Il y a aussi des fous furieux complets qui veulent carrément désactiver les couleurs[0]. J’aimerais bien essayer, mais j’aime aussi les jolies couleurs
    [0] https://no-color.org/

    • :syntax off est mon seul réglage Vim. Les palettes de couleurs de terminal ont été conçues par des programmeurs et des ingénieurs électriciens, ainsi que par des gens qui ne comprennent pas qu’en matière de couleur, l’important n’est pas la couleur elle-même mais la luminosité
    • Une fois habitué à un terminal monochrome, on commence à trouver la plupart des couleurs distrayantes et accaparantes
      Je me demande s’il existe une corrélation entre les gens qui ne veulent pas de couleurs dans leur terminal et ceux qui utilisent des bloqueurs de pub très agressifs ou le mode lecture dans le navigateur
    • Les séquences de couleur sont connues pour être peu portables et poser des problèmes. Par exemple, il arrive qu’un rapport pytest coloré fasse planter une session Jupyter
      Quand on envoie la sortie dans un pipe, la couleur n’apporte absolument rien et ne fait qu’ajouter du passif technique. Au fond, c’est surtout une question de choix
    • Moi aussi, je suis de ce bord-là. Surtout pour coder, je trouve que presque toute coloration est distrayante et contre-productive
      C’est encore pire quand on alterne entre Linux et Windows. L’usage par défaut des couleurs dans beaucoup d’outils est presque inutilisable, voire réellement inutilisable
      Certains outils proposent l’option --color=never, et pas mal respectent NO_COLOR. Malheureusement, pas tous, et même parmi ceux qui le font, certains supposent que ce mode ne servira que pour les pipelines ou les interfaces programmatiques. D’où toutes sortes de comportements malheureux
    • Je vais aussi dans cette direction. J’ai regardé zenbones, puis j’ai fini par adopter https://github.com/savq/melange-nvim
      Il y a l’idée d’une palette cohérente avec une température de couleur signifiante, orientée vers des tons chauds pour moins fatiguer les yeux à force de regarder trop de bleu. Une palette alacritty est fournie aussi
  • Depuis longtemps, je voulais utiliser un thème clair dans le terminal, mais il y a trop de programmes qui emploient des couleurs personnalisées non ANSI optimisées pour un fond de terminal sombre, donc j’ai toujours fini par abandonner
    Certains programmes permettent de régler les couleurs, mais configurer chaque programme un par un me semblait trop pénible. Du coup, j’utilise maintenant un fond de terminal sombre, tout en choisissant moi-même un thème ANSI où toutes les couleurs ont un ratio de contraste suffisant selon mes critères et passent aussi les vérifications de contraste APCA/WCAG 3. J’en suis content :)

    • Pour les personnes ayant des aberrations visuelles d’ordre supérieur, le mode sombre n’est tout simplement pas une option. À l’inverse, pour certaines personnes atteintes de cataracte, c’est le mode clair qui peut ne pas l’être
      Avec la séquence de contrôle OSC 11, les programmes peuvent connaître la couleur de fond, mais presque aucun ne s’en soucie. En général, quelqu’un trouve qu’un message d’avertissement jaune a l’air cool, et ça s’arrête là
      Cela mène à un autre problème : il existe des terminaux populaires qui ne sont pas compatibles xterm mais définissent quand même TERM=xterm256-color par défaut
      Édit : je viens de découvrir xtermcontrol, qui permet d’abstraire la vérification du fond dans des scripts et qui est présent dans tous les principaux gestionnaires de paquets
    • Pendant un temps, pour éviter cet enfer de configuration, je faisais semblant d’avoir un terminal 16 couleurs sans prise en charge du 256 couleurs. Je me disais que l’absence de couleur valait mieux que de mauvaises couleurs, donc j’ai aussi essayé https://no-color.org/
      Aujourd’hui, j’ai abandonné et je configure manuellement la plupart des applis pour qu’elles utilisent les couleurs ANSI. Par exemple, fzf a des options en ligne de commande. Je ne garde que Vim et Emacs comme applis non ANSI, et je les règle en fonction de la palette utilisée dans le reste du terminal. Si on veut, on peut aller encore plus loin avec quelque chose comme vim-dim
    • Beaucoup de terminaux, par exemple konsole de trinity/tde3, permettent d’ajuster directement les couleurs par défaut, ce qui aide
    • Sur macOS, avec iTerm et les programmes que j’utilise, comme neovim, je n’ai pas eu ce problème, et ça avait l’air correct même avec les réglages par défaut
  • Emacs a une option peu connue, frame-background-mode[0], qui vaut en pratique soit light, soit dark
    Quand on se demande pourquoi Emacs a choisi une couleur bizarre pour un élément, c’est souvent parce que frame-background-mode est mal réglé
    [0]https://doc.endlessparentheses.com/Var/frame-background-mode...

    • Le problème fondamental vient souvent du fait que le terminal ne définit pas la variable COLORFGBG
      Dans un terminal à fond sombre avec texte blanc : export COLORFGBG='15;0'
      Dans un terminal à fond clair avec texte noir : export COLORFGBG='0;15'
    • Meilleur lien : <https://www.gnu.org/software/emacs/manual/html_node/emacs/Fa...>
  • J’utilise depuis presque 10 ans une palette FlatUI légèrement modifiée, et je n’ai pratiquement jamais rencontré de situation où cela posait problème
    fichier png : https://drive.google.com/file/d/1mkMESeGf7MNdKa-rPDx7Yf9BDit...
    lien imgur : https://imgur.com/a/flatui-7mqVZAY
    base : https://flatuicolors.com/palette/defo

    • Ça ressemble au thème One Dark, qui si je me souviens bien venait de l’éditeur Atom
      Moi aussi, j’utilise mon thème depuis presque 10 ans. Il marche bien dans iTerm, vim, Emacs, vscode, etc.
  • J’utilise Apple Terminal depuis longtemps, et autrefois il existait une bonne collection de palettes de couleurs appelée « Terminal Fructose », ce qui me permettait d’utiliser des couleurs de fond différentes selon le travail. Apple l’a même intégrée à un moment donné sous forme de thème
    Mais Apple a laissé le support de Terminal à l’abandon, ne prend pas en charge plus de 256 couleurs et manque aussi de fonctionnalités plus modernes. Ça ne s’accorde pas très bien non plus avec une configuration Neovim+LazyVim
    J’ai testé iTerm2, Kitty, Alacritty et Wezterm en cherchant un meilleur terminal, mais même s’ils sont tous plus modernes, aucun ne semblait proposer l’option de base « New Window with Profile ... » pour ouvrir rapidement des fenêtres avec plusieurs couleurs de fond/thèmes différents. En tout cas, pas sans un peu de bricolage
    Je me suis maintenant fixé sur Wezterm, principalement parce qu’il fonctionne aussi sous Windows et que je peux partager la configuration wezterm.lua. D’ailleurs, Windows Terminal est en réalité plutôt pas mal. Malgré tout, pour des tâches rapides, par exemple utiliser python3 comme REPL pour faire des calculs ou tester de l’hexadécimal/binaire, je lance encore Apple Terminal

    • iTerm a exactement cette fonctionnalité
    • Bizarre. Moi, je suis passé très vite de Apple Terminal à iTerm2 justement parce qu’il prenait en charge « new tab with profile »
    • Si je continue à utiliser Wezterm, c’est pour deux raisons. On peut facilement partager la configuration entre plusieurs plateformes, et son langage de configuration est le Lua
      Il y a bien quelques fonctionnalités d’iTerm2 qui me manquent, surtout liées à la souris. À part ça, je l’ai configuré comme je voulais en quelques soirées, et depuis que j’ai fait en sorte que cmd-n ouvre une nouvelle fenêtre dans le répertoire par défaut plutôt que dans le répertoire courant, j’en suis satisfait
    • Si tu veux ajouter « New Window with Profile... » à WezTerm, tu peux probablement bricoler quelque chose du côté de launch_menu [1], qui lance un autre shell, ou de augment-command-palette [2], qui ajoute des entrées à la palette de commandes
      [1] https://wezfurlong.org/wezterm/config/lua/config/launch_menu...
      [2] https://wezfurlong.org/wezterm/config/lua/window-events/augm...
      Oui, ça demande un peu de bricolage. Mais programmer exactement une fonctionnalité très spécifique comme on la veut, c’est le summum de l’expérience WezTerm
    • Konsole, le terminal de KDE, le prend en charge. On peut le faire depuis le menu ou en laissant appuyée l’icône de nouvel onglet. Il me semble qu’il est aussi disponible sur macOS
  • Pas seulement sur les terminaux : sur les enseignes au néon ou les panneaux LED aussi, le bleu est la couleur la plus fatigante pour les yeux la nuit
    De loin, ça paraît toujours flou et impossible à mettre au point. Quand je vois de grandes entreprises installer d’immenses enseignes éclairées en bleu, je trouve étonnant qu’elles dépensent autant d’argent sans même se rendre compte que les gens ne peuvent pas les lire

  • Sur mon portable, j’ai configuré le basculement automatique entre mode clair et mode sombre selon le cycle du jour, et c’est assez stupéfiant de voir combien d’applications qui affichent de la couleur se cassent quand on passe en mode fond clair avec texte sombre
    Si vous développez un outil en ligne de commande et que vous tenez absolument à utiliser des couleurs, il faut soit se limiter aux 16 couleurs ANSI, soit permettre à l’utilisateur final de modifier la palette