A partir de los comentarios, aquí hay dos formas de lograr lo que está tratando de hacer. (No ampliamente probado, por lo que YMMV).
Opción 1: post-command-hook
Cree una función que pruebe si se modifica o no el búfer y luego conéctelo a post-command-hook
:
(defun hl-line-mode-toggle-maybe ()
"Turn on `hl-line-mode' when buffer is unmodified, turn it off
when it is modified."
(hl-line-mode (if (buffer-modified-p) -1 1)))
(add-hook 'post-command-hook #'hl-line-mode-toggle-maybe)
La ventaja es que es bastante simple. La desventaja es que Emacs ejecutará esta prueba después de cada comando , lo que parece excesivo.
Opción 2: first-change-hook
, after-save-hook
yundo
Cree una función para hl-line-mode
apagar y conectarla first-change-hook
. Cree una función para encender hl-line-mode
y engancharla after-save-hook
. Proporcione after
consejos para undo
que se active hl-line-mode
cuando un deshacer haya devuelto el búfer a un estado no modificado:
(defun hl-line-mode-off ()
"Turn off `hl-line-mode'."
(hl-line-mode -1))
(defun hl-line-mode-on ()
"Turn off `hl-line-mode'."
(hl-line-mode 1))
(add-hook 'first-change-hook #'hl-line-mode-off)
(add-hook 'after-save-hook #'hl-line-mode-on)
(defadvice undo (after hl-line-when-unmodified activate)
(unless (buffer-modified-p)
(hl-line-mode 1)))
La ventaja es que llama a estas funciones con poca frecuencia en lugar de después de cada comando. La desventaja es que ha tenido que profundizar en los consejos, y puede haber otras formas imprevistas de llevar un búfer a un estado no modificado que no active el paso " hl-line-mode
volver a encender ".
after-change-functions
yfirst-change-hook
. Si, por alguna razón, deshacer de un búfer modificado a uno no modificado no cuenta como un "cambio" para estos ganchos, puede aconsejarundo
que realice el cambio.