¿Cómo configurar el modo principal para un archivo en .dir-locals.el?

7

Me gustaría establecer el modo principal para un archivo como lo haría con variables locales de archivo

Local Variables:
mode: text
End:

pero .dir-locals.elpara no "contaminar" el archivo en cuestión. es posible?

xebtl
fuente
¿Es esto solo para uso personal, o algo que quieres compartir? Hay varias formas de abordar esto en elisp, en lugar de recurrir a variables locales de directorio.
phils
@phils Sería bueno tener una solución para compartir, por eso pensé en dir-locals. Pero prácticamente, es más o menos personal. (Es poco probable que se comparta con muchas personas, y quién sabe si usan emacs y / o les importa).
xebtl
Okay. Creo que utilizar la evalpseudovariable es la única forma de manejarlo en un .dir-locals.elarchivo. Para elisp personalizado, puede ver el uso auto-mode-alistpara que coincida con el regexp del nombre de archivo (puede usarlo regexp-quotepara crear patrones para valores de cadena textuales, si es necesario).
phils

Respuestas:

4

Es posible especificar una cadena en lugar de un modo, pero esto solo funciona para subdirectorios. Por lo tanto, nilusaré para hacer coincidir todos los modos, luego la evaltecla para cambiar el modo principal condicionalmente:

((nil
  (eval
   (lambda ()
     (when (string= (file-name-nondirectory buffer-file-name)
                    "file-name.extension")
       (my-mode))))))

Una desventaja de este enfoque es que la evalclave no es segura, por lo que deberá confirmar la variable de forma permanente para que esto tenga efecto.

wasamasa
fuente
Gracias, esto funciona. ¿Alguien podría explicar la diferencia con el siguiente formulario? `` `((nil. ((eval. (lambda () (when (string = (file-name-nondirectory (buffer-name))" filename ") (my-mode)))))))` ``
Swarnendu Biswas
2

Lo siguiente .dir-locals.elfunciona bien para mí para establecer el modo principal de todos los archivos en un directorio para shell-script-mode:

((nil . ((mode . shell-script))))

La desventaja obvia es que no puede especificar el modo principal solo para un determinado subconjunto de archivos en el directorio.

Anexo: Divertidamente, también tiene el efecto secundario de establecer el modo principal de .dir-locals.elsí mismo shell-script-mode.

Anexo 2: de manera más divertida, también tiene el efecto secundario de establecer el modo principal de búferes Dired shell-script-mode, por lo que es imposible abrir ninguno (ya que se produce un error durante la inicialización).

Radon Rosborough
fuente