¿Cómo mantener las variables dir-locales al cambiar los modos principales?

Me estoy comprometiendo con un proyecto donde las sangrías y pestañas estándar tienen 3 caracteres de ancho, y está utilizando una combinación de HTML, PHP y JavaScript. Ya que uso Emacs para todo, y solo quiero la sangría de 3 caracteres para este proyecto, configuré un archivo ".dir-locals.el" en la raíz del proyecto para aplicarlo a todos los archivos / todos los modos debajo de él:

; 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)
         ))
 )

Lo que funciona bien cuando abro un archivo por primera vez. El problema ocurre cuando se cambian los modos principales, por ejemplo, para trabajar en una parte de HTML literal dentro de un archivo PHP. Entonces pierdo todas las variables dir-locales.

También he intentado declarar explícitamente todos los modos que uso en ".dir-locals.el", y agregar a mi archivo .emacs "dir-locals-set-class-variables / dir-locals-set-directory-class ". Me alegra decir que todos se comportan de forma coherente, estableciendo inicialmente las variables dir-local y luego perdiéndolas cuando cambio el modo principal.

Estoy usando GNU Emacs 24.3.1.

¿Cuál es una forma elegante de recargar las variables dir-locales al cambiar el modo mayor de un búfer?

- edit - ¡Gracias por las excelentes respuestas y comentarios tanto de Aaron como de phils! Después de publicar aquí, pensé que "olía" como un error, por lo que ingresé un informe a GNU; les enviaré una referencia a estas discusiones.

Respuestas a la pregunta(3)

Su respuesta a la pregunta