tuteurs.ens.fr/unix/editeurs/unicode.tml

354 lines
13 KiB
Text
Raw Normal View History

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
"tuteurs://DTD/tml.dtd">
<html>
<head>
<title>Unicode</title>
</head>
<body>
<h1>Taper de l'Unicode</h1>
2011-07-08 05:30:19 +02:00
<div class="encadre">
Attention, cette page n'est pas à jour. En 2011, UTF-8 est proposé par
défaut et fonctionne sur les machines de l'école sans avoir à faire
d'efforts particuliers.
</div>
<div class="resume">
<p>
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
2011-07-08 05:30:19 +02:00
peut-être même d'au-delà (l'intégration du Tengwar est en discussion).
</p>
</div>
<h2>Se préparer</h2>
<h3>Bien comprendre ce que ça veut dire</h3>
<p>
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
<a href="../../theorie/encodages.html">notre page théorique sur les
encodages</a>.
</p>
<p>
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.
</p>
2003-06-16 15:35:21 +02:00
<p>
Note : partout dans ce texte, quand il sera question d'un fichier en
Unicode, ça sous-entendra un fichier codé en UTF-8.
2003-06-16 15:35:21 +02:00
</p>
<h3>Choisir un éditeur</h3>
<p>
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.
</p>
<div class="ens">
<p>
Parmi les éditeurs disponibles ici, seuls <a href="vim.html">Vim</a> et
<a href="emacs.html">Emacs</a> 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.
</p>
</div>
<h2>Un environnement pour travailler</h2>
<h3><a name="uxterm">Un terminal Unicode</a></h3>
<p>
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.
</p>
<div class="ens">
<p>
2011-07-08 05:30:19 +02:00
L'émulateur de terminal par défaut proposé sur les machines de l'École
(<code>gnome-terminal</code> supporte l'Unicode.
</p>
</div>
2003-06-16 15:35:21 +02:00
<div class="attention">
<h1>&icone.attention; Attention &icone.attention;</h1>
2003-06-16 15:35:21 +02:00
<p>
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.
2003-06-16 15:35:21 +02:00
</p>
<p>
Ceci concerne en particulier Pine, ainsi que Flrn (Forum ; même si celui-ci
a un semblant d'options pour gérer Unicode).
2003-06-16 15:35:21 +02:00
</p>
</div>
<p>
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 :
</p>
<pre>
<span class="prompt">drakkar ~ $</span> 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
</pre>
<p>
Les deux polices indiquées sont fournies avec le projet
<a href="http://www.xfree86.org/">XFree86</a>, et sont des polices Unicode
relativement complètes. Il est possible d'en utiliser d'autres, mais il faut
les choisir en <code>-iso10646-1</code>.
</p>
2005-06-20 14:09:18 +02:00
<p>
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.
2005-06-20 14:09:18 +02:00
</p>
<p>
<strong>Attention</strong>, si vous vous <strong>loguez à distance</strong>,
une commande est nécessaire pour informer les applications distantes que le
terminal est en Unicode :
</p>
<pre><span class="prompt">drakkar ~ $</span> export LC_CTYPE=en_US.UTF-8</pre>
<p>
Note : inutile d'essayer de changer le <code>en_US</code> en autre chose,
c'est le <code>.UTF-8</code> qui est important ici, pour le reste il suffit
que ce soit un code qui existe.
</p>
<p>
2003-06-16 15:35:21 +02:00
Sous windows, avec
<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a>,
il est possible d'avoir un terminal Unicode : dans les options de la
connexion, dans la rubrique « Window », sous-rubrique « Translation »,
indiquez <code>UTF-8</code> à « Character set translation on received
data ».
2003-06-16 15:35:21 +02:00
</p>
<p>
2011-07-08 05:30:19 +02:00
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) ».
</p>
<h3>Un éditeur au courant</h3>
<p>
Si vous avez correctement mis en place votre terminal (en particulier le
<code>LC_CTYPE</code> si vous vous connectez à distance), il n'y a quasiment
rien à faire.
</p>
<p>
<strong>Avec Vim</strong>, après avoir lancé normalement votre éditeur, vous
pouvez vérifier qu'il est a bien détecté que vous étiez en Unicode avec :
</p>
<pre>:set encoding
encoding=utf-8</pre>
<p>
Si quand vous ouvrez un fichier, Vim écrit <code>[converted]</code> à 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 <code>fileencoding</code>.
</p>
<p>
2011-07-08 05:30:19 +02:00
<strong>Avec Emacs</strong>, si on l'utilise 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 <code>.Xresource</code> qui se trouve dans votre
répertoire personnel :
2003-06-16 15:35:21 +02:00
</p>
<pre>
Emacs.font: 9x15
</pre>
<p>
Pour qu'Emacs veuille travailler en Unicode, le mieux est de le lancer en
ayant positionné <code>LC_CTYPE</code>. Si ce n'est pas fait, on peut le lui
2003-06-16 15:35:21 +02:00
dire a posteriori avec <kbd>M-x prefer-coding-system</kbd>, puis
<kbd>mule-utf-8</kbd> ; cependant, certaines facilités (comme compose-o-e
2003-06-16 15:35:21 +02:00
pour &oelig; ne seront ainsi pas disponibles.
</p>
<p>
Si on lance Emacs dans un terminal il faut faire une manipulation
supplémentaire : <kbd>M-x set-keyboard-coding-system</kbd> puis
2003-06-16 15:35:21 +02:00
<kbd>mule-utf-8</kbd>.
</p>
<p>
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
2003-06-16 15:35:21 +02:00
<code>u</code> indique un fichier en Unicode, un <code>1</code> indique un
fichier en latin-1. À la sauvegarde, Emacs tentera de garder le même codage,
et à défaut passera en Unicode).
2003-06-16 15:35:21 +02:00
</p>
<p>
Dans le cas de Vim comme d'Emacs, il est possible d'aider la détection
2003-06-16 15:35:21 +02:00
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
2003-06-16 15:35:21 +02:00
ne suffit pas et tout se passera bien.
</p>
<h2>Taper ce qu'on veut</h2>
<p>
C'est bien d'avoir un terminal qui affiche de l'Unicode, mais sur un clavier
occidental normalement constitué, taper un &#x03A9;, un &#x04B3;, un
&#x05E4;, un &#x0E06; ou un &#x9C3B;, ce n'est pas facile. Le problème se
résout avec ce qu'on appelle des <em>méthodes d'entrée</em>. Vous connaissez
certainement déjà celle qui utilise la touche Compose pour taper les accents
sur les claviers américains.
</p>
<h3>Les méthodes d'entrée d'UXTerm</h3>
<p>
Si vous lancez <code>uxterm</code> 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.
</p>
<ul>
2003-06-16 15:35:21 +02:00
<li>Avec <kbd>Compose-a-r</kbd>, on passe en <strong>arabe</strong>.</li>
<li>Avec <kbd>Compose-c-c</kbd>, on passe en <strong>cyrillique</strong>.</li>
<li>Avec <kbd>Compose-g-g</kbd>, on passe en <strong>grec</strong>.</li>
<li>Avec <kbd>Compose-h-h</kbd>, on passe en <strong>hébreu</strong>.</li>
2003-06-16 15:35:21 +02:00
<li>Avec <kbd>Compose-t-t</kbd>, on passe en <strong>thai</strong>.</li>
<li>Avec <kbd>Control-espace</kbd>, on revient en occidental.</li>
</ul>
<p>
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.
</p>
2003-06-16 15:35:21 +02:00
<p>
Le fonctionnement exact ce ces méthodes d'entrées est décrit dans le fichier
2003-06-16 15:35:21 +02:00
<code>/usr/local/util/packages/xterm/lib/X11/locale/en_US.UTF-8/Compose</code>.
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
2003-06-16 15:35:21 +02:00
peu enrichie (mode occidental), ou d'un simple changement des touches qu'on
détermine en quelques essais.
2003-06-16 15:35:21 +02:00
</p>
<h3>Les méthodes d'entrée d'Emacs</h3>
<p>
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
2003-06-16 15:35:21 +02:00
pour finir une frappe.
</p>
<p>
On obtient la liste des méthodes disponibles avec <kbd>M-x
list-input-methods</kbd>, et on peut obtenir une description détaillée
d'une méthode particulière avec <kbd>M-x describe-input-method</kbd>. 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 »).
2003-06-16 15:35:21 +02:00
</p>
<p>
Une fois la méthode choisie, il faut la sélectionner, ce qui se fait avec
2003-06-16 15:35:21 +02:00
<kbd>M-x set-input-method</kbd> (qui se dit aussi <kbd>C-x RET c C-\</kbd>
(<kbd>RET</kbd> 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 <kbd>C-\</kbd> ou <kbd>M-x
toggle-input-method</kbd>. Il est à noter que ces fonctions n'activent la
méthode que dans le buffer courant.
</p>
<h3>Termim</h3>
<p>
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.
</p>
<p>
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.
</p>
<p>
Pour utiliser termim, il suffit de taper <code>termim</code> dans un
terminal Unicode. On a alors la configuration par défaut (qu'il est possible
de changer) :
</p>
<ul>
<li><strong>F1</strong> : clavier sans transformation.</li>
<li><strong>F2 e</strong> : caractères occidentaux, avec Ctrl-K comme
touche compose.</li>
<li><strong>F2 a</strong> : arabe.</li>
<li><strong>F2 c</strong> : cyrillique.</li>
<li><strong>F2 g</strong> : grec.</li>
<li><strong>F2 h</strong> : hébreu.</li>
<li><strong>F2 t</strong> : thai.</li>
<li><strong>F3 c</strong> : chinois simplifié (méthode tonepy).</li>
<li><strong>F3 k</strong> : coréen (phonétique).</li>
<li><strong>F3 h</strong> : coréen (clavier avec voyelles et consonnes).</li>
<li><strong>F3 j</strong> : japonais (utiliser la touche ` pour taper des
kanji).</li>
<li><strong>F3 g</strong> : grep polytonique.</li>
</ul>
<p>
Pour plus de détails, consulter la page de man de termim, ainsi que les
documentations des diverses méthodes d'entrée dans
<a href="http://www.eleves.ens.fr/home/george/info/prg/termim-doc/"><code>/usr/local/util/packages/termim/doc/</code></a>.
</p>
<div class="metainformation">
Auteur : Nicolas George.
<date value="from git" />
</div>
</body>
</html>