core-ui: clean up + refactor modeline functions/macros
This commit is contained in:
parent
ab07120ea6
commit
beb92b0e97
1 changed files with 35 additions and 31 deletions
|
@ -205,50 +205,54 @@ file."
|
||||||
;; Modeline
|
;; Modeline
|
||||||
;;
|
;;
|
||||||
|
|
||||||
;; TODO Improve docstrings
|
|
||||||
(defmacro def-modeline-segment! (name &rest forms)
|
(defmacro def-modeline-segment! (name &rest forms)
|
||||||
"Defines a modeline segment function and byte compiles it."
|
"Defines a modeline segment and byte compiles it."
|
||||||
(declare (indent defun) (doc-string 2))
|
(declare (indent defun) (doc-string 2))
|
||||||
`(defun ,(intern (format "doom-modeline-segment--%s" name)) ()
|
(let ((sym (intern (format "doom-modeline-segment--%s" name))))
|
||||||
,@forms))
|
`(progn
|
||||||
|
(defun ,sym () ,@forms)
|
||||||
|
,(unless (bound-and-true-p byte-compile-current-file)
|
||||||
|
`(let (byte-compile-warnings)
|
||||||
|
(byte-compile ',sym))))))
|
||||||
|
|
||||||
(defsubst doom--prepare-modeline-segments (segments)
|
(defsubst doom--prepare-modeline-segments (segments)
|
||||||
(delq
|
(let (segs)
|
||||||
nil
|
(dolist (seg segments (nreverse segs))
|
||||||
(mapcar (lambda (seg)
|
(push (if (stringp seg)
|
||||||
(if (stringp seg)
|
seg
|
||||||
seg
|
(list (intern (format "doom-modeline-segment--%s" (symbol-name seg)))))
|
||||||
(list (intern (format "doom-modeline-segment--%s" (symbol-name seg))))))
|
segs))))
|
||||||
segments)))
|
|
||||||
|
|
||||||
(defmacro def-modeline! (name lhs &optional rhs)
|
(defmacro def-modeline! (name lhs &optional rhs)
|
||||||
"Defines a modeline format and byte-compiles it.
|
"Defines 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 with `def-modeline-segment!'.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
(def-modeline! minimal
|
(def-modeline! minimal
|
||||||
(bar matches \" \" buffer-info)
|
(bar matches \" \" buffer-info)
|
||||||
(media-info major-mode))
|
(media-info major-mode))
|
||||||
(setq-default mode-line-format (doom-modeline 'minimal))"
|
(setq-default mode-line-format (doom-modeline 'minimal))"
|
||||||
(let ((sym (intern (format "doom-modeline-format--%s" name)))
|
(let ((sym (intern (format "doom-modeline-format--%s" name)))
|
||||||
(lhs-forms (doom--prepare-modeline-segments lhs))
|
(lhs-forms (doom--prepare-modeline-segments lhs))
|
||||||
(rhs-forms (doom--prepare-modeline-segments rhs)))
|
(rhs-forms (doom--prepare-modeline-segments rhs)))
|
||||||
(prog1
|
`(progn
|
||||||
`(progn
|
(defun ,sym ()
|
||||||
(defun ,sym ()
|
(let ((lhs (list ,@lhs-forms))
|
||||||
(let ((lhs (list ,@lhs-forms))
|
(rhs (list ,@rhs-forms)))
|
||||||
(rhs (list ,@rhs-forms)))
|
(list lhs
|
||||||
(list lhs
|
(propertize
|
||||||
(propertize
|
" " 'display
|
||||||
" " 'display
|
`((space :align-to (- (+ right right-fringe right-margin)
|
||||||
`((space :align-to (- (+ right right-fringe right-margin)
|
,(+ 1 (string-width (format-mode-line rhs)))))))
|
||||||
,(+ 1 (string-width (format-mode-line rhs)))))))
|
rhs)))
|
||||||
rhs)))
|
,(unless (bound-and-true-p byte-compile-current-file)
|
||||||
,(unless (bound-and-true-p byte-compile-current-file)
|
`(let (byte-compile-warnings)
|
||||||
`(let (byte-compile-warnings)
|
(byte-compile ',sym))))))
|
||||||
(byte-compile ',sym)))))))
|
|
||||||
|
|
||||||
(defun doom-modeline (key)
|
(defun doom-modeline (key)
|
||||||
"TODO"
|
"Returns a mode-line configuration associated with KEY (a symbol). 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))))
|
||||||
(unless (functionp fn)
|
(unless (functionp fn)
|
||||||
(error "Modeline format doesn't exist: %s" key))
|
(error "Modeline format doesn't exist: %s" key))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue