Kann ich eine bestimmte Datei so einstellen, dass Änderungen automatisch und stillschweigend akzeptiert werden?

9

Kann ich für eine bestimmte Datei angeben, dass Emacs mich nicht benachrichtigen soll, dass sich die Datei auf der Festplatte geändert hat, und mich fragen, ob ich Änderungen akzeptieren möchte oder nicht? Ich möchte dies nicht global tun, nur für Dateien, von denen ich weiß, dass sie häufig außerhalb von Emacs geändert werden (insbesondere für kalenderbezogene Org-Dateien).

Emacsomancer
quelle

Antworten:

8

Sie können dies für einen bestimmten Puffer mit M-x auto-revert-mode( manuell ) tun . Bei Dateipuffern wird alle auto-revert-intervalSekunden (standardmäßig 5) nach Änderungen gesucht und der Puffer von der Festplatte automatisch aktualisiert.

Ihr Titel sagt "eine bestimmte Datei", während der Text Ihrer Frage einen Dateityp (Organisationsdateien) erwähnt. Abhängig von Ihren Umständen können Sie diesen Modus auf folgende Weise einstellen, um den gewünschten Effekt dauerhaft zu erzielen. Die früheren Methoden sind wohl sauberer und effizienter, wenn sie für Ihren speziellen Anwendungsfall gelten.

Wenn Sie wissen, dass Sie dies für jede Datei eines bestimmten Typs möchten, sollten Sie Ihrem Init-Setup einen Modus-Hook hinzufügen.

(add-hook 'org-mode-hook (lambda () (auto-revert-mode 1)))

Wenn Sie wissen, dass Sie es für alles in einem bestimmten Verzeichnis möchten, sollten Sie es in .dir-local.el am entsprechenden Speicherort festlegen und die lokale Einstellungsdatei gegebenenfalls von VCS ignorieren. Dieses Beispiel gilt für alle Puffer im Organisationsmodus für Dateien im selben Verzeichnis (und in denselben Unterverzeichnissen). Sie können auch ausführen M-x add-dir-local-variable, damit Emacs dies generiert und automatisch für Sie speichert.

(
  (org-mode . ((auto-revert-mode . 1)))
 )

Wenn keiner der beiden oben genannten Ansätze für Sie gut funktioniert, ziehen Sie eine lokale Dateivariable in jeder Datei in Betracht . Die kürzeste und allgemeinste Möglichkeit, eine dieser Optionen festzulegen, besteht darin, Folgendes in die erste Zeile der Zieldatei aufzunehmen:

-*- eval: (auto-revert-mode 1); -*-

In Quelldateien kann der Text einem Kommentarbegrenzer (//, # usw.) folgen. Sie können ausführen M-x add-file-local-variable-propline, damit Emacs dies automatisch für Sie generiert, oder M-x add-file-local-variablefür ein Format, das den unteren Rand Ihrer Datei anstelle des oberen verwendet.

Verwenden Sie diese Methode nur, wenn Sie die Datei nicht für andere Personen freigeben. Aus dem GNU-Handbuch :

Es ist oft ein Fehler, auf diese Weise kleinere Modi anzugeben. Kleinere Modi stellen individuelle Benutzereinstellungen dar, und es kann unangemessen sein, Ihre Einstellungen einem anderen Benutzer aufzuerlegen, der die Datei möglicherweise bearbeitet. Wenn Sie einen Nebenmodus in situationsabhängiger Weise automatisch aktivieren oder deaktivieren möchten, ist es häufig besser, dies in einem Hauptmodus-Hook zu tun.

Mian
quelle
2
Ist es nicht (auto-revert-mode 1)eine kanonische Möglichkeit, einen Nebenmodus einzuschalten, anstatt setq?
mbork
1
Ja, du hast Recht. Bereinigen Sie dieses Beispiel in einer Sekunde. Vielen Dank.
Mian
1
Bitte. (Das heißt, AFAIU, Datei lokale Variablen sind am besten für den Anwendungsfall von OP geeignet.)
mbork
1
Da könntest du recht haben. IMO hängt es von den Details ihrer Dateiorganisation ab. Wenn die Dateien, von denen sie wissen, dass sie außerhalb von Emacs häufig geändert werden, alle Organisationsdateien sind oder sich alle am selben Ort befinden (z. B. ein Dropbox-Verzeichnis), kann ein modus- oder verzeichnisbasierter Ansatz sauberer und einfacher sein und wird vermieden als Bonus ihre Dateien überladen.
Mian
2
Um mit diesen beiden Methoden zu kommunizieren, gibt es add-file-local-variableund add-dir-local-variable.
Sean Allred
3

Ja. Fügen Sie dies am Ende Ihrer Datei ein.

* COMMENT Config
Local Variables:
eval: (auto-revert-mode 1)
End:

Dies setzt den Org-Modus voraus. Verwenden Sie für andere Modi Kommentare in der verwendeten Sprache, wie unter dem unten angegebenen Link erläutert.

Hinweis: Hintergrundinformationen, Sicherheitsinformationen und eine Einschränkung, dass dies möglicherweise nicht immer eine gute Idee ist, finden Sie im Handbuch Lokale Variablen in Dateien . Im Abschnitt zum Zurücksetzen wird beispielsweise beschrieben, wie das Standardintervall von 5 Sekunden für das automatische Zurücksetzen geändert wird.

mbork
quelle
Muss das unbedingt am Ende sein? Ich habe ein Skript, das .org-Dateien generiert, und ich habe es am Anfang
einfügen lassen
1
Ja, siehe den Link. Weitere Antworten finden Sie in einer First-Line-Lösung.
mbork