Désolarisation

D'habitude je fais des billets complets, sur des sujets où je suis arrivée à une certaine forme de fin, ce qui me permet de tirer un fil de l'introduction à la conclusion. J'arrive beaucoup plus facilement à rédiger un billet en cristallisant des mots sur un tel fil.

D'un autre côté, le sujet de ce billet patine tellement qu'il est peut-être temps de fermer ce qui est fermable et de repousser la suite à un autre billet. Et puis cette publication va peut-être me décoincer, par la clarté de devoir exposer le problème ou par les réactions de mes chers lecteurs.

La fabrique d'un problème

Dans le billet Ricing, je vous avais raconté l'évolution de mon environnement graphique, avec sa stabilité pendant 15 ans et les vents du changement qui ont commencé à souffler (relativement) récemment. Parmi les « points fixes » j'avais listé la palette de couleur, Solarized.

Depuis plusieurs mois, les vents du changement soufflent fort sur cette palette, et pourtant ces lignes sont encore écrites dans un terminal qui reste sur cette palette.

Si je n'ai pas encore fait le changement, j'en suis au stade où l'insatisfaction croissante me pousse à chercher mieux. Un peu comme la confusion entre les points et les virgules dans DejaVu, ou la gestion des terminaux parents de firefox dans PekWM, je vis avec ces difficultés depuis longtemps, mais ce n'est que depuis quelques mois que j'en ai conscience au point de chercher activement à les remplacer.

Je ne sais pas trop quel effet psychologique rend une situation beaucoup plus difficile à supporter une fois qu'on l'a recardée comme étant un problème, mais ça m'est arrivé suffisamment souvent pour que ça me semble être un mécanisme déterministe et implacable.

Pendant 15 ans c'était juste un inconvénient mineur, ou à la limite juste chiant, alors que depuis quelques moins c'est un problème qu'il faut résoudre.

Et je ressens une certaine frustration à ne pas réussir à le résoudre, j'ai complètement perdu le cadre dans lequel ce n'était qu'un inconvénient avec lequel je vis volontiers.

Le péché originel

Mon insatisfaction envers Solarized se manifeste de plusieurs manières, que je vais détailler plus loin, mais tous ces ennuis découlent d'un seul choix fondamental dans cette palette. Je n'ai aucun problème directement avec ce choix, mais les conséquences que je déplore me font penser que c'est une mauvaise idée.

Voici les 16 couleurs de la palette Solarized, dans une image extraite du site :

Palette Solarized

On y trouve huit teintes grisâtres (toutes les combinaisons à base de fond ou texte, normal ou emphatique, clair ou sombre), et huit couleurs qui permettent différentes formes d'accent.

Or j'utilise cette palette dans un émulateur de terminal, qui fonctionne aussi à base 16 couleurs, mais suivant la sémantique ANSI, c'est-à-dire en gros les 8 couleurs obtenues avec une profondeur d'un bit sur chaque canal primaire (c'est-à-dire noir, rouge, vert, jaune, bleu, magenta, cyan, blanc), avec une variante normale et une variante plus claire.

Dit autrement, parmi les 16 couleurs ANSI, il y a 4 teintes grisâtres et 6 couleurs, dont chacune a 2 nuances.

La « solution » retenue a plus ou moins été d'envoyer ch*er la sémantique ANSI :

Adaptation ANSI de la palette Solarized

Autant la colonne de gauche, c'est-à-dire les 8 couleurs de base, me semblent raisonnables, autant la variante plus claire tient du grand n'importe quoi.

Je comprends bien l'orange comme une variation du rouge, et le violet comme une variation du magenta, mais les autres couleurs claires n'ont aucun rapport avec les teintes grisâtres qui les remplacent.

Et c'est d'autant plus frustrant que si on regarde le détail de la palette, il n'y a que 4 teintes grisâtres utilisées, et le seul intérêt d'avoir les 8 teintes est de pouvoir basculer entre le mode clair et le mode sombre depuis l'intérieur du terminal. Ça m'est arrivé exactement 0 fois de vouloir ou pouvoir faire le changement comme ça, mes changements ont toujours été faits par l'extérieur, c'est-à-dire en changeant la palette.

La non-solution : Base-16

J'en profite pour faire un détour par Base-16, qui a l'air d'être une sorte de généralisation de Solarized, avec 8 teintes de base et 8 couleurs d'accent, en proposant toute une variété de palettes dans ce paradigme.

C'est-à-dire que ça garde tout ce qui me déplaît dans Solarized, en enlevant tout ce qui me plait, à savoir les couleurs elles-mêmes.

J'ai été un peu déçue de voir cette solution préconisée par Julia Evans dans son exploration des couleurs dans le terminal après avoir pourtant bien identifié le fond du problème.

Il y a bien Base-24 qui a le mérite au moins de reconnaître le problème, mais qui fait la même erreur que Base-16, à savoir pourrir des indices de couleurs qui n'ont rien demandé.

Je suppose que pourrir les bleus de la zone de 6³ couleurs parmi les 256 pose moins souvent de problème que pourrir les couleurs claires, mais ça reste une solution aussi peu satisfaisante intellectuellement.

Comment ça marchait ?

J'ai pu tolérer la violation de la sémantique ANSI parce tous les programmes que j'utilise régulièrement ont une configuration particulière qui s'adapte aux choix de couleurs de Solarized :

Le réquisitoire

Un thème particulier pour chaque programme, c'est très bien, tant qu'on pose un thème avant de l'utiliser. Pour mes programmes habituels, je reprends ma configuration habituelle sans me poser de question ; mais avant d'essayer un nouveau programme dans mon terminal, je n'ai pas forcément envie de passer par toutes les étapes de personnalisation.

Ces derniers temps je cherche plus d'alternatives en terminal d'outils en clicodromes, notamment ceux qui hantent mon lieu de travail, et ça m'a probablement rendue un peu plus sensible à ce problème.

Les derniers exemples en date sont #gcufeed, que j'ai déjà évoqué dans iens en vrac et à l'unité, où iMil a eu la malchance de choisir une paire de couleur invisible pour moi, et un format intéressant de git log dont j'ai dû reprendre toutes les couleurs.

Et en y regardant de plus près, les thèmes ne sont en fait pas cohérents. Par exemple, la barre de statut de vim est en noir sur blanc, celle de mutt est en jaune sur gris foncé, et celle d'irssi est en noir sur vert.

Et puis à force de chercher, je dois convenir que Solarized a des faiblesses, notamment le jaune et le vert qui ne sont pas faciles à distinguer.

La fausse piste

Comme j'ai vu un problème de fond avec Solarized (et ensuite avec Base-16), ma première idée a été de chercher d'autres palettes (c'est comme ça que j'ai trouvé Base-16).

J'ai fait face à un certain nombre de déceptions, et je suis un peu triste d'avoir déjà perdu tous mes souvenirs de la façon mes idées s'organisaient dans cette période.

Le résultat a été que je n'ai pas fondamentalement envie de changer de palette. J'aime bien l'ambiance générale de Solarized, même si les thèmes sont probablement perfectibles et quelques ajustements de couleurs ne feraient pas de mal.

Au milieu de tout le foisonnement de thème plus ou moins spécialisés dans les terminaux, je suis tombée sur Rosé Pine et Catppuccin, qui me semblent assez intéressant pour être tentée de leur donner une chance, et surtout qui ont planté l'idée que je pourrais avoir non seulement une palette, mais aussi un thème avec cette palette, et non seulement dans mes applications en terminaux mais aussi dans les autres applications.

Et c'est en explorant ces deux pistes que j'ai pris conscience d'une incompréhension majeure : ce ne sont pas juste des palettes, comme Solarized l'était à l'époque, mais ce sont bien des thèmes, c'est-à-dire qu'en plus de définir des couleurs ils posent une symbolique associée à ces couleurs.

Or les 16 couleurs ANSI imposent un découplage entre la palette et l'utilisation qu'on voudrait en faire derrière.

La solution parfaite

À partir de là, je me suis mise à rêver la solution que je voudrais voir sur ma machine, avant de vérifier que je suis capable de la construire.

Techniquement, les séquences d'échappement ANSI sont plus riches que 16 couleurs, parce qu'il y a une 17ᵉ couleur, à savoir la couleur par défaut, qui n'est pas nécessairement parmi les 16 autres que l'on demande explicitement. Et en plus, rien n'oblige le texte et le fond d'utiliser la même palette, donc on pourrait imaginer 34 couleurs différentes dans le système ANSI tel qu'il existe dans les terminaux actuels.

La distinction entre couleurs de texte et couleurs de fond me semble intéressante pour améliorer la lisibilité, mais mettons-la de côté pour le moment.

J'ai donc le standard ANSI qui contient naturellement 4 teintes grisâtre, voire 6 en distinguant les couleurs par défaut, et 12 couleurs.

J'aimerais donc bien avoir d'un côté une palette qui définisse ces couleurs, par exemple Selenized, et d'un autre côté des thèmes, ou au moins un thème, qui utilise la sémantique ANSI pour harmoniser mes programmes habituels.

Et visiblement, personne ne pense comme ça, je suis toute seule, et je dois aller chercher avec les dents à la b*te et au couteau dans mon coin comment construire une telle solution.

Entre Solarized, Selenized, Rosé Pine, et Catppuccin, j'ai largement ce qu'il me faut en matière palettes, il reste donc à ANSIfier tout ça et reprendre la configuration de tous mes programmes préférés.

Perdue dans la jungle

Le problème d'inventer son chemin à coups de coupe-coupe, c'est qu'on ne peut pas retrouver son chemin quand on se perd.

Depuis que j'ai fait les constats ci-dessus, j'ai traversé au moins une demi-douzaine de « crises » dans lesquelles je remets tout en question, et je cherche une solution non-parfaite satisfaisante.

La modernité

Le plus facile serait d'envoyer la sémantique ANSI à sa place dans les poubelles de l'Histoire, et utiliser le fait que le mode RGB 24-bits est supporté par mon terminal (même sans patch !), par mosh si d'aventure j'utilise quelque de plus fragile que SSH, par tmux, et par les différentes applications que j'utilise.

Sauf que quelque chose dans cette chaîne-là se vautre, et je suis d'autant moins motivée pour trouver quoi qu'il y a de fortes chances que ce soit fragile, et que j'aime bien l'idée que les applications basiques avec des séquences ANSI codées en dur utilisent aussi ma palette préférée.

Et puis même les palettes les plus pléthoriques « rentrent » (ou presque) dans le paradigme ANSI de 4-voire-6 teintes de base et 12 couleurs. Il y a quelque chose de très satisfaisant intellectuellement à ce niveau intermédiaire d'abstraction entre la palette et le thème, et maintenant que je l'ai en tête je suis très triste que personne ne s'appuie dessus.

Les théories des couleurs

J'ai fait un long détour par les théories de la perception visuelle des couleurs, en découvrant au passage Oklab et Okhsl, par l'intermédiaire d'OKsolar, qui sont des outils très intéressants.

J'ai parfois été tentée de rédiger une vulgarisation de (ce que j'ai compris de) tout ça, un peu à l'exemple de Julia Evans, mais à chaque fois que j'imagine essayer de le faire j'ai l'impression de redire moins bien des trucs déjà écrits, et j'ai l'impression qu'il n'y a pas de public que le sujet intéresse suffisamment pour lire ma prose (même si elle était bonne) mais suffisamment peu pour ne pas aller directement lire mes sources.

J'en suis ressortie avec nouvelle appréciation pour Solarized, parce que même s'il est basé sur le moins bon CIELAB, Ethan Schoonover partage en plus de sa palette un cahier des charges et ses choix d'architecture, quand toutes les autres palettes n'ont pas l'air d'aller plus loin que « ouais alors j'ai choisi au doigt mouillé ce tas de couleurs parce que je trouve que ça rend bien ».

Sur le fond, je suis d'accord que ce sont des goûts et des couleurs, mais si je bascule vers une palette que le Solarized que j'ai sous les yeux depuis 15 ans, au début je ne vais rien voir d'autre que « ce n'est pas comme d'habitude ». Donc tout changement sera forcément un investissement, et je retrouve la démarche de moi‐d'il‐y‐a‐15‐ans qui a trouvé que les arguments Ethan Schoonover sont suffisamment convainquants pour donner une chance à cette palette.

L'hackabilité et les standards de terminaux

Je ne retrouve plus exactement comme cette histoire de palette s'inscrit dans mon évolution personnelle sur l'hackabilité des outils.

Le fait est qu'utiliser le terminal Suckless et le window manager de Suckless participent énormément dans ma tendance à imaginer la solution d'abord et à regarder ce qui est possible ensuite, quitte à fabriquer de nouvelles possibilités quand elles n'existent pas encore.

C'est comme ça que j'ai l'impression d'être la première à voir 34 nuances dans les 16 couleurs ANSI, alors que c'est une solution très simple et élégante aux problèmes de contraste entre les couleurs, comparé aux opérations mathématiques plus ou moins opaques dans un espace de couleurs plus ou moins approprié qui prétendent assurer un contraste minimal.

Si le code Suckless a le mérite d'être très facile d'accès, il ne cache pas la complexité intrinsèque de ce qu'il prétend faire, et respecter plus ou moins un standard ANSI de séquences d'échappement n'est pas une mince affaire.

Encore une fois l'avatar de Julia Evans qui sommeille en moi a failli se réveiller pour expliquer tout ça, mais l'élan a encore une fois été coupé par l'impression de ne pas avoir de public dans les niveaux intermédiaires d'intérêt habités par la vulgarisation.

La coloration syntaxique

Autant je n'ai pas peur de fabriquer à la main un thème pour la plupart de mes applications, ça prend du temps mais c'est plutôt circonscrit, autant mettre les doigts dans la coloration syntaxique de vim me donne encore l'impression d'être un projet pharaonique à lui tout seul.

Je surestime probablement la difficulté de cette entreprise en la qualifiant sérieusement de « pharaonique », mais c'est bien un nouveau langage à apprendre, avec son lot de concepts, d'idiomes, et de pièges.

Je suis d'autant moins motivée pour m'y mettre que j'envisage sérieusement de basculer, ou moins d'essayer, neovim à la place de mon vim habituel, et je ne sais pas trop ce que je pourrai emmener avec moi dans cette transition.

Cela dit, je reste continuellement surprise qu'il ait si peu de thèmes ANSI, ou basés sur la sémantique d'ANSI. Il semble y avoir la coloration syntaxique par défaut, une variante à peine améliorée, et Noctu, mais j'ai l'impression que ça ne va pas tellement plus loin que ça. Alors que je ne suis pas la seule à voir l'intérêt de passer par la palette ANSI

Conclusion

J'en suis donc au stade où j'ai accumulé suffisamment d'insatisfaction pour déployer des efforts en vue de changer de palette dans mes terminaux, ou au moins de changer d'utilisation de ma palette habituelle.

Sauf que pour la première fois depuis que les vents du changement ont recommencé à souffler, je me casse les dents sur la mise en œuvre de mes envies de changement.

Peut-être que quelqu'un parmi vous, chers lecteurs, aura une idée géniale pour me sortir de cette ornière. Je vous remercie par avance de la partager si c'est le cas.

Si j'en trouve moi-même, je ne manquerai pas de le publier par ici.

Au-delà des problèmes du moment avec mon espace de travail, c'est l'occasion de tomber sur une remise en question intéressante de ma ligne éditoriale.

Si ce weblog se contente d'être une archive publique de mes notes personnelles à destination de moi‐du‐futur, éventuellement agrémentée de nouvelles personnelles à destination des proches‐du‐présent, il n'y a aucun intérêt à y mettre des vulgarisations de concepts ou d'outils que j'ai déjà assimilés dans ma vie.

Alors que si je compte un lectorat qui me suivrait pour les idées que je partage, relié à moi par des centres d'intérêt similaires plus que par un investissement émotionnel ou une curiosité personnelle, il y aurait un public pour ce type de vulgarisation.

Il y a un certain parallèle avec la question de bloguer en anglais, parce que moi‐du‐futur et mes proches‐du‐présent sont complètement à l'aise en français, et l'anglais n'a d'intérêt que pour élargir le public potentiel avec des centres d'intérêts similaires aux miens (avec le défaut d'avoir beaucoup plus d'alternatives de grande qualité sur tous les sujets que je peux vouloir partager).

Bref, si quelqu'un lit ces lignes et regrette que je ne canalise pas plus ma Julia Evans intérieure, qu'il n'hésite pas à me détromper pour que je corrige le point de vue que j'ai exprimé dans ces derniers paragraphes.

Commentaires

1. Le mardi 5 novembre 2024 à 13:51, par Damien :

Sans doute pas de "game changer" dans cette liste mais quelques liens complémentaires ; comme ils ne sont pas listés dans l'article, je ne sais pas si tu les connais ou non :)

Même s'il pourrait ne pas te plaire estéthiquement, le thème Dracula (que tu ne cites pas) est très complet (en nombre d'applications qui sont couvertes).

https://draculatheme.com/
https://www.felesatra.moe/blog/2016/02/28/on-solarized
https://hamvocke.com/blog/lets-create-a-terminal-color-scheme/
https://terminal.sexy/

2. Le mardi 5 novembre 2024 à 14:44, par Damien :

Quelques autres en vrac (là encore, sans doute pas de "silver bullet")

https://github.com/ayu-theme/ayu-colors
https://github.com/nealmckee/penumbra
https://github.com/gruvbox-community/gruvbox
https://github.com/themerdev/themer
https://news.ycombinator.com/item?id=33400822

(quelques remarques intéressantes dans le dernier lien)

3. Le samedi 16 novembre 2024 à 16:50, par Natacha :

J'avais vu Grubbox et Dracula, et un certain nombre d'autres comme Nord, et c'est à eux que je faisais référence quand j'écrivais qu'ils « n'ont pas l'air d'aller plus loin que “ouais alors j'ai choisi au doigt mouillé ce tas de couleurs parce que je trouve que ça rend bien” ». J'ai détaillé à côté pourquoi je ne cherche pas vraiment de nouvelles couleurs aujourd'hui ; y compris le fait qu'il faudrait qu'une palette soit beaucoup plus à mon goût que celle que j'utilise pour surmonter la première impression du « ce n'est pas ce dont j'ai l'habitude ».

Je n'avais pas vu toutes ces critiques sur Solarized, je suis un peu rassurée de voir que d'autres avaient fait les mêmes constatations que moi (longtemps) avant moi, mais je n'ai pas l'impression d'y avoir trouvé quelque chose de neuf.

Je ne comprends pas très bien pourquoi on dirait que je suis la seule à voir la sémantique ANSI comme une interface dont on peut bénéficier plutôt que juste une contrainte obsolète dont il faut se débarrasser. Je trouve ça un peu triste.

Poster un commentaire

Mise en forme historique : pour mettre en valeur un mot ou un groupe de mot, tapez une étoile de part et d'autre, sans mettre d'espace entre l'étoile et le mot, comme ceci : *mise en valeur*. Pour insérer un lien, mettez le entre crochets, comme ceci : [http://instinctive.eu/].

Mise en forme markdown : voir le guide détaillé, en résumé c'est le Markdown traditionnel, sans HTML ni titres, mais avec les tables PHP-Markdown-Extra.

Attention : les balises HTML entrées dans les commentaires seront affichées telles quelles, et non pas interprétées.

Autour de cette page

 

Autour de cet article

  • Publié le 31 octobre 2024 à 23h17
  • État de la bête : colorée
  • 3 commentaire(s)
  • Tag : Évènement
  • Tag : Geek
  • Tag : Goûts

Derniers commentaires

Tags

Archives

Site-level navigation and features

 

Instinctive.eu

Contact

Sections

Validation

Copyright © 2008-2024 Natacha Kerensikova

Butterfly images are copyright © 2008 Shoofly