¿Cuál es una buena manera de tener un enlace que se ejecute para cada archivo en un directorio dado?

7

¿Cuál es una buena manera de asignar una función para que se ejecute cuando abro cualquier archivo en un directorio específico? Al igual que un gancho pero basado en la ubicación de un archivo en lugar de un modo principal.

Sería bueno si pudiera habilitar esto al tener un archivo especial en el directorio, pero agregar el gancho en mi archivo de configuración central también sería bueno.

Tikhon Jelvis
fuente

Respuestas:

7

find-file-hook, y en su función de enlace, verifique si el archivo candidato está en el directorio dado.

Dibujó
fuente
Sí, parece que funcionará. Simplemente no pude encontrar ese gancho específico a través de Google.
Tikhon Jelvis
2
Pregúntale a Emacs , no a Google. M-x apropos-variable RET file hook.
Dibujó
6

Esto suena como para qué sirven las variables locales del directorio . Simplemente cree un .dir-locals.elarchivo en el directorio con la configuración que desee, y cada archivo heredará esa configuración.

erikstokes
fuente
Esta opción tiene la ventaja de no codificar la configuración y los directorios relevantes en el archivo de configuración principal.
T. Verron
1
;;; .dir-locals.el

((nil
  (eval add-hook 'find-file-hook (lambda ()
                                   (message "my find-file hook called...")) nil t)))

El nilmedio que esto se aplica a todos los archivos en los directorios a continuación .dir-locals.el.

El tpasado a add-hookhace find-file-hookbuffer-local. Por lo tanto, el enlace se ejecuta solo para este archivo.

dir-localscorre antes find-file-hook, así que todo funciona.

Señor bigglesworth
fuente
2
Bienvenido a mx.sx! La idea es buena, y creo que la respuesta de @erikstokes se beneficiaría de un ejemplo, pero parece que su ejemplo es incorrecto: después de abrir un archivo en el directorio, la función se agregará find-file-hooky se ejecutará para todos los archivos que se abren después, ¿no?
T. Verron
¿Por qué no ejecutar el código directamente?
politza