Как установить кодировку символов emacs для файлов в каталоге?

Как установить кодировку символов emacs для файлов в каталоге?

Я использую Aquamacs, дистрибутив GNU Emacs 23.3.50.1.

Я просматриваю несколько исходных файлов, написанных с комментариями на греческом языке, и они закодированы в CP1253.

И я могу либо вернуться к правильной кодировке, либо добавить локальную переменную файла:

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

Таким образом, я могу заставить их открываться правильно, и я, конечно же, могу прикрепить файловые переменные к каждому файлу.

Но я хотел бы задать кодировку для всего каталога. Вместо того, чтобы редактировать .dir-locals.el вручную, я подумал, что просто:

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

Из файла, который открылся правильно. И это генерирует:

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

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

Никаких кубиков. Тем не менее, он четко распознает новую ширину табуляции, поэтому он читает файл.

Есть идеи почему? И есть ли какой-нибудь лог, как emacs обрабатывает a-list?

решение1

К сожалению, похоже, что заголовок кодирования по умолчанию не распространяется из dir-locals Emacs; у меня возникли проблемы с вашей настройкой, и я также воспроизвел проблему.

Позже я наткнулся на этот источник, который, похоже, подтверждает то, что вы нашли: http://www.emacsmirror.org/package/dir-locals.html

Я не уверен, существует ли журнал обработки a-list, но если вы не знакомы с этой переменной, вы можете проверить свою кодировку, посетив файл с помощью:

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

или

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

Лично я считаю, что лучшим вариантом будет то, что у вас уже работает — локальные переменные файлов.

Альтернативы, которые я могу придумать (первый не проверен), — это взглянуть на некоторые функции elisp:

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

ИЛИ второй: (предполагая, что ваша структура каталогов — /something/blah/greekcode/file.c)

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

Это имеет приоритет даже над локальными переменными файла. Измените регулярное выражение по своему усмотрению и поэкспериментируйте, оценив:

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

возвращает:

(cp1253-unix . auto-coding-alist)

Надеюсь, это поможет! Хотелось бы услышать, что другие пользователи emacs предлагают в качестве решения.

Связанный контент