Zum Beispiel in der eingebauten Variablen, mode-line-modified
die ein Sternchen in der Moduszeile anzeigt, wenn der Puffer geändert wird.
Insbesondere möchte ich hl-line-mode
ausschalten, wenn der Puffer geändert wird, und einschalten , wenn dies nicht der Fall ist.
Ich habe die Dokumentation zu "Change Hooks" gelesen, möchte hl-line-mode
aber umschalten, wenn ich eine Änderung wie das Sternchen "Moduszeile" rückgängig mache.
hooks
buffer-modified
Kindermädchen
quelle
quelle
after-change-functions
undfirst-change-hook
. Wenn das Rückgängigmachen von einem geänderten Puffer zu einem nicht geänderten Puffer aus irgendeinem Grund nicht als "Änderung" für diese Hooks gilt, können Sie empfehlenundo
, das Umschalten durchzuführen.buffer-modified-p
zum Testen, ob eine Änderung aufgetreten ist. Ich verwende dasafter-save-hook
und,first-change-hook
um einen geänderten Indikator in meiner Registerkartenleiste umzuschalten.post-command-hook
Prüfenbuffer-modified-p
.Antworten:
Aufbauend auf den Kommentaren gibt es zwei Möglichkeiten, um das zu erreichen, was Sie versuchen. (Nicht ausgiebig getestet, also YMMV.)
Option 1:
post-command-hook
Erstellen Sie eine Funktion, die testet, ob der Puffer geändert wurde, und hängen Sie ihn dann an
post-command-hook
:Der Vorteil ist, dass es ziemlich einfach ist. Der Nachteil ist, dass Emacs diesen Test nach jedem einzelnen Befehl ausführt, was wie ein Overkill erscheint.
Option 2:
first-change-hook
,after-save-hook
, undundo
Erstellen Sie eine Funktion zum
hl-line-mode
Ausschalten und Einhängenfirst-change-hook
. Erstellen Sie eine Funktion zum Einschaltenhl-line-mode
und haken Sie sie einafter-save-hook
. Geben Sieafter
Hinweiseundo
, damit es aktiviert wird,hl-line-mode
wenn ein Rückgängigmachen den Puffer in einen unveränderten Zustand zurückversetzt hat:Der Vorteil ist, dass diese Funktionen selten und nicht nach jedem Befehl aufgerufen werden. Der Nachteil ist, dass Sie sich mit Ratschlägen befassen mussten und es möglicherweise andere, unerwartete Möglichkeiten gibt, einen Puffer in einen unveränderten Zustand zu versetzen, die den
hl-line-mode
Schritt "Wieder einschalten " nicht auslösen .quelle
post-command-hook
.revert-buffer
scheint ein weiterer häufiger Fall zu sein, der den Puffer in einen unveränderten Zustand versetzt. Sie könnten das verwendenafter-revert-hook
, um damit umzugehen.after-change-major-mode-hook
?add-hook
einenlocal
Parameter hat. Wenn Sie also nur das Verhalten in bestimmten Hauptmodi oder Puffern überschreiben möchten, können Sie dies tun.