.. -*- mode: rst -*- .. -*- coding: utf-8 -*- ============================================== Se créer un thème de couleur dans son terminal ============================================== :date: 2014-05-18 :tags: libre, DIY :logo: /images/palette_75.jpg :summary: Quand on utilise un terminal tous les jours, on a envie de l'adapter en fonction de ses goûts. Il existe beaucoup de thèmes disponibles sur le net qui permettent de le configurer à sa guise, mais rien qui n'explique comment en créer un nouveau. .. figure:: {static}/images/palette_150.jpg :figwidth: 150 :figclass: floatleft :alt: Palette Image : `Hafsa Nabeel`_ (creativecommons_) .. _Hafsa Nabeel: https://www.flickr.com/photos/hafsacreations/3241957057/ .. _creativecommons: http://creativecommons.org/licenses/by-nc-nd/2.0/ Il est assez facile de se créer un thème de couleur pour son terminal. La plupart du temps on trouve des thèmes à copier qui contiennent la liste des couleurs à utiliser, mais il est rarement expliqué comment faire pour en créer un nouveau. C'est pourtant assez simple une fois que l'on a compris les bases. Les bases ========= La plupart des terminaux peuvent afficher 256 couleurs ou plus, mais le shell n'a besoin que de six couleurs de base (auxquelles viennent s'ajouter le blanc et le noir que je ne traite pas ici). Il s'agit des trois couleurs primaires, et les trois couleurs secondaires, que l'on peut représenter la palette sous forme de tableau (dans l'ordre d'index utilisé dans un terminal) : .. raw:: html
Couleur Rouge Vert Jaune Bleu Magenta Cyan
Clair
Sombre
Cette représentation sous forme de tableau présente l'avantage de montrer deux caractéristiques : le nombre de couleurs de base est limité, et la variante sombre ou claire consiste juste à changer la luminosité. Construire le thème =================== Nous allons créer deux thèmes : un clair et un sombre. Pour faire un thème homogène, il va falloir respecter deux règles : - Chaque couleur devra avoir la même luminosité que les autres couleurs du thème : il ne faut pas qu'une couleur éclate davantage que les autres. - Chaque couleur devra occuper le même espace [#]_ dans le cercle colorimétrique : il ne faut pas que deux couleurs semblent proches au point de les confondre. Pour respecter ces deux contraintes, nous allons être obligé de construire notre thème via une application, qui sera plus à même que nous de respecter ces deux contraintes. La représentation des couleurs ============================== Il existe plusieurs manières de représenter les couleurs en informatique, la plus connue est la `représentation RGB`_, mais celle-ci n'est pas très pratique dans notre cas d'utilisation : en effet il n'est pas possible en utilisant cette représentation de passer facilement de la teinte claire à sombre. Nous allons nous intéresser ici à la représentation `Teinte/Saturation/Valeur`_ qui présente l'avantage de séparer la teinte d'une couleur de sa luminosité. Selon la codification TSL, chaque teinte de couleur est séparée de 60°. Il faudra donc conserver cet écart dans notre thème final. Par contre nous avons la possibilité d'appliquer une rotation du cercle pour faire varier la teinte des couleurs, c'est ce qui donnera les couleurs de notre thème. Il ne nous reste plus qu'à définir les valeurs de saturation/valeur pour le thème clair et le thème sombre. Après tout le reste n'est que conversion d'un système de représentation à un autre, ce qui peut se faire tout seul avec un petit script. Le résultat =========== Le script est écrit en python et peut être `téléchargé ici`_, il reçoit 5 paramètres, et écrit sur la sortie la configuration pouvant être utilisée avec `rxvt` et `xterm`, deux émulateurs de terminaux permettant un bon niveau de configuration. .. _téléchargé ici: {static}/resources/colors.py .. list-table:: :header-rows: 1 * - décalage - saturation claire - saturation sombre - valeur claire - valeur sombre * - 30 - 60 - 50 - 90 - 70 Ce qui donnera l'exécution suivante : .. code-block:: bash $ python colors.py 30 60 50 90 70 Il est possible de modifier les couleurs sans enregistrer le paramétrage définitivement en passant la sortie du script à `xrdb` avant d'ouvrir un nouveau terminal : .. code-block:: bash $ python colors.py 30 60 50 90 70 | xrdb -override Si vous voulez appliquer ce paramétrage définitement, il faut l'enregistrer dans le fichier `~/.Xdefaults` Le résulat des couleurs générées avec les valeurs définies ci-dessus : .. raw:: html
Couleur Rouge Vert Jaune Bleu Magenta Cyan
Clair
Sombre
Et voilà ce que ça donne en réeel : des couleurs plutôt douces et claires qui n'agressent pas les yeux ^^ .. image:: {static}/images/Capture-terminal.png :class: center :alt: caputre d'écran Vous pouvez à votre tour essayer d'autres combinaisons pour vous créer votre propre palette à utiliser dans votre terminal. .. _représentation RGB: https://fr.wikipedia.org/wiki/Rouge_vert_bleu .. _Teinte/Saturation/Valeur: https://fr.wikipedia.org/wiki/Teinte_Saturation_Valeur .. [#] On peut concevoir l'ensembre des couleurs comme un système, c'est-à-dire un ensemble d'éléments interdépendants les uns des autres : l'espace occupé par un élément correspond à l'espace qui n'est pas pris par l'ensemble des autres éléments. Comme les six couleurs de base sont uniformément réparties dans le cercle colorimétrique, il faut que notre thème final conserve cette répartition.