¿Cómo configuro la codificación de caracteres de emacs para archivos en un directorio?

¿Cómo configuro la codificación de caracteres de emacs para archivos en un directorio?

Estoy usando Aquamacs, una distribución de GNU Emacs 23.3.50.1.

Estoy viendo algunos archivos fuente escritos con algunos comentarios en griego y están codificados en CP1253.

Y puedo revertir con la codificación adecuada o puedo agregar una variable local de archivo:

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

Entonces puedo hacer que se abran correctamente y ciertamente puedo agregar variables de archivo a cada archivo.

Pero me gustaría configurar la codificación para todo el directorio. En lugar de editar .dir-locals.el a mano, pensé en simplemente:

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

Del archivo que se abrió correctamente. Y eso genera:

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

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

No dados. Sin embargo, reconoce claramente el nuevo ancho de pestaña, por lo que está leyendo el archivo.

¿Alguna idea de por qué? ¿Y hay algún registro mientras emacs está procesando la lista A?

Respuesta1

Desafortunadamente, parece que el encabezado de codificación, por diseño, no se propaga desde los directorios locales de Emacs; Tuve problemas con su configuración y también repliqué el problema.

Más tarde me encontré con esta fuente que parece verificar lo que encontraste: http://www.emacsmirror.org/package/dir-locals.html

No estoy seguro de si existe un registro para procesar la lista A, pero en caso de que no esté familiarizado con esta variable, puede verificar su codificación después de visitar un archivo con:

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

o

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

Personalmente, creo que su mejor opción sería lo que ya tiene funcionando: archivos de variables locales.

Las alternativas que se me ocurren (la primera no está probada) serían echar un vistazo a algunas de las funciones de elisp:

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

O segundo: (asumiendo que la estructura de su directorio es /something/blah/greekcode/file.c)

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

Esto tiene prioridad incluso sobre las variables locales del archivo. Modifique la expresión regular según sea necesario y experimente evaluando:

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

devoluciones:

(cp1253-unix . auto-coding-alist)

¡Ojalá esto ayude! Me encantaría escuchar qué proponen otros usuarios de emacs como soluciones.

información relacionada