Ligatures dans le terminal
Le support des ligatures de la police Iosevka dans l’émulateur de terminal Kitty a nécessité la collaboration des auteurs de ces deux projets, et n’est pas nativement présent dans Debian Bullseye (11). Voyons ensemble comment concilier ces deux-là pour avoir de jolies ligatures dans notre terminal.
Iosevka
Cette police n’est pas incluse dans les dépôts Debian, mais doit être compilée ou récupérée depuis son dépôt Git. Iosevka offrant une grande liberté de personnalisation, c’est pourquoi nous opterons ici pour la compilation.
Compilation
Tout d’abord, clonons le dépôt Git.
git clone https://github.com/be5invis/Iosevka.git
Ensuite, copions le fichier de configuration d’exemple.
cd Iosevka
cp private-build-plans.sample.toml private-build-plans.toml
Nous pouvons à présent adapter private-build-plans.toml
à nos besoins. Vous
pouvez vous inspirer du mien, ou
si vous préférez, il est aussi possible d’utiliser l’outil de
personnalisation.
À présent, passons à la compilation.
npm install && npm run build -- --jCmd=9 ttf::IosevkaCustom
Notez l’option --jCmd=9
qui offre la possibilité de n’utiliser qu’un nombre
donné de processus en parallèle, ici neuf, ce qui permet de ne pas monopoliser
les 12 cœurs de mon processeur et ainsi de ne pas mettre l’ordinateur au tapis
lors de la compilation !
Installation
Pour installer notre police
fraichement compilée, il nous faut tout d’abord la déposer dans le dossier
idoine ; dans notre cas, ce sera ~/.local/share/fonts
.
cp -R ./dist/IosevkaCustom/TTF ~/.local/share/fonts/IosevkaCustom/
Ensuite, il nous faut régénérer le cache des polices.
fc-cache -fv
Nous pouvons constater que notre police est bien prise en charge par le système
grace à la commande fc-list
:
fc-list | grep IosevkaCustom
Et nos ligatures ?
Faisons un peu d’introspection, voyons comment sont prises en compte nos
ligatures. Pour cela, nous aurons besoin d’un petit utilitaire, hb-shape
,
fourni par la bibliothèque harfbuzz
.
sudo apt install libharfbuzz-bin
Et demandons-lui de nous décomposer la ligature >=
:
hb-shape --show-extents --cluster-level=1 --shapers=ot --features "calt=0,dlig=1" ~/.local/share/fonts/IosevkaCustom/TTF/IosevkaCustom-Regular.ttf '>='
[.g13271.join-r=0+500<138,685,712,-524>|.g13277.join-l=1+500<-362,294,712,-299>]
Tout semble se passer pour le mieux ! On constate en effet que les caractères
composant cette ligature utilisent les suffixes .join-r
et .join-l
définis
par Renzhi Li aka. Belleve Invis, l’auteur de Iosevka, dans un échange avec
Kovid Goyal, l’auteur de Kitty.
Il est temps à présent d’installer Kitty !
Kitty
Installation
Sous Debian Bullseye (11), l’installation se fait tout naturellement via le
gestionnaire de paquet apt
:
sudo apt install kitty
kitty --version
kitty 0.19.3 created by Kovid Goyal
Nous voilà avec un Kitty prêt à l’emploi ! Sauf que… le support des ligatures de la police Iosevka n’a été implémenté qu’au moyen du commit e01bb09 du 4 juin 2021 présent dans la version 0.21.0.
Montée de version
Fort heureusement, la dernière version stable de Debian, Bookworm (12), inclus la version 0.26.5 de Kitty !
Paquet kitty
bullseye (oldstable) (x11): émulateur de terminal, rapide, multifonction, basé sur le GPU
0.19.3-1: amd64 arm64 armel armhf i386 mips64el mipsel ppc64el s390x
bookworm (stable) (x11): émulateur de terminal, rapide, multifonction, basé sur le GPU
0.26.5-5: amd64 arm64 armel armhf i386 mips64el mipsel ppc64el s390x
Il nous suffit donc d’indiquer à notre système que nous souhaitons bénéficier de
la version présente sur la liste stable, plutôt que celle proposée par défaut.
C’est là qu’entre en jeu apt-pinning
!
Épinglage
Avez-vous déjà été agacé par le fait que Debian Stable semble toujours ne pas être à jour ?
Voici comment faire en sorte qu’apt
mélange différentes sources (oldstable,
stable, testing ou unstable). Cela vous permettra de faire fonctionner un
système essentiellement stable, tout en ayant la possibilité d’installer les
dernières versions des paquets qui vous intéressent le plus. Cette technique se
nomme épinglage, aussi appelée apt pinning.
sources.list
La première étape consiste à configurer votre /etc/apt/sources.list
pour y
inclure les sources stables
, celles de Debian Bookworm (12).
# /etc/apt/sources.list
# Debian Bullseye
deb http://deb.debian.org/debian bullseye main contrib non-free
deb http://security.debian.org/debian-security bullseye-security main contrib non-free
deb http://deb.debian.org/debian bullseye-updates main contrib non-free
deb http://deb.debian.org/debian bullseye-backports main contrib non-free
# Debian Stable
deb http://deb.debian.org/debian stable main contrib non-free
preferences
L’étape suivante consiste à créer/éditer votre fichier /etc/apt/preferences
.
Les préférences sont l’endroit où
l’épinglage apt
a lieu. Normalement, c’est la version la plus élevée d’un
paquet disponible qui l’emporte, mais nous allons passer outre en indiquant que
pour tout paquet, on souhaite prioriser oldstable
, sauf pour Kitty, qu’on ira
chercher dans stable
. Pour ce faire, ce dernier aura sa propre règle avec une
priorité d’épinglage plus haute que celle de la règle par défaut.
# /etc/apt/preferences
Package: *
Pin: release a=oldstable
Pin-Priority: 700
Package: kitty
Pin: release a=stable
Pin-Priority: 750
apt update
Nous sommes maintenant prêts à utiliser apt update
. Cela ajoutera les nouveaux
dépôts à la liste d’apt
.
sudo apt update
Il n’y a plus qu’à installer notre nouvelle version de Kitty.
sudo apt -t stable install kitty
Notez qu’ici on précise -t stable
pour installer les versions stables des
dépendances de Kitty. Si nous n’avions pas fait cela, apt
aurait râlé, car il
n’aurait pas su résoudre ces dépendances.
kitty --version
kitty 0.26.5 created by Kovid Goyal
Kitty + Iosevka = ❤
Configuration de Kitty
Kitty nous permet de configurer finement le support des polices via
l’instruction font_features. Cela nous
permet d’activer ou de désactiver des fonctionnalités OpenType supportées par
notre police. Ici, après avoir opté pour notre police Iosevka Custom, nous
précisons à Kitty que nous souhaitons désactiver les alternatives contextuelles
calt
, activer les ligatures discrétionnaires dlig
, et activer le texture
healing TXTR
tout récemment
supporté par Iosevka à titre
expérimental.
# ~/.config/kitty/kitty.conf
font_family Iosevka Custom
bold_font Iosevka Custom Bold
italic_font Iosevka Custom Italic
bold_italic_font Iosevka Custom Bold Italic
font_features Iosevka-Custom -calt +dlig +TXTR
Rendu final
Faisons un petit essai :
print -rlP -- '-<< --< -<- <-- <--- <<- <- -> ->> --> ---> ->- >- >>=' '=<< =< =<= <== <=== <<= <= => =>> ==> ===> =>= >= >>=' '<-> <--> <---> <----> <=> <==> <===> <====> :: ::: __' '<~~ %F{red}</ </> />%f ~~> == != %F{blue}/= ~=%f <> === !== !=== %F{blue}=/= =!=%f' '<: := *= *+ <* <*> *> <| <|> |> <. <.> .> +* =* =: :>' '(* *) %F{red}/* */%f [| |] {| |} ++ +++ %F{red}\/ /\%f \- -| <!-- <!---'
Et voici le résultat !