Redesign set-docsets! autodef
+ Adds :add/:remove support. + Adds conditional docset support through nested vectors + Removes support for setting docsets on a minor-mode basis (mostly for performance reasons, but now that we have conditional docsets, it's unnecessary).
This commit is contained in:
parent
84abac6b69
commit
e89e3bd15e
1 changed files with 30 additions and 19 deletions
|
@ -9,12 +9,24 @@ assemble a list of installed & active docsets.")
|
||||||
|
|
||||||
;;;###autodef
|
;;;###autodef
|
||||||
(defun set-docsets! (modes &rest docsets)
|
(defun set-docsets! (modes &rest docsets)
|
||||||
"Registers a list of DOCSETS (strings) for MODES (either one major/minor mode
|
"Registers a list of DOCSETS for MODES.
|
||||||
symbol or a list of them). DOCSETS can also contain sublists.
|
|
||||||
|
|
||||||
If MODES is a minor mode, you can use :add or :remove as the first element of
|
MODES can be one major mode, or a list thereof.
|
||||||
DOCSETS, to instruct it to append (or remove) those from the docsets already set
|
|
||||||
by a major-mode, if any.
|
DOCSETS can be strings, each representing a dash docset, or a vector with the
|
||||||
|
structure [DOCSET FORM]. If FORM evaluates to nil, the DOCSET is omitted. If it
|
||||||
|
is non-nil, (format DOCSET FORM) is used as the docset.
|
||||||
|
|
||||||
|
The first element in DOCSETS can be :add or :remove, making it easy for users to
|
||||||
|
add to or remove default docsets from modes.
|
||||||
|
|
||||||
|
DOCSETS can also contain sublists, which will be flattened.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
(set-docsets! '(js2-mode rjsx-mode) \"JavaScript\"
|
||||||
|
[\"React\" (eq major-mode 'rjsx-mode)]
|
||||||
|
[\"TypeScript\" (bound-and-true-p tide-mode)])
|
||||||
|
|
||||||
Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
||||||
(declare (indent defun))
|
(declare (indent defun))
|
||||||
|
@ -22,9 +34,14 @@ Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
||||||
(if (null docsets)
|
(if (null docsets)
|
||||||
(setq +lookup-docset-alist
|
(setq +lookup-docset-alist
|
||||||
(delq (assq mode +lookup-docset-alist)
|
(delq (assq mode +lookup-docset-alist)
|
||||||
+lookup-docset-alist)))
|
+lookup-docset-alist))
|
||||||
(setf (alist-get mode +lookup-docset-alist)
|
(let ((action (if (keywordp (car docsets)) (pop docsets)))
|
||||||
(mapcan #'doom-enlist docsets))))
|
(docsets (mapcan #'doom-enlist docsets))) ; flatten list
|
||||||
|
(setf (alist-get mode +lookup-docset-alist)
|
||||||
|
(pcase action
|
||||||
|
(:add (append docsets (alist-get mode +lookup-docset-alist)))
|
||||||
|
(:remove (cl-set-difference (alist-get mode +lookup-docset-alist) docsets))
|
||||||
|
(_ docsets)))))))
|
||||||
|
|
||||||
;;;###autodef
|
;;;###autodef
|
||||||
(defalias 'set-docset! #'set-docsets!)
|
(defalias 'set-docset! #'set-docsets!)
|
||||||
|
@ -45,17 +62,11 @@ Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
||||||
"Return list of installed & selected docsets for the current major mode.
|
"Return list of installed & selected docsets for the current major mode.
|
||||||
|
|
||||||
This list is built from `+lookup-docset-alist'."
|
This list is built from `+lookup-docset-alist'."
|
||||||
(let ((base-docsets (cdr (assq major-mode +lookup-docset-alist))))
|
(cl-loop for docset in (cdr (assq major-mode +lookup-docset-alist))
|
||||||
(dolist (spec +lookup-docset-alist)
|
when (or (stringp docset)
|
||||||
(cl-destructuring-bind (mode . docsets) spec
|
(and (vectorp docset)
|
||||||
(when (and (boundp mode) (symbol-value mode))
|
(eval (aref docset 1) t)))
|
||||||
(pcase (car docsets)
|
collect docset))
|
||||||
(:add (nconc base-docsets (cdr docsets)))
|
|
||||||
(:remove
|
|
||||||
(dolist (docset (cdr docsets))
|
|
||||||
(setq base-docsets (delete docset base-docsets))))
|
|
||||||
(_ (setq base-docsets docsets))))))
|
|
||||||
base-docsets))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +lookup-docset-installed-p (docset)
|
(defun +lookup-docset-installed-p (docset)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue