Wenn Sie möchten, dass dies in einem beliebigen Puffer funktioniert, nicht nur in einem Puffer, der Dateien besucht, find-file-hook
ist dies nicht geeignet. (Sie sagten " alle Puffer ", aber Sie sprachen auch von bearbeitbaren / nicht bearbeitbaren " Dateien ".)
Wenn Sie möchten, dass es in allen Puffern funktioniert, ist dies eine Lösung:
(defun my-show-trailing-ws ()
"Show trailing whitespace in the current buffer, unless it is read-only."
(setq-local show-trailing-whitespace (not buffer-read-only)))
(add-hook 'post-command-hook 'my-show-trailing-ws)
Sie können dies in einen Nebenmodus-Befehl einschließen, wenn Sie möchten.
Eine andere Möglichkeit ist die Verwendung eines Leerlauf-Timers, der jedoch post-command-hook
für das, was Sie suchen , in Ordnung zu sein scheint.
Soweit ich weiß, gibt es keinen Haken, der einer Änderung in entspricht buffer-read-only
. Wenn Sie jedoch Emacs 26 oder höher verwenden, können Sie die Funktion add-variable-watcher
zum Ein- und Ausschalten des nachgestellten Leerzeichens verwenden, wenn eine Variable buffer-read-only
geändert wird.
(add-variable-watcher 'buffer-read-only 'foo) ; Add watcher `foo'
(defun foo (symbol newval operation where) ; 100% untested...
"Show trailing whitespace in the current buffer, unless it is read-only."
(when (and (eq symbol 'buffer-read-only)
(memq operation '(set let))
(eq where (current-buffer)))
(setq-local show-trailing-whitespace (not newval))))