Fix issues according to the feedback from melpa.

This commit is contained in:
Vincent Zhang 2018-07-01 01:21:58 +08:00
parent 6628495b6d
commit b2c187ea66

View file

@ -1,12 +1,12 @@
;;; doom-modeline.el --- A minimal modeline from DOOM Emacs. -*- lexical-binding: t; -*- ;;; doom-modeline.el --- A minimal modeline from DOOM. -*- lexical-binding: t; -*-
;; Copyright (C) 2018 Vincent Zhang ;; Copyright (C) 2018 Vincent Zhang
;; Author: Vincent Zhang <seagle0128@gmail.com> ;; Author: Vincent Zhang <seagle0128@gmail.com>
;; URL: https://github.com/seagle0128/doom-modeline ;; URL: https://github.com/seagle0128/doom-modeline
;; Version: 0.1.1 ;; Version: 0.1.1
;; Package-Requires: ((emacs "24.4") (all-the-icons "1.0.0") (projectile "0.10.0") (shrink-path "0.2.0") (eldoc-eval "0.1")) ;; Package-Requires: ((emacs "24.4") (all-the-icons "1.0.0") (projectile "0.10.0") (shrink-path "0.2.0") (eldoc-eval "0.1") (dash "2.11.0"))
;; Keywords: modeline mode-line doom ;; Keywords: faces
;; This file is not part of GNU Emacs. ;; This file is not part of GNU Emacs.
@ -66,111 +66,100 @@
(defvar doom-modeline-buffer-file-name-style 'truncate-upto-project (defvar doom-modeline-buffer-file-name-style 'truncate-upto-project
"Determines the style used by `doom-modeline-buffer-file-name'. "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 Given ~/Projects/FOSS/emacs/lisp/comint.el
truncate-upto-root => ~/P/F/e/lisp/comint.el truncate-upto-project => ~/P/F/emacs/lisp/comint.el
truncate-all => ~/P/F/e/l/comint.el truncate-upto-root => ~/P/F/e/lisp/comint.el
relative-from-project => emacs/lisp/comint.el truncate-all => ~/P/F/e/l/comint.el
relative-to-project => lisp/comint.el relative-from-project => emacs/lisp/comint.el
file-name => comint.el") relative-to-project => lisp/comint.el
file-name => comint.el")
;; externs ;; externs
(defvar anzu--current-position 0) (defvar anzu--current-position)
(defvar anzu--overflow-p nil) (defvar anzu--overflow-p)
(defvar anzu--state nil) (defvar anzu--state)
(defvar anzu--total-matched 0) (defvar anzu--total-matched)
(defvar evil-ex-active-highlights-alist nil) (defvar anzu-cons-mode-line-p)
(defvar evil-ex-argument nil) (defvar anzu-minimum-input-length)
(defvar evil-ex-range nil) (defvar anzu-search-threshold)
(defvar evil-mode nil) (defvar evil-ex-active-highlights-alist)
(defvar evil-state nil) (defvar evil-ex-argument)
(defvar evil-visual-beginning nil) (defvar evil-ex-range)
(defvar evil-visual-end nil) (defvar evil-mode)
(defvar evil-visual-selection nil) (defvar evil-state)
(defvar iedit-mode nil) (defvar evil-visual-beginning)
(defvar iedit-occurrences-overlays nil) (defvar evil-visual-end)
(defvar evil-visual-selection)
(defvar flycheck-current-errors)
(defvar iedit-mode)
(defvar iedit-occurrences-overlays)
(defvar text-scale-mode-amount) (defvar text-scale-mode-amount)
(defvar-local flycheck-current-errors nil)
;; ;;
;; Custom faces ;; Custom faces
;; ;;
(defgroup doom-modeline nil (defgroup doom-modeline nil
"" "Doom mode-line faces."
:group 'doom) :group 'faces)
(defface doom-modeline-buffer-path (defface doom-modeline-buffer-path
'((t (:inherit mode-line-emphasis :bold t))) '((t (:inherit mode-line-emphasis :bold t)))
"Face used for the dirname part of the buffer path." "Face used for the dirname part of the buffer path.")
:group 'doom-modeline)
(defface doom-modeline-buffer-file (defface doom-modeline-buffer-file
'((t (:inherit mode-line-buffer-id))) '((t (:inherit mode-line-buffer-id)))
"Face used for the filename part of the mode-line buffer path." "Face used for the filename part of the mode-line buffer path.")
:group 'doom-modeline)
(defface doom-modeline-buffer-modified (defface doom-modeline-buffer-modified
'((t (:inherit error :background nil :bold t))) '((t (:inherit error :background nil :bold t)))
"Face used for the 'unsaved' symbol in the mode-line." "Face used for the 'unsaved' symbol in the mode-line.")
:group 'doom-modeline)
(defface doom-modeline-buffer-major-mode (defface doom-modeline-buffer-major-mode
'((t (:inherit mode-line-emphasis :bold t))) '((t (:inherit mode-line-emphasis :bold t)))
"Face used for the major-mode segment in the mode-line." "Face used for the major-mode segment in the mode-line.")
:group 'doom-modeline)
(defface doom-modeline-highlight (defface doom-modeline-highlight
'((t (:inherit mode-line-emphasis))) '((t (:inherit mode-line-emphasis)))
"Face for bright segments of the mode-line." "Face for bright segments of the mode-line.")
:group 'doom-modeline)
(defface doom-modeline-panel (defface doom-modeline-panel
'((t (:inherit mode-line-highlight))) '((t (:inherit mode-line-highlight)))
"Face for 'X out of Y' segments, such as `doom-modeline--anzu', `doom-modeline--evil-substitute' and "Face for 'X out of Y' segments, such as `doom-modeline--anzu', `doom-modeline--evil-substitute' and
`iedit'" `iedit'")
:group 'doom-modeline)
(defface doom-modeline-info (defface doom-modeline-info
`((t (:inherit success :bold t))) `((t (:inherit success :bold t)))
"Face for info-level messages in the modeline. Used by `*vc'." "Face for info-level messages in the modeline. Used by `*vc'.")
:group 'doom-modeline)
(defface doom-modeline-warning (defface doom-modeline-warning
`((t (:inherit warning :bold t))) `((t (:inherit warning :bold t)))
"Face for warnings in the modeline. Used by `*flycheck'" "Face for warnings in the modeline. Used by `*flycheck'")
:group 'doom-modeline)
(defface doom-modeline-urgent (defface doom-modeline-urgent
`((t (:inherit error :bold t))) `((t (:inherit error :bold t)))
"Face for errors in the modeline. Used by `*flycheck'" "Face for errors in the modeline. Used by `*flycheck'")
:group 'doom-modeline)
;; Bar ;; Bar
(defface doom-modeline-bar '((t (:inherit highlight))) (defface doom-modeline-bar '((t (:inherit highlight)))
"The face used for the left-most bar on the mode-line of an active window." "The face used for the left-most bar on the mode-line of an active window.")
:group 'doom-modeline)
(defface doom-modeline-eldoc-bar '((t (:inherit shadow))) (defface doom-modeline-eldoc-bar '((t (:inherit shadow)))
"The face used for the left-most bar on the mode-line when eldoc-eval is "The face used for the left-most bar on the mode-line when eldoc-eval is
active." active.")
:group 'doom-modeline)
(defface doom-modeline-inactive-bar '((t (:inherit warning :inverse-video t))) (defface doom-modeline-inactive-bar '((t (:inherit warning :inverse-video t)))
"The face used for the left-most bar on the mode-line of an inactive window." "The face used for the left-most bar on the mode-line of an inactive window.")
:group 'doom-modeline)
(defface doom-modeline-persp '((t ())) (defface doom-modeline-persp '((t ()))
"The face used for persp number." "The face used for persp number.")
:group 'doom-modeline)
(defface doom-modeline-eyebrowse '((t ())) (defface doom-modeline-eyebrowse '((t ()))
"The face used for eyebrowse." "The face used for eyebrowse.")
:group 'doom-modeline)
(defface doom-modeline-bracket '((t (:inherit shadow))) (defface doom-modeline-bracket '((t (:inherit shadow)))
"The face used for brackets around the project." "The face used for brackets around the project.")
:group 'doom-modeline)
(eval-and-compile (eval-and-compile
(defun doom-modeline--resolve-hooks (hooks) (defun doom-modeline--resolve-hooks (hooks)
@ -214,10 +203,11 @@ active."
(defmacro doom-modeline-def-modeline (name lhs &optional rhs) (defmacro doom-modeline-def-modeline (name lhs &optional rhs)
"Define a modeline format and byte-compiles it. "Define a modeline format and byte-compiles it.
NAME is a symbol to identify it (used by `doom-modeline' for retrieval).
LHS and RHS are lists of symbols of modeline segments defined NAME is a symbol to identify it (used by `doom-modeline' for retrieval).
LHS and RHS are lists of symbols of modeline segments defined
with `doom-modeline-def-segment'. with `doom-modeline-def-segment'.
Example: Example:
(doom-modeline-def-modeline minimal (doom-modeline-def-modeline minimal
(bar matches \" \" buffer-info) (bar matches \" \" buffer-info)
(media-info major-mode)) (media-info major-mode))
@ -241,15 +231,15 @@ Example:
(byte-compile #',sym)))))) (byte-compile #',sym))))))
(defun doom-modeline (key) (defun doom-modeline (key)
"Return a mode-line configuration associated with KEY (a symbol). "Return a mode-line configuration associated with KEY (a symbol). Throws an error if it doesn't exist."
Throws an error if it doesn't exist."
(let ((fn (intern (format "doom-modeline-format--%s" key)))) (let ((fn (intern (format "doom-modeline-format--%s" key))))
(when (functionp fn) (when (functionp fn)
`(:eval (,fn))))) `(:eval (,fn)))))
(defun doom-modeline-set-modeline (key &optional default) (defun doom-modeline-set-modeline (key &optional default)
"Set the modeline format. Does nothing if the modeline KEY doesn't exist. "Set the modeline format. Does nothing if the modeline KEY doesn't exist.
If DEFAULT is non-nil, set the default mode-line for all buffers."
If DEFAULT is non-nil, set the default mode-line for all buffers."
(let ((modeline (doom-modeline key))) (let ((modeline (doom-modeline key)))
(setf (if default (setf (if default
(default-value 'mode-line-format) (default-value 'mode-line-format)
@ -258,7 +248,8 @@ If DEFAULT is non-nil, set the default mode-line for all buffers."
(defun doom-modeline-project-root () (defun doom-modeline-project-root ()
"Get the path to the root of your project. "Get the path to the root of your project.
If STRICT-P, return nil if no project was found, otherwise return
If STRICT-P, return nil if no project was found, otherwise return
`default-directory'." `default-directory'."
(let (projectile-require-project-root) (let (projectile-require-project-root)
(projectile-project-root))) (projectile-project-root)))
@ -393,7 +384,8 @@ If STRICT-P, return nil if no project was found, otherwise return
(defun doom-modeline--buffer-file-name-truncate (&optional truncate-tail) (defun doom-modeline--buffer-file-name-truncate (&optional truncate-tail)
"Propertized variable `buffer-file-name' that truncates every dir along path. "Propertized variable `buffer-file-name' that truncates every dir along path.
If TRUNCATE-TAIL is t also truncate the parent directory of the file."
If TRUNCATE-TAIL is t also truncate the parent directory of the file."
(let ((dirs (shrink-path-prompt (file-name-directory buffer-file-truename))) (let ((dirs (shrink-path-prompt (file-name-directory buffer-file-truename)))
(active (doom-modeline--active))) (active (doom-modeline--active)))
(if (null dirs) (if (null dirs)
@ -411,7 +403,7 @@ If TRUNCATE-TAIL is t also truncate the parent directory of the file."
'face (if file-faces `(:inherit ,file-faces))))))))) 'face (if file-faces `(:inherit ,file-faces)))))))))
(defun doom-modeline--buffer-file-name-relative (&optional include-project) (defun doom-modeline--buffer-file-name-relative (&optional include-project)
"Propertized variable `buffer-file-name' showing directories relative to project's root only." "Propertized variable `buffer-file-name' showing directories relative to `INCLUDE-PROJECT' root only."
(let ((root (doom-modeline-project-root)) (let ((root (doom-modeline-project-root))
(active (doom-modeline--active))) (active (doom-modeline--active)))
(if (null root) (if (null root)
@ -428,10 +420,11 @@ If TRUNCATE-TAIL is t also truncate the parent directory of the file."
(defun doom-modeline--buffer-file-name (truncate-project-root-parent) (defun doom-modeline--buffer-file-name (truncate-project-root-parent)
"Propertized variable `buffer-file-name'. "Propertized variable `buffer-file-name'.
If TRUNCATE-PROJECT-ROOT-PARENT is t space will be saved by truncating it down
If TRUNCATE-PROJECT-ROOT-PARENT is t space will be saved by truncating it down
fish-shell style. fish-shell style.
Example: Example:
~/Projects/FOSS/emacs/lisp/comint.el => ~/P/F/emacs/lisp/comint.el" ~/Projects/FOSS/emacs/lisp/comint.el => ~/P/F/emacs/lisp/comint.el"
(let* ((project-root (doom-modeline-project-root)) (let* ((project-root (doom-modeline-project-root))
(file-name-split (shrink-path-file-mixed project-root (file-name-split (shrink-path-file-mixed project-root
(file-name-directory buffer-file-truename) (file-name-directory buffer-file-truename)
@ -755,7 +748,7 @@ with `evil-ex-substitute', and/or 4. The number of active `iedit' regions."
(doom-modeline-def-segment bar (doom-modeline-def-segment bar
"The bar regulates the height of the mode-line in GUI Emacs. "The bar regulates the height of the mode-line in GUI Emacs.
Returns \"\" to not break --no-window-system." Returns \"\" to not break --no-window-system."
(if (display-graphic-p) (if (display-graphic-p)
(doom-modeline--make-xpm (doom-modeline--make-xpm
(face-background (if (doom-modeline--active) (face-background (if (doom-modeline--active)
@ -816,8 +809,7 @@ Returns \"\" to not break --no-window-system."
(declare-function eyebrowse--get 'eyebrowse) (declare-function eyebrowse--get 'eyebrowse)
(doom-modeline-def-segment workspace-number (doom-modeline-def-segment workspace-number
"The current workspace name or number. Requires `eyebrowse-mode' to be "The current workspace name or number. Requires `eyebrowse-mode' to be enabled."
enabled."
(if (and (bound-and-true-p eyebrowse-mode) (if (and (bound-and-true-p eyebrowse-mode)
(< 1 (length (eyebrowse--get 'window-configs)))) (< 1 (length (eyebrowse--get 'window-configs))))
(let* ((num (eyebrowse--get 'current-slot)) (let* ((num (eyebrowse--get 'current-slot))