Lista blanca de .dir-locals.el


7

¿Es posible cargar .dir-locals.elarchivos sin mi preguntar, pero también sin la adición de los valores Estoy configurando en ese archivo a mi init.elen custom-set-variables? La razón por la que quiero es que ese archivo contiene algunos datos confidenciales y tengo la costumbre de compartir mi archivo init.el, así que quiero que solo se cargue. Entiendo que en general .dir-locals.elpuede contener código inapropiado que no debería evaluar. Así que estaba pensando que probablemente hay algo así como una lista blanca .dir-locals.el.

Actualizar

En general, lo que quiero lograr es tener un archivo de configuraciones de emacs para todo el proyecto que se cargue sin problemas adicionales. Entonces, si no es posible con .dir-locals.el, estoy abierto a otras soluciones: D

Respuestas:


5

Agregué esto a mi init.el:

(defun recursive-load-dir-settings (currentfile)
  (let ((lds-dir (locate-dominating-file currentfile "settings.el")))
  (when lds-dir
      (progn
        (load-file (concat lds-dir "settings.el"))
        (recursive-load-dir-settings (file-truename(concat lds-dir "..")))))))

(defun load-dir-settings()
  (interactive)
  (when buffer-file-name
    (recursive-load-dir-settings buffer-file-name)))

(add-hook 'find-file-hook 'load-dir-settings)

Esto carga el archivo settings.elen el directorio del archivo actual. Luego continúa buscando hacia settings.elarriba en el árbol de directorios, hasta que no se puedan encontrar más archivos de este tipo (al igual que .dir-locals.el).

Esto carga y ejecuta los archivos de configuración sin un aviso de seguridad , por lo que debe asegurarse de que es el único que puede colocar dichos archivos en el árbol de directorios. Si aún desea la solicitud, por supuesto, podría agregarse sin usar la mecánica de personalización , para que init.elpueda mantenerse limpio.

Un ejemplo de esto settings.elpodría verse así:

(make-local-variable 'my-pw)
(setq my-pw "passw0rd A")
(message "Loaded super-secret password for project A")

Esto parece una respuesta que he estado buscando. Gracias, lo intentaré.
d12frosted

3

Si escribe la configuración en su init.elarchivo manualmente, puede agregar lo siguiente:

(setq custom-file "~/.emacs.d/custom.el")
(load custom-file t)

Ahora, cuando emacs se encuentra .dir-locals.elcon opciones dudosas, Emacs guardará su elección en este custom.elarchivo, dejándolo en libertad de compartir su init.elarchivo públicamente.

Si desea utilizar la interfaz Personalizar de Emacs para toda su configuración, no creo que esto funcione para usted.


Gracias por tu respuesta. Esta solución podría ser buena para mí. Pero desafortunadamente, no es una solución general, así que dejo la pregunta abierta.
d12frosted

0

La solución es anular el sistema de protección local-dir de Emacs.

(defun safe-local-variable-p (sym val)
"Put your guard logic here, return t when sym is ok, nil otherwise"
  t)

Simplemente colóquelo en algún lugar de su núcleo init y patch emacs elisp.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.