一千萬個為什麽

搜索

如何獲得模式行格式的窗口?

我想根據自己的臉定制模式線 是否選擇了特定窗口。假設我有這個:

(setq-default mode-line-format
              '((:eval (propertize
                        (format-mode-line
                         mode-line-buffer-identification)
                        'face (if nil
                                  'mode-line
                                'mode-line-inactive)))))

我想用一個謂詞來代替 nil 來檢查是否有 選擇當前窗口。我怎麽能這樣做?

最佳答案

嘗試這個:

(defvar my-selwin nil)

(defun foo (windows)
  (when (not (minibuffer-window-active-p (frame-selected-window)))
    (setq my-selwin (selected-window))))

(add-function :before pre-redisplay-function #'foo)

(setq-default mode-line-format
              '((:eval (propertize
                        (format-mode-line
                         mode-line-buffer-identification)
                        'face (if (eq my-selwin (get-buffer-window))
                                  'lazy-highlight
                                'highlight)))))

我相信簡單的測試(eq(選擇窗口)(get-buffer-window))(我的第一個答案,自刪除)的問題是redisplay運行的部分或全部窗口反過來,選擇每一個。我的回答在這裏記得重新開始時選擇的窗口,並與之比較。不是很優雅,但它似乎工作(但你需要至少Emacs 24.4。)

FWIW,我添加了一個小型庫, modeline-win.el ,這樣做:突出顯示所選窗口的模式行中的緩沖區ID。

轉載註明原文: 如何獲得模式行格式的窗口?