Global-Auto-Revert-Modus scheint nicht zu funktionieren?

7

Meine Init-Datei enthält

(setq global-auto-revert-mode t)

und ich kann bestätigen, dass es mit Ch v wahr ist. Aber ich muss immer noch alle meine Dateien mit Rücksetzpuffer manuell zurücksetzen, wenn ich Git-Zweige ändere. Ich komme sogar so weit, zu versuchen, die Eingabeaufforderung "Datei auf Festplatte geändert" zu speichern und zu erhalten. Irgendwelche Vorschläge, wie man das debuggt?

Djechlin
quelle
Versuchen Sie stattdessen, dies in Ihre Init zu setzen:(global-auto-revert-mode 1)
Kaushal Modi
@ Kaushalmodi kein Glück (ich wäre wirklich überrascht gewesen)
Djechlin
Könnte es eine Sache sein mit auto-revert-interval? Ich benutze es und es funktioniert für mich, mit Ausnahme von Dateien über Tramp.
Swarnendu Biswas
Sieht aus wie ein Fehler, der sich in 24.5 und 25.0 eingeschlichen hat. @SwarnenduBiswas bist du auf Emacs 24.4?
Kaushal Modi
@djechlin Ich habe mithilfe von Emacs-Q-Sitzungen überprüft, dass der automatische Wiederherstellungsmodus bei Emacs 24.5 und 25.0 nicht funktioniert, bei 24.4 jedoch einwandfrei. Auf welcher Version bist du?
Kaushal Modi

Antworten:

15

Ein Nebenmodus wird durch Einstellen einer Variablen nicht aktiviert / deaktiviert. Die Nebenmodusvariable sollte verwendet werden, um den Status "Modus aktiviert" zu überprüfen und nicht um den Modusstatus festzulegen. Wenn sein Wert ist t, ist der Nebenmodus eingeschaltet, andernfalls ist der Modus ausgeschaltet.


In den folgenden Ausschnitten erfahren Sie, wie Sie einen Nebenmodus steuern. Ersetzen Sie MINOR-MODE-NAMEdurch den tatsächlichen Namen des Nebenmodus, mit dem Sie sich befassen ( global-auto-revert-namewie dies in der Frage der Fall ist).


Nebenmodus aktivieren

Mit elisp

Direkt

(MINOR-MODE-NAME)
;; or
(MINOR-MODE-NAME 1)

Basierend auf einer Hook-Aktivierung

(add-hook 'SOME-HOOK #'MINOR-MODE-NAME)

Nebenmodus deaktivieren

Mit elisp

Direkt

(MINOR-MODE-NAME 0)
;; or
(MINOR-MODE-NAME -1)

Basierend auf einer Hook-Aktivierung

(add-hook 'SOME-HOOK (lambda () (MINOR-MODE-NAME -1)))

Einen kleinen Modus umschalten

Interaktiv

M-x MINOR-MODE-NAME

Verwenden einer Schlüsselbindung

(global-set-key (kbd "<KEY>") #'MINOR-MODE-NAME)

Elisp verwenden (nicht interaktiv)

(MINOR-MODE-NAME 'toggle)

Quellen

Kaushal Modi
quelle
Ich bin auf einige Modi gestoßen, in denen Sie t oder nil anstelle von Zahlen übergeben müssen.
Joseph Garvin
@JosephGarvin Es könnte sich lohnen, herauszufinden, um welche Modi es sich handelt. Sie können auch einen Fehlerbericht einreichen, um diese Inkonsistenz zu beheben, wenn sie tatsächlich als Nebenmodi definiert sind.
Kaushal Modi
Die Antwort ist sehr abstrakt. Ich weiß nicht, wie ich es benutzen soll.
Strg-Alt-Delor
@ ctrl-alt-delor Was ist der Nebenmodus, den Sie steuern möchten, der Sie zu dieser Antwort geführt hat?
Kaushal Modi
Der in der Frage. ( global-auto-revert-mode)
Strg-Alt-Delor
3

Sie setzen die Variable nicht mit setq, Sie rufen die Funktion auf:

(global-auto-revert-mode)
Djechlin
quelle
Ich frage mich, wie das anders ist (global-auto-revert-mode 1). Auch wenn Sie dies zu Ihrem Init hinzufügen, sollten Sie dieses Argument nicht einmal benötigen. (global-auto-revert-mode)Sollte einfach genügen. Weitere Informationen finden Sie in Xahs Blogbeitrag .
Kaushal Modi
Wie bei jedem mit definierten Modus define-global-minor-modesind die einzigen gültigen Werte Zahlen nilund toggle. Die Tatsache, dass es tfunktioniert, ist nur auf die Tatsache zurückzuführen, dass prefix-numeric-valuees nicht daran erstickt und es wie behandelt 1.
Lindydancer
@ Lindydancer Ja, ich möchte, dass Djechlin klarstellt, warum das Übergeben 1als Argument nicht funktioniert hat .
Kaushal Modi
@kaushalmodi Ich habe immer noch gesetzt - ich dachte, Sie ändern nur t in eine 1, ich habe die Änderung von setq zum Aufrufen der Funktion übersehen.
Djechlin
@djechlin Danke für die Klarstellung. Aus Gründen der Klarheit und Konsistenz wird jedoch empfohlen, ein Argument 1oder nichts zu übergeben, wenn Sie diesen Nebenmodus von elisp in Ihrem Init aktivieren möchten.
Kaushal Modi
1

Die automatische Wiederherstellung funktioniert nur für Puffer, die nicht geändert wurden. Zumindest für den Versuch, die Datei auf der Festplatte zu speichern und zu ändern, ist das von Ihnen beschriebene Verhalten normal.

Stefan
quelle
Ich habe dieselbe Datei gleichzeitig in einer Emacs 25.0-Instanz und einer Emacs 24.4-Instanz (beide mit -QOption) geöffnet und M-x global-auto-revert-modein beiden. Als ich vom Terminal aus einen String ( echo 1234 >> somefile.txt) in diese Datei zurückgab, wurde nur der Emacs 24.4-Puffer automatisch zurückgesetzt.
Kaushal Modi
Dann bitte M-x report-emacs-bug.
Stefan
Erledigt! Fehler # 20441
Kaushal Modi
Der "Fehler" wurde von selbst behoben. War wahrscheinlich ein Problem mit glib auf meinem System.
Kaushal Modi