Search code examples
emacselispemacs-facesmodeline

Change Emacs Mode-Line color based on major-mode


I like to see if there is a way to change the mode-link foreground and background color base on the major-mode,

I was thinking to add the logic in the

(add-hook 'after-change-major-mode-hook

But, I do not have all the emacs lisp experience to make such change. Here is the logic:

switch major-mode:
case "emacs-lisp-mode":
  (set-face-foreground 'mode-line "ivory")
  (set-face-background 'mode-line "DarkOrange2")
case "ruby-mode":
  (set-face-foreground 'mode-line "white")
  (set-face-background 'mode-line "red")
...
default:
  (set-face-foreground 'mode-line "black")
  (set-face-background 'mode-line "white")
end switch

Many thanks in advance!.


Solution

  • You probably want something like:

    (add-hook 'emacs-lisp-mode-hook
              (lambda ()
                (face-remap-add-relative
                 'mode-line '((:foreground "ivory" :background "DarkOrange2") mode-line))))
    

    You might want to use face-remap for the mode-line-inactive face as well.