branch: externals/consult
commit 2251d55aa7c84ebbf11274f44ab6879d3808c2a7
Author: Daniel Mendler <[email protected]>
Commit: Daniel Mendler <[email protected]>
Add consult-info-define
---
CHANGELOG.org | 5 +++++
README.org | 29 ++++++++++++-----------------
consult-info.el | 15 +++++++++++++++
3 files changed, 32 insertions(+), 17 deletions(-)
diff --git a/CHANGELOG.org b/CHANGELOG.org
index d3003db89c..1179ffec0c 100644
--- a/CHANGELOG.org
+++ b/CHANGELOG.org
@@ -2,6 +2,11 @@
#+author: Daniel Mendler
#+language: en
+* Development
+
+- Add ~consult-info-define~ to conveniently define custom ~consult-info-*~
commands
+ to search through a subset of info manuals.
+
* Version 2.1 (2025-03-11)
- Remove obsolete ~consult--async-*~ APIs.
diff --git a/README.org b/README.org
index c5e11eaf17..3162a118b0 100644
--- a/README.org
+++ b/README.org
@@ -351,30 +351,25 @@ their descriptions.
:end:
#+findex: consult-info
+#+findex: consult-info-define
#+findex: consult-man
- =consult-man=: Find Unix man page, via Unix =apropos= or =man -k=.
=consult-man= opens
the selected man page using the Emacs =man= command. Supports live preview of
the theme while scrolling through the candidates.
- =consult-info=: Full text search through info pages. If the command is
invoked
from within an ~*info*~ buffer, it will search through the current manual.
You
- may want to create your own commands which search through a predefined set of
- info pages, for example:
+ may want to create your own =consult-info-*= commands which search through a
+ predefined set of info pages. You can use the function =consult-info-define=
to
+ define commands =consult-info-emacs=, =consult-info-completion=,
=consult-info-org=,
+ and so on:
#+begin_src emacs-lisp
-(defun consult-info-emacs ()
- "Search through Emacs info pages."
- (interactive)
- (consult-info "emacs" "efaq" "elisp" "cl" "compat"))
-
-(defun consult-info-org ()
- "Search through the Org info page."
- (interactive)
- (consult-info "org"))
-
-(defun consult-info-completion ()
- "Search through completion info pages."
- (interactive)
- (consult-info "vertico" "consult" "marginalia" "orderless" "embark"
- "corfu" "cape" "tempel"))
+(consult-info-define "emacs" "efaq" "elisp" "cl" "compat" "eshell")
+(consult-info-define 'completion
+ "vertico" "consult" "marginalia" "orderless"
+ "embark" "corfu" "cape" "tempel")
+(consult-info-define "org")
+(consult-info-define "gnus")
+(consult-info-define "magit")
#+end_src
** Miscellaneous
diff --git a/consult-info.el b/consult-info.el
index 8aad712697..f594e1a354 100644
--- a/consult-info.el
+++ b/consult-info.el
@@ -200,5 +200,20 @@ CALLBACK receives the candidates."
:add-history (thing-at-point 'symbol)
:lookup #'consult--lookup-member))))
+;;;###autoload
+(progn ;; Wrapped with `progn' to preload `consult-info-define'.
+ (defun consult-info-define (name &rest manuals)
+ "Define `consult-info-NAME' command to search through MANUALS.
+MANUALS is a list of a strings. NAME can be a symbol or a string. If
+NAME is a string, it is added to the MANUALS list."
+ (let ((cmd (intern (format "consult-info-%s" name))))
+ (when (stringp name) (push name manuals))
+ (defalias cmd (lambda () (interactive) (apply #'consult-info manuals))
+ (format "Search via `consult-info' through the manual%s %s:\n\n%s"
+ (if (cdr manuals) "s" "")
+ (mapconcat (lambda (m) (format "\"%s\"" m)) manuals ", ")
+ (mapconcat (lambda (m) (format " * Info node `(%s)'" m))
manuals "\n")))
+ cmd)))
+
(provide 'consult-info)
;;; consult-info.el ends here