2

Я использую 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 ответ1

1

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

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

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

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 предлагают в качестве решения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .