Je ne suis pas sûr que ce soit possible. Il semble que la ligne de mode ne soit mise à jour que lorsque sa fenêtre est sélectionnée (test à l'aide d'appels pour le message
confirmer). Et le code qui le fait est le code C, pas Lisp.
Vous pouvez utiliser une expression conditionnelle dans la définition de mode-line-buffer-identification
, afin que la face à utiliser soit calculée dynamiquement. Mais je ne connais aucune fonction ou variable que vous pouvez utiliser pour tester si une fenêtre donnée a une ligne de mode inactive.
Vous ne pouvez pas utiliser selected-window
, par exemple, car cela pointe toujours vers la fenêtre avec la ligne de mode active.
Voici un exemple de mise à jour dynamique basée sur le nom du tampon. Ce n'est pas ce que vous voulez, mais cela vous montre au moins ce que vous pouvez faire. Si vous pouvez trouver un moyen de tester si la fenêtre en cours de mise à jour est sélectionnée, vous pouvez la remplacer par le test du nom du tampon. (Mais j'ai l'impression que seule la fenêtre sélectionnée obtient sa ligne de mode mise à jour.)
(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))))
Une autre chose que vous pourriez essayer est de conseiller la fonction format-mode-line
. Il distingue apparemment une fenêtre avec une ligne de mode active de celle avec une ligne de mode inactive. Mais il est également codé en C, donc je doute que vous iriez très loin en le conseillant. Il teste la variable C Qmode_line_inactive
, FWIW.
Je suggère de poser cette question sur l'une des listes de diffusion d'Emacs (par exemple help-gnu-emacs@gnu.org
), si vous n'obtenez pas de réponse satisfaisante ici. On dirait qu'il pourrait être bon de pouvoir faire ce que vous demandez. +1 pour la question, en tout cas.