Ich lasse Emacs den ganzen Tag laufen und werde häufig viele Dateisystemmanipulationen an Dateien durchführen, die in Emacs-Puffern geöffnet sind. Zum Beispiel könnte ich zu einem anderen Zweig in Git wechseln, der eine ganz andere Verzeichnisstruktur hat.
Leider habe ich eine Reihe offener Puffer, die Emacs jetzt als "modifizierte" Puffer registriert, die auf "neue" Dateien verweisen. Wenn ich sie nicht jedes Mal manuell schließe, ist es einfach, diese Puffer reflexartig zu speichern, was dann zu falschen, wahrscheinlich doppelten Dateien in meinem Projekt führt. Ich kann Emacs nicht einmal schließen, ohne die Frage "Diesen Puffer speichern" für jeden einzelnen zu beantworten.
Gibt es eine Möglichkeit, unveränderte Puffer automatisch zu schließen, wenn die zugrunde liegende Datei verschwindet? Ähnlich wie bei einem global-auto-revert-mode
, der auch behandelt, wenn eine Datei vollständig entfernt wird?
quelle
Antworten:
Ich denke, etwas in dieser Richtung könnte funktionieren:
Die
buffer-backed-by-file-p
Funktion prüft, ob die Datei von einer Datei gesichert wird. Wenn nicht, wird true zurückgegeben. Andernfalls wird zurückgegeben, ob die Sicherungsdatei vorhanden ist. Wir nehmen dann die Liste der Puffer, filtern alles andere heraus als diejenigen, die eine Sicherungsdatei haben sollten, aber die Datei existiert nicht, und töten sie dann.Benötigt dash.el für -remove, da ich zu faul war, ein eingebautes zu finden, um dasselbe zu erreichen.
Hoffe das hilft!
quelle
mapc
Befehl immer noch ausführen, wenn Sie möchten, dass die nicht von Dateien gesicherten Puffer gelöscht werden, nicht wahr? Es ist also nicht vollautomatisch. Für eine vollständige Automatisierung müssen Sie entweder sicherstellen, dassmapc
dieinotify
Datei wiederholt von selbst ausgeführt wird, oder sie für Sie ausführen, wenn eine Datei tatsächlich gelöscht wird.(run-with-timer 60 60 (lambda () (mapc 'kill-buffer (-remove 'buffer-backed-by-file-p (buffer-list)))))
ist das, was ich als erste Annäherung verwenden würde.