No estoy seguro de que sea posible. Parece que la línea de modo se actualiza solo cuando se selecciona su ventana (la prueba con llamadas lo message
confirma). Y el código que hace esto es el código C, no Lisp.
Puede usar una expresión condicional en la definición de mode-line-buffer-identification
, para que la cara a usar se calcule dinámicamente. Pero no conozco ninguna función o variable que pueda usar para probar si una ventana dada tiene una línea de modo inactiva.
No puede usar selected-window
, por ejemplo, porque eso siempre apunta a la ventana con la línea de modo activa.
Aquí hay un ejemplo de actualización dinámica que se basa en el nombre del búfer. No es lo que quieres, pero al menos te muestra lo que puedes hacer. Si puede encontrar una manera de probar si la ventana que se está actualizando está seleccionada, entonces puede sustituirla por la prueba de nombre de búfer. (Pero mi impresión es que solo la ventana seleccionada obtiene su línea de modo actualizada).
(setq-default mode-line-buffer-identification
'(:eval
(list (propertize "%b"
'face (if ;; NOPE (eq (selected-window) (get-buffer-window (current-buffer)))
(eq (current-buffer) (get-buffer "some-buffer"))
'mode-line-buffer-id
'some-other-face)
'help-echo "Buffer name mouse-1: Previous buffer\nmouse-3: Next buffer"
'mouse-face 'mode-line-highlight
'local-map mode-line-buffer-identification-keymap))))
Otra cosa que puedes probar es aconsejar la función format-mode-line
. Aparentemente distingue una ventana con una línea de modo activa de una con una línea de modo inactiva. Pero también está codificado en C, por lo que dudo que llegue muy lejos al aconsejarlo. Prueba la variable C Qmode_line_inactive
, FWIW.
Sugeriría hacer esta pregunta en una de las listas de correo de Emacs (por ejemplo help-gnu-emacs@gnu.org
), si no obtiene una respuesta satisfactoria aquí. Parece que podría ser bueno poder hacer lo que usted solicita. +1 para la pregunta, en cualquier caso.