2019-04-21 19:59:44 -04:00
|
|
|
;;; tools/lookup/autoload/docsets.el -*- lexical-binding: t; -*-
|
2018-05-25 00:46:11 +02:00
|
|
|
;;;###if (featurep! +docsets)
|
|
|
|
|
2019-05-12 01:45:48 -04:00
|
|
|
(defvar dash-docs-docsets nil)
|
2018-06-15 21:37:36 +02:00
|
|
|
|
2018-06-15 13:31:34 +02:00
|
|
|
;;;###autodef
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
(defun set-docsets! (modes &rest docsets)
|
2018-09-04 03:19:01 +02:00
|
|
|
"Registers a list of DOCSETS for MODES.
|
2018-06-15 13:31:34 +02:00
|
|
|
|
2018-09-04 03:19:01 +02:00
|
|
|
MODES can be one major mode, or a list thereof.
|
|
|
|
|
|
|
|
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)])
|
2018-06-24 20:00:31 +02:00
|
|
|
|
2018-06-15 13:31:34 +02:00
|
|
|
Used by `+lookup/in-docsets' and `+lookup/documentation'."
|
2018-06-22 01:30:27 +02:00
|
|
|
(declare (indent defun))
|
2019-05-12 01:45:48 -04:00
|
|
|
(let ((action (if (keywordp (car docsets)) (pop docsets))))
|
|
|
|
(dolist (mode (doom-enlist modes))
|
|
|
|
(let ((hook (intern (format "%s-hook" mode)))
|
2021-07-11 10:48:07 -04:00
|
|
|
(fn (intern (format "+lookup-init--%s-%s" (or action "set") mode))))
|
2019-05-12 01:45:48 -04:00
|
|
|
(if (null docsets)
|
|
|
|
(remove-hook hook fn)
|
2021-07-11 10:48:07 -04:00
|
|
|
(fset
|
|
|
|
fn (lambda ()
|
|
|
|
(make-local-variable 'dash-docs-docsets)
|
|
|
|
(unless (memq action '(:add :remove))
|
|
|
|
(setq dash-docs-docset nil))
|
|
|
|
(dolist (spec docsets)
|
|
|
|
(cl-destructuring-bind (docset . pred)
|
|
|
|
(cl-typecase spec
|
|
|
|
(string (cons spec nil))
|
|
|
|
(vector (cons (aref spec 0) (aref spec 1)))
|
|
|
|
(otherwise (signal 'wrong-type-arguments (list spec '(vector string)))))
|
|
|
|
(when (or (null pred)
|
|
|
|
(eval pred t))
|
|
|
|
(if (eq action :remove)
|
|
|
|
(setq dash-docs-docsets (delete docset dash-docs-docsets))
|
|
|
|
(cl-pushnew docset dash-docs-docsets)))))))
|
2019-05-12 01:45:48 -04:00
|
|
|
(add-hook hook fn 'append))))))
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-07-22 23:45:31 +02:00
|
|
|
(defun +lookup-dash-docsets-backend-fn (identifier)
|
2019-05-12 01:45:48 -04:00
|
|
|
"Looks up IDENTIFIER in available Dash docsets, if any are installed.
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
|
2019-05-12 01:45:48 -04:00
|
|
|
This backend is meant for `+lookup-documentation-functions'.
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
|
2019-05-12 01:45:48 -04:00
|
|
|
Docsets must be installed with one of the following commands:
|
2018-05-25 00:46:11 +02:00
|
|
|
|
2019-05-12 01:45:48 -04:00
|
|
|
+ `dash-docs-install-docset'
|
|
|
|
+ `dash-docs-install-docset-from-file'
|
|
|
|
+ `dash-docs-install-user-docset'
|
|
|
|
+ `dash-docs-async-install-docset'
|
|
|
|
+ `dash-docs-async-install-docset-from-file'
|
2018-05-25 00:46:11 +02:00
|
|
|
|
2019-05-12 01:45:48 -04:00
|
|
|
Docsets can be searched directly via `+lookup/in-docsets'."
|
2019-11-08 04:10:16 -05:00
|
|
|
(when (require 'dash-docs nil t)
|
|
|
|
(when-let (docsets (cl-remove-if-not #'dash-docs-docset-path (dash-docs-buffer-local-docsets)))
|
|
|
|
(+lookup/in-docsets nil identifier docsets)
|
|
|
|
'deferred)))
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
|
|
|
|
|
|
|
|
;;
|
2019-05-12 01:45:48 -04:00
|
|
|
;;; Commands
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-05-17 20:43:36 -04:00
|
|
|
(defun +lookup/in-docsets (arg &optional query docsets)
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
"Lookup QUERY in dash DOCSETS.
|
|
|
|
|
|
|
|
QUERY is a string and docsets in an array of strings, each a name of a Dash
|
|
|
|
docset. Requires either helm or ivy.
|
|
|
|
|
2019-05-17 20:43:36 -04:00
|
|
|
If prefix ARG is supplied, search all installed installed docsets. They can be
|
|
|
|
installed with `dash-docs-install-docset'."
|
|
|
|
(interactive "P")
|
2019-05-12 01:45:48 -04:00
|
|
|
(require 'dash-docs)
|
2019-07-05 14:17:44 +02:00
|
|
|
(let ((dash-docs-common-docsets)
|
|
|
|
(dash-docs-docsets
|
|
|
|
(if arg
|
|
|
|
(dash-docs-installed-docsets)
|
|
|
|
(cl-remove-if-not #'dash-docs-docset-path (or docsets dash-docs-docsets))))
|
2020-01-10 04:22:49 -05:00
|
|
|
(query (doom-thing-at-point-or-region query)))
|
2019-07-05 14:17:44 +02:00
|
|
|
(doom-log "Searching docsets %s" dash-docs-docsets)
|
feature/lookup: rewrite dash docset integration
+ Uses alist variable to store config, rather than hooks
+ Added check for installed docsets in +lookup/documentation
+ Set docsets for various language modules (c-mode, c++-mode, css-mode,
scss-mode, sass-mode, web-mode, go-mode, racket-mode, emacs-lisp-mode,
js2-mode, rjsx-mode, typescript-mode, rust-mode, and php-mode)
+ Made *eww* popups for dash docsets larger
+ Renamed set-docset! => set-docsets! (set-docset! is aliased to
set-docsets!)
+ New +lookup/install-docset alias
2018-08-31 02:44:49 +02:00
|
|
|
(cond ((featurep! :completion helm)
|
|
|
|
(helm-dash query))
|
|
|
|
((featurep! :completion ivy)
|
|
|
|
(counsel-dash query))
|
|
|
|
((user-error "No dash backend is installed, enable ivy or helm.")))))
|
2019-05-17 20:43:36 -04:00
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun +lookup/in-all-docsets (&optional query)
|
|
|
|
"TODO"
|
|
|
|
(interactive)
|
|
|
|
(+lookup/in-docsets t query))
|