Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Emacs, charset (utf-8...) et locales

9 réponses
Avatar
Vincent Lefevre
Bonjour,

Suite à la discussion qu'on a eue il y a un mois pour la configuration
d'Emacs en UTF-8, je crois que j'ai mieux... Je l'ai testé chez moi,
mais il faudrait voir si ça fonctionne aussi ailleurs.

Le but ici est de dire d'Emacs de s'adapter aux locales. C'est donc
censé marcher partout. Voilà ce qu'il faut mettre dans son .emacs:

(set-locale-environment nil)

Le nil indique que l'environnement est spécifié par les locales.

Mais il y a une chose que ça ne fait pas: modifier les I/O quand
Emacs tourne dans un terminal texte (e.g. xterm). Pour cela:

(when (not window-system)
(set-keyboard-coding-system locale-coding-system)
(set-terminal-coding-system locale-coding-system)
)

Maintenant, pour ceux qui veulent aller plus loin en travaillant
avec des codages mixtes:

Pour reconnaître automatiquement le jeu de caractères d'un fichier
(dans les limites du possible, évidemment):

(and (boundp 'coding-category-utf-8)
(set-coding-priority
'( coding-category-utf-8
coding-category-iso-8-1
coding-category-iso-8-2
coding-category-raw-text )))

C'est ce que m'avait donné Laurent Wacrenier en décembre 2002
dans le groupe fr.comp.applications.emacs; cf

http://groups.google.fr/groups?selm=slrnb0lr5o.15ge.lwa%40victor.teaser.fr

Il y a "prefer-coding-system" pour dire à Emacs quel codage il doit
utiliser pour le fichier lorsque le codage par défaut ne suffit pas.
Par exemple, si vous avez (prefer-coding-system 'latin-1) dans votre
.emacs, lorsque vous éditez un texte ASCII et que vous ajoutez un
caractère accentué, le fichier va être sauvé en iso-8859-1, quelles
que soient vos locales. Ça peut toujours être utile, éventuellement
dans des cas particuliers (e.g. fichier HTML pour serveur web ne
déclarant que de l'iso-8859-1).

Et pour changer le codage du fichier à la volée:

(defun sbfcs-latin1 ()
"Set file coding system to latin-1"
(interactive)
(set-buffer-file-coding-system 'latin-1)
)

(defun sbfcs-utf8 ()
"Set file coding system to utf-8"
(interactive)
(set-buffer-file-coding-system 'utf-8)
)

(define-key global-map "\C-x\C-m1" 'sbfcs-latin1)
(define-key global-map "\C-x\C-mu" 'sbfcs-utf8)

--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

9 réponses

Avatar
Frédéric BOITEUX
Le Wed, 29 Sep 2004 17:58:22 +0200, Vincent Lefevre a
écrit :

Bonjour,

Suite à la discussion qu'on a eue il y a un mois pour la configuration
d'Emacs en UTF-8, je crois que j'ai mieux... Je l'ai testé chez moi,
mais il faudrait voir si ça fonctionne aussi ailleurs.

Le but ici est de dire d'Emacs de s'adapter aux locales. C'est donc
censé marcher partout. Voilà ce qu'il faut mettre dans son .emacs:




Salut,

Je viens de tester chez moi, cela semble ok (locale latin-9 correctement
détectée,
chargement de fichier UTF-8 qui sont bien reconnus, super !)

J'ai également encore des lignes de config pour la gestion de la séle ction
:

;; Vous avez peut-etre not qu'Emacs avait des problemes pour unifier les
;; charsets latin-1 (sans l'euro) et latin-9 (avec euro) :
;; il ne sait pas que le `' d'un mail encod en latin-9 est le mme que le `'
;; d'un mail en latin-1, et il perds les pdales si on fait du copier-coller
;; et qu'on obtient un document mixte latin-1/latin-9. La solution ?
;; Utiliser ucs-tables.el avec ceci dans votre .emacs.el :
;;----------------------------------------------------------------------
(require 'ucs-tables)
(unify-8859-on-encoding-mode 1)
(unify-8859-on-decoding-mode 1)


Est-ce encore utile ?

Encore merci pour la config, le passage d'un codage à l'autre était as sez
pénible.

Fred.
Avatar
Vincent Lefevre
On 2004-09-30 10:30:31 +0200, Frédéric BOITEUX wrote:
Je viens de tester chez moi, cela semble ok (locale latin-9
correctement détectée, chargement de fichier UTF-8 qui sont bien
reconnus, super !)



Bon, en fait, il y avait une erreur: le (set-locale-environment nil)
est inutile (je ne sais pas ce qui s'était passé avec mes tests).
En tout cas, il ne faut pas le mettre dans un find-file-hook, sinon
ça ne fonctionne plus (là, je suppose que c'est un bug).

En revanche, un (prefer-coding-system locale-coding-system) conditionnel
dans un find-file-hook peut être utile si par défaut, on a un autre
encodage préféré (par exemple, chez moi, c'est du latin-1, mais pour
Mutt, il faut l'encodage spécifié par les locales). Cf

http://www.vinc17.org/mutt/index.fr.html#emacs

Donc par défaut, pour ceux qui n'utilisent *que* de l'UTF-8 (locales
et fichiers), il n'y a rien à faire si Emacs est lancé dans sa propre
fenêtre. La modification du .emacs n'est nécessaire que dans les cas
suivants:
_ Emacs lancé dans un terminal texte.
_ Utilisation d'encodages de fichiers qui ne correspondent pas
aux locales.

J'ai également encore des lignes de config pour la gestion de la
sélection :

;; Vous avez peut-etre not qu'Emacs avait des problemes pour unifier les
;; charsets latin-1 (sans l'euro) et latin-9 (avec euro) :


[...]

Je n'ai jamais essayé ce genre de choses.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Xavier Maillard
On 29 sep 2004, Vincent Lefevre wrote:

Bonjour,



Plop


[ ... ]

Tu veux pas poster un article dans emacsfr.org par hasard ? :/

--
Xavier Maillard| "Stand Back! I'm a programmer!"
.0. |
..0 (+33) 326 770 221 | Webmaster, emacsfr.org
000 PGP : 0x1E028EA5 | Membre de l' APRIL


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Xavier Maillard
On 30 sep 2004, Frédéric BOITEUX wrote:

(require 'ucs-tables)
(unify-8859-on-encoding-mode 1)
(unify-8859-on-decoding-mode 1)

Est-ce encore utile ?



Non. Enfin si tu tournes en CVS ou au moins Emacs21, il n'y a pas
besoin de ça.


--
Xavier Maillard

main(){printf(&unix["21%six12"],(unix)["have"]+"fun"-0x60);}



--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Lefevre
On 2004-10-01 00:27:02 +0200, Xavier Maillard wrote:
Tu veux pas poster un article dans emacsfr.org par hasard ? :/



Je suis toujours en train de chercher des informations, en particulier
comment forcer l'ouverture d'un fichier dans un encodage fixé, même
s'il contient des séquences incorrectes et comment enlever toutes ces
séquences incorrectes. C'est utile pour Mutt, lorsque l'on répond à un
message qui contient des trucs invalides. Pour le moment, j'utilise un
wrapper qui exécute ceci:

recode -f "..ucs,ucs.." "$1"

Mais c'est mieux si Emacs le fait, d'autant plus que recode n'est pas
installé partout.

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Frédéric BOITEUX
Le Mon, 4 Oct 2004 21:17:18 +0200, Vincent Lefevre a
écrit :

On 2004-10-01 00:27:02 +0200, Xavier Maillard wrote:
> Tu veux pas poster un article dans emacsfr.org par hasard ? :/

Je suis toujours en train de chercher des informations, en particulier
comment forcer l'ouverture d'un fichier dans un encodage fixé, même
s'il contient des séquences incorrectes et comment enlever toutes ces
séquences incorrectes. C'est utile pour Mutt, lorsque l'on répond à un
message qui contient des trucs invalides. Pour le moment, j'utilise un
wrapper qui exécute ceci:

recode -f "..ucs,ucs.." "$1"




Salut,

Pour lire un fichier dans un encodage particulier, j'utilise la séquence
(attention
les yeux) :
C-x <RET> c [donner ensuite l'encodage désiré, <tab> pour voir la liste des
choix possibles] C-x C-f [fichier à lire]

mais bon pour la correction, là, je ne sais pas ...

Fred.
Avatar
Vincent Lefevre
On 2004-10-05 14:49:05 +0200, Frédéric BOITEUX wrote:
Pour lire un fichier dans un encodage particulier, j'utilise la
séquence
(attention
les yeux) :
C-x <RET> c [donner ensuite l'encodage désiré, <tab> pour voir la
liste des choix possibles] C-x C-f [fichier à lire]



Je connais, mais comment le faire *automatiquement* (i.e. spécifier
l'encodage en question dans son .emacs, et plus précisément dans un
find-file hook)?

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Frédéric Bothamy
* Vincent Lefevre [2004-10-07 12:16] :
On 2004-10-05 14:49:05 +0200, Frédéric BOITEUX wrote:
> Pour lire un fichier dans un encodage particulier, j'utilise la
> séquence
> (attention
> les yeux) :
> C-x <RET> c [donner ensuite l'encodage désiré, <tab> pour voir la
> liste des choix possibles] C-x C-f [fichier à lire]

Je connais, mais comment le faire *automatiquement* (i.e. spécifier
l'encodage en question dans son .emacs, et plus précisément dans un
find-file hook)?



Si tu trouves, tu pourras donner la solution ici, cela m'intéresse
fortement. Tout ce que j'ai trouvé actuellement, c'est d'utiliser M-x
prefer-coding-system pour modifier le codage par défaut des fichiers
(entre latin9 et utf-8), sinon certains fichiers utf-8 ne sont pas
reconnus correctement comme des fichiers utf-8 (et aussi
toggle-enable-multibyte-characters pour faire comprendre à Emacs qu'un
tampon utilise des caractères multibyte).


Fred

--
Comment poser les questions de manière intelligente ?
http://www.gnurou.org/documents/smart-questions-fr.html
Comment signaler efficacement un bug ?
http://www.chiark.greenend.org.uk/~sgtatham/bugs-fr.html


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Lefevre
On 2004-10-07 14:36:56 +0200, Frédéric Bothamy wrote:
* Vincent Lefevre [2004-10-07 12:16] :
> Je connais, mais comment le faire *automatiquement* (i.e. spécifier
> l'encodage en question dans son .emacs, et plus précisément dans un
> find-file hook)?

Si tu trouves, tu pourras donner la solution ici, cela m'intéresse
fortement.



Oui, mais je signale tout de suite que je n'ai rien trouvé dans le
manuel. S'il y a un gourou emacs ici...

--
Vincent Lefèvre - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / SPACES project at LORIA


--
Pensez à lire la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench

Pensez à rajouter le mot ``spam'' dans vos champs "From" et "Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact