Ce document décrit les manières de procéder sous linux pour voir et saisir des accents français. 1 - Introduction ================ 2 - Un terminal =============== Les terminaux, qu'il s'agisse de la console, de VT100, de xterm et autres sessions telnet peuvent être paramétrés pour laisser ou non les caractères sous 8 bits s'afficher. La commande de parametrage du terminal s'appelle stty(1) Pour afficher correctement les accents, les options cs8 (caractères sur 8 bits), -istrip (le 8ième bit n'est pas mis à 0 en entrée) et -parenb (pas de parité) suffisent dans la plupart des cas. Ils sont résumés par la commande : $ stty pass8 Sur une ligne série, modifier ses paramêtres dynamiquement peut poser des problèmes. 3 - La console ============== Sur Linux, les accents de la console sont géré au niveau du noyau. Les utilitaires de paramétrage de la console se trouvent dans le package kbd-*.tar.gz est disponible sur ftp.funet.fi dans /pub/Linux/kernel/src. Les commandes devraient cependant se trouver sur toutes les distributions. 3.1 - Le Clavier ================ Par défaut, la console est paramétrée pour saisir des caractères à partir d'un clavier américain (QWERTY.) Pour que votre clavier national soit pris en compte, vous devez lancez la commande suivante, normalement au boot. loadkeys fr-latin1 Clavier Français loadkeys be2-latin1 Clavier Belge loadkeys cf Clavier Canadien français (quelqu'un connait il la map pour le clavier suisse ?) Si vous disposez d'un clavier non-francophone, vous pouvez utiliser la touche "Compose" pour la saisie des caractères accentués. Cette touche "Compose" se trouve traditionellement sur « Control-. » (control-point.) Elle n'est pas redéfine dans les maps, aussi pour un clavier français, elle correspond à la saisie de « Control-: » (control-deux points.) Exemple: pour obtenir un « e accent aigu, » saisissez « Compose ' e » 3.2 - L'écran ============= La police par défaut est « à peu près » ISO-8859-1 et donc s'adapte à l'affichage du français. Lorque l'on change de fonte, il faut préciser la « map » des caractères graphique. Voici une liste des fonte et de map du package « kdb » map iso01 iso01.f08 iso01.f14 iso01.f16 iso01a-8x14 iso01a-8x16 iso01a-8x8 map lat1 lat1-08 lat1-10 lat1-12 lat1-14 lat1-16 map lat1u lat1u-08 lat1u-10 lat1u-12 lat1u-14 lat1u-16 (ces dernières fontes contiennent leur map et il n'est pas nessessaire de la préciser.) map cp437 les fontes venant de MS-DOS pour en utiliser une, lancez le programme setfont setfont -u Pour vérifier la map, lancez $ echo ^Nq^O vous deviez voir une barre horizontale. (^N s'obtient en avec la combinaison de touches « Control-V Control-N », de même pour obtenir ^O) Pour vérifiez les caractères $ printf %b '\0351' doit montrer un « e accent aigu » 4 - Les librairies ================== 4.1 libc et locale ================== La librairie locale(7) utilisée par la librairie C se sert de variables d'environnement pour définir les préférences linguistiques et nationales LC_COLLATE équivalence de caractères pour les comparaisons. (ex: æ peut être équivalent à ae) LC_CTYPE caractères affichables LC_MONETARY monnaie utilisée LC_MESSAGES langue des messages LC_TIME format de la date LC_ALL valeur par défaut des variables précedentes LANG surpasse les variables précédentes. Les valeurs utilisables pour le français sont fr français générique fr_FR, fr_BE, fr_CH, fr_LU, fr_CA français de France, de Belgique, de Suisse, du Luxembourg ou du Canada Par exemple, si la monnaie vous importe peu, vous pouvez indiquer export LANG=fr # shell bourne setenv LANG fr # style csh Les données correspondantes aux préférences se trouvent généralement dans /usr/share/locale. S'ils manquent, vous pouvez récuperer leur source sur ftp://dkuug.dk/i18n/WG15-collection 4.2 readline ============ Readline est une librairie de saisie de caractères avec historique et completion. Elle est utilisée par de nombreux programmes (bash, ncftp, gnuplot..) Par défaut, le 8ième bit sert à coder la touche Meta. Elle est utilisée pour coder certaines commandes mais la touche Escape (ou Echap) peut la remplacer. Si vous souhaitez voir et saisir des accents avec les applications compliées avec readline, ajoutez ceci dans votre fichier $INPUTRC (par défaut .inputrc) : set meta-flag on set output-meta on set convert-meta off 4.3 Xlib et Xt ============== Depuis X11R6, la saisie des caractères internationaux est à la charge des clients via la librairie. L'utilisateur n'a qu'à choisir sa langue de la même façon qu'avec la librairie locale (avec les variables LC_CTYPE ou LANG) et definir la ressource booléenne 'international'. Par exemple, si vous mettez *international: true dans le fichier .Xdefault, toutes les applications internationalisées devraient fonctionner (la valeur par défaut est «false») On peut parfois obtenir des résultats curieux lorsque l'un des points précedent (ressouces, environement, application internationalisée) n'est pas rempli alors que les autres le sont. Si c'est le cas, utilisez des ressources par application, comme : XTerm*international: true Fig*international: false Quant à l'affichage, il suffit d'avoir une police ISO-8859-1. Vous pouvez choisir vos polices avec setfont(1) et vérifier une police particulière à l'aide de xfd(1). Par exemple, pour vérifier la fonte par défaut (fixed), lancez $ xfd -fn fixed 5 - Applications ================ 5.1 - Emacs =========== GNU Emacs (version 19.34) gère completement les caractères sur 8bits (saisie, affichage, touches mortes natives.) Pour valider cette gestion ajoutez dans votre fichier .emacs : ; affichage direct des caractères sur 8 bits (standard-display-european t) ; les caractères iso-latin1 qui sont des lettres, des majuscules... (require 'iso-syntax ) ; utilise C-x 8 comme une touche « Compose » (require 'iso-insert) ; (ou iso-transl) Si vous voulez que les caractères ^ " ' ` et / agissent comme des touches mortes, lancez la commande M-x iso-accent-mode et relancez la commande pour le désactiver. 5.2 - Ispell ============ Il y a un dictionnaire français pour ispell (disponible sur ftp.ireq-robot.hydro.qc.ca:/pub/ispell ou ftp.ibp.fr:/pub/ispell/francais) Pour l'installation, déposez le fichiers francais.aff et français.hash dans le répertoire des dictionnaires d'ispell (/usr/{lib,share}/ispell) et lancez simplement "ispell -d français". Si vous voulez vous en servir comme dictionnaire par défaut, vous devrez recompiler ispell et mettre vos préférences dans local.h (ispell 3.1.20) : #ifdef NO8BIT #undef NO8BIT #endif #define LANGUAGES "{american,MASTERDICTS=american.med,HASHFILES=americanmed.hash }{british,MASTERDICTS=british.med,HASHFILES=britishmed.hash}{francais}" #define MASTERHASH "francais.hash" #define DEFHASH "francais.hash" #define DEFLANG "francais.aff" 5.3 - ispell-mode (emacs) ========================= Le mode ispell d'emacs a un certain nombre de dictionaires prédéfinis qui ne sont pas forcement ceux qui sont en place sur le système. Si vous constatez des problèmes, vous devez redéfinir la liste ispell-dictionary-alist des dictionnaires. Cette liste contient - le nom du dictionnaire - la liste des caractères composant un mot - la lise opposée des caractères ne composant pas un mot - les caractères de liaison à l'interieur des mots ("-", "'"...) - vrai ou faux si ces caractères peuevtn être présents en plusieurs exemplaire dans le mot - une liste d'arguments pour ispell - le mode d'ispell (tex, nroff..) Par exemple, dans le fichier .emacs (setq ispell-dictionary-alist '((nil ; francais.aff "[A-Za-zÀÂÇ-ËÎÏÔÙÛÜàâç-ëîïôùûü]" "[^A-Za-zÀÂÇ-ËÎÏÔÙÛÜàâç-ëîïôùûü]" "[---']" 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" ; francais.aff "[A-Za-zÀÂÇ-ËÎÏÔÙÛÜàâç-ëîïôùûü]" "[^A-Za-zÀÂÇ-ËÎÏÔÙÛÜàâç-ëîïôùûü]" "[---']" nil ("-n") "~nroff") ("francais-TeX" ; francais.aff "[A-Za-zÀÂÇ-ËÎÏÔÙÛÜàâç-ëîïôùûü\\]" "[^A-Za-zÀÂÇ-ËÎÏÔÙÛÜàâç-ëîïôùûü\\]" "[---'^`\"]" t nil "~tex") ("espanol" ; espa~nol.aff "[A-Za-záéíóúüñÁÉÍÓÚÜÑ]" "[^A-Za-záéíóúüñÁÉÍÓÚÜÑ]" "[---'^`\"]" t nil "~nroff") )) Le dictionnaire "francais-TeX" est un lien symbolique sur "francais" qui permet d'ajouter une entrée pour les accents à la TeX (ex: \'e). Si vous utilisez X11, vous voudrez peut-être reconstruire les menus et il vous faudra recharger une partie de lisp/loaddefs.el dans votre .emacs : (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))