2018-07-29 02:50:16 +02:00
|
|
|
;;; ui/modeline/config.el -*- lexical-binding: t; -*-
|
|
|
|
|
2019-03-01 15:12:27 -05:00
|
|
|
;; TODO Add themes (default, minimal, spacemacs, etc)
|
|
|
|
|
|
|
|
(def-package! doom-modeline
|
2019-03-04 20:35:47 -05:00
|
|
|
:hook (after-init . doom-modeline-mode)
|
|
|
|
:init
|
2019-04-09 14:35:11 -04:00
|
|
|
(unless after-init-time
|
|
|
|
;; prevent flash of unstyled modeline at startup
|
|
|
|
(setq-default mode-line-format nil))
|
2019-03-01 15:12:27 -05:00
|
|
|
;; We display project info in the modeline ourselves
|
|
|
|
(setq projectile-dynamic-mode-line nil)
|
2019-03-04 20:35:47 -05:00
|
|
|
;; Set these early so they don't trigger variable watchers
|
2019-03-01 15:12:27 -05:00
|
|
|
(setq doom-modeline-bar-width 3
|
|
|
|
doom-modeline-github nil
|
|
|
|
doom-modeline-mu4e nil
|
|
|
|
doom-modeline-persp-name nil
|
|
|
|
doom-modeline-minor-modes nil
|
|
|
|
doom-modeline-major-mode-icon nil
|
|
|
|
doom-modeline-buffer-file-name-style 'relative-from-project)
|
2019-03-25 01:28:29 -04:00
|
|
|
|
|
|
|
;; Fix modeline icons in daemon-spawned graphical frames. We have our own
|
|
|
|
;; mechanism for disabling all-the-icons, so we don't need doom-modeline to do
|
|
|
|
;; it for us. However, this may cause unwanted padding in the modeline in
|
|
|
|
;; daemon-spawned terminal frames. If it bothers you, you may prefer
|
|
|
|
;; `doom-modeline-icon' set to `nil'.
|
|
|
|
(when (daemonp)
|
|
|
|
(setq doom-modeline-icon t))
|
2019-03-04 20:35:47 -05:00
|
|
|
:config
|
2019-03-01 15:12:27 -05:00
|
|
|
(add-hook 'doom-modeline-mode-hook #'size-indication-mode) ; filesize in modeline
|
|
|
|
(add-hook 'doom-modeline-mode-hook #'column-number-mode) ; cursor column in modeline
|
2018-08-03 18:06:44 +02:00
|
|
|
|
2019-03-01 15:12:27 -05:00
|
|
|
(add-hook 'doom-big-font-mode-hook #'+modeline|resize-for-big-font)
|
|
|
|
(add-hook 'doom-load-theme-hook #'doom-modeline-refresh-bars)
|
2019-03-04 20:35:47 -05:00
|
|
|
|
2019-03-01 15:12:27 -05:00
|
|
|
(add-hook '+doom-dashboard-mode-hook #'doom-modeline-set-project-modeline)
|
2019-03-11 12:58:53 -04:00
|
|
|
|
2019-03-13 18:46:06 -04:00
|
|
|
;; Don't eager-load project.el. Doom only uses projectile anyway, for now.
|
|
|
|
(defun +modeline*project-root ()
|
|
|
|
(or doom-modeline-project-root
|
|
|
|
(setq doom-modeline-project-root
|
|
|
|
(file-local-name
|
2019-03-13 23:59:13 -04:00
|
|
|
(or (and (featurep 'projectile) (ignore-errors (projectile-project-root)))
|
|
|
|
default-directory)))))
|
2019-03-13 18:46:06 -04:00
|
|
|
(advice-add #'doom-modeline-project-root :override #'+modeline*project-root)
|
|
|
|
|
2019-03-11 12:58:53 -04:00
|
|
|
;; Magit -- modeline only where it's useful
|
|
|
|
(defun +modeline|hide-in-non-status-buffer ()
|
|
|
|
(if (eq major-mode 'magit-status-mode)
|
|
|
|
(doom-modeline-set-project-modeline)
|
|
|
|
(hide-mode-line-mode)))
|
2019-04-15 04:09:39 -04:00
|
|
|
(remove-hook 'magit-mode-hook #'doom-modeline-set-project-modeline)
|
2019-03-11 12:58:53 -04:00
|
|
|
(add-hook 'magit-mode-hook #'+modeline|hide-in-non-status-buffer)
|
2018-07-29 02:50:16 +02:00
|
|
|
|
2019-03-03 21:58:32 -05:00
|
|
|
;; Show indentation style in modeline. I'm not using
|
|
|
|
;; `doom-modeline-def-segment' to prevent eager macro expansion from loading
|
|
|
|
;; the package too soon.
|
|
|
|
(defun +modeline-indent-segment ()
|
|
|
|
"indent modeline segment"
|
|
|
|
(propertize (format "%s%d"
|
|
|
|
(if indent-tabs-mode "⭾" "␣")
|
|
|
|
tab-width)
|
2019-03-07 23:21:58 -05:00
|
|
|
'face (if (doom-modeline--active) 'mode-line 'mode-line-inactive)
|
2019-03-03 21:58:32 -05:00
|
|
|
'mouse-face 'mode-line-highlight
|
|
|
|
'help-echo
|
2019-03-04 17:41:14 -05:00
|
|
|
(let ((subsegs
|
|
|
|
(list (format "Indentation style: %s (%d wide)"
|
|
|
|
(if indent-tabs-mode "tabs" "spaces")
|
|
|
|
tab-width)
|
|
|
|
(cond ((eq doom-inhibit-indent-detection 'editorconfig)
|
|
|
|
(propertize "✓ Editorconfig applied" 'face 'success))
|
|
|
|
(doom-inhibit-indent-detection
|
|
|
|
(propertize "✘ Indentation auto-detection disabled" 'face 'warning))
|
|
|
|
((bound-and-true-p dtrt-indent-original-indent)
|
|
|
|
(propertize (format "✓ Indentation auto-detected (original: %s)"
|
|
|
|
dtrt-indent-original-indent)
|
|
|
|
'face 'success)))
|
|
|
|
(when (bound-and-true-p ws-butler-mode)
|
|
|
|
(propertize "✓ ws-butler active (whitespace cleanup on save)"
|
|
|
|
'face 'success)))))
|
|
|
|
(string-join (delq nil subsegs) " "))))
|
2019-03-03 21:58:32 -05:00
|
|
|
(add-to-list 'doom-modeline-fn-alist '(indent . +modeline-indent-segment))
|
|
|
|
|
2019-03-01 15:12:27 -05:00
|
|
|
;; Remove unused segments & extra padding
|
|
|
|
(doom-modeline-def-modeline 'main
|
2019-03-09 03:41:26 -05:00
|
|
|
'(bar window-number matches buffer-info remote-host buffer-position selection-info)
|
2019-03-03 21:58:32 -05:00
|
|
|
'(misc-info persp-name irc mu4e github debug indent input-method buffer-encoding lsp major-mode process vcs checker))
|
2018-07-29 02:50:16 +02:00
|
|
|
|
2019-03-01 15:12:27 -05:00
|
|
|
(doom-modeline-def-modeline 'special
|
2019-03-09 03:41:26 -05:00
|
|
|
'(bar window-number matches buffer-info-simple buffer-position selection-info)
|
2019-03-01 15:12:27 -05:00
|
|
|
'(misc-info persp-name debug input-method irc-buffers buffer-encoding lsp major-mode process checker))
|
2018-07-29 02:50:16 +02:00
|
|
|
|
2019-03-01 15:12:27 -05:00
|
|
|
(doom-modeline-def-modeline 'project
|
2019-03-09 03:41:26 -05:00
|
|
|
'(bar window-number buffer-default-directory)
|
2019-03-11 12:54:16 -04:00
|
|
|
'(misc-info mu4e github debug fancy-battery " " major-mode process))
|
2019-03-04 11:57:14 -05:00
|
|
|
|
|
|
|
;; Some functions modify the buffer, causing the modeline to show a false
|
|
|
|
;; modified state, so we try to force them to behave.
|
|
|
|
(defun +modeline*inhibit-modification-hooks (orig-fn &rest args)
|
|
|
|
(with-silent-modifications (apply orig-fn args)))
|
2019-03-04 14:08:25 -05:00
|
|
|
(advice-add #'ws-butler-after-save :around #'+modeline*inhibit-modification-hooks))
|
2018-07-29 02:50:16 +02:00
|
|
|
|
|
|
|
|
|
|
|
;;
|
2019-03-01 15:12:27 -05:00
|
|
|
;; Extensions
|
2018-07-29 02:50:16 +02:00
|
|
|
|
|
|
|
(def-package! anzu
|
2019-03-01 15:12:27 -05:00
|
|
|
:after-call isearch-mode)
|
2018-07-29 02:50:16 +02:00
|
|
|
|
|
|
|
(def-package! evil-anzu
|
|
|
|
:when (featurep! :feature evil)
|
|
|
|
:after-call (evil-ex-start-search evil-ex-start-word-search))
|