Si desea que esto actúe en cualquier búfer, no solo un búfer de visita de archivos, entonces find-file-hook
no es apropiado. (Usted dijo " todos los buffers ", pero también habló de " archivos " editables / no editables ).
Si desea que funcione en todos los buffers, esta es una solución:
(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)
Puede ajustar eso en un comando de modo menor, si lo desea.
Otra posibilidad es usar un temporizador inactivo, pero post-command-hook
parece estar bien para lo que estás buscando.
Que yo sepa, no hay gancho que corresponda a un cambio en buffer-read-only
. Sin embargo, si usa Emacs 26 o posterior, puede usar la función add-variable-watcher
para encender / apagar mostrando espacios en blanco finales cada vez que buffer-read-only
se cambia la variable .
(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))))