old-www/HOWTO/Francophones-HOWTO-6.html

1897 lines
70 KiB
HTML
Raw Blame History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<TITLE>Le Francophones-HOWTO : Linux &amp; la langue fran&ccedil;aise: R&eacute;glage du clavier pour les applications en mode texte</TITLE>
<LINK HREF="Francophones-HOWTO-7.html" REL=next>
<LINK HREF="Francophones-HOWTO-5.html" REL=previous>
<LINK HREF="Francophones-HOWTO.html#toc6" REL=contents>
</HEAD>
<BODY>
<A HREF="Francophones-HOWTO-7.html">Next</A>
<A HREF="Francophones-HOWTO-5.html">Previous</A>
<A HREF="Francophones-HOWTO.html#toc6">Contents</A>
<HR>
<H2><A NAME="s6">6. R&eacute;glage du clavier pour les applications en mode texte</A></H2>
<P>
<P>
<H2><A NAME="ss6.1">6.1 Tout d'abord</A>
</H2>
<P>
<P>Le huiti&egrave;me bit doit survivre &agrave; l'entr&eacute;e du noyau,
assurez-vous-en donc avec :
<P>
<BLOCKQUOTE><CODE>
<PRE>
stty cs8 -istrip -parenb
</PRE>
</CODE></BLOCKQUOTE>
<P>Ensuite, il convient de s'assurer que l'application est apte &agrave; supporter
les caract&egrave;res 8 bits : par exemple, ispell n'est pas compil&eacute;
pour des caract&egrave;res 8 bits par d&eacute;faut : il faut le recompiler
sans l'option :
<P>
<BLOCKQUOTE><CODE>
<PRE>
-NO8BIT
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.2">6.2 Une police, des polices...</A>
</H2>
<P>
<P>Avant d'aborder cette section, je vous conseille de lire l'introduction
sur les polices pour appr&eacute;hender un peu mieux le vocabulaire de base et
les diff&eacute;rentes normes de polices.
<P>
<H3>a) Historique des polices</H3>
<P>
<P>De l'ASCII &agrave; l'Unicode, en passant par l'ISO 8859, le latin et le cp, on
peut r&eacute;sumer l'histoire des polices en grandes &eacute;tapes :
<P>Au d&eacute;but &eacute;tait l'ASCII, qui codait ses caract&egrave;res sur 7 bits.
<P>Pr&eacute;vu pour des &eacute;tats-uniens, il &eacute;tait impossible d'incorporer des
caract&egrave;res accentu&eacute;s &agrave; la norme d&eacute;j&agrave; pr&eacute;sente de 127 caract&egrave;res.
<P>Ainsi vint le 8 bits qui &eacute;tendit le nombre de caract&egrave;res &agrave; 255 et les
normes ISO 8859, latin et cp, pour les plus connues, qui vinrent pallier
&agrave; cette d&eacute;ficience du fait des 128 positions suppl&eacute;mentaires disponibles
en encodant les caract&egrave;res sur 8 bits.
<P>Mais plusieurs de ces normes &eacute;taient n&eacute;cessaire du fait de
l'impossibilit&eacute; de faire tenir les caract&egrave;res de toutes les langues du
monde sur 8 bits.
<P>La norme ISO 8859-1 latin 1, la plus utilis&eacute;e, se destine par exemple au
langues d'Europe de l'ouest, du nord, d'Am&eacute;rique, la norme ISO 8859-2
latin 2 est pr&eacute;vue pour l'Europe de l'est...
<P>L'Unicode est l'un de ces standard, destin&eacute; &agrave; terme &agrave; remplacer les
diff&eacute;rentes &eacute;volutions de l'ASCII ; comme le passage du 7 bits au 8 bits
il correspond &agrave; une extension de la place disponible, tout en reprenant
l'ancienne partie comme ASCII et ISO 8859-1 latin 1 pour rester
compatible avec la majorit&eacute; du parc install&eacute;.
<P>L'Unicode offre l'avantage de proposer les caract&egrave;res n&eacute;cessaires &agrave;
toutes les langues du monde, mais reste encore peu utilis&eacute; ou
impl&eacute;ment&eacute;.
<P>En effet, il est impossible de l'utiliser en pratique sous
linux-console, la m&eacute;moire exig&uuml;e de la carte vid&eacute;o ne permettant pas de
stocker tous les caract&egrave;res de l'Unicode, et sous X la gestion actuelle
des polices rendrait son utilisation trop inconfortable.
<P>Attendons un peu que les polices <20> True Type <20> se r&eacute;pandent sous X, gr&acirc;ce
&agrave; des outils comme freetype, xfstt (...) et le tr&egrave;s attendu XFree 4 qui
devrait les supporter en natif.
<P>Actuellement, la nouvelle norme europ&eacute;enne ISO 8859-15 latin 9 est
cens&eacute;e permettre la transition vers l'Unicode en apportant &agrave; l'ancien
ISO 8859-1 latin 1 les caract&egrave;res qu'il manquait actuellement.
<P>Toutefois elle est partiellement incompatible avec l'Unicode puisque
l'ISO 8859-1 latin 1 avait &eacute;t&eacute; choisi comme base pour l'Unicode, mais
que cette police veut compl&eacute;ter les failles de l'ISO 8859-1 latin 1 en y
rajoutant des caract&egrave;res d&eacute;j&agrave; pr&eacute;sents dans l'Unicode...
<P>Quelle complexit&eacute; pour de simple lettres !
<P>
<H3>b) ISO 8859-15 latin 9</H3>
<P>
<P>De nous jours, il vaut mieux installer par d&eacute;faut la nouvelle norme ISO
8859-15 latin 9, destin&eacute;e &agrave; remplacer l'ensemble des polices europ&eacute;ennes
par une seule.
<P>Son but est voisin de l'Unicode, mais elle a l'avantage d'&ecirc;tre plus l&eacute;g&egrave;re que
celui-ci et d'&ecirc;tre applicable tout de suite.
<P>Elle apporte notamment des caract&egrave;res qui manquaient beaucoup pour les
Fran&ccedil;ais et les Finlandais :
<P>
<UL>
<LI> <20> e dans l'o <20> en majuscule et minuscule pour les Fran&ccedil;ais, par
exemple pour les mots oeuf, coeur, boeuf, oeil ...</LI>
<LI> <20> s chapeau invers&eacute; <20> en majuscule et minuscule pour les Finlandais</LI>
<LI> <20> z chapeau invers&eacute; <20> en majuscule et minuscule pour les Finlandais</LI>
<LI> <20> l'EURO <20> pour tous les pays europ&eacute;ens</LI>
</UL>
<P>Cette nouvelle norme, ISO 8859-15 latin 9 aussi connue sous le nom g&eacute;n&eacute;rique
latin0, reste cependant encore tr&egrave;s peu r&eacute;pandue par rapport &agrave; la norme
actuelle ISO 8859-1 latin 1.
<P>
<H3>c) Utiliser les polices ISO 8859-15 latin 9</H3>
<P>
<P>Vous n'avez besoin que d'une seule police !
<P>Or il en existe plusieurs types r&eacute;pondant diff&eacute;remment &agrave; la m&ecirc;me norme
iso-8859-15 latin9 <20> latin0 <20> sous linux :
<UL>
<LI> par tradition l'opposition latN/latNu selon l'inclusion ou non d'une
table de correspondance Unicode.</LI>
<LI> en r&eacute;alit&eacute; les diff&eacute;rences vont bien plus loin, de l'ordre dans
lequel sont les caract&egrave;res de la police, ce qui joue sur l'aspect des
applications semi graphique, les correspondances avec des caract&egrave;res
latin1 <20> latin9 <20> Unicode ce qui a un r&ocirc;le dans la compatibilit&eacute; crois&eacute;e
ou exclusive, par exemple purement Unicode...</LI>
</UL>
<P>J'ai donc compl&eacute;t&eacute; par 2 types de ma cr&eacute;ation pour r&eacute;pondre au mieux aux
diff&eacute;rents besoins.
<P>
<BLOCKQUOTE><CODE>
<PRE>
| Encodage dans | Inclusion d'une | Compatibilit&eacute; | Compatibilit&eacute;
| l'ordre iso | table Unicode | exclusive | crois&eacute;e
--------------------------------------------------------------------------
lat9 | oui | non | non | lat1 + lat9
--------------------------------------------------------------------------
lat9u | non | oui | non | lat1 + lat9
--------------------------------------------------------------------------
lat9v | oui | oui | Unicode | non
--------------------------------------------------------------------------
lat9w | oui | oui | non |lat1+lat9+Unicode
--------------------------------------------------------------------------
</PRE>
</CODE></BLOCKQUOTE>
<P>Voici plus d'explications :
<P>
<UL>
<LI> les lat9 tout court ne contiennent pas de table de correspondance
Unicode, ce qui fait que tous les symboles mon&eacute;taires internationaux
appara&icirc;tront comme des euro, ce qui peut poser des probl&egrave;mes pour les
fichiers issus d'un ordinateur sous windows ; le cp1252 ou le latin1 sont
<EFBFBD> incompatibles <20> avec le latin9, mais ce dernier a l'avantage de fonctionner
tout de suite sous linux.
Dans les versions r&eacute;centes du noyau, selon le
<A HREF="http://www.multimania.com/ydirson/en/lct/lct/lct-6.html">site de Yann Dirson</A>, il
semble donc que toutes les polices devraient contenir une table de
correspondance Unicode...
</LI>
<LI> des lat9u encod&eacute;es dans un ordre non standard, mais identique &agrave;
celui des polices latXu de kbd, par rapport aux polices pr&eacute;c&eacute;dentes, en
amenant les m&ecirc;mes probl&egrave;mes avec le cp1252 et le latin1 mais en incluant
une table de correspondance Unicode, ce qui permet d'avoir de jolis
caract&egrave;res semi graphiques sous Yast, mc, ou d'autres programmes bas&eacute;s
sur ncurses ou dialog.
</LI>
<LI> des lat9v encod&eacute;es dans l'ordre officiel iso comme les
lat9 mais avec une table Unicode compl&egrave;te : l&agrave; aucun symbole mon&eacute;taire
international ne sera remplac&eacute; par l'euro !
Ces polices sont utiles pour &eacute;viter les probl&egrave;mes d'export, gr&acirc;ce &agrave;
l'Unicode *pur*, avec une table de clavier Unicode adapt&eacute;e : tous les
caract&egrave;res latin9 sont remplac&eacute;s par des caract&egrave;res Unicodes et affich&eacute;s
ainsi, ce qui a le m&eacute;rite d'&ecirc;tre compatible avec le latin9, l'Unicode,
d'&ecirc;tre &eacute;l&eacute;gant techniquement mais inutilisable <20> normalement <20> sous
linux-console. Presque aucun syst&egrave;me n'est enti&egrave;rement pr&ecirc;t pour
l'Unicode !</LI>
</UL>
<P>Donc n'utilisez les polices lat9, lat9u ou lat9v que si vous savez ce
que vous faites, je vous recommande pour ma part le meilleur compromis :
les polices lat9w qui permettent de passer au latin9 imm&eacute;diatement, en
posant quelques probl&egrave;mes pour les caract&egrave;res latin1 qui seront
remplac&eacute;s par leurs &eacute;quivalents latin9, mais sans rendre l'Unicode
obligatoire comme les lat9U, sans emm&ecirc;ler les caract&egrave;res graphiques
comme les lat9, et en permettant aussi d'afficher les caract&egrave;res
sp&eacute;cifiques au latin9 en Unicode *pur*, &agrave; l'exception des caract&egrave;res
sp&eacute;cifiques au latin1 donc...
<P>Je vous rassure, vous n'&ecirc;tes pas oblig&eacute;s de comprendre tout ce qui suit
pour <20> passer &agrave; l'euro <20>, si effectivement vous ne savez toujours pas de
quelle police vous avez besoin, un conseil : utiliser les lat9w.
<P>Pour utiliser la police lat9-16.psf ou un autre lat9 .psf, vous devez
pallier l'absence d'une table Unicode en en chargeant une.
<P>
<BLOCKQUOTE><CODE>
<PRE>
loadunimap fonts/linux-console/lat9.uni
setfont fonts/linux-console/lat9-16.psf
</PRE>
</CODE></BLOCKQUOTE>
<P>Pour utiliser la police lat9w-16.psf ou une autre lat9u, lat9v ou
lat9w :
<P>
<BLOCKQUOTE><CODE>
<PRE>
setfont /fonts/linux-console/lat9w-16.psf
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H3>d) Unicode</H3>
<P>
<P>Une alternative est l'Unicode, mais les programmes l'utilisant sont encore trop
peu nombreux pour qu'elle soit valable.
<P>Citons quand m&ecirc;me yuedit et le projet <20> 9 <20> (9term, 9wm... rien &agrave; voir
avec l'op&eacute;rateur t&eacute;l&eacute;com fran&ccedil;ais du m&ecirc;me nom) qui utilisent l'Unicode
sous X, avec plus ou moins de succ&egrave;s.
<P>En revanche, sous linux-console, tout programme peut utiliser l'Unicode.
<P>Mais, h&eacute;las!, aussi grande que soit la m&eacute;moire des cartes vid&eacute;os actuelles,
elle ne peut charger l'int&eacute;gralit&eacute; des caract&egrave;res d'une police Unicode.
<P>Il existe donc des <20> jeux de caract&egrave;res <20> limit&eacute;s mais bien utiles pour les
langues baltiques, asiatiques, est-africaines...
<P>
<H3>e) Utiliser les possibilit&eacute;s Unicode</H3>
<P>
<P>Essayez par exemple ce fichier <CODE>unicode-lance</CODE> pour passer en mode Unicode:
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/bin/sh
echo -e '\033%8'
kbd_mode -u
loadkeys fr-unicode.map
setfont lat9u-16.psf
</PRE>
</CODE></BLOCKQUOTE>
<P>et ce fichier <CODE>latin-retourne</CODE> pour revenir en mode latin normal:
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!/bin/sh
echo -e '\033%@'
kbd_mode -a
loadkeys fr-latin9.map
setfont lat9w-16.psf
</PRE>
</CODE></BLOCKQUOTE>
<P>Essayez par exemple de lire le fichier <CODE>unicode.txt</CODE>, encod&eacute; en
Unicode, une fois <CODE>unicode-lance</CODE> activ&eacute;.
<P>Vous ne verrez sinon qu'un texte mal encod&eacute;, sans caract&egrave;res 8 bits,
comme cet exemple :
<P>
<BLOCKQUOTE><CODE>
<PRE>
Ceci est un essai de texte en UNICODE !
On constate que les b&Atilde;<EFBFBD>tas (&Atilde;~_) et autres lettres 8 bits ne sortent pas bien
si l'on regarde ce fichier en mode latin !
Les accents &Atilde;<EFBFBD>&Atilde;<EFBFBD>&Atilde;| &Atilde;<EFBFBD> non plus d'ailleurs...
Enfin, heureusement que l'on ne marche pas sur des &Aring;~RUFS, enfin, &Aring;~Sufs !
&Atilde;~Ga marche moyennement disons !
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.3">6.3 Les locales, messages en Fran&ccedil;ais</A>
</H2>
<P>
<P>Linux en 'version fran&ccedil;aise' existe... mais ne semble pas facile
&agrave; obtenir.
<P>La librairie locale(7) [cf aussi perllocale, setlocale, getlocale]
utilis&eacute;e par la librairie C se sert de variables d'environnement pour
d&eacute;finir les pr&eacute;f&eacute;rences linguistiques et nationales.
<P>Pablo Saratxaga r&eacute;pondait ainsi &agrave; Pascal Rigaux en prenant l'exemple de sort :
<P>
<BLOCKQUOTE><CODE>
<PRE>
PR> J'ai d&eacute;couvert aujourd'hui la variable d'environnement LANG. C'est assez
PR> surprenant de se retrouver avec de l'aide en fran&ccedil;ais (m&ecirc;me si elle n'est pas
PR> toujours aussi pr&eacute;cise que la version anglaise) quand on fait ls --help.
C'est agr&eacute;able n'est-ce pas ?
PR> Par contre je ne comprend pas pourquoi un programme comme sort(1) n'utilise pas
PR> cette information pour obtenir un tri acceptable pour les accents (du genre ne
PR> pas mettre <20> &ecirc;tre <20> apr&egrave;s <20> zen <20>). Il devrait au moins proposer une option de
PR> ce genre.
Il faudrait regarder les sources de sort...
La fonction &agrave; utiliser est strcoll() :
****
STRCOLL(3) Manuel du programmeur Linux STRCOLL(3)
NOM
strcoll - Comparaison de deux cha&icirc;nes suivant la localisa-
tion en cours.
SYNOPSIS
#include &lt;string.h&gt;
int strcoll (const char *s1, const char *s2);
DESCRIPTION
La fonction strcoll() compare les deux cha&icirc;nes s1 et s2.
Elle renvoie un entier inf&eacute;rieur, &eacute;gal ou sup&eacute;rieur a z&eacute;ro
si s1 est respectivement inf&eacute;rieure, &eacute;gale, ou sup&eacute;rieure
a s2. La comparaison est effectu&eacute;e en se basant sur la
localisation en cours pour la cat&eacute;gorie LC_COLLATE. (Voir
setlocale(3)).
****
qui est donc l'&eacute;quivalent de strcmp() mais qui tiens compte des locales.
Il faudra s'&eacute;crire un strcasecoll() aussi pour bien faire, en utilisant
toupper()/tolower() qui d'apr&egrave;s la page de manuel supporte les locales.
Qui s'y colle ? &Ccedil;a devrait &ecirc;tre assez simple &agrave; r&eacute;aliser sur un syst&egrave;me GNU
en tout cas.
</PRE>
</CODE></BLOCKQUOTE>
<P>Il existe diff&eacute;rente variables &agrave; exporter, avec chacune une fonction
sp&eacute;cifique ; le format standardis&eacute; est:
<P>
<BLOCKQUOTE><CODE>
<PRE>
langue[_PAYS[.CHARSET]][@variante]
</PRE>
</CODE></BLOCKQUOTE>
<P>Les crochets d&eacute;notent l'optionalit&eacute;, par exemple: 'fr', 'fr_BE',
'fr_CH.ISO-8859-15', no@bokmaal, no@nynorsk,...
<P>Les fonctions de la libc, celle de GNU en tout cas, iront chercher dans
<EFBFBD> l'ordre d&eacute;croissant <20> si on peut dire; par exemple si on sp&eacute;cifie
'fr_CH.ISO-8859-15' elles chercheront d'abord avec cette valeur, puis
avec 'fr_CH' puis avec 'fr'.
<P>
<UL>
<LI> LC_COLLATE d&eacute;finit les &eacute;quivalences de caract&egrave;res pour les comparaisons
(&aelig; peut &ecirc;tre &eacute;quivalent &agrave; ae), pour les ligatures et pour les c&eacute;sures.</LI>
<LI> LC_CTYPE d&eacute;finit les caract&egrave;res affichables</LI>
<LI> LC_MONETARY d&eacute;finit le format et le symbole de la monnaie utilis&eacute;e</LI>
<LI> LC_NUMERIC d&eacute;finit le format num&eacute;rique : regroupement, marqueur
d&eacute;cimal...</LI>
<LI> LC_MESSAGES d&eacute;finit la langue des messages</LI>
<LI> LC_TIME d&eacute;finit le format de la date, les noms des jours et
des mois</LI>
<LI> LC_ALL valeur par d&eacute;faut des variables pr&eacute;c&eacute;dentes : si une
LC_ n'est pas d&eacute;finie, LC_ALL est prise en compte, sinon la libc se
rabat sur LANG.</LI>
<LI> LANG diff&eacute;rent des variables pr&eacute;c&eacute;dentes, contient
le code langue au format iso : fr,en,de...</LI>
<LI> LANGUAGE liste des locales par ordre de pr&eacute;f&eacute;rence s&eacute;par&eacute;es
par deux points (fr:es:dk:en), c'est une particularit&eacute; GNU, fort
utile si un document n'existe que dans une langue comme certaines pages
de manuel</LI>
</UL>
<P>Les valeurs utilisables pour les francophones sont:
<P>
<UL>
<LI> fr fran&ccedil;ais g&eacute;n&eacute;rique</LI>
<LI> fr_FR fran&ccedil;ais de France</LI>
<LI> fr_BE fran&ccedil;ais de Belgique</LI>
<LI> fr_CH fran&ccedil;ais de Suisse</LI>
<LI> fr_LU fran&ccedil;ais du Luxembourg</LI>
<LI> fr_CA fran&ccedil;ais du Canada</LI>
</UL>
<P>Par exemple, si vous &ecirc;tre un Fran&ccedil;ais de France, il suffit d'indiquer
sous bash :
<P>
<BLOCKQUOTE><CODE>
<PRE>
export LANGUAGE=fr_FR
</PRE>
</CODE></BLOCKQUOTE>
<P>Exemple :
<P>
<BLOCKQUOTE><CODE>
<PRE>
bash# export LANGUAGE=es_ES
bash# ls fichier_n_existant_pas
ls: fichier_n_existant_pas: No existe el fichero o el directorio
bash# export LANGUAGE=de_DE
bash# ls fichier_n_existant_pas
ls: fichier_n_existant_pas: Datei oder Verzeichnis nicht gefunden
bash# export LANGUAGE=en_US
bash# ls fichier_n_existant_pas
ls: fichier_n_existant_pas: No such file or directory
bash# export LANGUAGE=fr_FR
bash# ls fichier_n_existant_pas
ls: fichier_n_existant_pas: Aucun fichier ou r&eacute;pertoire de ce type
</PRE>
</CODE></BLOCKQUOTE>
<P>Toutefois, avec le passage &agrave; l'euro, ces locales ne sont plus adapt&eacute;es.
<P>Je vous conseille donc d'utiliser dans les pays de l'union passant &agrave;
l'euro le suffixe <20> @euro <20> :
<P>
<BLOCKQUOTE><CODE>
<PRE>
export LC_ALL="fr_FR@euro"
</PRE>
</CODE></BLOCKQUOTE>
<P>Pour cela, installer les nouveaux fichiers sources de locales dans
<CODE>/usr/share/i18n/</CODE> en lan&ccedil;ant :
<P>
<BLOCKQUOTE><CODE>
<PRE>
cp charmaps/ISO-8859-15 /usr/share/i18n/charmaps/ISO-8859-15
cp locales/* /usr/share/i18n/locales/
</PRE>
</CODE></BLOCKQUOTE>
<P>Alors, r&eacute;g&eacute;n&eacute;rer les locales <20> binaires <20> de <CODE>/usr/share/locales</CODE>, par exemple :
<P>
<BLOCKQUOTE><CODE>
<PRE>
localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro
</PRE>
</CODE></BLOCKQUOTE>
<P>fr_FR@euro inclus les caract&egrave;res latin 9, c'est utile pour l'utilisation
de LC_COLLATE et LC_CTYPE en fait, et la nouvelle monnaie unique.
<P>Pour le moment, le Franc Fran&ccedil;ais (FRF) est toujours la monnaie
officielle en France par exemple, mais lorsque ce sera l'euro, il
suffira de remplacer la locale fr_FR par fr_FR@euro.
<P>
<BLOCKQUOTE><CODE>
<PRE>
cd /usr/lib/locales
rm -fr fr_FR
mv fr_FR@euro fr_FR
</PRE>
</CODE></BLOCKQUOTE>
<P>La solution <20> @euro <20> est support&eacute;e par les autres UNIX comme Solaris.
<P>Pour les shell scripts, il peut &ecirc;tre utile de rajouter <20> LC_TIME=C <20> pour
emp&ecirc;cher la date d'&ecirc;tre localis&eacute;, emb&ecirc;tant pour les grep et autres qui
cherchent <20> Mon <20> <20> Tue <20>... et non <20> Lun <20>, <20> Mar <20>...
<P>Les donn&eacute;es correspondantes aux pr&eacute;f&eacute;rences se trouvent g&eacute;n&eacute;ralement
dans <CODE>/usr/share/locale</CODE>. S'ils manquent, vous pouvez r&eacute;cup&eacute;rer
leur
<A HREF="ftp://dkuug.dk/i18n/WG15-collection">source</A><P>Concernant les autres fichiers abord&eacute;s dans cet article, vous les
trouverez avec les autres fichiers de cet HOWTO sur
<A HREF="http://metalab.unc.edu/guylhem/francophones-howto.tgz">ma page</A>.
<P>
<H2><A NAME="ss6.4">6.4 Son linux en fran&ccedil;ais</A>
</H2>
<P>
<P>Pour se faire <CODE>SON</CODE> linux en fran&ccedil;ais il faut en pratique disposer des
sources de la libc et d'un minimum de comp&eacute;tences en langage C ; ces
manipulations sont inutiles pour l'utilisateur standard de Linux qui
se contentera d'utiliser les locales de la section pr&eacute;c&eacute;dente.
<P>Mais voici donc, pour la bonne bouche, quelques renseignements collect&eacute;s...
<P>Laurent Chemla nous pilote :
<P>
<BLOCKQUOTE><CODE>
<PRE>
Si j'ai suivi, il y a deux trucs qui font la m&ecirc;me chose, d'o&ugrave; embrouille, les
locales et un truc appel&eacute; nls.
Les locales, sous Linux, &ccedil;a va par d&eacute;faut dans /usr/lib/locale,
et &ccedil;a contient de quoi pr&eacute;ciser entre autres le format des
nombres (LC_NUMERIC), les retours des fonctions ctype (isalpha etc) (LC_CTYPE),
le format des sommes d'argent (LC_MONETARY), le format des dates (LC_TIME) et
encore d'autres d&eacute;tails. Sur certains Unix, il y a aussi LC_MESSAGES,
qui contient les messages de l'OS dans la langue choisie par la variable
d'environnement LC_MESSAGES. Pas sous Linux. Sous Linux, c'est nls qui fait
&ccedil;a, et de fait, nls g&egrave;re un fichier qui est dans /etc/locale/.
(NDG : De nos jours, ils se trouvent plut&ocirc;t dans /usr/lib/locale)
D'o&ugrave; l'embrouille. Ils auraient mis &ccedil;a dans /usr/lib/nls, comme
tout le monde, &ccedil;a aurait &eacute;vite la confusion. Mais bon.
Donc, si l'on veut se tenir &agrave; jour d'nls, il suffit d'aller dans les
sources de libc/nls, faire <20> make french <20> et copier libc.dat dans
/etc/locale/C/libc.dat et toc, tous les messages sont en fran&ccedil;ais. Y compris
ceux des programmes qui n'utilisent pas setlocale(): c'est perror() qui fait le
boulot (du moins je suppose).
Si l'on veut en plus que les programmes qui utilisent setlocale() utilisent nos
r&egrave;gles fran&ccedil;aises, l&agrave; il faut aller dans les sources de
libc/locale et dans chacun des sous-r&eacute;pertoires jeter un oeil sur le
fichier exemple, le modifier pour le fran&ccedil;ais (c'est des tout petits
fichiers), et faire <20> make <20>, avant de copier le r&eacute;sultat dans
/usr/lib/local/fr/ et de faire un <20> export LC_ALL=fr <20>.
</PRE>
</CODE></BLOCKQUOTE>
<P>Autre astuce pour m&eacute;nager les vieux logiciels :
<P>
<BLOCKQUOTE><CODE>
<PRE>
cd /usr/lib
ln -sf /usr/share/locale .
</PRE>
</CODE></BLOCKQUOTE>
<P>Ne pas oublier de t&eacute;l&eacute;charger sur le
<A HREF="ftp://ftp.lip6.fr">site du lip6</A> :
<P>
<UL>
<LI> Les pages de manuel en fran&ccedil;ais, archive man-fr-*, adapt&eacute;es par C.
Blaess. Il suffit d'extraire le contenu de l'archive dans le r&eacute;pertoire
/usr/man/fr.
</LI>
<LI> Une int&eacute;ressante documentation technique : locale.fr, par P. D'Cruze,
adapt&eacute;e par &Eacute;. Dumas</LI>
</UL>
<P>Pour en apprendre davantage lire la page de manuel de <20> locale <20> : biblioth&egrave;que
de pages de manuel 5 ou 7 :
<P>
<BLOCKQUOTE><CODE>
<PRE>
bash# man 5 locale
bash# man 7 locale
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.5">6.5 Les variables</A>
</H2>
<P>
<P>Ces variables doivent &ecirc;tre export&eacute;es &agrave; chaque login :
mettez les donc dans <CODE>.bashrc</CODE> et <CODE>.bash_login</CODE>, <CODE>.tcshrc</CODE> ou
/etc/profile :
<P>
<BLOCKQUOTE><CODE>
<PRE>
# pour tcsh, utiliser setenv au lieu de export, par exemple <20>setenv LANG fr<66>
# Les locales
LC_CTYPE=ISO-8859-1
LANGUAGE=fr
LC_MESSAGES=fr
LC_ALL=fr
LANG=fr
LESSCHARSET=latin1
export LC_CTYPE LANGUAGE LC_MESSAGES LC_ALL LANG LESSCHARSET
# Les raccourcis : sans ll ou d, impossible de voir les fichiers comprenant des
# caract&egrave;res 8 bits ...
alias q="cd .."
alias ll="ls --color=auto -a -N -l"
alias d="ls --color=auto -a -N"
alias indent="indent -kr"
alias netscape="export LC_ALL=en_EN ; netscape $* ; LC_ALL=fr_FR"
# Au cas o&ugrave; Del/BackSpace ne fonctionne pas, essayez l'un des deux :
#stty erase ^?
#stty erase ^H
</PRE>
</CODE></BLOCKQUOTE>
<P>N'oubliez pas : tous les fichiers ici cit&eacute;s dont le nom commence par
<EFBFBD> . <20> doivent se trouver dans votre r&eacute;pertoire maison &nbsp;/
<P>
<H2><A NAME="ss6.6">6.6 Les caract&egrave;res 8 bits dans les programmes utilisant readline tels bash ou ncftp...</A>
</H2>
<P>
<P>Readline est une librairie de saisie de caract&egrave;res avec historique et
compl&eacute;tion ; elle est utilis&eacute;e par de nombreux programmes comme bash, ncftp,
gnuplot...
<P>Par d&eacute;faut, le 8e bit sert &agrave; coder la touche Meta.
<P>Elle est utilis&eacute;e pour coder certaines commandes mais la touche <20> Escape <20>
ou <20> &Eacute;chap <20> peut la remplacer.
<P>Si vous souhaitez voir et saisir des accents avec les applications
compil&eacute;es avec readline, comme bash pour les versions sup&eacute;rieures &agrave;
1.13, ajoutez ceci dans votre fichier $INPUTRC, par d&eacute;faut
<CODE>~/.inputrc</CODE>) :
<P>
<BLOCKQUOTE><CODE>
<PRE>
# Permettre de rentrer &amp; recevoir des caract&egrave;res accentu&eacute;s
set meta-flag on
set convert-meta off
set input-meta on
set output-meta on
# Pas de bip audible mais visible
# set bell-style visible
# Pour faire marcher Home, End, Delete, Esc + Delete &amp; Esc + BackSpace
"\e[1~":beginning-of-line
"\e[3~":delete-char
"\e[4~":end-of-line
"\e\C-h": backward-kill-word
"\e\e[3~": kill-word
</PRE>
</CODE></BLOCKQUOTE>
<P>Cela vous permettra d'effacer des caract&egrave;res vers l'avant avec
<EFBFBD> Delete <20> et vers l'arri&egrave;re avec <20> BackSpace <20>, ceci n'&eacute;tant pas
pr&eacute;vu sur les tables de clavier par d&eacute;faut <20> mimant <20> le
comportement d'un clavier de console VT100 .
<P>Les deux derni&egrave;res options vous permettront d'utiliser <20> Home <20> et <20> End <20>
pour aller au d&eacute;but et &agrave; la fin de la ligne en cours
d'&eacute;dition.
<P>Pour pouvoir employer une touche il suffit d'obtenir son code et
l'associer &agrave; une fonction gr&acirc;ce &agrave; ce fichier ; pour obtenir le code
d'une touche invoquer cat puis appuyer sur la touche : son code
appara&icirc;t.
<P>Le code physique :
<P>
<BLOCKQUOTE><CODE>
<PRE>
^[
</PRE>
</CODE></BLOCKQUOTE>
<P>correspond &agrave; la s&eacute;quence d'&eacute;chappement.
<P>Par exemple, si le code de <20> Home <20> est <20> ^[[7&nbsp; <20> il suffit d'ajouter
une ligne :
<P>
<BLOCKQUOTE><CODE>
<PRE>
"\e[7~": beginning-of-line
</PRE>
</CODE></BLOCKQUOTE>
<P>au <CODE>.inputrc</CODE>.
<P>Plus de documentation est disponible sur la page de manuel de bash, section
<CODE>READLINE</CODE>.
<P>On peut aussi, gr&acirc;ce &agrave; la variable d'environnement <CODE>INPUTRC</CODE>, utiliser un
fichier commun &agrave; tous les utilisateurs.
<P>Enfin, je vous recommande d'utiliser ce fichier <CODE>.bashrc</CODE> &agrave; placer
dans votre r&eacute;pertoire maison :
<P>
<BLOCKQUOTE><CODE>
<PRE>
# ~/.bashrc : ex&eacute;cut&eacute; par bash(1) pour les shells lanc&eacute;s apr&egrave;s le login.
# Le path
PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/usr/local/bin"
# Le prompt
PS1="(\u@\h:\W)$ "
# L'utilisateur
ENV=$HOME/.bashrc
USERNAME="votre nom"
# Les locales
_CTYPE=ISO-8859-1
LANGUAGE=fr
LC_MESSAGES=fr
LC_ALL=fr
LANG=fr
LESSCHARSET=latin1
export LC_CTYPE LANGUAGE LC_MESSAGES LC_ALL LANG LESSCHARSET
# Les raccourcis
alias q="cd .."
alias ll="ls --color=auto -a -N -l"
alias d="ls --color=auto -a -N"
alias indent="indent -kr"
alias elm-box="elm -f ~/Mail/Inbox"
alias netscape="export LC_ALL=en_EN ; netscape $* ; LC_ALL=fr_FR"
# Au cas o&ugrave; Del/BackSpace ne fonctionne pas, essayez l'un des deux :
#stty erase
#stty erase ^H
# Refuser le talk &amp; le write
#mesg n
# Permettre les coredumps
#ulimit -c nombre_max_de_Ko
#Fixer le masque de cr&eacute;ation de fichiers
#umask 022
</PRE>
</CODE></BLOCKQUOTE>
<P>Le fichier .bash_profile ou .bash_login, ex&eacute;cut&eacute; par bash(1) lors des
logins, y est strictement identique mais peut, si vous le voulez,
pr&eacute;senter des diff&eacute;rences pour afficher par exemple une citation en
la&ccedil;ant le programme <20> fortune <20>.
<P>
<H2><A NAME="ss6.7">6.7 zsh</A>
</H2>
<P>Celui-ci devrait se contenter d'un <CODE>stty pass8</CODE>.
<P>Si cela ne suffisait pas, rajouter dans le <CODE>.zshrc</CODE> ou dans
<CODE>/etc/zshrc</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
bindkey "\e[2~" yank
bindkey "\e[3~" delete-char
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line
bindkey "\e[5~" up-line-or-history
bindkey "\e[6~" down-line-or-history
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>
<H2><A NAME="ss6.8">6.8 tcsh</A>
</H2>
<P>
<P>Pour tcsh, placer, dans le fichier <CODE>/etc/csh.login</CODE> ou dans les
fichiers <CODE>.tcshrc</CODE> des utilisateurs concern&eacute;s, les variables
indiqu&eacute;es plus haut en rempla&ccedil;ant export par setenv:
<P>
<BLOCKQUOTE><CODE>
<PRE>
setenv LC_CTYPE=ISO-8859-1
setenv LANGUAGE=fr
setenv LC_MESSAGES=fr
setenv LC_ALL=fr
setenv LANG=fr
setenv LESSCHARSET=latin1
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.9">6.9 Pour tous les shells</A>
</H2>
<P>
<P>Remplacer 'iso_8859_1' par 'iso-8859-1' si cela ne fonctionne pas, voire
french.iso88591.fr_FR ou fr_BR, fr_CA, fr_CH, fr_LU...
<P>&Agrave; propos de LANG, il vaut mieux &eacute;viter fr_FR et lui pr&eacute;f&eacute;rer fr
car certains programmes ne passent pas vraiment par la resolution de
locales mais lisent LANG directement...
<P>Si nls est install&eacute;, les routines correspondantes sont utilis&eacute;es, sinon
tcsh agit en iso_8859_1, quelle que soit les valeurs donn&eacute;es &agrave; LANG et
LC_CTYPE : cf. la section NATIVE LANGUAGE SYSTEM de tcsh(1).
<P>Selon le Danish-HOWTO, utiliser :
<P>
<BLOCKQUOTE><CODE>
<PRE>
(guylhem@victis:tcsh)# setenv LC_CTYPE ISO-8859-1
(guylhem@victis:tcsh)# stty pass8
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.10">6.10 L'heure</A>
</H2>
<P>
<P>Rien n'est plus facile que de laisser &agrave; Linux le soin de passer de
l'heure d'&eacute;t&eacute; &agrave; l'heure d'hiver et
r&eacute;ciproquement...
<P>a) D'abord, quelle heure est-il :-) ?
<P>Apr&egrave;s avoir regard&eacute; sur la pendule la plus proche de vous, tapez :
<P><CODE>clock</CODE>
<P>puis
<P><CODE>date</CODE>
<P>La premi&egrave;re heure est celle du bios, la seconde celle calcul&eacute;e
par Linux &agrave; partir de <CODE>/etc/zoneconfig</CODE>.
<P>Pour peu que vous ayez install&eacute; timezone, votre machine peut jongler
ais&eacute;ment entre les diff&eacute;rents fuseaux horaires... ce que les DOS
ou Windows ne permettent pas !
<P>b) L'heure du choix !
<P>De l&agrave;, deux possibilit&eacute;es : soit vous d&eacute;cidez de laisser
l'heure syst&egrave;me &agrave; l'heure locale, peu pratique, except&eacute; si
vous h&eacute;bergez aussi sur votre disque dur ces syst&egrave;mes
d'exploitation peu &eacute;volu&eacute;, ne sachant m&ecirc;me pas exploiter
les fuseaux horaires, soit vous passez &agrave; l'heure de Greenwich, Linux se
chargeant de l'adapter &agrave; votre fuseau horaire.
<P>Dans ce cas, les grands voyages &agrave; l'&eacute;tranger avec un portable
tout neuf &eacute;quip&eacute; de Linux se feront en toute simplicit&eacute; :
le dernier paragraphe vous expliquera comment changer de fuseau horaire
facilement...
<P>c) Le r&eacute;glage
<P>Pour proc&eacute;der, regardez d'abord si l'heure syst&egrave;me
retourn&eacute;e par clock est l'heure locale ou l'heure de Greenwich.
<P>Vous avez bien regard&eacute; une pendule comme je vous le conseille plus haut,
n'est-ce pas ?
<P>Si clock vous retourne l'heure locale, il va falloir jongler un peu avec les
fuseaux horaires, sinon passez directement &agrave; l'&eacute;tape
<EFBFBD> r&eacute;glage du fuseau <20>.
<P>
<UL>
<LI> Pour les fran&ccedil;ais, belges wallons et suisses romands :</LI>
</UL>
<P>Vous &ecirc;tes normalement dans une zone horaire MET (Medium European Time,
soit GMT+1).
<P>La zone <20> MET DST <20> correspond elle &agrave; l'heure d'&eacute;t&eacute; active
(GMT + 2).
<P>Selon les d&eacute;cisions futures de la cour europ&eacute;enne, l'heure
d'&eacute;t&eacute; <20> daylight savings <20> risque d'&ecirc;tre abandonn&eacute;...
ce qui compliquera cette explication !
<P>
<UL>
<LI> Pour les canadiens fran&ccedil;ais :</LI>
</UL>
<P>Vous &ecirc;tes dans une zone horaire GMT-4 si vous habitez autour de
Montr&eacute;al .
<P>Pour les autres provinces, consulter un dictionnaire !
<P>Premi&egrave;rement, effacez le fichier /etc/localtime ou
/usr/lib/zoneinfo/localtime (l'emplacement varie selon les distributions ; si
vous avez les deux fichiers, effacez /etc/localtime : l'autre fichier doit
certainement &ecirc;tre un lien vers /etc/localtime).
<P>D&egrave;s lors, clock et date doivent vous retourner la m&ecirc;me heure...
<P>
<UL>
<LI> Pour les canadiens fran&ccedil;ais : utilisez GMT+4</LI>
</UL>
<P>
<UL>
<LI> Pour les fran&ccedil;ais, belges wallons et suisses romands :</LI>
</UL>
<P>Si vous lisez ce document en &eacute;t&eacute;, le d&eacute;calage de l'heure
locale par rapport &agrave; l'heure de Greenwich est de deux heures, on va donc
mettre temporairement le fuseau en GMT-2, soit vous lisez ce document en hiver
et il convient de remplacer tous les <20> 2 <20> par des <20> 1 <20> dans les exemples
suivants...
<P>GMT-2 ?!!? Alors que le fuseau est GMT+2 ?
<P>Ceci va vous retourner l'heure de Greenwich dont on a besoin pour r&eacute;gler
le syst&egrave;me : tapez :
<P><CODE>ln -sf /usr/lib/zoneinfo/Etc/GMT-2 /etc/zoneconfig</CODE>
<P><CODE>clock</CODE>
<P><CODE>date</CODE>
<P>L'heure calcul&eacute;e correspond donc &agrave; l'heure de Greenwich, l'heure
syst&egrave;me &agrave; l'heure locale... soit l'inverse de ce que l'on veut.
<P>Un simple :
<CODE>clock -w</CODE>
<P>Va alors mettre l'heure du syst&egrave;me en heure de Greenwich, utilisant pour
cela l'heure locale invers&eacute;e volontairement avec l'heure
syst&egrave;me.
<P>d) R&eacute;gler le fuseau horaire :
<P>Tapez alors :
<CODE>ln -sf /usr/lib/zoneinfo/Europe/Votre-ville /etc/zoneconfig</CODE>
<P>Et voil&agrave; ! Le syst&egrave;me est &agrave; l'heure de Greenwich, la
conversion vers le fuseau horaire local et l'heure d'&eacute;t&eacute; se
faisant automatiquement.
<P>Si vous habitez hors Europe, proc&eacute;dez de m&ecirc;me en rempla&ccedil;ant
les <20> -2 <20> par <20> X <20>, X repr&eacute;sentant l'oppos&eacute; de votre
d&eacute;calage horaire (par exemple -4 au Qu&eacute;bec, donc X=+4...)
<P>e) Modifier le fuseau horaire :
<P>Si vous partez &agrave; l'&eacute;tranger, il est alors simple de modifier
l'heure locale de votre portable : par exemple si vous partez pour Moscou :
<P><CODE>ln -sf /usr/lib/zoneinfo/Europe/Moscow /etc/zoneconfig</CODE>
<P>Tr&egrave;s simple et tr&egrave;s utile : plus besoin de se souvenir du
d&eacute;calage horaire (plus ou moins X heures) puisque Linux se charge
d&eacute;sormais de tout !
<P>
<H2><A NAME="ss6.11">6.11 vi</A>
</H2>
<P>
<P>Normalement, aucune modification n'est n&eacute;cessaire &agrave; part l'utilisation de
loadkeys (d&eacute;taill&eacute;e plus haut).
<P>Ce fichier <CODE>.vimrc</CODE> pourrait toutefois vous &ecirc;tre utile si vous utilisez
<CODE>vim</CODE> au lieu d'<CODE>elvis</CODE> :
<P>
<BLOCKQUOTE><CODE>
<PRE>
" Les guillemets anglais <20> " <20> signifient <20> mis en commentaire <20>
" &Eacute;viter un avertissement <20> version incorrecte <20> :
version 4.0
" Utiliser les d&eacute;fauts de vim, bien mieux
set nocompatible
" Autoriser le <20> BackSpace <20> sur tout :
set bs=2
" Police &agrave; utiliser sous X11 :
"set guifont=-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1
" Fixer la c&eacute;sure automatique de la ligne &agrave; N caract&egrave;res :
set tw=72
" Faire appara&icirc;tre les tabulations et les espaces
set list
" Changer les d&eacute;fauts pour voir les espaces inutiles et les tabulations
set listchars=tab:<3A><>,trail:<3A>
hi nontext ctermfg=red
hi nontext ctermbg=blue
" Indentation (pour les programmeurs) :
" set cindent
" R&eacute;glages souris :
"set mouse=a
" Ligne
set nowrapscan
" Montrer les correspondances :
set showmatch
" Montrer le mode
set showmode
" Indentation intelligente (pour les programmeurs) :
" set uc=0
" Faire fonctionner BackSpace :
set t_kD=^?
" Doit se trouver apr&egrave;s
map ^H X
" Faire fonctionner Delete :
map \e[3~ x
" Cacher la souris lorsqu'on tape :
set mousehide
" Faire voir les correspondances lors de recherches :
" set hlsearch
" Colorer &agrave; l'int&eacute;rieur des commentaires en C :
let c_comment_strings=1
" Couleur pour xiterm, rxvt, nxterm, color-xterm :
if has("terminfo")
set t_Co=8
set t_Sf=\e[3%p1%dm
set t_Sb=\e[4%p1%dm
else
set t_Co=8
set t_Sf=\e[3%dm
set t_Sb=\e[4%dm
endif
" Coloration syntaxique :
if ett_Co > 1
syntax on
endif
" Autoriser l'&eacute;dition de fichiers gzipp&eacute;s
augroup gzip
" Supprimer toutes les autocommandes
au!
autocmd BufReadPre,FileReadPre *.gz set bin
autocmd BufReadPost,FileReadPost *.gz '[,']!gunzip
autocmd BufReadPost,FileReadPost *.gz set nobin
autocmd BufReadPost,FileReadPost *.gz execute ":doautocmd BufReadPost " . expand("%:r")
autocmd BufWritePost,FileWritePost *.gz !mv &lt;afile> &lt;afile>:r
autocmd BufWritePost,FileWritePost *.gz !gzip &lt;afile>:r
autocmd FileAppendPre *.gz !gunzip &lt;afile>
autocmd FileAppendPre *.gz !mv &lt;afile>:r &lt;afile>
autocmd FileAppendPost *.gz !mv &lt;afile> &lt;afile>:r
autocmd FileAppendPost *.gz !gzip &lt;afile>:r
augroup END
augroup bzip
au!
autocmd BufReadPre,FileReadPre *.bz2 set bin
autocmd BufReadPost,FileReadPost *.bz2 '[,']!bunzip2
autocmd BufReadPost,FileReadPost *.bz2 set nobin
autocmd BufReadPost,FileReadPost *.bz2 execute ":doautocmd BufReadPost " . expand("%:r")
autocmd BufWritePost,FileWritePost *.bz2 !mv &lt;afile> &lt;afile>:r
autocmd BufWritePost,FileWritePost *.bz2 !bzip2 &lt;afile>:r
autocmd FileAppendPre *.bz2 !bunzip2 &lt;afile>
autocmd FileAppendPre *.bz2 !mv &lt;afile>:r &lt;afile>
autocmd FileAppendPost *.bz2 !mv &lt;afile> &lt;afile>:r
autocmd FileAppendPost *.bz2 !bzip2 &lt;afile>:r
augroup END
augroup cprog
au!
autocmd BufRead * set formatoptions=tcql nocindent comments&amp;
autocmd BufRead *.c,*.h set formatoptions=croql cindent comments=sr:/*,mb:*,el:*/,://
augroup END
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.12">6.12 Emacs</A>
</H2>
<P>
<P>Voici un fichier de configuration de base pour employer les accents.
<P>
<BLOCKQUOTE><CODE>
<PRE>
;;
;; Fichier .emacs: initialisation d'emacs
;; Tir&eacute; du Guide du Rootard
;;
(display-time) ;; Pour avoir l'heure dans la barre d'&eacute;tat
(setq display-time-24hr-format t) ;; Format 24 heures
;; Nouveaux modes
(autoload 'c++-mode "cplus-md" "C++ Editing Mode" t)
(autoload 'perl-mode "perl-mode" "Perl Editing Mode" t)
(autoload 'c-mode "c-mode" "C Editing Mode" t)
; mieux vaudrait utiliser le "cc-mode"
(autoload 'jargon-mode "jargon" "Jargon Mode" t)
;; Auto-Mode Settings : positionne le mode selon l'extension
(setq auto-mode-alist
(append '(("\.c$" . c-mode) ;; utilise le mode C++ m&ecirc;me pour C
("\.h$" . c-mode)
("\.C$" . c++-mode)
("\.H$" . c++-mode)
("\.cc$" . c++-mode)
("\.C$" . c++-mode)
("\.pl$" . perl-mode) ;; Perl
("/tmp/snd\.[0-9]*" . text-mode);; Text (pour le courriel)
("[Rr][Ee][0-9]*" . text-mode)
("\.ada$" . ada-mode) ;; Ada
("\.spec$" . ada-mode)
("\.body$" . ada-mode)
("makefile$" . makefile-mode) ;; Makefile
("Makefile$" . makefile-mode)
("Imakefile$" . makefile-mode))
auto-mode-alist))
; Remappages vari&eacute;s &agrave; mettre ici
(global-set-key "\eg" 'goto-line) ;; ESC G = Aller &agrave; une ligne
(put 'eval-expression 'disabled nil)
;; Accents...
(standard-display-european 1)
(load-library "iso-syntax")
(set-input-mode (car (current-input-mode))
(nth 1 (current-input-mode))
0)
;; Sous X-Window, texte en couleurs (C/C++/Shell/Makefile,etc)
(cond (window-system
(setq hilit-mode-enable-list '(not text-mode)
hilit-background-mode 'light
hilit-inhibit-hooks nil
hilit-inhibit-rebinding nil)
(require 'hilit19)
))
(if (not (equal window-system ""))
(global-set-key "\C-?" 'delete-char))
))
</PRE>
</CODE></BLOCKQUOTE>
<P>Le Keyboard-HOWTO conseille quand &agrave; lui :
<P>
<BLOCKQUOTE><CODE>
<PRE>
(standard-display-european t)
(set-input-mode nil nil 1)
(require 'iso-syntax)
(load-library "iso-insert.el")
(define-key global-map [?\C-.] 8859-1-map)
</PRE>
</CODE></BLOCKQUOTE>
<P>Utilisez une version au moins &eacute;gale &agrave; 19.27, modifiez le fichier global
(commun &agrave; tous les utilisateurs)
<CODE>/usr/lib/emacs/site-lisp/site-start.el</CODE> ou le <CODE>./emacs</CODE>
de chaque utilisateur concern&eacute; pour y ajouter :
<P>
<BLOCKQUOTE><CODE>
<PRE>
(standard-display-european t)
(set-input-mode (car (current-input-mode))
(nth 1 (current-input-mode))
0)
(global-set-key [delete] 'delete-char)
(global-set-key [home] 'beginning-of-line)
(global-set-key [end] 'end-of-line)
(global-set-key [prior] 'scroll-down)
(global-set-key [next] 'scroll-up)
(global-set-key [C-right] 'forward-word)
(global-set-key [C-left] 'backward-word)
(global-set-key [C-prior] 'beginning-of-buffer)
(global-set-key [C-next] 'end-of-buffer)
(global-set-key "\033[A" 'previous-line)
(global-set-key "\033[B" 'next-line)
(global-set-key "\033[C" 'forward-char)
(global-set-key "\033[D" 'backward-char)
(global-set-key "\033[H" 'beginning-of-line)
(global-set-key "\033[Y" 'end-of-line)
(global-set-key "\033[1~" 'beginning-of-line)
(global-set-key "\033[2~" 'overwrite-mode)
;; le delete-char peut correspondre &agrave; \004 ou &agrave; \033[3~
(global-set-key "\033[3~" 'delete-char)
(global-set-key "\033[4~" 'end-of-line)
(global-set-key "\033[5~" 'scroll-down)
(global-set-key "\033[6~" 'scroll-up)
</PRE>
</CODE></BLOCKQUOTE>
<P>Pour les autres versions :
<P>
<UL>
<LI> 19.19 :
<BLOCKQUOTE><CODE>
<PRE>
(standard-display-european 1)
(set-input-mode (car (current-input-mode))
(nth 1 (current-input-mode))
0)
</PRE>
</CODE></BLOCKQUOTE>
Lire &agrave; ce propos le fichier emacs.info.
</LI>
<LI> 19.22 :
<BLOCKQUOTE><CODE>
<PRE>
(load-library "iso-transl")
(standard-display-european t)
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> Autres :
<BLOCKQUOTE><CODE>
<PRE>
(standard-display-european 1)
(load-library "iso-transl")
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</UL>
<P>XEmacs les accepte lui par d&eacute;faut sans broncher mais peut des fois
rencontrer des probl&egrave;mes avec les BackSpaces dans le mini-buffer en
console.
<P>Ajouter dans le <CODE>.emacs</CODE> :
<BLOCKQUOTE><CODE>
<PRE>
(if (eq window-system 'x)
(global-set-key (read-kbd-macro "DEL") 'delete-char)
(or (global-set-key "^[[3~" 'delete-char))
)
</PRE>
</CODE></BLOCKQUOTE>
<P>Le mode ispell d'emacs a un certain nombre de dictionnaires pr&eacute;d&eacute;finis
qui ne sont pas forcement ceux qui sont en place sur le syst&egrave;me.
<P>Si vous constatez des probl&egrave;mes, vous devez red&eacute;finir la liste
ispell-dictionary-alist des dictionnaires.
<P>Cette liste contient :
<UL>
<LI> le nom du dictionnaire</LI>
<LI> la liste des caract&egrave;res composant un mot</LI>
<LI> la lise oppos&eacute;e des caract&egrave;res ne composant pas un mot</LI>
<LI> les caract&egrave;res de liaison &agrave; l'int&eacute;rieur des mots ("-", "'"...)</LI>
<LI> vrai ou faux si ces caract&egrave;res peuvent &ecirc;tre pr&eacute;sents en plusieurs
exemplaire dans le mot</LI>
<LI> une liste d'arguments pour ispell</LI>
<LI> le mode d'ispell (tex, nroff..)</LI>
</UL>
<P>Par exemple, dans le fichier <CODE>.emacs</CODE> :
<P>
<BLOCKQUOTE><CODE>
<PRE>
(setq ispell-dictionary-alist
'((nil ; francais.aff
"[A-Za-z&Agrave;&Acirc;&Ccedil;-&Euml;&Icirc;&Iuml;&Ocirc;&Ugrave;&Ucirc;&Uuml;&agrave;&acirc;&ccedil;-&euml;&icirc;&iuml;&ocirc;&ugrave;&ucirc;&uuml;]" "[^A-Za-z&Agrave;&Acirc;&Ccedil;-&Euml;&Icirc;&Iuml;&Ocirc;&Ugrave;&Ucirc;&Uuml;&agrave;&acirc;&ccedil;-&euml;&icirc;&iuml;&ocirc;&ugrave;&ucirc;&uuml;]"
"[---']" nil ("-n") "~nroff")
("english" ; rosbif
"[A-Za-z]" "[^A-Za-z]" "[---']" nil ("-B") nil)
("american" ; yankee
"[A-Za-z]" "[^A-Za-z]" "[---']" nil nil nil)
("francais" ; fran&ccedil;ais
"[A-Za-z&Agrave;&Acirc;&Ccedil;-&Euml;&Icirc;&Iuml;&Ocirc;&Ugrave;&Ucirc;&Uuml;&agrave;&acirc;&ccedil;-&euml;&icirc;&iuml;&ocirc;&ugrave;&ucirc;&uuml;]" "[^A-Za-z&Agrave;&Acirc;&Ccedil;-&Euml;&Icirc;&Iuml;&Ocirc;&Ugrave;&Ucirc;&Uuml;&agrave;&acirc;&ccedil;-&euml;&icirc;&iuml;&ocirc;&ugrave;&ucirc;&uuml;]"
"[---']" nil ("-n") "~nroff")
("francais-TeX" ; fran&ccedil;ais
"[A-Za-z&Agrave;&Acirc;&Ccedil;-&Euml;&Icirc;&Iuml;&Ocirc;&Ugrave;&Ucirc;&Uuml;&agrave;&acirc;&ccedil;-&euml;&icirc;&iuml;&ocirc;&ugrave;&ucirc;&uuml;\\]" "[^A-Za-z&Agrave;&Acirc;&Ccedil;-&Euml;&Icirc;&Iuml;&Ocirc;&Ugrave;&Ucirc;&Uuml;&agrave;&acirc;&ccedil;-&euml;&icirc;&iuml;&ocirc;&ugrave;&ucirc;&uuml;\\]"
"[---'^`\"]" t nil "~tex")
("espanol" ; espa~nol.aff
"[A-Za-z&aacute;&eacute;&iacute;&oacute;&uacute;&uuml;&ntilde;&Aacute;&Eacute;&Iacute;&Oacute;&Uacute;&Uuml;&Ntilde;]" "[^A-Za-z&aacute;&eacute;&iacute;&oacute;&uacute;&uuml;&ntilde;&Aacute;&Eacute;&Iacute;&Oacute;&Uacute;&Uuml;&Ntilde;]"
"[---'^`\"]" t nil "~nroff")
("dansk" ; danois et norv&eacute;gien
"[A-Za-z&aring;&Aring;&oslash;&Oslash;&aelig;&AElig;&eacute;&Eacute;&egrave;&Egrave;]" "[^A-Za-z&aring;&Aring;&oslash;&Oslash;&aelig;&AElig;&eacute;&Eacute;&egrave;&Egrave;]"
"[---'^`\"]" t nil "~nroff")
))
</PRE>
</CODE></BLOCKQUOTE>
<P>Le dictionnaire "francais-TeX" est un lien symbolique sur "francais"
qui permet d'ajouter une entr&eacute;e pour les accents &agrave; la TeX (ex: \'e).
<P>Si vous utilisez X11, vous voudrez peut-&ecirc;tre reconstruire les menus et
il vous faudra recharger une partie de lisp/loaddefs.el dans votre
<CODE>.emacs</CODE> :
<P>
<BLOCKQUOTE><CODE>
<PRE>
(setq ispell-menu-map nil)
(if ispell-menu-map-needed
(let ((dicts (reverse (cons (cons "default" nil) ispell-dictionary-alist)))
name)
;; Can put in defvar when external defines are removed.
(setq ispell-menu-map (make-sparse-keymap "Spell"))
(while dicts
(setq name (car (car dicts))
dicts (cdr dicts))
(if (stringp name)
(define-key ispell-menu-map (vector (intern name))
(cons (concat "Select " (capitalize name))
(list 'lambda () '(interactive)
(list 'ispell-change-dictionary name))))))))
(if ispell-menu-map-needed
(progn
;; Define commands in opposite order you want them to appear in menu.
(define-key ispell-menu-map [ispell-change-dictionary]
'("Change Dictionary" . ispell-change-dictionary))
(define-key ispell-menu-map [ispell-kill-ispell]
'("Kill Process" . ispell-kill-ispell))
(define-key ispell-menu-map [ispell-pdict-save]
'("Save Dictionary" . (lambda () (interactive) (ispell-pdict-save t))))
(define-key ispell-menu-map [ispell-complete-word]
'("Complete Word" . ispell-complete-word))
(define-key ispell-menu-map [ispell-complete-word-interior-frag]
'("Complete Word Frag" . ispell-complete-word-interior-frag))
(define-key ispell-menu-map [ispell-continue]
'("Continue Check" . ispell-continue))
(define-key ispell-menu-map [ispell-region]
'("Check Region" . ispell-region))
(define-key ispell-menu-map [ispell-word]
'("Check Word" . ispell-word))
(define-key ispell-menu-map [ispell-buffer]
'("Check Buffer" . ispell-buffer))
(define-key ispell-menu-map [ispell-message]
'("Check Message" . ispell-message))
(define-key ispell-menu-map [ispell-help]
'("Help" . (lambda () (interactive) (describe-function 'ispell-help))))
(put 'ispell-region 'menu-enable 'mark-active)))
(fset 'ispell-menu-map (symbol-value 'ispell-menu-map))
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.13">6.13 less</A>
</H2>
<P>
<P><CODE>/etc/profile</CODE> ou les fichiers de d&eacute;marrage du shell (comme
<CODE>.bashrc</CODE> et <CODE>.bash_profile</CODE> dans votre r&eacute;pertoire maison)
doivent contenir :
<P>
<BLOCKQUOTE><CODE>
<PRE>
export LESSCHARSET=latin1
</PRE>
</CODE></BLOCKQUOTE>
<P>Comme fichier <CODE>.lessrc</CODE> je vous recommande :
<P>
<BLOCKQUOTE><CODE>
<PRE>
\e[B forw-line
\e[A back-line
\e[6~ forw-scroll
\e[5~ back-scroll
\e[1~ goto-line
\e[4~ goto-end
\e[C next-file
\e[D prev-file
\eOA back-line
\eOB forw-line
</PRE>
</CODE></BLOCKQUOTE>
<P>Pour rentrer un Esc (parfois nomm&eacute; &Eacute;chap) taper <20> \e <20> ou, sous
vi, mettez vous en mode insertion avec i puis tapez <20> ctrl+v <20> et enfin <20> Esc <20>.
<P>Ce fichier permet d'utiliser les touches <20> Home <20>, <20> End <20>, <20> Page_Up <20> &amp; <20> Page_Down <20>.
<P>Pour s'en servir, taper :
<P>
<BLOCKQUOTE><CODE>
<PRE>
lesskey -o .less .lessrc
</PRE>
</CODE></BLOCKQUOTE>
<P>N'oubliez pas de mettre le fichier .less dans votre r&eacute;pertoire maison :
il permet d'employer les touches fl&eacute;ch&eacute;es, <20> Page_Up <20>, <20> Page_Down <20>,
<EFBFBD> Home <20> et <20> End <20>.
<P>Ne pas n&eacute;gliger la page de manuel de less car il peut &ecirc;tre int&eacute;ressant de
changer la valeur de sa variable d'environnement de configuration ("LESS").
<P>J'utilise : '-C -M -i -x2'
<P>
<H2><A NAME="ss6.14">6.14 ls</A>
</H2>
<P>
<P>Utilisez les options :
<P>
<BLOCKQUOTE><CODE>
<PRE>
-N --color=auto
</PRE>
</CODE></BLOCKQUOTE>
<P>ou, plus simplement, d&eacute;finissez dans les fichiers de d&eacute;marrage de
votre shell les alias suivants permettant de voir les fichiers dont le nom
comprend des caract&egrave;res 8 bits :
<P>
<BLOCKQUOTE><CODE>
<PRE>
alias ll="ls --color=auto -N -l -a"
alias d="ls --color=auto -N"
</PRE>
</CODE></BLOCKQUOTE>
<P>Un simple <CODE>d</CODE> remplacera le classique <CODE>ls</CODE>, en y ajoutant la
couleur, alors que <CODE>ll</CODE> vous offrira une liste compl&egrave;te de tous
les fichiers pr&eacute;sents dans le r&eacute;pertoire, avec leurs attributs,
leurs tailles...
<P>--color=auto est pr&eacute;f&eacute;rable car --color=yes fera avoir des codes escape
lorsqu'on redirige vers un fichier ou un programme o&ugrave; si le terminal ne
supporte pas la couleur.
<P>
<H2><A NAME="ss6.15">6.15 flex</A>
</H2>
<P>
<P>Donnez l'option :
<P>
<BLOCKQUOTE><CODE>
<PRE>
-8
</PRE>
</CODE></BLOCKQUOTE>
<P>si l'analyseur g&eacute;n&eacute;r&eacute; doit accepter les entr&eacute;es 8-bits
(bien s&ucirc;r qu'il doit le faire !).
<P>
<H2><A NAME="ss6.16">6.16 elm</A>
</H2>
<P>
<P>Rajoutez ces trois lignes dans votre <CODE>.elm/elmrc</CODE> :
<P>
<BLOCKQUOTE><CODE>
<PRE>
charset = iso-8859-1
displaycharset = iso-8859-1
textencoding = 8bit
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.17">6.17 col</A>
</H2>
<P>
<P>Assurez-vous :
<P>1) qu'il a &eacute;t&eacute; corrig&eacute; et fasse un
<P>
<BLOCKQUOTE><CODE>
<PRE>
setlocale(LC_CTYPE,"");
</PRE>
</CODE></BLOCKQUOTE>
<P>2) de d&eacute;finir
<P>
<BLOCKQUOTE><CODE>
<PRE>
LC_CTYPE=ISO-8859-1
</PRE>
</CODE></BLOCKQUOTE>
<P>dans l'environment.
<P>
<H2><A NAME="ss6.18">6.18 rlogin</A>
</H2>
<P>
<P>Utilisez l'option :
<P>
<BLOCKQUOTE><CODE>
<PRE>
-8
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.19">6.19 joe</A>
</H2>
<P>
<P>Utiliser
<A HREF="ftp://metalab.unc.edu:/pub/Linux/apps/editors/joe-2.8.tar.gz">joe 2.8</A> ou
plus r&eacute;cent qui devraient fonctionner apr&egrave;s &eacute;dition du fichier de
configuration : placer l'option -asis dans <CODE>/usr/lib/joerc</CODE> en
premi&egrave;re colonne.
<P>
<H2><A NAME="ss6.20">6.20 TeX et LaTeX</A>
</H2>
<P>
<P>Le plus simple consiste &agrave; employer GuTemberg, une distribution de LaTeX
avec tous les d&eacute;fauts r&eacute;gl&eacute;s pour des francophones par des
francophones !
<P>Mais si vous pr&eacute;f&eacute;rez une version <CODE>standard</CODE> non modifi&eacute;e, il suffit
d'ajouter au d&eacute;but de chaque fichier :
<P>
<UL>
<LI>Pour LaTeX:
<BLOCKQUOTE><CODE>
<PRE>
\documentstyle[isolatin]{article}
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI>Pour LaTeX2e:
<BLOCKQUOTE><CODE>
<PRE>
\documentclass[12pt,a4paper]{letter}
\usepackage{isolatin1}
\usepackage[french]{babel}
\usepackage{t1enc}
</PRE>
</CODE></BLOCKQUOTE>
ou alors :
<BLOCKQUOTE><CODE>
<PRE>
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</UL>
<P>Au cas o&ugrave; votre distribution soit trop vieille pour l'inclure,
<CODE>isolatin.sty</CODE> est disponible
<A HREF="ftp://ftp.vlsivie.tuwien.ac.at/pub/8bit">s&eacute;par&eacute;ment</A><P>Pour gs et xdvi, il faut utiliser des options sp&eacute;ciales (sur ma machine,
ce sont des alias). En effet, ils sont souvent configur&eacute;s pour un papier
&eacute;tats-unien dit <20> l&eacute;gal <20>, de taille proche, mais non exactement &eacute;gale,
&agrave; celle du standard <20> A4 <20>.
<P>Ces options sont les suivantes :
<P><CODE>gs -sPAPERSIZE=a4
xdvi -paper a4
ghostview -a4</CODE>
<P>Pour que dvips convertisse les documents dans un format papier a4, il faut
sp&eacute;cifier dans le fichier config.ps (le chemin varie en fonction des versions
de LaTeX) : /usr/lib/texmf/dvips/config.ps ou <CODE>.dvipsrc</CODE>
<P><CODE>@ a4 210mm 297mm
@+ ! %%DocumentPaperSizes: a4
@+ %%PaperSize: a4
@+ %%BeginPaperSize: a4
@+ a4</CODE>
<P>Sinon ajoutez &agrave; votre <CODE>.Xresources</CODE> :
<P>
<BLOCKQUOTE><CODE>
<PRE>
XDvi.paper: a4
Ghostview.pageMedia: A4
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.21">6.21 Manuel</A>
</H2>
<P>
<P>Tout d'abord, il faut vous procurer les pages de manuel Linux traduites en
<A HREF="ftp://ftp.lip6.fr/pub/linux">fran&ccedil;ais</A><P>Si vous utilisez une distribution RedHat ou Debian, celles-ci sont
pr&eacute;sentes sur le c&eacute;d&eacute;rom : il suffit de les
s&eacute;lectionner lors de l'installation.
<P>De l&agrave;, deux possibilit&eacute;s :
<P>
<UL>
<LI> soit vous ne voulez que des manuels en Fran&ccedil;ais, auquel cas il
faut faire un :
<BLOCKQUOTE><CODE>
<PRE>
export MANPATH=/usr/man/fr_FR
</PRE>
</CODE></BLOCKQUOTE>
NB: fr_FR se remplace par fr_BE, fr_CA, fr_CH ou fr_LU selon le pays concern&eacute;.
</LI>
<LI> soit vous pr&eacute;f&eacute;rez par d&eacute;faut des manuels en
Fran&ccedil;ais et si la page n'existe pas, vous vous rabattez vers l'Anglais,
il suffira alors de taper :
<BLOCKQUOTE><CODE>
<PRE>
export LANG=fr
</PRE>
</CODE></BLOCKQUOTE>
</LI>
</UL>
<P><CODE>man</CODE> ira chercher dans le <20> MANPATH <20> des pages en <20> LANG <20> par
d&eacute;faut et se rabattra sinon sur des pages en anglais.
<P>Si vous d&eacute;sirez installer la page de manuel expliquant la norme ISO
8859-15 latin 9, il faut installer le fichier iso_8859_15.7.gz :
<P>
<BLOCKQUOTE><CODE>
<PRE>
cp standard/iso_8859_15.7.gz /usr/local/man/man7/
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.22">6.22 Correcteur orthographique ispell</A>
</H2>
<P>
<P>Vous pouvez vous le procurer sur le
<A HREF="ftp://ftp.ireq-robot.hydro.qc.ca:/pub/ispell/francais-IREQ-1.3.tar.gz">site original d'Hydro Qu&eacute;bec</A>
ou sur le
<A HREF="ftp://ftp.lip6.fr/pub/ispell/francais">mirroir du lip6</A><P>Un fichier LISEZMOI explique pas &agrave; pas et en Fran&ccedil;ais
l'installation.
<P>
<H2><A NAME="ss6.23">6.23 Les claviers 105 touches</A>
</H2>
<P>
<P>Aussi appel&eacute;s <20> claviers Microsoft (tm) <20>, ils ont trois touches de plus
que les claviers normaux.
<P>Comment s'en servir ?
<P>En mode console, &eacute;diter <CODE>french.map</CODE> et d&eacute;commenter les lignes
en parlant !
<P>De m&ecirc;me pour <CODE>french</CODE> (pour Xwindow).
<P>
<H2><A NAME="ss6.24">6.24 PGP</A>
</H2>
<P>
<P>Attention, dans certains pays totalitaires, l'utilisation de logiciels
de cryptographie est consid&eacute;r&eacute;e comme usage d'armes de guerre, ce qui
est punissable par la loi !
<P>Sautez donc ce paragraphe si votre l&eacute;gislation locale ne permet pas
d'utiliser des logiciels de cryptographie.
<P>Premi&egrave;rement, il faut se procurer pgp-international (&agrave; cause de
probl&egrave;mes de patentes et de l&eacute;gislation sur l'export d'armes de
guerre, il existe pgp-us et pgp-international, ce dernire &eacute;tant
dot&eacute; d'un algorithme encore plus puissant) sur le
<A HREF="ftp://ftp.ifi.uio.no/pub/pgp/">site norv&eacute;gien de PGP</A><P>Ensuite, mettre dans votre r&eacute;pertoire maison, dans un sous
r&eacute;pertoire .pgp les fichiers :
<P>
<BLOCKQUOTE><CODE>
<PRE>
config.txt
language.idx
pgpdoc1.txt
pgpdoc2.txt
language.txt
fr.hlp
en.hlp
pgp.hlp
</PRE>
</CODE></BLOCKQUOTE>
<P>Enfin, &eacute;diter le fichier <CODE>.pgp/config.txt</CODE> pour y rajouter :
<P>
<BLOCKQUOTE><CODE>
<PRE>
Language = fr
CharSet = latin1
</PRE>
</CODE></BLOCKQUOTE>
<P>Lisez ensuite <CODE>.pgp/fr.hlp</CODE> pour apprendre &agrave; vous servir de pgp !
<P>
<H2><A NAME="ss6.25">6.25 Impression en mode ascii</A>
</H2>
<P>
<P>Pour l'impression de texte simple, beaucoup d'imprimantes attendent des lettres
en codage IBM (cp850) comme sous MS DOS.
<P>Si le fichier est cod&eacute; en latin1, on doit utiliser <20> recode latin1:ibmpc <20>
(&agrave; placer dans les filtres lpr de /etc/ par exemple), sous peine de voir
imprimer des <20> alpha<68><61> &agrave; la place de <20> &agrave; <20>, et autres choses du m&ecirc;me genre.
<P>Il existe d'autres utilisation au programme <CODE>recode</CODE> : <20> ibmpc:lat1 <20> ou
<EFBFBD> lat1:ibmpc <20> (de ou vers MS-DOS) ou <20> applemac <20> pour Macintosh (tm).
<P>
<H2><A NAME="ss6.26">6.26 Unicode/latin/cp... je n'ai pas compris ce dernier paragraphe !</A>
</H2>
<P>
<P>Voici donc plus d'explications gr&acirc;ce &agrave; Pablo Sartxaga (srtxg &agrave;
chanae.alphanet.ch) dans un message explicant la diff&eacute;rence Unicode/latin/cp :
<P>
<BLOCKQUOTE><CODE>
<PRE>
DB> quand on lance <20> setfont <20> sans argument
DB> il semble qu'on obtienne le m&ecirc;me effet que setfont -u none
Normal et logique.
DB> --> en un mot la table de conversion <20> Unicode <20> est d&eacute;sactiv&eacute;e
DB> ce qui transforme le <20> e accent aig&uuml; (dec 130) <20> en <20> th&eacute;ta (dec 233) <20>
Non. Il ne transforme rien du tout, il affiche tout simplement sans
*aucune* transformation au contraire, &agrave; toi de t'assurer que la police
que tu charges poss&egrave;des les glyphes &agrave; la bonne place par rapport au codage
de caract&egrave;res que tu utilises (iso-8859-1).
Autrement dit si ta police n'est pas iso-8859-1 tu dois dire &agrave; setfont de
faire des mappings; en particulier s ic'est une police qui utilise l'encodage
DOS cp437 tu fais <20> setfont -u cp437 nomdelapolice <20>. Moi par exemple j'aime
beaucoup la police <20> t.fnt <20> de la Slackware, et j'ai donc quelque part
dans /etc/rc.d/* une ligne <20> setfont -u cp437 t.fnt <20>
Ou alors tu modifies la police (il y a un logiciel qui fait cela avec
interface svgalib, et un autre nomm&eacute; <20> chedit <20> qui permet de cr&eacute;er des
images an ascii-art, un fichier par caract&egrave;re (256 fichiers donc), il te
suffit alors de jongler avec les fichiers pour les changer de place et
r&eacute;g&eacute;nerer la police). Note cependant que le codage cp437 n'inclut pas
tous les caract&egrave;res de iso-8859-1, notamment manquent quasi toutes les
majuscules accentu&eacute;es, et les lettres &atilde;&otilde; n&eacute;cessaires en portugais. Tu
peux toujours modifier la police pour cr&eacute;er ces caract&egrave;res manquants.
DB> sur ma Slackware 3.2, &agrave; aucun moment setfont n'appara&icirc;t dans les scripts
DB> de d&eacute;marrage ni dans les ~/profiles et autres ~/.bashrc
Donc c'est la police dans la ROM de la carte video qui est utilis&eacute;e.
DB> et pourtant cette
DB> conversion est effectu&eacute;e correctement puisque j'ai les accents &agrave; l'&eacute;cran.
Je suppose que le kernel pr&eacute;suppose (&agrave; juste titre) que la police en ROM vid&eacute;o
est au codage cp437.
DB> une fois que je lance <20> setfont -u none <20> je perds donc les accents.
Normal, car d&egrave;s lors que tu charges une police tu est suppos&eacute; savoir ce que
tu veux (au contraire de la police en ROM o&ugrave; tu n'as pas le choix).
Autrefois (du temps des 1.2.* et avant) le d&eacute;faut de setfont &eacute;tait cp437
(et il n'utilisait pas encore des tables Unicode, mais on pouvait
changer par \e(B et \e(K entre codage cp437 et iso (on peut toujours
d'ailleurs)), mais maintenant le d&eacute;faut est <20> straight to font <20>, pas de
conversion.
DB> j'en conclue que Linux utilise la police r&eacute;sidente par d&eacute;faut de
DB> la carte EGA/VGA
DB> [Q] --> comment retrouver cette police ?
Il y a un programme nomm&eacute; <20> restoretextmode <20> qui est assez populaire
aupr&egrave;s des possesseurs de certaines cartes graphiques chez qui le
passage X11 -> console bousille les polices; il permet de faire un dump
sur un fichier; il faudrait donc que tu le lances avant de modifier la
police avec setfont. Le paquetage s'appelle quelque chose comme
SVGATextMode ou quelque chose d'approchant.
DB> [Q] --> quelle table appeler pour la remapper et ravoir les accents ?
setfont -u cp437 policedos
Ou sinon, si tu ne veux pas lancer setfont et tu veux donc garder la
police de la carte graphique; essaye un <20> echo -e \033(B <20> (l'ennuyant
c'est que tu dois le faire dans chaque console)
DB> (en g&eacute;n&eacute;ral setfont -u def.uni (par exemple) renvoie une
DB> erreur : PIO_UNIMAPCLR: Invalid argument et je reste
DB> en caracteres <20> graphiques <20>)
Ah ? Chez moi &ccedil;a marche; quels kernel et kbd as-tu ?
Sinon je te conseille <20> cp437 <20> plut&ocirc;t que <20> def <20>, ils font _presque_ la m&ecirc;me
chose, mais <20> cp437 <20> est visuellement plus agr&eacute;able car il remplace les
caract&egrave;res non pr&eacute;sents dans la police par les lettres non accentu&eacute;es si c'est
des lettres, C pour <20> et R pour <20> et par un carr&eacute; blanc pour le reste, ce qui
permet de garder le formatage et la lecture agr&eacute;ables; <20> def <20> lui ne mets
totu simplement rien pour les caract&egrave;res manquants, si bien que tu te
trouves avec des trous, ce qui est l'horreur si tu &eacute;dites un texte par
exemple avec vi, puisque le curseur est affich&eacute; plusieurs caract&egrave;res
&agrave; gauche &agrave; cause des caract&egrave;res de largeur nulle :)
Essaye aussi la police <20> t.fnt <20>, elle est assez jolie, toute en rondeurs, je la
trouve r&eacute;posante, et quand je dois utiliser un PC avec les polices style
courier par d&eacute;faut je trouve &ccedil;a tr&egrave;s agressif je me demande comment ils
peuvent travailler avec :)
</PRE>
</CODE></BLOCKQUOTE>
<P>Lire aussi les articles de news : <20> FAQ - les accents fran&ccedil;ais et Usenet<65> de F.
Yergeau dans les groupes fr.usenet.reponses et fr.usenet.8bits <20> ISO
8859-1 National Character Set FAQ<41> de mike (&agrave;) vlsivie.tuwien.ac.at dans
comp.answers .
<P>
<H2><A NAME="ss6.27">6.27 ncurses</A>
</H2>
<P>
<P>Rappelons que ncurses est un librairie C qui permet de manipuler facilement
l'affichage en mode console texte : fen&ecirc;trage, lignes de saisie, &eacute;dition de
formulaires, couleurs, caract&egrave;res <20> ALT <20> ascii semi-graphique ibm, comme sous
dos...
<P>
<H3>Introduction</H3>
<P>
<P>La version standard de curses utilise le huiti&egrave;me bit pour la vid&eacute;o
invers&eacute;e (voir le flag _STANDOUT d&eacute;fini dans /usr/include/curses.h).
Cependant, ncurses semble fonctionner en 8-bits et affiche le
iso-latin-8859-1 correctement.
<P>
<H3>Les accents</H3>
<P>
<P>Remarque: les distributions de Linux sont livr&eacute;es en g&eacute;n&eacute;ral avec la
version 1.9.9e de ncurses, or il se trouve que la librairie form de
cette version est BUGG&Eacute;E (probl&egrave;mes de rafra&icirc;chissement des fen&ecirc;tres).
<P>Ne pas utiliser la 1.9.9e donc si on veut travailler avec <20> form <20> : ce bug est
d'ailleurs clairement &eacute;nonc&eacute; sur le site de ncurses, et je m'&eacute;tonne que
ce soit justement cette version qui soit encore livr&eacute;e sur la plupart
des distributions (RedHat 4.2, 5.0, 5.1, Slackware 3.2, Debian 1.9) en
tout cas.
<P>Sympt&ocirc;me : la fonction wgetch() de ncurses renvoie les codes suivants :
<P>
<UL>
<LI> je tape '&eacute;' et wgetch retourne <20> meta-i <20> code 233 (decimal)</LI>
<LI> " " '&egrave;' " " " <20> meta-h <20> code 234 (decimal)</LI>
<LI> etc</LI>
</UL>
<P>C'est normal avec les polices iso-8859-1 !
<P>Il faut installer les <20> locales <20> ou mettre &agrave; jour sa version de
ncurses.
<P>
<H2><A NAME="ss6.28">6.28 Perl</A>
</H2>
<P>
<P>Si tout d'un coup apr&egrave;s une mise &agrave; jour il raconte :
<P>
<BLOCKQUOTE><CODE>
<PRE>
(guylhem@victis:guylhem)$ perl
perl: warning: Setting locale failed for the categories:
LC_CTYPE LC_COLLATE
perl: warning: Please check that your locale settings:
LC_ALL = "fr_FR",
LC_CTYPE = "ISO-8859-1",
LC_COLLATE = (unset),
LANG = "fr"
are supported and installed on your system.
perl: warning: Falling back to the "C" locale.
(guylhem@victis:guylhem)$
</PRE>
</CODE></BLOCKQUOTE>
<P>En libc6 le format des fichiers binaires de d&eacute;finition des locales a
(encore) chang&eacute; : il faut les r&eacute;g&eacute;n&eacute;rer &agrave; partir des sources
<A HREF="ftp://ftp.lip6.fr:/pub/linux/GCC">sources WG15collection.tar.gz</A> par exemple et des programmes <20>
locale <20> et <20> localedef <20> qui sont fournis dans les sources de la libc.
<P>Sinon on peut &eacute;galement se passer des locales :
<P>
<BLOCKQUOTE><CODE>
<PRE>
unset LANG
unset LC_CTYPE
unset LC_COLLATE
export LC_ALL=fr_FR.ISO-8859-1
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.29">6.29 Installer les locales</A>
</H2>
<P>
<P>Les <20> locales <20> sont des fichiers qui vont modifier le comportement de
certains programmes pour qu'ils s'adaptent aux <20> sp&eacute;cificit&eacute;s culturelles du
pays <20>.
<P>Cela sert &agrave; r&eacute;soudre les erreurs rapport&eacute;es par perl ou une mauvaise
gestion des accents par ncurses.
<P>
<UL>
<LI> r&eacute;cup&eacute;rer pour la libc5 la collection de
<A HREF="ftp://ftp.lip6.fr/pub/linux/GCC/WG15-collection.linux.tar.gz">locales POSIX</A></LI>
<LI> ou pour la libc6, elle est dans l'ajout
<A HREF="ftp://ftp.lip6.fr/pub/gnu/glibc-localedata-2.0.6.tar.gz"><EFBFBD> glibc-localedata <20></A></LI>
<LI> copier dans le r&eacute;pertoire /usr/share/locale les fichiers fr_FR et en_DK
(qui est inclus dans fr_FR)</LI>
<LI> cr&eacute;er le r&eacute;pertoire /usr/share/i18n/charmap et copier le fichier
ISO_8859-1:1987</LI>
<LI> faire man localedef et lancer la commande :
<BLOCKQUOTE><CODE>
<PRE>
localedef -f ISO_8859-1:1987 -i fr_FR fr
</PRE>
</CODE></BLOCKQUOTE>
Ceci cr&eacute;era l'entr&eacute;e fr dans /usr/share/locale soit :
<BLOCKQUOTE><CODE>
<PRE>
/usr/share/locale/fr
</PRE>
</CODE></BLOCKQUOTE>
Ce r&eacute;pertoire devrait maintenant contenir les fichiers :
<BLOCKQUOTE><CODE>
<PRE>
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LC_MONETARY
LC_NUMERIC
LC_TIME
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> lire le fichier <20> locale.fr <20> que l'on peut trouver sur le serveur
ftp.lip6.fr (chercher sous doc, linux...) et dont la traduction fran&ccedil;aise a &eacute;t&eacute;
faite par &Eacute;ric DUMAS (h&eacute;las ce doc ne traite principalement que de
LC_MESSAGES. &Agrave; quand la suite &Eacute;ric ? ;-) )
</LI>
<LI> compl&eacute;ter &eacute;ventuellement l'initialisation des variables du shell comme
d&eacute;crit dans la section sur bash ou tcsh</LI>
<LI> dans un programme, utilisez la fonction setlocale() (man setlocale.3)
pour fixer les param&egrave;tres locaux CAR le noyau linux initialise toujours cette
fonction avec l'argument une locale <20> C <20> (POSIX) donc sans accents !
<BLOCKQUOTE><CODE>
<PRE>
setlocale(LC_CTYPE,"fr_FR");
</PRE>
</CODE></BLOCKQUOTE>
</LI>
<LI> &Ccedil;a y est ! Les accents sont disponibles dans ncurses.</LI>
</UL>
<P>
<H3>Midnight Commander (mc)</H3>
<P>
<P>En changeant de police, il peut arriver que les lignes de cadre soient
remplac&eacute;es par divers caract&egrave;res.
<P>2 possibilit&eacute;es :
<UL>
<LI> La police charg&eacute;e ne dispose pas de caract&egrave;res dits <20> semi
graphiques <20>, qui permettent de dessiner des cadres</LI>
<LI> Il y a discordance entre la police et sa table de mappage</LI>
</UL>
<P>Pour le premier cas, la seule solution est de changer de police, mais
dans le second cas, il suffit en g&eacute;n&eacute;ral de charger la table avec
loadunimap par exemple :
<P>
<BLOCKQUOTE><CODE>
<PRE>
loadunimap lat1u.uni
loadunimap lat5u.uni
loadunimap lat9u.uni
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.30">6.30 Kernel</A>
</H2>
<P>
<P>Pour mettre un support pour le clavier fran&ccedil;ais directement dans le
kernel, ce qui est pratique pour les syst&egrave;mes embarqu&eacute;s ou ne d&eacute;marrant que sur
disquettes, afin de gagner le maximum de place :
<P>
<BLOCKQUOTE><CODE>
<PRE>
/usr/bin/loadkeys loadkeys --mktable votre-table-de-clavier.map > /usr/src/linux/drivers/char/defkeymap.c
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss6.31">6.31 Lilo</A>
</H2>
<P>
<P>Depuis la version 20, on peut sp&eacute;cifier un clavier (fran&ccedil;ais, par
exemple) au d&eacute;marrage de LILO.
<P>Bien sur, cela ne fait qu'&eacute;changer quelques touches (a/q,m/:,... pour un
clavier fr) mais cela est assez utile lorsque l'on veut taper <20> win <20>.
<P>Je vous conseille toutefois de ne pas faire de label utilisant des
touches qui diff&egrave;rent entre l'AZERTY et le QWERTY, ne serait-ce que si
vous devez avoir un jour un autre utilisateur sur votre ordinateur...
<P>Il est plus simple de faire des labels courts et d'utiliser des
programmes comme GAG ou GRUB, rempla&ccedil;ant fort avantageusement les lignes
de lilo par un magnifique menu graphique dans le cas de GAG.
<P>
<H2><A NAME="ss6.32">6.32 Groff (man)</A>
</H2>
<P>
<P>Sur certaines distributions, le programme man n'est pas configur&eacute; pour
afficher les accents.
<P>Si vous rencontrez ce probl&egrave;me, &eacute;ditez son fichier de configuration
(/etc/man.config sur les distributions actuelles) et localisez une ligne
ressemblant &agrave; cela :
<P>
<BLOCKQUOTE><CODE>
<PRE>
NROFF /usr/bin/groff -Tascii -mandoc
</PRE>
</CODE></BLOCKQUOTE>
<P>Remplacez-l&agrave; par :
<P>
<BLOCKQUOTE><CODE>
<PRE>
NROFF /usr/bin/groff -Tlatin1 -mandoc
</PRE>
</CODE></BLOCKQUOTE>
<P>Les vieilles versions de man utilisent aussi col, et le point suivant
s'applique aussi.
<P>
<H2><A NAME="ss6.33">6.33 Divers</A>
</H2>
<P>
<P>Une belle discussion sur le th&egrave;me de l'ISO-8859-1 et sur <20> comment
manipuler les caract&egrave;res 8-bits <20> est
<A HREF="ftp://grasp.insa-lyon.fr/pub/faq/fr/accents">disponible</A><P>
<HR>
<A HREF="Francophones-HOWTO-7.html">Next</A>
<A HREF="Francophones-HOWTO-5.html">Previous</A>
<A HREF="Francophones-HOWTO.html#toc6">Contents</A>
</BODY>
</HTML>