Как сохранить dir-локальные переменные при переключении основных режимов?

Я готовлюсь к проекту, в котором стандартные отступы и вкладки имеют ширину 3 символа, и в нем используется сочетание HTML, PHP и JavaScript. Поскольку я использую Emacs для всего и хочу использовать для этого проекта только трехсимвольный отступ, я установил файл «.dir-locals.el» в корне проекта, чтобы он применялся ко всем файлам / всем режимам в нем:

; Match projets's default indent of 3 spaces per level- and don't add tabs
(
 (nil .
        (
         (tab-width . 3)
         (c-basic-offset . 3)
         (indent-tabs-mode . nil)
         ))
 )

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

Я также попытался явно указать все режимы, которые я использую в ".dir-locals.el", и добавить в мой файл .emacs "dir-locals-set-class-variable / dir-locals-set-directory-class ». Я рад сказать, что все они ведут себя последовательно, сначала устанавливая локальные переменные dir, а затем теряя их, когда я переключаю основной режим.

Я использую GNU Emacs 24.3.1.

Какой элегантный способ перезагрузки локальных переменных dir при переключении основного режима буфера?

- edit - Спасибо за отличные ответы и комментарии как Аарона, так и Филса! После публикации здесь, я подумал, что это «пахнет» как ошибка, поэтому введите отчет в GNU - отправит им ссылку на эти обсуждения.

Ответы на вопрос(3)

Ваш ответ на вопрос