Как установить основной режим по умолчанию в локальном каталоге?

по какой-то сложной причине я хотел бы открыть файлы в определенном каталоге (может иметь любое имя, без расширения) в режиме 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))`

это должно дать вам результат, который вы хотите