mirror of
https://github.com/doomemacs/doomemacs.git
synced 2026-05-29 22:54:47 -07:00
There's little reason for users to use these macros in their private configs over plain ol' `with-eval-after-load` and `use-package`, unless they're writing their own modules. It's my fault for signal boosting them in documentation and whenever I'm asked for help, because beginners now believe they are somehow required for Doom to work correctly (there are guides out there telling beginners that migrating to Doom involves replacing all instances of `with-eval-after-load` and `use-package` in their pre-existing configs with `after!` and `use-package!` -- which was never true). What's more, I plan to replace `use-package`, internally, so the `use-package!` macro won't exist for much longer.
254 lines
9.2 KiB
Org Mode
254 lines
9.2 KiB
Org Mode
#+title: :tools lookup
|
|
#+subtitle: Navigate your labyrinthine code and docs
|
|
#+created: January 04, 2018
|
|
#+since: 2.0.9
|
|
|
|
* Description :unfold:
|
|
This module adds code navigation and documentation lookup tools to help you
|
|
quickly look up definitions, references, documentation, dictionary definitions
|
|
or synonyms.
|
|
|
|
- Jump-to-definition and find-references implementations that just work.
|
|
- Powerful xref integration for languages that support it.
|
|
- Search online providers like [[https://devdocs.io][devdocs.io]], [[https://stackoverflow.com][stackoverflow]], [[https://google.com][google]], [[https://duckduckgo.com][duckduckgo]], or
|
|
[[https://youtube.com][youtube]] (duckduckgo and google have live suggestions).
|
|
- Integration with [[https://github.com/Kapeli/feeds][Dash.app docsets]].
|
|
- Support for online (and offline) dictionaries and thesauruses.
|
|
|
|
** Maintainers
|
|
- [[doom-user:][@hlissner]]
|
|
|
|
[[doom-contrib-maintainer:][Become a maintainer?]]
|
|
|
|
** Module flags
|
|
- +dictionary ::
|
|
Enable word definition and thesaurus lookup functionality.
|
|
- +docsets ::
|
|
Enable integration with Dash.app docsets.
|
|
- +offline ::
|
|
Install and prefer offline dictionary/thesaurus (with [[doom-module:+dictionary]]).
|
|
|
|
** Packages
|
|
- [[doom-package:dumb-jump]]
|
|
- [[doom-package:helm-xref]] if [[doom-module::completion helm]]
|
|
- [[doom-package:ivy-xref]] if [[doom-module::completion ivy]]
|
|
- [[doom-package:request]]
|
|
- if [[doom-module:+docsets]]
|
|
- [[doom-package:dash-docs]]
|
|
- [[doom-package:counsel-dash]] if [[doom-module::completion ivy]]
|
|
- [[doom-package:helm-dash]] if [[doom-module::completion helm]]
|
|
- if [[doom-module:+dictionary]]
|
|
- if macOS
|
|
- [[doom-package:osx-dictionary]]
|
|
- else
|
|
- [[doom-package:define-word]]
|
|
- [[doom-package:powerthesaurus]]
|
|
- if [[doom-module:+offline]]
|
|
- [[doom-package:wordnut]]
|
|
- [[doom-package:synosaurus]]
|
|
|
|
** Hacks
|
|
/No hacks documented for this module./
|
|
|
|
** TODO Changelog
|
|
# This section will be machine generated. Don't edit it by hand.
|
|
/This module does not have a changelog yet./
|
|
|
|
* Installation
|
|
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]
|
|
|
|
This module has several optional dependencies:
|
|
|
|
- ~ripgrep~ as a last-resort fallback for jump-to-definition/find-references.
|
|
- ~sqlite3~ for Dash docset support (if you have [[doom-module:+docsets]] enabled)
|
|
- ~wordnet~ for offline dictionary and thesaurus support (if you have
|
|
[[doom-module:+dictionary]] and [[doom-module:+offline]] enabled).
|
|
|
|
** MacOS
|
|
#+begin_src sh
|
|
brew install ripgrep wordnet
|
|
|
|
# An older version of sqlite is included in MacOS. If it causes you problems (and
|
|
# folks have reported it will), install it through homebrew:
|
|
brew install sqlite
|
|
# Note that it's keg-only, meaning it isn't symlinked to /usr/local/bin. You'll
|
|
# have to add it to PATH yourself (or symlink it into your PATH somewhere). e.g.
|
|
export PATH="/usr/local/opt/sqlite/bin:$PATH"
|
|
#+end_src
|
|
|
|
** Arch Linux
|
|
#+begin_src sh
|
|
sudo pacman -S sqlite ripgrep
|
|
yay -S wordnet-cli
|
|
#+end_src
|
|
|
|
** NixOS
|
|
#+begin_src nix
|
|
environment.systemPackages = with pkgs; [
|
|
ripgrep
|
|
sqlite
|
|
wordnet
|
|
];
|
|
#+end_src
|
|
|
|
* Usage
|
|
** Jump to definition
|
|
Use ~+lookup/definition~ (bound to [[kbd:][gd]] in normal mode) to jump to the definition
|
|
of the symbol at point.
|
|
|
|
This module provides a goto-definition implementation that will try the
|
|
following sources before giving up:
|
|
|
|
1. Whatever ~:definition~ function is registered for the current buffer with the
|
|
~:lookup~ setting (see "Configuration" section).
|
|
2. Any available xref backends.
|
|
3. [[doom-package:dumb-jump]] (a text search with aides to reduce false positives).
|
|
3. An ordinary project-wide text search with =ripgrep=.
|
|
5. If ~evil-mode~ is active, use ~evil-goto-definition~, which preforms a simple
|
|
text search within the current buffer.
|
|
|
|
If there are multiple results, you will be prompted to select one.
|
|
|
|
** Find references
|
|
Use ~+lookup/references~ (bound to [[kbd:][gD]] in normal mode) to see a list of
|
|
references for the symbol at point from throughout your project.
|
|
|
|
Like ~+lookup/definition~, this tries a number of sources before giving up. It
|
|
will try:
|
|
|
|
1. Whatever ~:references~ function is registered for the current buffer with the
|
|
~:lookup~ setting (see [[*Configuration][Configuration]]).
|
|
2. Any available [[doom-package:xref]] backends.
|
|
3. An ordinary project-wide text search with ripgrep.
|
|
|
|
If there are multiple results, you will be prompted to select one.
|
|
|
|
** Look up documentation
|
|
~+lookup/documentation~ (bound to [[kbd:][K]] in normal mode) will open documentation for
|
|
the symbol at point.
|
|
|
|
Depending on your configuration, this will try a list of sources:
|
|
|
|
1. Whatever ~:documentation~ function is registered for the current buffer with
|
|
the ~:lookup~ setting (see "Configuration" section).
|
|
2. Any Dash.app docsets, if any are installed for the current major mode.
|
|
3. devdocs.io, if it has a docset for the current mode.
|
|
4. An online search; using the last engine used (it will prompt you the first
|
|
time, or if ~current-prefix-arg~ is non-nil).
|
|
|
|
** Search a specific documentation backend
|
|
You can perform a documentation lookup on any backends directly:
|
|
|
|
+ Dash Docsets: ~+lookup/in-docsets~, or ~:dash QUERY~ for evil users.
|
|
+ Online (generic): ~+lookup/online~ or ~+lookup/online-select~ (bound to [[kbd:][SPC /
|
|
o]]), or ~:lo[okup] QUERY~ for evil users.
|
|
|
|
** Dash.app Docset integration
|
|
You can install dash docsets with ~M-x dash-docs-install-docset~ and search
|
|
them offline with ~M-x +lookup/in-docsets~, or with ~+lookup/documentation~ in
|
|
modes that don't have a specialized :documentation lookup handler.
|
|
|
|
* Configuration
|
|
** Associating lookup handlers with major modes
|
|
~set-lookup-handlers! MODES &key DEFINITION REFERENCES DOCUMENTATION FILE
|
|
XREF-BACKEND ASYNC~
|
|
|
|
Use ~set-lookup-handlers!~ to register lookup targets for MODES (a major or
|
|
minor mode symbol or list thereof). PLIST accepts the following optional
|
|
properties:
|
|
|
|
- ~:definition FN~ ::
|
|
Run when jumping to a symbol's definition. Used by ~+lookup/definition~.
|
|
- ~:references FN~ ::
|
|
Run when looking for usage references of a symbol in the current project. Used
|
|
by ~+lookup/references~.
|
|
- ~:documentation FN~ ::
|
|
Run when looking up documentation for a symbol. Used by
|
|
~+lookup/documentation~.
|
|
- ~:file FN~ ::
|
|
Run when looking up the file for a symbol/string. Typically a file path. Used
|
|
by ~+lookup/file~.
|
|
- ~:xref-backend FN~ ::
|
|
Defines an [[doom-package:xref]] backend, which implicitly provides ~:definition~ and
|
|
~:references~ handlers. If you specify them anyway, they will take precedence
|
|
over the xref backend, however.
|
|
|
|
E.g.
|
|
#+begin_src emacs-lisp
|
|
;; For python-mode, anaconda-mode offers a backend for all three lookup
|
|
;; functions. We can register them like so:
|
|
(set-lookup-handlers! 'python-mode
|
|
:definition #'anaconda-mode-find-definitions
|
|
:references #'anaconda-mode-find-references
|
|
:documentation #'anaconda-mode-show-doc)
|
|
|
|
;; If a language or plugin provides a custom xref backend available for it, use
|
|
;; that instead. It will provide the best jump-to-definition and find-references
|
|
;; experience. You can specify custom xref backends with:
|
|
(set-lookup-handlers! 'js2-mode :xref-backend #'xref-js2-xref-backend)
|
|
;; NOTE: xref doesn't provide a :documentation backend.
|
|
#+end_src
|
|
|
|
** Associating Dash docsets with major modes
|
|
~set-docsets! MODES &rest DOCSETS...~
|
|
|
|
Use ~set-docsets!~ to register DOCSETS (one string or list of strings) for MODES
|
|
(one major mode symbol or a list of them). It is used by ~+lookup/in-docsets~
|
|
and ~+lookup/documentation~.
|
|
|
|
E.g.
|
|
#+begin_src emacs-lisp
|
|
(set-docsets! 'js2-mode "JavaScript" "JQuery")
|
|
;; Add docsets to minor modes by starting DOCSETS with :add
|
|
(set-docsets! 'rjsx-mode :add "React")
|
|
;; Or remove docsets from minor modes
|
|
(set-docsets! 'nodejs-mode :remove "JQuery")
|
|
#+end_src
|
|
|
|
This determines what docsets to implicitly search for when you use
|
|
~+lookup/documentation~ in a mode with no ~:documentation~ handler. Those
|
|
docsets must be installed with ~dash-docs-install-docset~.
|
|
|
|
** Open in eww instead of browser
|
|
~+lookup/online~ opens the search results with in ~+lookup-open-url-fn~
|
|
(default: ~#'browse-url~). Here is how to change this to EWW (so it opens inside
|
|
Emacs):
|
|
#+begin_src emacs-lisp
|
|
(setq +lookup-open-url-fn #'eww)
|
|
#+end_src
|
|
|
|
#+begin_quote
|
|
~+lookup/in-docsets~ consults ~dash-docs-browser-func~ instead, which is
|
|
already set to ~#'eww~ by default.
|
|
#+end_quote
|
|
|
|
** Open in Xwidget WebKit instead of browser
|
|
To open results from ~+lookup/online~ or ~+lookup/in-docsets~ in Xwidget WebKit
|
|
instead of your system browser, set ~+lookup-open-url-fn~ and/or
|
|
~dash-docs-browser-func~ to ~+lookup-xwidget-webkit-open-url-fn~ (needs Emacs
|
|
with Xwidgets support):
|
|
#+begin_src emacs-lisp
|
|
(setq +lookup-open-url-fn #'+lookup-xwidget-webkit-open-url-fn)
|
|
(with-eval-after-load 'dash-docs
|
|
(setq dash-docs-browser-func #'+lookup-xwidget-webkit-open-url-fn))
|
|
#+end_src
|
|
|
|
* Troubleshooting
|
|
/There are no known problems with this module./ [[doom-report:][Report one?]]
|
|
|
|
* Frequently asked questions
|
|
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]
|
|
|
|
* TODO Appendix
|
|
#+begin_quote
|
|
/This module's appendix is incomplete./ [[doom-contrib-module:][Write more?]]
|
|
#+end_quote
|
|
|
|
** Commands
|
|
- ~+lookup/definition~
|
|
- ~+lookup/references~
|
|
- ~+lookup/documentation~
|
|
- ~+lookup/online~
|
|
- ~+lookup/online-select~
|
|
- ~+lookup/in-devdocs~
|
|
- ~+lookup/in-docsets~
|