Não tenho certeza se é possível. Parece que a linha de modo é atualizada somente quando sua janela é selecionada (teste usando chamadas para comprovar message
isso). E o código que faz isso é o código C, não o Lisp.
Você pode usar uma expressão condicional na definição de mode-line-buffer-identification
, para que a face a ser usada seja computada dinamicamente. Mas não conheço nenhuma função ou variável que você possa usar para testar se uma determinada janela possui uma linha de modo inativa.
Você não pode usar selected-window
, por exemplo, porque isso sempre aponta para a janela com a linha de modo ativa.
Aqui está um exemplo de atualização dinâmica baseada no nome do buffer. Não é o que você deseja, mas pelo menos mostra o que você pode fazer. Se você puder encontrar uma maneira de testar se a janela que está sendo atualizada está selecionada, poderá substituí-la pelo teste de nome do buffer. (Mas minha impressão é que apenas a janela selecionada recebe sua linha de modo atualizada.)
(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))))
Outra coisa que você pode tentar é aconselhar a função format-mode-line
. Aparentemente, distingue uma janela com uma linha de modo ativa de uma com uma linha de modo inativa. Mas também está codificado em C, então duvido que você vá muito longe ao aconselhá-lo. Testa a variável C Qmode_line_inactive
, FWIW.
Eu sugiro fazer essa pergunta em uma das listas de discussão do Emacs (por exemplo help-gnu-emacs@gnu.org
), se você não receber uma resposta satisfatória aqui. Parece que seria bom poder fazer o que você solicitou. +1 para a pergunta, em qualquer caso.