Replace :docset with set-docset! autodef

This commit is contained in:
Henrik Lissner 2018-06-15 13:31:34 +02:00
parent cccccbb3fd
commit b99ab59578
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
4 changed files with 49 additions and 26 deletions

View file

@ -1,6 +1,48 @@
;;; feature/lookup/autoload/docsets.el -*- lexical-binding: t; -*- ;;; feature/lookup/autoload/docsets.el -*- lexical-binding: t; -*-
;;;###if (featurep! +docsets) ;;;###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 ;;;###autoload
(def-setting! :docset (modes &rest docsets) (def-setting! :docset (modes &rest docsets)
"Registers a list of DOCSETS (strings) for MODES (either one major mode "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. by a major-mode, if any.
Used by `+lookup/in-docsets' and `+lookup/documentation'." Used by `+lookup/in-docsets' and `+lookup/documentation'."
(let* ((modes (doom-unquote modes)) :obsolete set-docset!
(ivy-p (featurep! :completion ivy)) `(set-docset! ,modes ,@docsets))
(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))))
;;;###autoload ;;;###autoload
(autoload 'helm-dash-installed-docsets "helm-dash") (autoload 'helm-dash-installed-docsets "helm-dash")

View file

@ -6,7 +6,7 @@
(set! :repl 'emacs-lisp-mode #'+emacs-lisp/repl) (set! :repl 'emacs-lisp-mode #'+emacs-lisp/repl)
(set! :eval 'emacs-lisp-mode #'+emacs-lisp-eval) (set! :eval 'emacs-lisp-mode #'+emacs-lisp-eval)
(set! :lookup 'emacs-lisp-mode :documentation 'info-lookup-symbol) (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 (set! :rotate 'emacs-lisp-mode
:symbols '(("t" "nil") :symbols '(("t" "nil")

View file

@ -2,7 +2,7 @@
(after! rust-mode (after! rust-mode
(set-env! "RUST_SRC_PATH") (set-env! "RUST_SRC_PATH")
(set! :docset 'rust-mode "Rust") (set-docset! 'rust-mode "Rust")
(setq rust-indent-method-chain t) (setq rust-indent-method-chain t)
(map! :map rust-mode-map (map! :map rust-mode-map

View file

@ -38,8 +38,8 @@
:defer t :defer t
:config :config
;; contains both css-mode & scss-mode ;; contains both css-mode & scss-mode
(set! :docset 'css-mode "CSS") (set-docset! 'css-mode "CSS")
(set! :docset 'scss-mode "Sass") (set-docset! 'scss-mode "Sass")
(unless EMACS26+ (unless EMACS26+
;; css-mode's built in completion is superior ;; css-mode's built in completion is superior
(set-company-backend! '(css-mode scss-mode) 'company-css)) (set-company-backend! '(css-mode scss-mode) 'company-css))
@ -49,7 +49,7 @@
(def-package! sass-mode (def-package! sass-mode
:defer t :defer t
:config :config
(set! :docset 'sass-mode "Sass") (set-docset! 'sass-mode "Sass")
(set-company-backend! 'sass-mode 'company-css) (set-company-backend! 'sass-mode 'company-css)
(map! :map scss-mode-map :localleader :n "b" #'+css/sass-build)) (map! :map scss-mode-map :localleader :n "b" #'+css/sass-build))