これを任意のバッファーで機能させたい場合は、ファイル訪問バッファーだけfind-file-hook
でなく、適切ではありません。(「すべてのバッファ」と言いましたが、編集可能/編集不可の「ファイル」についても話しました。)
すべてのバッファで機能させたい場合は、これが1つの解決策です。
(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)
必要に応じて、マイナーモードコマンドでそれをラップできます。
もう1つの可能性はアイドルタイマーを使用するpost-command-hook
ことですが、探しているものには問題ないようです。
私の知る限り、の変更に対応するフックはありませんbuffer-read-only
。ただし、Emacs 26以降を使用している場合は、関数add-variable-watcher
を使用して、変数buffer-read-only
が変更されるたびに末尾の空白を表示するかどうかを切り替えることができます。
(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))))