Bonjour Nicolas,
J'imagine de plus qu'un patch faisant grosso modo comprendre aux TTY que, au niveau de l'affichage, « espace fine insécable = espace insécable » serait assez simple à implémenter et règlerait notre problème (même si c'est faux, sémantiquement)
Le hic c'est que je ne sais pas contre quel logiciel rapporter ce bug : je ne sais pas quel programme « fournit » les TTY (ou du moins gère leurs rendus de textes).
Il s'agit ici du programme /bin/setfont et des fichiers qui se trouvent dans /usr/share/kbd/unimaps/*.uni, tous deux faisant partie du paquetage 'kbd'.
Pour faire comprendre à la console du noyau Linux (attention, je fais la distinction entre la "console" qui est l'affichage "mode texte" sans X11 et le "tty" qui est un mécanisme qui s'applique également à xterm, konsole, rxvt) il suffit de trois étapes:
1. Sauvegarder le mapping Unicode de la console: $ setfont -v -ou unimap et voir que ce fichier contient deux lignes 0x20 U+0020 0x20 U+00a0
2. Ajouter une ligne 0x20 U+202f à ce fichier, et le sauvegarder.
3. Appliquer ce fichier: $ setfont -v -u unimap
Et maintenant, essaye $ /usr/bin/printf '\u202Fx\n' et tu vois que c'est bon.
Donc, à ta place, j'écrirais au gérand de 'kbd' [1][2] en lui proposant de traiter U+202f de la même manière que U+00a0 dans tous les fichiers *.uni.
Je note que ceci serait consistent avec la fonction 'wcwidth' de la glibc: Ce programme ============================================================= #include <locale.h> #include <wctype.h> #include <wchar.h> #include <stdio.h> int main () { setlocale (LC_ALL, "de_DE.UTF-8"); printf ("wcwidth (0x00A0) = %d\n", wcwidth (0x00A0)); printf ("wcwidth (0x202F) = %d\n", wcwidth (0x202F)); return 0; } ============================================================= affiche: wcwidth (0x00A0) = 1 wcwidth (0x202F) = 1
Bruno
[1] https://lists.altlinux.org/mailman/listinfo/kbd [2] http://git.altlinux.org/people/legion/packages/kbd.git