Nếu bạn muốn điều này hoạt động trong bất kỳ bộ đệm nào, không chỉ là bộ đệm truy cập tệp thì find-file-hook
không phù hợp. (Bạn đã nói " tất cả bộ đệm ", nhưng bạn cũng đã nói về " tệp " có thể chỉnh sửa / không thể chỉnh sửa .)
Nếu bạn muốn nó hoạt động trong tất cả các bộ đệm thì đây là một giải pháp:
(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)
Bạn có thể gói nó trong một lệnh chế độ nhỏ, nếu bạn muốn.
Một khả năng khác là sử dụng bộ đếm thời gian nhàn rỗi, nhưng post-command-hook
có vẻ tốt cho những gì bạn đang tìm kiếm.
Theo tôi biết, không có cái móc nào tương ứng với sự thay đổi trong buffer-read-only
. Tuy nhiên, nếu bạn sử dụng Emacs 26 trở lên thì bạn có thể sử dụng chức năng add-variable-watcher
để bật / tắt hiển thị khoảng trắng theo sau mỗi khi buffer-read-only
thay đổi biến.
(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))))