ui/doom-modeline: general refactor

This commit is contained in:
Henrik Lissner 2017-03-02 00:43:25 -05:00
parent 33120cd64e
commit a319df1f26

View file

@ -16,6 +16,16 @@
(def-package! eldoc-eval :demand t (def-package! eldoc-eval :demand t
:config :config
;; Show eldoc in the mode-line with `eval-expression' ;; Show eldoc in the mode-line with `eval-expression'
(defun +doom-modeline--show-eldoc (input)
"Display string STR in the mode-line next to minibuffer."
(with-current-buffer (eldoc-current-buffer)
(let* ((str (and (stringp input) input))
(mode-line-format (or (and str (doom-modeline 'eldoc))
mode-line-format))
mode-line-in-non-selected-windows)
(force-mode-line-update)
(sit-for eldoc-show-in-mode-line-delay))))
(setq eldoc-in-minibuffer-show-fn '+doom-modeline--show-eldoc) (setq eldoc-in-minibuffer-show-fn '+doom-modeline--show-eldoc)
(eldoc-in-minibuffer-mode +1)) (eldoc-in-minibuffer-mode +1))
@ -174,7 +184,7 @@ active."
(defsubst active () (defsubst active ()
(eq (selected-window) +doom-modeline-current-window)) (eq (selected-window) +doom-modeline-current-window))
;; From from `powerline's `pl/make-xpm'. ;; Inspired from `powerline's `pl/make-xpm'.
(def-memoized! +doom-modeline--make-xpm (color height width) (def-memoized! +doom-modeline--make-xpm (color height width)
"Create an XPM bitmap." "Create an XPM bitmap."
(when (display-graphic-p) (when (display-graphic-p)
@ -212,9 +222,9 @@ active."
project root). Excludes the file basename. See `doom-buffer-name' for that." project root). Excludes the file basename. See `doom-buffer-name' for that."
(if buffer-file-name (if buffer-file-name
(let* ((default-directory (file-name-directory buffer-file-name)) (let* ((default-directory (file-name-directory buffer-file-name))
(buffer-path (file-relative-name buffer-file-name (doom-project-root))) (buffer-path (file-relative-name buffer-file-name (doom-project-root))))
(max-length (truncate (* (window-body-width) 0.4))))
(when (and buffer-path (not (equal buffer-path "."))) (when (and buffer-path (not (equal buffer-path ".")))
(let ((max-length (truncate (* (window-body-width) 0.4))))
(if (> (length buffer-path) max-length) (if (> (length buffer-path) max-length)
(let ((path (nreverse (split-string buffer-path "/" t))) (let ((path (nreverse (split-string buffer-path "/" t)))
(output "")) (output ""))
@ -228,35 +238,9 @@ project root). Excludes the file basename. See `doom-buffer-name' for that."
(when (string-suffix-p "/" output) (when (string-suffix-p "/" output)
(setq output (substring output 0 -1))) (setq output (substring output 0 -1)))
output) output)
buffer-path))) buffer-path))))
"%b")) "%b"))
(defun +doom-modeline--show-eldoc (input)
"Display string STR in the mode-line next to minibuffer."
(with-current-buffer (eldoc-current-buffer)
(let* ((max (window-width (selected-window)))
(str (and (stringp input) (concat " " input)))
(len (length str))
(tmp-str str)
(mode-line-format (or (and str (doom-modeline 'eldoc))
mode-line-format))
roll mode-line-in-non-selected-windows)
(catch 'break
(if (and (> len max) eldoc-mode-line-rolling-flag)
(progn
(while (setq roll (sit-for 0.3))
(setq tmp-str (substring tmp-str 2)
mode-line-format (concat tmp-str " [<]" str))
(force-mode-line-update)
(when (< (length tmp-str) 2) (setq tmp-str str)))
(unless roll
(when eldoc-mode-line-stop-rolling-on-input
(setq eldoc-mode-line-rolling-flag nil))
(throw 'break nil)))
(force-mode-line-update)
(sit-for eldoc-show-in-mode-line-delay))))
(force-mode-line-update)))
;; ;;
;; Segments ;; Segments
@ -330,7 +314,7 @@ directory, the file name, and its state (modified, read-only or non-existent)."
(def-modeline-segment! vcs (def-modeline-segment! vcs
"Displays the current branch, colored based on its state." "Displays the current branch, colored based on its state."
(when (and vc-mode buffer-file-name) (when vc-mode
(let ((backend (vc-backend buffer-file-name)) (let ((backend (vc-backend buffer-file-name))
(state (vc-state buffer-file-name)) (state (vc-state buffer-file-name))
(face 'mode-line-inactive) (face 'mode-line-inactive)
@ -385,18 +369,18 @@ directory, the file name, and its state (modified, read-only or non-existent)."
icons." icons."
(when (boundp 'flycheck-last-status-change) (when (boundp 'flycheck-last-status-change)
(pcase flycheck-last-status-change (pcase flycheck-last-status-change
(`finished (if flycheck-current-errors ('finished (if flycheck-current-errors
(let-alist (flycheck-count-errors flycheck-current-errors) (let-alist (flycheck-count-errors flycheck-current-errors)
(let ((sum (+ (or .error 0) (or .warning 0)))) (let ((sum (+ (or .error 0) (or .warning 0))))
(+doom-ml-icon "circle-slash" (format "%s issue%s" sum (if (eq 1 sum) "" "s")) (+doom-ml-icon "circle-slash" (format "%s issue%s" sum (if (eq 1 sum) "" "s"))
(if .error 'doom-modeline-urgent 'doom-modeline-warning)))) (if .error 'doom-modeline-urgent 'doom-modeline-warning))))
(concat (concat
(+doom-ml-icon "check" nil 'doom-modeline-info) " "))) (+doom-ml-icon "check" nil 'doom-modeline-info) " ")))
(`running (+doom-ml-icon "ellipsis" "Running" 'font-lock-doc-face)) ('running (+doom-ml-icon "ellipsis" "Running" 'font-lock-doc-face))
(`no-checker (+doom-ml-icon "alert" "-" 'font-lock-doc-face)) ('no-checker (+doom-ml-icon "alert" "-" 'font-lock-doc-face))
(`errored (+doom-ml-icon "alert" "Error" 'doom-modeline-urgent)) ('errored (+doom-ml-icon "alert" "Error" 'doom-modeline-urgent))
(`interrupted (+doom-ml-icon "x" "Interrupted" 'font-lock-doc-face)) ('interrupted (+doom-ml-icon "x" "Interrupted" 'font-lock-doc-face))
;; (`suspicious "") ;; ('suspicious "")
))) )))
(defsubst doom-column (pos) (defsubst doom-column (pos)