Nous allons voir ici comment taper de l'Unicode, ce qui recouvre plus ou moins toutes les langues et tous les alphabets bizarres de la planète, et peut-être même d'au delà (l'intégration du Tengwar est en discussion).
Unicode, c'est une collection de caractères utilisés dans toutes les langues du monde, avec un numéro pour chaque caractère. Ce qu'on entend par « taper de l'Unicode », c'est taper un fichier texte qui utilise ces caractères, probablement au delà de simplement les caractères latins. Pour bien comprendre tout ce qui va suivre, il est probablement utile d'avoir lu notre page théorique sur les encodages.
Les difficultés qui se présentent sont principalement de mettre en place un environnement permettant de taper et d'afficher ces caractères, de choisir et configurer un éditeur pour travailler en Unicode, et de taper des caractères qui ne sont pas disponibles sur le clavier.
Note : partout dans ce texte, quand il sera question d'un fichier en Unicode, ça sous-entendra un fichier codé en UTF-8.
La gestion d'Unicode demande un boulot non trivial de la part de l'éditeur, c'est pourquoi la plupart n'en sont hélas pas capables.
Parmi les éditeurs disponibles ici, seuls Vim et Emacs en sont capables. Par chance, ce sont, de loin, les deux meilleurs éditeurs, et vous avez tout intérêt à choisir l'un d'eux même sans ça.
Sauf si vous comptez utiliser exclusivement Emacs en mode graphique, vous avez besoin d'un terminal capable d'afficher de l'Unicode et d'en recevoir de l'utilisateur.
Pour obtenir un terminal en Unicode, il suffit d'utiliser la commande
uxterm
, ou l'entrée de menu « terminal Unicode » si on a une
config assez récente. Pour le moment, ça ne marche que sur les Sun, mais il
est possible que ça marche également sur les PC dans un avenir proche ; en
attendant il est possible de le lancer en affichage distant.
Un terminal Unicode est un terminal très particulier. Si vous lancez dedans une application qui ne connaît pas Unicode, il est très probable qu'elle fasse à peu près n'importe quoi (et le pire c'est que ça peut passer inaperçu pendant un temps). Donc n'utilisez de terminal Unicode que pour des applications prévues pour.
Ceci concerne en particulier Pine, ainsi que Flrn (Forum ; même si celui-ci a un semblant d'options pour gérer Unicode).
Si on n'a pas à sa disposition le script uxterm, mais qu'on est sous Unix, on peut quand même lancer xterm avec les bonnes options :
drakkar ~ $ LC_CTYPE=en_US.UTF-8 xterm \
-fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1 \
-fw -misc-fixed-medium-r-normal-ja-18-120-100-100-c-180-iso10646-1 -u8
Les deux polices indiquées sont fournies avec le projet
XFree86, et sont des polices Unicode
relativement complètes. Il est possible d'en utiliser d'autres, mais il faut
les choisir en -iso10646-1
.
Attention, si vous vous loguez à distance, une commande est nécessaire pour informer les applications distantes que le terminal est en Unicode :
drakkar ~ $ export LC_CTYPE=en_US.UTF-8
Note : inutile d'essayer de changer le en_US
en autre chose,
c'est le .UTF-8
qui est important ici, pour le reste il suffit
que ce soit un code qui existe.
Sous windows, avec
PuTTY,
il est possible d'avoir un terminal Unicode : dans les options de la
connexion, dans la rubrique « Window », sous-rubrique « Translation »,
indiquez UTF-8
à « Character set translation on received
data ».
Sous macos, avec Terminal.app, il est également possible d'avoir un terminal Unicode : dans le menu « Terminal, Réglages de la fenêtre », sous-menu « Affichage », sous-sous-menu « Codage du jeu de caractères », choisissez « Unicode (UTF-8) ».
Si vous avez correctement mis en place votre terminal (en particulier le
LC_CTYPE
si vous vous connectez à distance), il n'y a quasiment
rien à faire.
Avec Vim, après avoir lancé normalement votre éditeur, vous pouvez vérifier qu'il est a bien détecté que vous étiez en Unicode avec :
:set encoding encoding=utf-8
Si quand vous ouvrez un fichier, Vim écrit [converted]
à côté
du nom, c'est qu'il a détecté que ce fichier n'était pas en Unicode ; il
note quel était le codage de ce fichier, et l'utilisera pour sauver (et se
plaindra s'il y a des caractères impossibles à sauver). On peut changer ça
avec l'option fileencoding
.
Avec Emacs, cela dépend de la version. Nous ne parlerons que de la version 21.3 (qui sera très prochainement™ installée à l'ENS ; ce sera probablement vrai aussi pour les versions ultérieures).
Si l'on utilise Emacs en mode graphique, il n'arrive pas forcément à trouver
tout seul les bonnes polices (on peut taper correctement, mais tous les
caractères exotiques sont affichés comme des carrés). Une solution est de
mettre la ligne suivante dans votre fichier .Xresource
qui se
trouve dans votre répertoire personnel :
Emacs.font: 9x15
Pour qu'Emacs veuille travailler en Unicode, le mieux est de le lancer en
ayant positionné LC_CTYPE
. Si ce n'est pas fait, on peut le lui
dire a posteriori avec M-x prefer-coding-system, puis
mule-utf-8 ; cependant, certaines facilités (comme compose-o-e
pour œ ne seront ainsi pas disponibles.
Si on lance Emacs dans un terminal il faut faire une manipulation supplémentaire : M-x set-keyboard-coding-system puis mule-utf-8.
Quand vous ouvrez un fichier qui n'est pas en Unicode, Emacs va peut-être le
détecter correctement. Pour le savoir, regardez en bas à gauche : un
u
indique un fichier en Unicode, un 1
indique un
fichier en latin-1. À la sauvegarde, Emacs tentera de garder le même codage,
et à défaut passera en Unicode).
Dans le cas de Vim comme d'Emacs, il est possible d'aider la détection automatique et le choix du codage d'un fichier. Nous ne nous y attarderons pas dans cette page : travaillez tout le temps en Unicode quand le latin-1 ne suffit pas et tout se passera bien.
C'est bien d'avoir un terminal qui affiche de l'Unicode, mais sur un clavier occidental normalement constitué, taper un Ω, un ҳ, un פ, un ฆ ou un 鰻, ce n'est pas facile. Le problème se résout avec ce qu'on appelle des méthodes d'entrée. Vous connaissez certainement déjà celle qui utilise la touche Compose pour taper les accents sur les claviers américains.
Si vous lancez uxterm
sur (ou depuis) une station Sun, vous
remarquerez en bas à gauche une petite fenêtre où est écrit
« English/European ». Cette fenêtre indique que le clavier est en mode
occidental, il est possible de changer de mode.
D'autres méthodes d'entrée sont disponibles, en tapant directement le numéro Unicode du caractère ou en choisissant dans des tables thématiques. Il est normalement possible d'utiliser cette fenêtre comme un menu pour changer le mode, mais ça marche très mal. Ce système n'est hélas pas disponible sur les PC.
Le fonctionnement exact ce ces méthodes d'entrées est décrit dans le fichier
/usr/local/util/packages/xterm/lib/X11/locale/en_US.UTF-8/Compose
.
Ce n'est pas très lisible, on en fera peut-être un jour un tableau
récapitulatif. De toutes façons, il ne s'agit que d'une touche compose un
peu enrichie (mode occidental), ou d'un simple changement des touches qu'on
détermine en quelques essais.
En plus des méthodes d'entrée fournies par le terminal (s'il est lancé en mode texte) ou des mêmes méthodes d'entrée qu'uxterm (s'il est lancé en mode graphique), Emacs propose son propre jeu de méthodes d'entrée. Elles présentent deux avantages : elles sont locales à un buffer, il n'est donc pas nécessaire de se soucier de les désactiver avant d'éditer un autre fichier ou de taper une commande ; et elles affichent dans le minibuffer des informations intéressantes, comme les différents caractères possibles pour finir une frappe.
On obtient la liste des méthodes disponibles avec M-x list-input-methods, et on peut obtenir une description détaillée d'une méthode particulière avec M-x describe-input-method. Il faut faire attention à un point subtil : Emacs ne sait pas bien convertir entre les différents codages, or beaucoup de ces méthodes d'entrée ne sont pas prévues pour Unicode, il ne faut donc pas les utiliser. Il vaut mieux se restreindre aux méthodes explicitement indiquées pour Unicode, ou dont le nom contient « latin » (Emacs à partir de la version 21.3 sait convertir entre unicode et les divers codages « latin »).
Une fois la méthode choisie, il faut la sélectionner, ce qui se fait avec M-x set-input-method (qui se dit aussi C-x RET c C-\ (RET signifie « entrée »), Emacs demande alors d'entrer le nom de la méthode dans le minibuffer (avec bien sur la complétion). Cela sélectionne et active la méthode pour le buffer courant. On peut la désactiver puis la réactiver avec C-\ ou M-x toggle-input-method. Il est à noter que ces fonctions n'activent la méthode que dans le buffer courant.
Termim est un programme qui permet de donner des méthodes d'entrée à presque n'importe quel terminal. Ces méthodes sont elles aussi capables d'afficher le caractère en cours de construction en bas, et sont disponibles pour n'importe quel programme tournant dans le terminal.
Termim n'est pas spécifique à l'ENS, mais comme il a été développé par d'anciens élèves, il est probable qu'il soit rarement installé ailleurs.
Pour utiliser termim, il suffit de taper termim
dans un
terminal Unicode. On a alors la configuration par défaut (qu'il est possible
de changer) :
Pour plus de détails, consulter la page de man de termim, ainsi que les
documentations des diverses méthodes d'entrée dans
/usr/local/util/packages/termim/doc/
.