Tôi không chắc là có thể. Có vẻ như dòng chế độ chỉ được cập nhật khi cửa sổ của nó được chọn (kiểm tra bằng cách sử dụng các lệnh gọi để thực message
hiện điều này). Và mã thực hiện điều này là mã C, không phải Lisp.
Bạn có thể sử dụng biểu thức điều kiện trong định nghĩa mode-line-buffer-identification
, để khuôn mặt được sử dụng được tính toán linh hoạt. Nhưng tôi không biết bất kỳ chức năng hoặc biến nào mà bạn có thể sử dụng để kiểm tra xem một cửa sổ đã cho có dòng chế độ không hoạt động hay không.
Bạn không thể sử dụng selected-window
, ví dụ, bởi vì điều đó luôn trỏ đến cửa sổ với dòng chế độ hoạt động.
Dưới đây là một ví dụ về cập nhật động dựa trên tên bộ đệm. Đó không phải là những gì bạn muốn, nhưng ít nhất nó cho bạn thấy những gì bạn có thể làm. Nếu bạn có thể đưa ra một cách để kiểm tra xem cửa sổ đang được cập nhật có được chọn hay không thì bạn có thể thay thế cho kiểm tra tên bộ đệm. (Nhưng ấn tượng của tôi là chỉ có cửa sổ được chọn mới được cập nhật dòng chế độ.)
(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))))
Một điều khác bạn có thể thử là tư vấn chức năng format-mode-line
. Nó rõ ràng phân biệt một cửa sổ với một dòng chế độ hoạt động với một dòng chế độ không hoạt động. Nhưng nó cũng được mã hóa bằng C, vì vậy tôi nghi ngờ bạn sẽ đi rất xa với việc tư vấn cho nó. Nó kiểm tra biến C Qmode_line_inactive
, FWIW.
Tôi khuyên bạn nên hỏi câu hỏi này trên một trong các danh sách gửi thư của Emacs (ví dụ help-gnu-emacs@gnu.org
), nếu bạn không nhận được câu trả lời thỏa đáng ở đây. Có vẻ như nó có thể là tốt để có thể làm những gì bạn yêu cầu. +1 cho câu hỏi, trong mọi trường hợp.