UTF-8 sous NetBSD

(Nhat Minh Lê (rz0) @ 2009-06-08 01:31:28)

Depuis quelques temps, voilà que j’ai migré de Gentoo à NetBSD. Pour rappel, le passage à X.org 1.5 et xf86-video-intel 2.6 avait tout cassé. Quitte à tout downgrader, j’ai pensé que c’était le bon moment de (re)tenter l’aventure NetBSD !

La transition ne fut pas sans problèmes et l’une des contrariétés majeures était l’impossibilité de passer totalement en locale UTF-8 (pour LC_CTYPE du moins). Dans n’importe quelle locale UTF-8, une partie des programmes graphiques refusait de fonctionner correctement : problèmes de polices ou de méthode de saisie (input method), xterm avait du mal et certains gestionnaires de fenêtrage (twm, ratpoison) refusaient carrément de se lancer !

Hier, en fin d’après-midi, j’ai enfin résolu les divers problèmes (qui provenaient en réalité d’une unique source), et réussi à passer tout mon système graphique en UTF-8 !

Le problème provenait de la configuration par défaut de la locale UTF-8 (car il n’y en a en réalité qu’une seule, en_US.UTF-8, pour presque toutes les langues, les autres n’étant que des synonymes) au sein du framework XI18N, visiblement emprunté à Sun, et qui en a gardé les traces… les modules utilisés par en_US.UTF-8 étaient des modules spécifiques à Xsun, non fournis par X.org. Un simple changement du fichier /usr/X11R7/lib/X11/locale/en_US.UTF-8/XI18N_OBJS (recopie de quelques lignes d’autres locales) a suffit. Le support de l’Unicode n’est sans doute pas génial avec les modules par défaut, sans doute moins adaptés que ceux de Sun, mais ceux-ci ont le mérite d’exister !

Pour mémoire, voici le patch que j’ai appliqué :

--- a/XI18N_OBJS	2008-07-30 04:43:01.000000000 +0200
+++ b/XI18N_OBJS	2009-06-06 19:09:30.000000000 +0200
@@ -3,6 +3,8 @@
 #      XI18N objects table for euro locales
 #
 XLC    common/xlcUTF8Load      _XlcUtf8Loader          # XLC_open
-XOM    common/xomLTRTTB        _XomGenericOpenOM       # XOM_open
-XIM    common/xiiimp           _SwitchOpenIM           # XIM_open
-XIM    common/xiiimp           _XimpLocalOpenIM        # XIM_open
+#XOM   common/xomLTRTTB        _XomGenericOpenOM       # XOM_open
+XOM    common/xomGeneric       _XomGenericOpenOM       # XOM_open
+#XIM   common/xiiimp           _SwitchOpenIM           # XIM_open
+#XIM   common/xiiimp           _XimpLocalOpenIM        # XIM_open
+XIM    common/ximcp            _XimOpenIM _XimRegisterIMInstantiateCallback  _XimUnRegisterIMInstantiateCallback       # XIM_open      XIM_register XIM_unregister

Avec tout ça, tout marche parfaitement (du moins aussi bien que sous ma Gentoo) et j’ai maintenant dans mon .profile :

export LC_CTYPE=fr_FR.UTF-8

Un effet secondaire sympathique de toutes ces manipulations est le retour dans Emacs des touches mortes dans toute leur splendeur ; j’avais dû recourir à iso-transl, lorsque je tournais en locale C. Mais à présent, le serveur X gère à nouveau les compositions comme un grand, et Emacs est content, sans avoir besoin d’aucune extension !