#+title:    :ui modeline
#+subtitle: Snazzy, Atom-inspired modeline, plus API
#+created:  February 20, 2017
#+since:    2.0.0

* Description :unfold:
This module provides an Atom-inspired, minimalistic modeline for Doom Emacs,
powered by the [[doom-package:doom-modeline]] package (where you can find screenshots).

** Maintainers
- [[doom-user:][@hlissner]]

[[doom-contrib-maintainer:][Become a maintainer?]]

** Module flags
- +light ::
  Enable a lighter, less featureful version of the modeline that does not depend
  on [[doom-package:doom-modeline]], which has performances issues in some cases.

** Packages
- [[doom-package:anzu]]
- [[doom-package:doom-modeline]] unless [[doom-module:+light]]
- [[doom-package:evil-anzu]] if [[doom-module::editor evil]]

** Hacks
/No hacks documented for this module./

** TODO Changelog
# This section will be machine generated. Don't edit it by hand.
/This module does not have a changelog yet./

* Installation
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]

/This module has no external requirements./

* TODO Usage
#+begin_quote
 󱌣 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote

** Hiding the modeline
- You can use ~M-x hide-mode-line-mode RET~ to hide modeline for the current
  buffer.
- Also, there is ~global-hide-mode-line-mode~ for globally hiding modeline. You
  can just add =(global-hide-mode-line-mode)= into =~/.doom.d/config.el~.
- ~hide-mode-line-excluded-modes~ can be set for preventing
  ~global-hide-mode-line-mode~ hiding modeline for buffers with the
  corresponding major modes.

** TODO Switching the modeline and header line

* TODO Configuration
#+begin_quote
 󱌣 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote

** TODO Changing the default modeline

** TODO Activating a format

** TODO Defining a modeline format

** TODO Defining a modeline segment

** TODO Extracting Doom's modeline into your config

* Troubleshooting
[[doom-report:][Report an issue?]]

** Where are my minor modes?
I rarely need to know what minor modes are active, so I removed them. ~M-x
doom/describe-active-minor-mode~ was written to substitute for it.

** Icons in my modeline look strange
1. Check whether ~nerd-icons~ are installed. Run ~M-x
   nerd-icons-install-fonts~ to install the resource fonts. Note that
   ~nerd-icons~ only support GUI. See [[https://github.com/domtronn/nerd-icons.el][nerd-icons]] for details.

2. ~cnfonts~ will conflict with ~nerd-icons~. You can refer the following
   workaround:
    #+begin_src emacs-lisp
    ;; See https://github.com/seagle0128/doom-modeline/issues/278#issuecomment-569510336
    ;; Add to $DOOMDIR/packages.el
    (package! cnfonts)
    ;; Add to $DOOMDIR/config.el
    (add-hook 'after-setting-font-hook #'cnfonts-set-font)
    #+end_src

** The right side of the modeline is cut off
I believe the consensus is: this is due to oversized icons, i.e. a font issue.
Some possible solutions:

1. Add some padding to the modeline definition:
    #+begin_src emacs-lisp
    (after! doom-modeline
      (doom-modeline-def-modeline 'main
        '(bar matches buffer-info remote-host buffer-position parrot selection-info)
        '(misc-info minor-modes check input-method buffer-encoding major-mode process vcs "  "))) ; <-- added padding here
    #+end_src

2. Use another font for the mode line (or a different ~:height~) (source)
    #+begin_src emacs-lisp
    (custom-set-faces!
      '(mode-line :family "Noto Sans" :height 0.9)
      '(mode-line-inactive :family "Noto Sans" :height 0.9))
    #+end_src

(Mentioned in [[doom-ref:][#1680]], [[doom-ref:][#278]] and [[https://github.com/seagle0128/doom-modeline/issues/334][seagle0128/doom-modeline#334]])

4. Change the width of icon characters in ~char-width-table~:
    #+begin_src emacs-lisp
    (add-hook! 'doom-modeline-mode-hook
      (let ((char-table char-width-table))
        (while (setq char-table (char-table-parent char-table)))
        (dolist (pair doom-modeline-rhs-icons-alist)
          (let ((width 2)  ; <-- tweak this
                (chars (cdr pair))
                (table (make-char-table nil)))
            (dolist (char chars)
              (set-char-table-range table char width))
            (optimize-char-table table)
            (set-char-table-parent table char-table)
            (setq char-width-table table)))))
    #+end_src

   If this doesn't help, try different values for ~width~ such as ~width 1~ or
   ~width 3~.

* Frequently asked questions
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]

* TODO Appendix
#+begin_quote
 󱌣 /This module's appendix is incomplete./ [[doom-contrib-module:][Write more?]]
#+end_quote

** Autodefs
- ~def-modeline-format! NAME LEFT &optional RIGHT~
- ~def-modeline-segment! NAME &rest REST~
- ~set-modeline! NAME &optional DEFAULT~

** Variables
- doom-modeline-height
- doom-modeline-bar-width
- doom-modeline-buffer-file-name-style
- doom-modeline-icon
- doom-modeline-major-mode-icon
- doom-modeline-major-mode-color-icon
- doom-modeline-buffer-state-icon
- doom-modeline-buffer-modification-icon
- doom-modeline-minor-modes
- doom-modeline-enable-word-count
- doom-modeline-buffer-encoding
- doom-modeline-indent-info
- doom-modeline-checker-simple-format
- doom-modeline-vcs-max-length
- doom-modeline-persp-name
- doom-modeline-lsp
- doom-modeline-github
- doom-modeline-github-interval
- doom-modeline-env-version
- doom-modeline-mu4e
- doom-modeline-irc
- doom-modeline-irc-stylize

** Faces
- doom-modeline-buffer-path
- doom-modeline-buffer-file
- doom-modeline-buffer-modified
- doom-modeline-buffer-major-mode
- doom-modeline-buffer-minor-mode
- doom-modeline-project-parent-dir
- doom-modeline-project-dir
- doom-modeline-project-root-dir
- doom-modeline-highlight
- doom-modeline-panel
- doom-modeline-debug
- doom-modeline-info
- doom-modeline-warning
- doom-modeline-urgent
- doom-modeline-unread-number
- doom-modeline-bar
- doom-modeline-inactive-bar
- doom-modeline-evil-emacs-state
- doom-modeline-evil-insert-state
- doom-modeline-evil-motion-state
- doom-modeline-evil-normal-state
- doom-modeline-evil-operator-state
- doom-modeline-evil-visual-state
- doom-modeline-evil-replace-state
- doom-modeline-persp-name
- doom-modeline-persp-buffer-not-in-persp
