A fancy and fast mode-line inspired by minimalism design.
Find a file
vjoki caf3a3b770
Various fixes
1. Make helm icon color consistent with major-mode icon.
2. Attempt to fix missing colors.
   Prevent mode-line face from overriding properties that resulted in lack of colors in checker, lsp, vcs, and buffer-info segments. It's possible that there are still more instances of these.
   This is just a quick fix, there should be a better way to do this.
3. Reduce checker jumpiness/flicker by retaining the existing text while the checker is running.
4. Refactor segment whitespace.
   Attempt at fixing most of the cases of whitespace with no inactive properties.
   Occurs for example when activating helm M-x.
2019-05-15 14:01:13 +03:00
.github/ISSUE_TEMPLATE Update issue templates 2019-01-02 16:39:35 +08:00
test Update env parse tests 2019-03-06 23:27:33 -05:00
.gitignore Update git ignore. 2018-08-23 16:41:09 +08:00
.travis.yml Update evm to latest version. 2019-04-24 23:04:25 +08:00
_config.yml Set theme jekyll-theme-cayman 2018-07-05 15:29:34 +08:00
Cask Add cask package task in CI. 2018-12-25 04:53:44 +08:00
doom-modeline-core.el Various fixes 2019-05-15 14:01:13 +03:00
doom-modeline-env.el No-op if env executable doesn't exist 2019-03-12 16:20:30 -04:00
doom-modeline-segments.el Various fixes 2019-05-15 14:01:13 +03:00
doom-modeline.el Bump version to 2.2.0. 2019-05-14 02:13:12 +08:00
LICENSE Initial commit 2018-06-11 23:20:04 +08:00
README.md Update README. 2019-05-14 02:15:57 +08:00

doom-modeline

Build Status MELPA MELPA Stable License

A fancy and fast mode-line inspired by minimalism design.

It's integrated into Doom Emacs and Centaur Emacs.

Feature

The doom-modeline was designed for minimalism, and offers:

  • A match count panel (for anzu, iedit, multiple-cursors, symbol-overlay, evil-search and evil-substitute)
  • An indicator for recording a macro
  • Current environment version (e.g. python, ruby, go, etc.) in the major-mode
  • A customizable mode-line height (see doom-modeline-height)
  • A minor modes segment which is compatible with minions
  • An error/warning count segment for flymake/flycheck
  • A workspace number segment for eyebrowse
  • A perspective name segment for persp-mode
  • A window number segment for ace-window, winum and window-numbering
  • An indicator for modal editing state, including evil, god, ryo and xah-fly-keys, etc.
  • An indicator for remote host
  • An indicator for debug state
  • An indicator for current input method
  • An indicator for LSP state with lsp-mode or eglot
  • An indicator for github notifications
  • An indicator for unread emails with mu4e-alert
  • An indicator for irc notifications with circe
  • An indicator for buffer position which is compatible with nyan-mode
  • An indicator for party parrot
  • An indicator for PDF page number with pdf-tools
  • An indicator for battery status with fancy-battery
  • Truncated file name, file icon, buffer state and project name in buffer information segment, which is compatible with projectile and project
  • New mode-line for Info-mode buffers
  • New package mode-line for paradox
  • New mode-line for helm buffers

Screenshots

modeline

search_replace

macro

no_icons

color_icon_cpp

color_icon_java

color_icon_elisp

evil_normal_state

evil_insert_state

lsp_version

perspective

notifications

minions

debug

nyan_parrot

battery

package

info

helm

Install

Manual

From melpa, M-x package-install RET doom-modeline RET.

In init.el,

(require 'doom-modeline)
(doom-modeline-mode 1)

Use-package

(use-package doom-modeline
      :ensure t
      :hook (after-init . doom-modeline-mode))

This package requires the fonts included with all-the-icons to be installed. Run M-x all-the-icons-install-fonts to do so. Please refer to the installation guide.

Strongly recommend to use doom-themes at the same time.

Customize

;; How tall the mode-line should be (only respected in GUI Emacs).
(setq doom-modeline-height 25)

;; How wide the mode-line bar should be (only respected in GUI Emacs).
(setq doom-modeline-bar-width 3)

;; Determines the style used by `doom-modeline-buffer-file-name'.
;;
;; Given ~/Projects/FOSS/emacs/lisp/comint.el
;;   truncate-upto-project => ~/P/F/emacs/lisp/comint.el
;;   truncate-from-project => ~/Projects/FOSS/emacs/l/comint.el
;;   truncate-with-project => emacs/l/comint.el
;;   truncate-except-project => ~/P/F/emacs/l/comint.el
;;   truncate-upto-root => ~/P/F/e/lisp/comint.el
;;   truncate-all => ~/P/F/e/l/comint.el
;;   relative-from-project => emacs/lisp/comint.el
;;   relative-to-project => lisp/comint.el
;;   file-name => comint.el
;;   buffer-name => comint.el<2> (uniquify buffer name)
;;
;; If you are expereicing the laggy issue, especially while editing remote files
;; with tramp, please try `file-name' style.
;; Please refer to https://github.com/bbatsov/projectile/issues/657.
(setq doom-modeline-buffer-file-name-style 'truncate-upto-project)

;; Whether display icons in mode-line or not.
(setq doom-modeline-icon t)

;; Whether display the icon for major mode. It respects `doom-modeline-icon'.
(setq doom-modeline-major-mode-icon t)

;; Whether display color icons for `major-mode'. It respects
;; `doom-modeline-icon' and `all-the-icons-color-icons'.
(setq doom-modeline-major-mode-color-icon t)

;; Whether display icons for buffer states. It respects `doom-modeline-icon'.
(setq doom-modeline-buffer-state-icon t)

;; Whether display buffer modification icon. It respects `doom-modeline-icon'
;; and `doom-modeline-buffer-state-icon'.
(setq doom-modeline-buffer-modification-icon t)

;; Whether display minor modes in mode-line or not.
(setq doom-modeline-minor-modes nil)

;; If non-nil, a word count will be added to the selection-info modeline segment.
(setq doom-modeline-enable-word-count nil)

;; Whether display buffer encoding.
(setq doom-modeline-buffer-encoding t)

;; Whether display indentation information.
(set doom-modeline-indent-info nil)

;; If non-nil, only display one number for checker information if applicable.
(setq doom-modeline-checker-simple-format t)
  
;; The maximum displayed length of the branch name of version control.
(setq doom-modeline-vcs-max-length 12)

;; Whether display perspective name or not. Non-nil to display in mode-line.
(setq doom-modeline-persp-name t)

;; Whether display `lsp' state or not. Non-nil to display in mode-line.
(setq doom-modeline-lsp t)

;; Whether display github notifications or not. Requires `ghub` package.
(setq doom-modeline-github nil)

;; The interval of checking github.
(setq doom-modeline-github-interval (* 30 60))

;; Whether display environment version or not
(setq doom-modeline-env-version t)
;; Or for individual languages
(setq doom-modeline-env-enable-python t)
(setq doom-modeline-env-enable-ruby t)
(setq doom-modeline-env-enable-perl t)
(setq doom-modeline-env-enable-go t)
(setq doom-modeline-env-enable-elixir t)
(setq doom-modeline-env-enable-rust t)

;; Change the executables to use for the language version string
(setq doom-modeline-env-python-executable "python")
(setq doom-modeline-env-ruby-executable "ruby")
(setq doom-modeline-env-perl-executable "perl")
(setq doom-modeline-env-go-executable "go")
(setq doom-modeline-env-elixir-executable "iex")
(setq doom-modeline-env-rust-executable "rustc")

;; Whether display mu4e notifications or not. Requires `mu4e-alert' package.
(setq doom-modeline-mu4e t)

;; Whether display irc notifications or not. Requires `circe' package.
(setq doom-modeline-irc t)

;; Function to stylize the irc buffer names.
(setq doom-modeline-irc-stylize 'identity)

FAQ

  1. I am experiencing the laggy issue, how to resolve it?

    Add this configuration into your init file:

    ;; Dont compact font caches during GC.
    (setq inhibit-compacting-font-caches t)
    
  2. A ridiculous path is displayed on mode-line while visiting a symbolink.

    It's the default behaviors of Vanilla Emacs. If you want to display the real names, please put this into your init file.

    (setq find-file-visit-truename t)
    

    If the file is controlled by vc, refer to the documentation of vc-follow-symlinks.

  3. Can I add my mode-line segments myself? How to do that?

    Of course. Just add the segments into global-mode-string.

  4. Why doesn't change of branch reflect in modeline?

    Actually it's related to magit and vc-mode.

  5. How can I define my own mode-line?

    Use doom-modeline-def-modeline to define your own mode-line and set it as default.

    For example:

    • Define your custom doom-modeline
    (doom-modeline-def-modeline 'my-simple-line
      '(bar matches buffer-info remote-host buffer-position parrot selection-info)
      '(misc-info minor-modes input-method buffer-encoding major-mode process vcs checker))
    
    • Set it to default using the doom-modeline-mode-hook:
    (defun setup-custom-doom-modeline ()
      (doom-modeline-set-modeline 'my-simple-line 'default))
    
    (add-hook 'doom-modeline-mode-hook 'setup-custom-doom-modeline)