diff --git a/modules/feature/lookup/autoload/docsets.el b/modules/feature/lookup/autoload/docsets.el index 89fef163c..27e6e7134 100644 --- a/modules/feature/lookup/autoload/docsets.el +++ b/modules/feature/lookup/autoload/docsets.el @@ -1,6 +1,48 @@ ;;; feature/lookup/autoload/docsets.el -*- lexical-binding: t; -*- ;;;###if (featurep! +docsets) +;;;###autodef +(defun set-docset! (modes &rest docsets) + "Registers a list of DOCSETS (strings) for MODES (either one major mode +symbol or a list of them). + +If MODES is a minor mode, you can use :add or :remove as the first element of +DOCSETS, to instruct it to append (or remove) those from the docsets already set +by a major-mode, if any. + +Used by `+lookup/in-docsets' and `+lookup/documentation'." + (dolist (mode (doom-enlist modes)) + (let ((hook-sym + (intern (format "+lookup|%s-docsets--%s" + (pcase (car docsets) + (:add 'add) + (:remove 'remove) + (_ 'set)) + mode)))) + (fset hook-sym + (lambda () + (let (var-sym) + (cond ((featurep! :completion ivy) + (require 'counsel-dash) + (setq var-sym 'counsel-dash-docsets)) + ((featurep! :completion helm) + (require 'helm-dash) + (setq var-sym 'helm-dash-docsets))) + (when var-sym + (let ((val (symbol-value var-sym))) + (make-variable-buffer-local var-sym) + (pcase (car docsets) + (:add + (set var-sym (append val (cdr docsets)))) + (:remove + (set var-sym + (cl-loop with to-delete = (cdr docsets) + for docset in val + unless (member docset to-delete) + collect docset))) + (_ (set var-sym (cdr docsets))))))))) + (add-hook (intern (format "%s-hook" mode)) hook-sym)))) + ;;;###autoload (def-setting! :docset (modes &rest docsets) "Registers a list of DOCSETS (strings) for MODES (either one major mode @@ -11,27 +53,8 @@ DOCSETS, to instruct it to append (or remove) those from the docsets already set by a major-mode, if any. Used by `+lookup/in-docsets' and `+lookup/documentation'." - (let* ((modes (doom-unquote modes)) - (ivy-p (featurep! :completion ivy)) - (hook-sym (intern (format "+lookup|%s-docsets--%s" - (cond ((eq ',(car docsets) :add) 'add) - ((eq ',(car docsets) :remove) 'remove) - ('set)) - (string-join docsets "-")))) - (var-sym (if ivy-p 'counsel-dash-docsets 'helm-dash-docsets))) - `(progn - (defun ,hook-sym () - (make-variable-buffer-local ',var-sym) - ,(cond ((eq ',(car docsets) :add) - `(setq ,var-sym (append ,var-sym (list ,@(cdr docsets))))) - ((eq ',(car docsets) :remove) - `(setq ,var-sym - (cl-loop with to-delete = (list ,@(cdr docsets)) - for docset in ,var-sym - unless (member docset to-delete) - collect docset))) - (`(setq ,var-sym (list ,@docsets))))) - (add-hook! ,modes #',hook-sym)))) + :obsolete set-docset! + `(set-docset! ,modes ,@docsets)) ;;;###autoload (autoload 'helm-dash-installed-docsets "helm-dash") diff --git a/modules/lang/emacs-lisp/config.el b/modules/lang/emacs-lisp/config.el index d3f41f539..47f7e0e37 100644 --- a/modules/lang/emacs-lisp/config.el +++ b/modules/lang/emacs-lisp/config.el @@ -6,7 +6,7 @@ (set! :repl 'emacs-lisp-mode #'+emacs-lisp/repl) (set! :eval 'emacs-lisp-mode #'+emacs-lisp-eval) (set! :lookup 'emacs-lisp-mode :documentation 'info-lookup-symbol) - (set! :docset '(lisp-mode emacs-lisp-mode) "Emacs Lisp") + (set-docset! '(lisp-mode emacs-lisp-mode) "Emacs Lisp") (set! :rotate 'emacs-lisp-mode :symbols '(("t" "nil") diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index 7902ea517..b0a892093 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -2,7 +2,7 @@ (after! rust-mode (set-env! "RUST_SRC_PATH") - (set! :docset 'rust-mode "Rust") + (set-docset! 'rust-mode "Rust") (setq rust-indent-method-chain t) (map! :map rust-mode-map diff --git a/modules/lang/web/+css.el b/modules/lang/web/+css.el index cd2175c0e..171775876 100644 --- a/modules/lang/web/+css.el +++ b/modules/lang/web/+css.el @@ -38,8 +38,8 @@ :defer t :config ;; contains both css-mode & scss-mode - (set! :docset 'css-mode "CSS") - (set! :docset 'scss-mode "Sass") + (set-docset! 'css-mode "CSS") + (set-docset! 'scss-mode "Sass") (unless EMACS26+ ;; css-mode's built in completion is superior (set-company-backend! '(css-mode scss-mode) 'company-css)) @@ -49,7 +49,7 @@ (def-package! sass-mode :defer t :config - (set! :docset 'sass-mode "Sass") + (set-docset! 'sass-mode "Sass") (set-company-backend! 'sass-mode 'company-css) (map! :map scss-mode-map :localleader :n "b" #'+css/sass-build))