# Unicode

# Taper de l'Unicode

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).

## Se préparer

### Bien comprendre ce que ça veut dire

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.

### Choisir un éditeur

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.

## Un environnement pour travailler

### Un terminal Unicode

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.

# &icone.attention; Attention &icone.attention;

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`.

Il se peut également que vous ayez le script uxterm, mais qu'il choisisse des polices trop pauvres, avec lesquelles la moitié de vos caractères apparaîtront comme des blancs ou des carrés : dans ce cas, précisez les polices à utiliser avec la commande ci-dessus.

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) ».

### Un éditeur au courant

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.

## Taper ce qu'on veut

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.

### Les méthodes d'entrée d'UXTerm

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.

- Avec `Compose-a-r`, on passe en arabe.
- Avec `Compose-c-c`, on passe en cyrillique.
- Avec `Compose-g-g`, on passe en grec.
- Avec `Compose-h-h`, on passe en hébreu.
- Avec `Compose-t-t`, on passe en thai.
- Avec `Control-espace`, on revient en occidental.

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.

### Les méthodes d'entrée d'Emacs

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

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) :

- F1 : clavier sans transformation.
- F2 e : caractères occidentaux, avec Ctrl-K comme touche compose.
- F2 a : arabe.
- F2 c : cyrillique.
- F2 g : grec.
- F2 h : hébreu.
- F2 t : thai.
- F3 c : chinois simplifié (méthode tonepy).
- F3 k : coréen (phonétique).
- F3 h : coréen (clavier avec voyelles et consonnes).
- F3 j : japonais (utiliser la touche ` pour taper des kanji).
- F3 g : grep polytonique.

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/`.

Auteur : Nicolas George.