Convert old def-modeline! from macro to function
This makes it easier to use dynamically, and ensures that doom--prepare-modeline-segemnts isn't run prematurely (at macro expansion time).
This commit is contained in:
parent
df233eb1a9
commit
593666933d
1 changed files with 23 additions and 26 deletions
|
@ -143,57 +143,54 @@ Also see `doom-exit-buffer-hook'.")
|
||||||
`(let (byte-compile-warnings)
|
`(let (byte-compile-warnings)
|
||||||
(byte-compile #',sym))))))))
|
(byte-compile #',sym))))))))
|
||||||
|
|
||||||
(defsubst doom--prepare-modeline-segments (segments)
|
(defun doom--prepare-modeline-segments (segments)
|
||||||
(let (forms it)
|
(let (forms it)
|
||||||
(dolist (seg segments)
|
(dolist (seg segments)
|
||||||
(cond ((stringp seg)
|
(cond ((stringp seg)
|
||||||
(push seg forms))
|
(push seg forms))
|
||||||
((symbolp seg)
|
((symbolp seg)
|
||||||
(cond ((setq it (cdr (assq seg doom--modeline-fn-alist)))
|
(cond ((setq it (cdr (assq seg doom--modeline-fn-alist)))
|
||||||
(push (list it) forms))
|
(push (list :eval (list it)) forms))
|
||||||
((setq it (cdr (assq seg doom--modeline-var-alist)))
|
((setq it (cdr (assq seg doom--modeline-var-alist)))
|
||||||
(push it forms))
|
(push it forms))
|
||||||
((error "%s is not a defined segment" seg))))
|
((error "%s is not a defined segment" seg))))
|
||||||
((error "%s is not a valid segment" seg))))
|
((error "%s is not a valid segment" seg))))
|
||||||
(nreverse forms)))
|
(nreverse forms)))
|
||||||
|
|
||||||
(defmacro def-modeline! (name lhs &optional rhs)
|
(defun def-modeline! (name lhs &optional rhs)
|
||||||
"Defines a modeline format and byte-compiles it. NAME is a symbol to identify
|
"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
|
it (used by `doom-modeline' for retrieval). LHS and RHS are lists of symbols of
|
||||||
modeline segments defined with `def-modeline-segment!'.
|
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))
|
||||||
(doom-set-modeline 'minimal t)"
|
(doom-set-modeline 'minimal t)"
|
||||||
(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)))
|
||||||
`(progn
|
(defalias sym
|
||||||
(fset ',sym
|
(lambda ()
|
||||||
(lambda ()
|
(let ((rhs-str (format-mode-line rhs-forms)))
|
||||||
,(concat "Modeline:\n"
|
(list lhs-forms
|
||||||
(format " %s\n %s"
|
(propertize
|
||||||
(prin1-to-string lhs)
|
" " 'display
|
||||||
(prin1-to-string rhs)))
|
`((space :align-to (- (+ right right-fringe right-margin)
|
||||||
(let ((lhs (list ,@lhs-forms))
|
,(+ 1 (string-width rhs-str))))))
|
||||||
(rhs (list ,@rhs-forms)))
|
rhs-str)))
|
||||||
(let ((rhs-str (format-mode-line rhs)))
|
(concat "Modeline:\n"
|
||||||
(list lhs
|
(format " %s\n %s"
|
||||||
(propertize
|
(prin1-to-string lhs)
|
||||||
" " 'display
|
(prin1-to-string rhs))))
|
||||||
`((space :align-to (- (+ right right-fringe right-margin)
|
(unless (bound-and-true-p byte-compile-current-file)
|
||||||
,(+ 1 (string-width rhs-str))))))
|
(let (byte-compile-warnings)
|
||||||
rhs-str)))))
|
(byte-compile sym)))))
|
||||||
,(unless (bound-and-true-p byte-compile-current-file)
|
|
||||||
`(let (byte-compile-warnings)
|
|
||||||
(byte-compile #',sym))))))
|
|
||||||
|
|
||||||
(defun doom-modeline (key)
|
(defun doom-modeline (key)
|
||||||
"Returns a mode-line configuration associated with KEY (a symbol). Throws an
|
"Returns a mode-line configuration associated with KEY (a symbol). Throws an
|
||||||
error if it doesn't exist."
|
error if it doesn't exist."
|
||||||
(let ((fn (intern (format "doom-modeline-format--%s" key))))
|
(let ((fn (intern-soft (format "doom-modeline-format--%s" key))))
|
||||||
(when (functionp fn)
|
(when (functionp fn)
|
||||||
`(:eval (,fn)))))
|
`(:eval (,fn)))))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue