Pero esto solo parece funcionar si lo habilito read-only-modemanualmente. Cuando abro un búfer que se convierte en solo lectura automáticamente (por ejemplo, un archivo de solo lectura), el gancho no se ejecuta.
¿Hay un gancho que se ejecute para todos los buffers de solo lectura?
Si desea que esto actúe en cualquier búfer, no solo un búfer de visita de archivos, entonces find-file-hookno 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-hookparece 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-watcherpara encender / apagar mostrando espacios en blanco finales cada vez que buffer-read-onlyse 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))))
Parece un poco exagerado ejecutar esta función después de cada comando. ¿No es su manera más simple?
Moyamo
@Moyamo Pruébalo, luego decide si crees que hace que emacs sea lento. Mi apuesta es que no notará ninguna desaceleración o un mayor uso de la CPU debido a este código. Si está preocupado, asegúrese de que my-show-trailing-wsesté compilado.
Harald Hanche-Olsen
La solución de vigilancia variable para Emacs 26 funciona bien.
GDP2
1
Puede usar find-file-hooky verificar el estado de solo lectura del búfer:
my-show-trailing-ws
esté compilado.Puede usar
find-file-hook
y verificar el estado de solo lectura del búfer:fuente