根据evil和内置输入法的状态调整modeline的背景色

参考各位前辈的代码做了一些定制:

1、感觉用边框颜色指示 evil 状态更合理(不会影响 modeline 其他信息的背景色)

2、修改了更新边框颜色的 hook,感觉这样更加合理

(defun my/update-modeline-box (&rest _)
  (unless (minibufferp)
    (when (eq (window-buffer (selected-window)) (current-buffer))
      (let* ((face (cond
                    ((evil-normal-state-p) 'doom-modeline-evil-normal-state)
                    ((evil-emacs-state-p) 'doom-modeline-evil-emacs-state)
                    ((evil-insert-state-p) 'doom-modeline-evil-insert-state)
                    ((evil-motion-state-p) 'doom-modeline-evil-motion-state)
                    ((evil-visual-state-p) 'doom-modeline-evil-visual-state)
                    ((evil-operator-state-p) 'doom-modeline-evil-operator-state)
                    ((evil-replace-state-p) 'doom-modeline-evil-replace-state)
                    (t 'doom-modeline-evil-user-state)))
             (color (face-foreground face nil t)))
        (set-face-attribute 'mode-line-active nil :box `(:line-width (-1 . -2) :color ,color))))))
(add-hook 'evil-emacs-state-entry-hook #'my/update-modeline-box)
(add-hook 'evil-insert-state-entry-hook #'my/update-modeline-box)
(add-hook 'evil-motion-state-entry-hook #'my/update-modeline-box)
(add-hook 'evil-normal-state-entry-hook #'my/update-modeline-box)
(add-hook 'evil-visual-state-entry-hook #'my/update-modeline-box)
(add-hook 'evil-replace-state-entry-hook #'my/update-modeline-box)
(add-hook 'evil-operator-state-entry-hook #'my/update-modeline-box)
(add-hook 'window-buffer-change-functions #'my/update-modeline-box)
(add-hook 'window-selection-change-functions #'my/update-modeline-box)

output

4 个赞