Was ist ein guter Weg, um einen Hook zu haben, der für jede Datei in einem bestimmten Verzeichnis ausgeführt wird?

7

Was ist eine gute Möglichkeit, eine Funktion zuzuweisen, die ausgeführt werden soll, wenn ich eine Datei in einem bestimmten Verzeichnis öffne? Genau wie ein Hook, aber basierend auf dem Speicherort einer Datei und nicht auf einem Hauptmodus.

Es wäre schön, wenn ich dies aktivieren könnte, indem ich eine spezielle Datei im Verzeichnis habe, aber das Hinzufügen des Hooks in meiner zentralen Konfigurationsdatei wäre auch gut.

Tikhon Jelvis
quelle

Antworten:

7

find-file-hookÜberprüfen Sie in Ihrer Hook-Funktion, ob sich die Kandidatendatei im angegebenen Verzeichnis befindet.

Drew
quelle
Ja, das sieht so aus, als würde es funktionieren. Ich konnte diesen speziellen Haken einfach nicht über Google finden.
Tikhon Jelvis
2
Fragen Sie Emacs , nicht Google. M-x apropos-variable RET file hook.
Drew
6

Dies klingt nach den lokalen Verzeichnisvariablen . Erstellen .dir-locals.elSie einfach eine Datei im Verzeichnis mit den gewünschten Einstellungen, und jede Datei erbt diese Einstellungen.

erikstokes
quelle
Diese Option hat den Vorteil, dass die Einstellungen und relevanten Verzeichnisse in der Hauptkonfigurationsdatei nicht fest codiert werden.
T. Verron
1
;;; .dir-locals.el

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

Die nilMittel , um dies auf alle Dateien in den Verzeichnissen gilt unten .dir-locals.el.

Das tübergeben an add-hookmacht find-file-hookbuffer-local. Daher wird der Hook nur für diese Datei ausgeführt.

dir-localsläuft vorher find-file-hook, also funktioniert das ganze.

Herr Bigglesworth
quelle
2
Willkommen bei mx.sx! Die Idee ist gut, und ich denke, die Antwort von @erikstokes würde von einem Beispiel profitieren, aber es scheint, dass Ihr Beispiel falsch ist: Nachdem eine Datei im Verzeichnis geöffnet wurde, wird die Funktion hinzugefügt find-file-hookund für alle Dateien ausgeführt , die dies tun werden danach geöffnet, nicht wahr?
T. Verron
Warum nicht den Code direkt ausführen?
Politza