Question Comment définir le codage de caractères emacs pour les fichiers dans un répertoire?


J'utilise Aquamacs, une distribution de GNU Emacs 23.3.50.1.

Je regarde quelques fichiers sources écrits avec des commentaires en grec, et ils sont encodés dans CP1253.

Et, je peux soit revenir avec le bon encodage ou je peux ajouter une variable locale de fichier:

/* -*- mode: c-mode; tab-width: 4; coding: cp1253-unix; -*- */

Je peux donc les ouvrir correctement et je pourrais certainement utiliser des variables de fichier pour chaque fichier.

Mais je voudrais définir le codage pour tout le répertoire. Plutôt que d’éditer .dir-locals.el à la main, je pensais simplement:

M-x copy-file-locals-to-dir-locals

Du fichier qui s'est ouvert correctement. Et cela génère:

;;; Directory Local Variables
;;; See Info node `(emacs) Directory Variables' for more information.

((c-mode
  (tab-width . 4)
  (coding . cp1253-unix)))

Pas de dé. Pourtant, il reconnaît clairement la nouvelle largeur de tabulation, donc il lit le fichier.

Des idées pourquoi? Et y a-t-il un journal comme emacs traite la liste?


2
2017-08-19 09:36


origine


Avec emacs24, si j'essaie de définir coding dans .dir-locals.el, je reçois un avertissement lors de l'ouverture d'un nouveau fichier: Warning (:warning): Coding cannot be specified by dir-locals - ggll


Réponses:


Malheureusement, il semble que l'en-tête de codage, de par sa conception, ne se propage pas depuis les répertoires locaux d'Emacs; J'ai eu du mal avec votre configuration et j'ai également répliqué le problème.

Plus tard, je suis tombé sur cette source qui semble vérifier ce que vous avez trouvé: http://www.emacsmirror.org/package/dir-locals.html

Je ne suis pas sûr qu'il existe un journal pour traiter la liste, mais si vous ne connaissez pas cette variable, vous pouvez vérifier votre encodage après avoir visité un fichier avec:

C-h v buffer-file-coding-system RET

ou

M-x describe-variable RET buffer-file-coding-system RET

Personnellement, je pense que votre meilleur pari serait ce que vous avez déjà des variables locales de fichiers de travail.

Les alternatives auxquelles je peux penser (en premier lieu, n’ont pas été testées) seraient de regarder certaines des fonctions élisp

(coding-system-priority-list)
(set-coding-system-priority &rest coding-systems)

OU deuxièmement: (en supposant que la structure de votre répertoire soit /peuce/blah/greekcode/fichier.c)

(add-to-list 'auto-coding-alist 
     '("/greekcode/[^/]+.c\\'" . cp1253-unix))

Cela a priorité même sur les variables locales de fichier. Modifiez l'expression rationnelle selon vos besoins et testez en évaluant:

(find-auto-coding "/home/brian/greekcode/garbage.c" 1) <= C-x C-e

résultats:

(cp1253-unix . auto-coding-alist)

Espérons que cela aide! Aimerait entendre ce que les autres utilisateurs d'emacs proposent comme solutions.


1
2017-09-07 17:42