Comme dans la variable intégrée mode-line-modified
qui affiche un astérisque dans la ligne de mode si le tampon est modifié.
Plus précisément, je souhaite hl-line-mode
désactiver lorsque le tampon est modifié et activé lorsqu'il ne l'est pas.
J'ai lu la documentation sur "Modifier les crochets", mais je souhaite hl-line-mode
basculer lorsque j'annule une modification comme l'astérisque de la ligne de mode.
hooks
buffer-modified
nounou
la source
la source
after-change-functions
etfirst-change-hook
. Si, pour une raison quelconque, l'annulation d'un tampon modifié à un tampon non modifié ne compte pas comme un "changement" pour ces hooks, vous pouvez conseillerundo
d'effectuer la bascule.buffer-modified-p
pour tester si une modification s'est produite. J'utilise les touchesafter-save-hook
etfirst-change-hook
pour basculer un indicateur modifié sur ma barre d'onglets.post-command-hook
celui qui vérifiebuffer-modified-p
.Réponses:
À partir des commentaires, voici deux façons de réaliser ce que vous essayez de faire. (Pas largement testé, donc YMMV.)
Option 1:
post-command-hook
Créez une fonction qui teste si le tampon est modifié ou non, puis connectez-le à
post-command-hook
:L'avantage est que c'est assez simple. L'inconvénient est qu'Emacs exécutera ce test après chaque commande , ce qui semble exagéré.
Option 2:
first-change-hook
,after-save-hook
etundo
Créez une fonction pour la
hl-line-mode
désactiver et la raccorderfirst-change-hook
. Créez une fonction pour l'activerhl-line-mode
et la connecterafter-save-hook
. Fournissez desafter
conseils sur la façonundo
dont elle s'allumehl-line-mode
lorsqu'une annulation a remis le tampon dans un état non modifié:L'avantage est qu'il appelle ces fonctions rarement plutôt qu'après chaque commande. L'inconvénient est que vous avez dû vous plonger dans des conseils, et il peut y avoir d'autres façons imprévues de mettre un tampon dans un état non modifié qui ne déclenchent pas l'
hl-line-mode
étape de «réactivation».la source
post-command-hook
.revert-buffer
semble être un autre cas courant qui mettrait le tampon dans un état non modifié. Vous pouvez utiliser leafter-revert-hook
pour gérer celui-ci.after-change-major-mode-hook
?add-hook
a unlocal
paramètre, donc si vous voulez simplement remplacer le comportement dans certains modes ou tampons majeurs, vous pouvez.