ncurses est un librairie C qui permet de manipuler facilement l'affichage en mode console (texte)
--> fenêtrage, lignes de saisie, édition de formulaires, couleurs,
caractères 'ALT' (ASCII semi-graphique ibm, comme sous MS-DOS)
etc..
[Note: GRL == Guide du Rootard
LinuX ]
[ PS>
== Pablo Saratxaga :-) ]
les distrib LinuX sont livrées en général avec la version 1.9.9e de ncurses. OR, il se trouve que la bibliothèque form de cette version est BUGGEE (problèmes de rafraîchissement des fenêtres). Ne pas utiliser la 1.9.9e donc si on veut travailler avec 'form' (ce bug est n'est d'ailleurs clairement énoncé sur le site de ncurses, et je m'étonne que certaines distribs la livrent encore.
- la fonction wgetch() de ncurses renvoie les codes suivants :
je tape 'é' et wgetch retourne "meta-i"
code 233 (decimal)
je tape 'è' et wgetch retourne "meta-h" code 234 (decimal)
...
--> rassurez vous, c'est normal avec les polices iso-8859-1
- quand je force depuis ncurses cs8 (stty cs8) je ne peux pas
saisir les accents non plus... (man stty)
- le clavier français est installé (loadkeys french.map)
- /etc/.inputrc est renseigné avec (sous bash) (cf: GRL)
set meta-flag on
set convert-meta off
set input-meta on
set output-meta on
- stty est correctement paramétré (cf: french-HOWTO)
==> il faut installer les "locale"
(ben oui, allez savoir pourquoi, sur ma slackware
3.2
elles ne sont pas installées. je ne sais
pas si c'est
moi qui ai mal installé un truc ou... ?)
note: les 'locales' sont des fichiers qui vont modifier le comportement de certains programmes pour qu'ils s'adaptent aux "spécificités culturelles du pays" ex: affichage de la date, affichage des symboles monétaires, comportement de certaines fonction (isprint(), toupper(), etc...)
Pablo Saratxaga <srtxg@chanae.alphanet.ch> précise : ----------------------------------------------------
PS> «Ces fonctions permettent,
pour un caractère donné,
PS> de dire si c'est une lettre, un chiffre, un blanc
PS> (espace, etc), un signe de ponctuation, une
PS> majuscule ou une minuscule,...
PS> par exemple avec la locale "es" les
PS> caractères ¿ et ¡ sont des signes de ponctuation
:) »
Pour la libc5 : la collection de locales POSIX :
<URL:ftp://ftp.lip6.fr/pub/linux/GCC/WG15-collection.linux.tar.gz>
Pour la libc6 : elle est dans l'add-on « localedata » :
<URL:ftp://ftp.lip6.fr/pub/gnu/glibc-localedata-2.0.6.tar.gz>
2) copier dans le répertoire /usr/share/locale
les fichiers fr_FR et en_DK (qui est inclus dans fr_FR)
PS> NOTE: pour glibc c'est dans /usr/share/i18n/locales
3) créer le répertoire /usr/share/i18n/charmap
et copier le fichier ISO_8859-1:1987
PS> NOTE: et dans glibc le nom est ISO-8859-1
4) faire man localedef :-) et lancer la commande
localedef -f ISO_8859-1:1987 -i fr_FR fr
PS> NOTE: donc localedef -f ISO-8859-1 -i fr_FR fr avec la glibc
ceci créera l'entrée fr dans /usr/share/locale soit :
/usr/share/locale/fr
ce répertoire devrait maintenant contenir
les fichiers :
LC_COLLATE
LC_CTYPE
LC_MESSAGES
LC_MONETARY
LC_NUMERIC
LC_TIME
ATTENTION: Pablo Saratxaga précise :
[ Et je vous conseille de faire comme Pablo
le suggère,
pour l'avoir testé chez moi. ]
PS> « LC_MESSAGES
??
PS>
PS> Celui-là devrait être un répértoire !
PS> localedef de glibc le fait bien; mais pour libc5 on peut
PS> le forcer en créant d'abord le répértoire:
PS>
PS> mkdir -p /usr/share/locale/fr/LC_MESSAGES
PS> localedef -f ISO_8859-1:1987 -i fr_FR fr
PS>
PS> et il mettra le fichier sous le nom
PS> /usr/share/locale/fr/LC_MESSAGES/SYS_LC_MESSAGES
PS>
PS> (il faut que /usr/share/locale/*/LC_MESSAGES soit un
PS> repertoire car c'est là que les programmes vont chercher
PS> les versions lcoalisées de leurs messages:
PS>
PS> Par exemple sur mon système la commande
PS>
PS> ls /usr/share/locale/fr/LC_MESSAGES/SYS_LC_MESSAGES
PS>
PS> donne:
PS>
PS> gettext.mo libc.mo sharutils.mo
textutils.mo
PS> fileutils.mo grep.mo rpm.mo
tar.mo
PS> freetype.mo ifmail.mo sh-utils.mo
doc: lire le fichier "locale.fr" qu'on peut trouver sur le serveur ftp 'lip6' (chercher sous doc, linux...) et dont la traduction française a été faite par Eric DUMAS <dumas@Linux.EU.Org> (hélas ce doc ne traite principalement que de 'LC_MESSAGES' à quand la suite Eric ? ;-) ). Ce document se trouve aussi dans la doc de certaines distributions. (Red Hat, Khéops, par exemple)
lire aussi le french-HOWTO, mais ce paragraphe y est (IMHO) un peu confus...
5) compléter éventuellement l'intitialisation
des variables
du shell comme décrit dans le french-HOWTO
(LANG etc...)
6) dans un programme, utilisez la fonction setlocale()
(man setlocale.3) pour fixer les paramètres
locaux
CAR le noyau LinuX initialise toujours cette fonction
avec une locale "C" (== "POSIX")
donc pas d'accents ! cqfd.
ex: setlocale(LC_CTYPE,"fr_FR");
et Hop !! j'ai mes accents dans ncurses, le plus simplement du monde (sans hack !) ... (mais il fallait y penser :) !)
Pablo Saratxaga <srtxg@chanae.alphanet.ch> précise :
PS> C'est mieux de
faire setlocale(LC_CTYPE,"");
PS> et de laisser l'utilisateur decider ce qu'il
PS> considère comme affichable.
7) Voilà. je pense que maintenant c'est assez clair.
si quelqu'un a des trucs à rajouter, qu'il n'hésite
pas !
8) j'espère que ce court texte sera utile à d'autres LinuxMen...
Remerciements [oui je sais c'est long... mais que voulez vous, LinuX ça a beau être magique, ça ne s'invente pas «tout seul» ! ;-))) ]
Laurent Wacrenier <lwa@easynet.fr>
Joel Kociolek <joko@ola.fr.eu.org>
Bruno PIGUET <Bruno.PIGUET@meteo.fr>
pour leur intervention sur fcolm
Thomas Quinot <thomas@Cuivre.FR.EU.ORG>
pour sa réponse sur fr.comp.os.unix
"Sebastien.Blondeel" <Sebastien.Blondeel@lifl.fr>
Jerome ALET <alet@unice.fr>
Frederic Bastok <fred_bastok@bugss.org>
Guylhem Aznar <guylhem@danmark.linux.eu.org>
pour leurs mails
Eric Jacoboni <jaco@mail.dotcom.fr> et ses potes
pour avoir laissé passer cet article sur fcolm ;-)))
Nat Makarevitch <nat@nataa.fr.eu.org>
pour sa relecture et ses conseils...
et bien entendu Pablo Saratxaga <pablo.sarachaga@ping.be>
qui m'a carrément guidé pas à pas.
AmicaLinuXement,
Denis.
.---------------------. «
Soyez ZEN, sachez vous passer de
( POWERED BY GNU/LINUX ) l'essentiel
»
`---------------------' <www.chez.com/denis>