Non sono sicuro che sia possibile. Sembra che la riga della modalità sia aggiornata solo quando è selezionata la sua finestra (test usando le chiamate per message
confermarlo). E il codice che fa questo è il codice C, non Lisp.
È possibile utilizzare un'espressione condizionale nella definizione di mode-line-buffer-identification
, in modo che la faccia da utilizzare venga calcolata in modo dinamico. Ma non conosco alcuna funzione o variabile che è possibile utilizzare per verificare se una determinata finestra ha una linea di modalità inattiva.
Non è possibile utilizzare selected-window
, ad esempio, perché punta sempre alla finestra con la linea di modalità attiva.
Ecco un esempio di aggiornamento dinamico basato sul nome del buffer. Non è quello che vuoi, ma almeno ti mostra cosa puoi fare. Se riesci a trovare un modo per verificare se la finestra da aggiornare è selezionata, puoi sostituirla con il test del nome del buffer. (Ma la mia impressione è che solo la finestra selezionata ottiene la sua linea di modalità aggiornata.)
(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))))
Un'altra cosa che potresti provare è consigliare la funzione format-mode-line
. Apparentemente distingue una finestra con una linea di modalità attiva da una con una linea di modalità inattiva. Ma anche questo è codificato in C, quindi dubito che andrai molto lontano nel consigliarlo. Qmode_line_inactive
Verifica la variabile C , FWIW.
Suggerirei di porre questa domanda su una delle mailing list di Emacs (ad esempio help-gnu-emacs@gnu.org
), se non ottieni una risposta soddisfacente qui. Sembra che potrebbe essere bello poter fare ciò che richiedi. +1 per la domanda, in ogni caso.