Как установить основной режим по умолчанию в локальном каталоге?
по какой-то сложной причине я хотел бы открыть файлы в определенном каталоге (может иметь любое имя, без расширения) в режиме C, и я не хочу их модифицировать для Emacs (локальные переменные файла отсутствуют). Однако я борюсь с Emacs, чтобы сделать это. Я попытался поместить это в мой dir-locals.el:
((nil . ((major-mode . c-mode))))
Хотя переменная major-mode
действительно переопределена на c-mode
, когда я открываю файл из этого каталога, режим C не включен в буфере. Что происходит и как это сделать?
В качестве альтернативы я мог бы добавить в auto-mode-alist
только для этого каталога, но я не знаю, как это сделать с помощью локальных каталогов.
Кроме того, есть ли простой способ вызвать выполнение кода из dir-locals.el? Я знаю, что это небезопасно, но это может быть даже код, который находится в config - точка должна вызывать его только тогда, когда обрабатываются переменные из dir-locals (открытие файла).
Спасибо за помощь.
Ответы
Ответ 1
В .dir-locals.el
вы можете установить только переменные в определенное значение. Что делает ваш код, то устанавливается значение major-mode
в значение c-mode
. Однако это не так, как активирован режим. Чтобы активировать его, вам нужно вызвать функцию c-mode
. Существует специальная переменная, которую вы можете установить в .dir-locals.el
для запуска функции: eval
.
Следовательно, работает следующий код:
((nil . ((eval . (c-mode)))))
Ответ 2
Помимо eval
, есть и другая специальная переменная с именем mode
, которая может вам помочь. Это та же переменная, которая используется файловыми локальными переменными. Вы также можете написать:
((nil . ((mode . c))))
Ответ 3
Я не могу ответить на ваш первый вопрос (и на самом деле, я хотел бы услышать ответ для себя), но auto-mode-alist
у вас может быть
(setq auto-mode-alist (cons '("<your dir path here>\." . c-mode) auto-mode-alist))`
это должно дать вам результат, который вы хотите