Saya tidak yakin itu mungkin. Tampaknya garis mode diperbarui hanya ketika jendelanya dipilih (pengujian menggunakan panggilan untuk message
menghapus ini). Dan kode yang melakukan ini adalah kode C, bukan Lisp.
Anda dapat menggunakan ekspresi kondisional dalam definisi mode-line-buffer-identification
, sehingga wajah yang digunakan dihitung secara dinamis. Tapi saya tidak tahu fungsi atau variabel apa pun yang dapat Anda gunakan untuk menguji apakah jendela yang diberikan memiliki mode-line tidak aktif.
Anda tidak dapat menggunakan selected-window
, misalnya, karena itu selalu menunjuk ke jendela dengan jalur mode aktif.
Berikut adalah contoh pembaruan dinamis yang didasarkan pada nama buffer. Bukan apa yang Anda inginkan, tetapi setidaknya menunjukkan kepada Anda apa yang dapat Anda lakukan. Jika Anda dapat menemukan cara untuk menguji apakah jendela yang diperbarui dipilih maka Anda dapat menggantikannya dengan tes nama buffer. (Tapi kesan saya adalah hanya jendela yang dipilih yang memperbarui baris mode.)
(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))))
Hal lain yang mungkin Anda coba adalah fungsi menasihati format-mode-line
. Tampaknya memang membedakan sebuah jendela dengan jalur mode aktif dari satu dengan jalur mode tidak aktif. Tetapi kode juga dalam C, jadi saya ragu Anda akan sangat jauh dengan menasihati itu. Ini menguji variabel C Qmode_line_inactive
, FWIW.
Saya sarankan mengajukan pertanyaan ini di salah satu milis Emacs (mis. help-gnu-emacs@gnu.org
), Jika Anda tidak mendapatkan jawaban yang memuaskan di sini. Sepertinya itu baik untuk dapat melakukan apa yang Anda minta. +1 untuk pertanyaan, dalam hal apa pun.