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

357 lines
13 KiB
Text
Raw Normal View History

<?xml version="1.0" encoding="ISO-8859-1"?>
<!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>
<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<61>te, et
2003-06-16 15:35:21 +02:00
peut-<2D>tre m<>me d'au del<65> (l'int<6E>gration du Tengwar est en discussion).
</p>
</div>
<h2>Se pr<70>parer</h2>
<h3>Bien comprendre ce que <20>a veut dire</h3>
<p>
Unicode, c'est une collection de caract<63>res utilis<69>s dans toutes les langues
du monde, avec un num<75>ro pour chaque caract<63>re. Ce qu'on entend par <20><>taper
de l'Unicode<64><65>, c'est taper un fichier texte qui utilise ces caract<63>res,
probablement au del<65> de simplement les caract<63>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<74>orique sur les
encodages</a>.
</p>
<p>
Les difficult<6C>s qui se pr<70>sentent sont principalement de mettre en place un
environnement permettant de taper et d'afficher ces caract<63>res, de choisir
et configurer un <20>diteur pour travailler en Unicode, et de taper des
caract<EFBFBD>res qui ne sont pas disponibles sur le clavier.
</p>
2003-06-16 15:35:21 +02:00
<p>
Note<EFBFBD>: partout dans ce texte, quand il sera question d'un fichier en
Unicode, <20>a sous-entendra un fichier cod<6F> en UTF-8.
</p>
<h3>Choisir un <20>diteur</h3>
<p>
La gestion d'Unicode demande un boulot non trivial de la part de l'<27>diteur,
c'est pourquoi la plupart n'en sont h<>las pas capables.
</p>
<div class="ens">
<p>
Parmi les <20>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 <20>diteurs, et vous avez tout int<6E>r<EFBFBD>t <20> choisir l'un
d'eux m<>me sans <20>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>
Pour obtenir un terminal en Unicode, il suffit d'utiliser la commande
<code>uxterm</code>, ou l'entr<74>e de menu <20><>terminal Unicode<64><65> si on a une
config assez r<>cente. Pour le moment, <20>a ne marche que sur les Sun, mais il
est possible que <20>a marche <20>galement sur les PC dans un avenir proche<68>; en
attendant il est possible de le lancer en affichage distant.
</p>
</div>
2003-06-16 15:35:21 +02:00
<div class="attention">
<h1>&icone.attention;<3B>Attention<6F>&icone.attention;</h1>
<p>
Un terminal Unicode est un terminal tr<74>s particulier. Si vous lancez dedans
une application qui ne conna<6E>t pas Unicode, il est tr<74>s probable qu'elle
fasse <20> peu pr<70>s n'importe quoi (et le pire c'est que <20>a peut passer
inaper<EFBFBD>u pendant un temps). Donc n'utilisez de terminal Unicode que pour des
applications pr<70>vues pour.
</p>
<p>
Ceci concerne en particulier Pine, ainsi que Flrn (Forum<75>; m<>me si celui-ci
a un semblant d'options pour g<>rer Unicode).
</p>
</div>
<p>
Si on n'a pas <20> sa disposition le script uxterm, mais qu'on est sous Unix,
on peut quand m<>me lancer xterm avec les bonnes options<6E>:
</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<71>es sont fournies avec le projet
<a href="http://www.xfree86.org/">XFree86</a>, et sont des polices Unicode
relativement compl<70>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 <20>galement que vous ayez le script uxterm, mais qu'il choisisse
des polices trop pauvres, avec lesquelles la moiti<74> de vos caract<63>res
appara<EFBFBD>tront comme des blancs ou des carr<72>s<EFBFBD>: dans ce cas, pr<70>cisez les
polices <20> utiliser avec la commande ci-dessus.
</p>
<p>
<strong>Attention</strong>, si vous vous <strong>loguez <20> distance</strong>,
une commande est n<>cessaire pour informer les applications distantes que le
terminal est en Unicode<64>:
</p>
<pre><span class="prompt">drakkar ~ $</span> export LC_CTYPE=en_US.UTF-8</pre>
<p>
Note<EFBFBD>: 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<64>: dans les options de la
connexion, dans la rubrique <20><>Window<6F><77>, sous-rubrique <20><>Translation<6F><6E>,
indiquez <code>UTF-8</code> <20> <20><>Character set translation on received
data<EFBFBD><EFBFBD>.
</p>
<p>
Sous macos, avec Terminal.app, il est <20>galement possible d'avoir un terminal
Unicode<EFBFBD>: dans le menu <20><>Terminal, R<>glages de la fen<65>tre<72><65>, sous-menu
<EFBFBD><EFBFBD>Affichage<EFBFBD><EFBFBD>, sous-sous-menu <20><>Codage du jeu de caract<63>res<65><73>,
choisissez <20><>Unicode (UTF-8)<29><>.
</p>
<h3>Un <20>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 <20> distance), il n'y a quasiment
rien <20> faire.
</p>
<p>
<strong>Avec Vim</strong>, apr<70>s avoir lanc<6E> normalement votre <20>diteur, vous
pouvez v<>rifier qu'il est a bien d<>tect<63> que vous <20>tiez en Unicode avec<65>:
</p>
<pre>:set encoding
encoding=utf-8</pre>
<p>
Si quand vous ouvrez un fichier, Vim <20>crit <code>[converted]</code> <20> c<>t<EFBFBD>
du nom, c'est qu'il a d<>tect<63> que ce fichier n'<27>tait pas en Unicode<64>; il
note quel <20>tait le codage de ce fichier, et l'utilisera pour sauver (et se
plaindra s'il y a des caract<63>res impossibles <20> sauver). On peut changer <20>a
avec l'option <code>fileencoding</code>.
</p>
<p>
2003-06-16 15:35:21 +02:00
<strong>Avec Emacs</strong>, cela d<>pend de la version. Nous ne parlerons
que de la <em>version 21.3</em> (qui sera tr<74>s prochainement&#8482;
install<EFBFBD>e <20> l'ENS<4E>; ce sera probablement vrai aussi pour les versions
ult<EFBFBD>rieures).
</p>
<p>
Si l'on utilise Emacs en mode graphique, il n'arrive pas forc<72>ment <20> trouver
tout seul les bonnes polices (on peut taper correctement, mais tous les
caract<EFBFBD>res exotiques sont affich<63>s comme des carr<72>s). Une solution est de
mettre la ligne suivante dans votre fichier <code>.Xresource</code> qui se
trouve dans votre r<>pertoire personnel<65>:
</p>
<pre>
Emacs.font: 9x15
</pre>
<p>
Pour qu'Emacs veuille travailler en Unicode, le mieux est de le lancer en
ayant positionn<6E> <code>LC_CTYPE</code>. Si ce n'est pas fait, on peut le lui
dire a posteriori avec <kbd>M-x prefer-coding-system</kbd>, puis
<kbd>mule-utf-8</kbd><3E>; cependant, certaines facilit<69>s (comme compose-o-e
pour &oelig; ne seront ainsi pas disponibles.
</p>
<p>
Si on lance Emacs dans un terminal il faut faire une manipulation
suppl<EFBFBD>mentaire<EFBFBD>: <kbd>M-x set-keyboard-coding-system</kbd> puis
<kbd>mule-utf-8</kbd>.
</p>
<p>
Quand vous ouvrez un fichier qui n'est pas en Unicode, Emacs va peut-<2D>tre le
d<EFBFBD>tecter correctement. Pour le savoir, regardez en bas <20> gauche<68>: un
<code>u</code> indique un fichier en Unicode, un <code>1</code> indique un
fichier en latin-1. <20> la sauvegarde, Emacs tentera de garder le m<>me codage,
et <20> d<>faut passera en Unicode).
</p>
<p>
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<67>: travaillez tout le temps en Unicode quand le latin-1
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<74>, taper un &#x03A9;, un &#x04B3;, un
&#x05E4;, un &#x0E06; ou un &#x9C3B;, ce n'est pas facile. Le probl<62>me se
r<EFBFBD>sout avec ce qu'on appelle des <em>m<>thodes d'entr<74>e</em>. Vous connaissez
certainement d<>j<EFBFBD> celle qui utilise la touche Compose pour taper les accents
sur les claviers am<61>ricains.
</p>
<h3>Les m<>thodes d'entr<74>e d'UXTerm</h3>
<p>
Si vous lancez <code>uxterm</code> sur (ou depuis) une station Sun, vous
remarquerez en bas <20> gauche une petite fen<65>tre o<> est <20>crit
<EFBFBD><EFBFBD>English/European<61><6E>. Cette fen<65>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>
<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<74>e sont disponibles, en tapant directement le num<75>ro
Unicode du caract<63>re ou en choisissant dans des tables th<74>matiques. Il est
normalement possible d'utiliser cette fen<65>tre comme un menu pour changer le
mode, mais <20>a marche tr<74>s mal. Ce syst<73>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<74>es est d<>crit dans le fichier
<code>/usr/local/util/packages/xterm/lib/X11/locale/en_US.UTF-8/Compose</code>.
Ce n'est pas tr<74>s lisible, on en fera peut-<2D>tre un jour un tableau
r<EFBFBD>capitulatif. De toutes fa<66>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<EFBFBD>termine en quelques essais.
</p>
<h3>Les m<>thodes d'entr<74>e d'Emacs</h3>
<p>
2003-06-16 15:35:21 +02:00
En plus des m<>thodes d'entr<74>e fournies par le terminal (s'il est lanc<6E> en
mode texte) ou des m<>mes m<>thodes d'entr<74>e qu'uxterm (s'il est lanc<6E> en mode
graphique), Emacs propose son propre jeu de m<>thodes d'entr<74>e. Elles
pr<EFBFBD>sentent deux avantages<65>: elles sont locales <20> un buffer, il n'est donc
pas n<>cessaire de se soucier de les d<>sactiver avant d'<27>diter un autre
fichier ou de taper une commande<64>; et elles affichent dans le minibuffer
des informations int<6E>ressantes, comme les diff<66>rents caract<63>res possibles
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<6C>e
d'une m<>thode particuli<6C>re avec <kbd>M-x describe-input-method</kbd>. Il
faut faire attention <20> un point subtil<69>: Emacs ne sait pas bien convertir
entre les diff<66>rents codages, or beaucoup de ces m<>thodes d'entr<74>e ne sont
pas pr<70>vues pour Unicode, il ne faut donc pas les utiliser. Il vaut mieux se
restreindre aux m<>thodes explicitement indiqu<71>es pour Unicode, ou dont le
nom contient <20><>latin<69><6E> (Emacs <20> partir de la version 21.3 sait convertir
entre unicode et les divers codages <20><>latin<69><6E>).
</p>
<p>
Une fois la m<>thode choisie, il faut la s<>lectionner, ce qui se fait avec
<kbd>M-x set-input-method</kbd> (qui se dit aussi <kbd>C-x RET c C-\</kbd>
(<kbd>RET</kbd> signifie <20><>entr<74>e<EFBFBD><65>), Emacs demande alors d'entrer le nom
de la m<>thode dans le minibuffer (avec bien sur la compl<70>tion). Cela
s<EFBFBD>lectionne et active la m<>thode pour le buffer courant. On peut la
d<EFBFBD>sactiver puis la r<>activer avec <kbd>C-\</kbd> ou <kbd>M-x
toggle-input-method</kbd>. Il est <20> noter que ces fonctions n'activent la
m<EFBFBD>thode que dans le buffer courant.
</p>
<h3>Termim</h3>
<p>
Termim est un programme qui permet de donner des m<>thodes d'entr<74>e <20> presque
n'importe quel terminal. Ces m<>thodes sont elles aussi capables d'afficher
le caract<63>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<73>cifique <20> l'ENS, mais comme il a <20>t<EFBFBD> d<>velopp<70> par
d'anciens <20>l<EFBFBD>ves, il est probable qu'il soit rarement install<6C> 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)<29>:
</p>
<ul>
<li><strong>F1</strong><3E>: clavier sans transformation.</li>
<li><strong>F2 e</strong><3E>: caract<63>res occidentaux, avec Ctrl-K comme
touche compose.</li>
<li><strong>F2 a</strong><3E>: arabe.</li>
<li><strong>F2 c</strong><3E>: cyrillique.</li>
<li><strong>F2 g</strong><3E>: grec.</li>
<li><strong>F2 h</strong><3E>: h<>breu.</li>
<li><strong>F2 t</strong><3E>: thai.</li>
<li><strong>F3 c</strong><3E>: chinois simplifi<66> (m<>thode tonepy).</li>
<li><strong>F3 k</strong><3E>: cor<6F>en (phon<6F>tique).</li>
<li><strong>F3 h</strong><3E>: cor<6F>en (clavier avec voyelles et consonnes).</li>
<li><strong>F3 j</strong><3E>: japonais (utiliser la touche ` pour taper des
kanji).</li>
<li><strong>F3 g</strong><3E>: grep polytonique.</li>
</ul>
<p>
Pour plus de d<>tails, consulter la page de man de termim, ainsi que les
2003-06-16 15:35:21 +02:00
documentations des diverses m<>thodes d'entr<74>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<EFBFBD>: Nicolas George.
2005-06-20 14:09:18 +02:00
Derni<EFBFBD>re modification le <date value="$Date: 2005-06-20 12:09:18 $"/>.
</div>
</body>
</html>