¿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.

Respuestas:


7

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


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.


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.


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
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.