Se você deseja que ele atue em qualquer buffer, não apenas um buffer de visita a arquivos, find-file-hook
não é apropriado. (Você disse " todos os buffers ", mas também falou de " arquivos " editáveis / não editáveis .)
Se você deseja que ele funcione em todos os buffers, esta é uma solução:
(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)
Você pode agrupar isso em um comando no modo secundário, se desejar.
Outra possibilidade é usar um timer inativo, mas post-command-hook
parece adequado para o que você está procurando.
Até onde eu sei, não há gancho que corresponda a uma alteração buffer-read-only
. No entanto, se você usar o Emacs 26 ou posterior, poderá usar a função add-variable-watcher
para ativar / desativar a exibição de espaço em branco à direita sempre que a variável buffer-read-only
for alterada.
(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))))