それが可能かどうかはわかりません。モードラインは、ウィンドウが選択されている場合にのみ更新されるようです(呼び出しを使用してテストすると、message
これが発生します)。そして、これを行うコードはCコードであり、Lispではありません。
の定義で条件式を使用して、使用するmode-line-buffer-identification
面が動的に計算されるようにすることができます。しかし、特定のウィンドウに非アクティブなモードラインがあるかどうかをテストするために使用できる関数や変数については知りません。
selected-window
たとえば、は常にアクティブなモードラインのウィンドウを指すため、を使用することはできません。
これは、バッファ名に基づく動的更新の例です。それはあなたが望むものではありませんが、少なくともあなたが何ができるかを示しています。更新中のウィンドウが選択されているかどうかをテストする方法を考え出すことができる場合は、それをバッファー名テストの代わりに使用できます。(しかし、私の印象は、選択されたウィンドウだけがモードラインを更新するということです。)
(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))))
あなたが試みるかもしれないもう一つは機能に助言することformat-mode-line
です。それは明らかにアクティブなモードラインを持つウィンドウと非アクティブなモードラインを持つウィンドウを区別します。しかし、それもCでコーディングされているので、アドバイスするのが難しいかもしれません。C変数Qmode_line_inactive
、FWIWをテストします。
help-gnu-emacs@gnu.org
ここで十分な回答が得られない場合は、Emacsメーリングリスト(例:)のいずれかでこの質問をすることをお勧めします。あなたが要求したことを実行できるのは良いことのようです。いずれの場合も、質問の+1。