根据缓冲区状态更改模式行的颜色

use*_*592 4 emacs

有没有一种方法可以根据特定条件动态更改模式行的颜色,例如,如果我处于缩小视图,则更改颜色,如果缓冲区是只读的,则更改为其他颜色

非常感谢你!

d11*_*wtq 5

您可以使用post-command-hook,然后只评估所需的内容并设置模式线的脸部颜色。我这样做是在3种颜色之间切换,具体取决于我所处的邪恶模式状态以及缓冲区是否有未保存的更改。

(lexical-let ((default-color (cons (face-background 'mode-line)
                                   (face-foreground 'mode-line))))
  (add-hook 'post-command-hook
    (lambda ()
      (let ((color (cond ((minibufferp) default-color)
                         ((evil-insert-state-p) '("#e80000" . "#ffffff"))
                         ((evil-emacs-state-p)  '("#af00d7" . "#ffffff"))
                         ((buffer-modified-p)   '("#006fa0" . "#ffffff"))
                         (t default-color))))
        (set-face-background 'mode-line (car color))
        (set-face-foreground 'mode-line (cdr color))))))
Run Code Online (Sandbox Code Playgroud)