diff --git a/core/core-lib.el b/core/core-lib.el index 5adc87878..7efd60812 100644 --- a/core/core-lib.el +++ b/core/core-lib.el @@ -356,16 +356,6 @@ This macro accepts, in order: 3. The function(s) to be added: this can be one function, a list thereof, a list of `defun's, or body forms (implicitly wrapped in a closure). -Examples: - (add-hook! 'some-mode-hook 'enable-something) (same as `add-hook') - (add-hook! some-mode '(enable-something and-another)) - (add-hook! '(one-mode-hook second-mode-hook) 'enable-something) - (add-hook! (one-mode second-mode) 'enable-something) - (add-hook! :append (one-mode second-mode) 'enable-something) - (add-hook! :local (one-mode second-mode) 'enable-something) - (add-hook! (one-mode second-mode) (setq v 5) (setq a 2)) - (add-hook! :append :local (one-mode second-mode) (setq v 5) (setq a 2)) - \(fn [:append :local] HOOKS FUNCTIONS)" (declare (indent defun) (debug t)) (let ((hook-fn 'add-hook) diff --git a/docs/api.org b/docs/api.org new file mode 100644 index 000000000..91dd2703e --- /dev/null +++ b/docs/api.org @@ -0,0 +1,50 @@ +#+TITLE: API Demos + +This appendix serves as a reference on how to use Doom Emacs' standard library. +It is integrated into Helpful, in Doom. + +* add-hook! +#+BEGIN_SRC elisp :eval no +;; With only one hook and one function, this is identical to `add-hook'. In that +;; case, use that instead. +(add-hook! 'some-mode-hook 'enable-something) + +;; Adding many-to-many functions to hooks +(add-hook! some-mode '(enable-something and-another)) +(add-hook! '(one-mode-hook second-mode-hook) 'enable-something) +(add-hook! (one-mode second-mode) 'enable-something) + +;; Appending and local hooks +(add-hook! :append (one-mode second-mode) 'enable-something) +(add-hook! :local (one-mode second-mode) 'enable-something) + +;; With arbitrary forms +(add-hook! (one-mode second-mode) (setq v 5) (setq a 2)) +(add-hook! :append :local (one-mode second-mode) (setq v 5) (setq a 2)) + +;; Inline named hook functions +(add-hook! '(one-mode-hook second-mode-hook) + (defun do-something () + ...) + (defun do-another-thing () + ...)) +#+END_SRC + +* remove-hook! +#+BEGIN_SRC elisp :eval no +;; With only one hook and one function, this is identical to `add-hook'. In that +;; case, use that instead. +(remove-hook! 'some-mode-hook 'enable-something) + +;; Adding many-to-many functions to hooks +(remove-hook! some-mode '(enable-something and-another)) +(remove-hook! '(one-mode-hook second-mode-hook) 'enable-something) +(remove-hook! (one-mode second-mode) 'enable-something) + +;; Appending and local hooks +(remove-hook! :append (one-mode second-mode) 'enable-something) +(remove-hook! :local (one-mode second-mode) 'enable-something) + +;; With arbitrary forms +(remove-hook! (one-mode second-mode) (setq v 5) (setq a 2)) +#+END_SRC diff --git a/modules/lang/emacs-lisp/config.el b/modules/lang/emacs-lisp/config.el index d65baa920..bd2f9b8a1 100644 --- a/modules/lang/emacs-lisp/config.el +++ b/modules/lang/emacs-lisp/config.el @@ -122,7 +122,14 @@ This marks a foldable marker for `outline-minor-mode' in elisp buffers.") :defer t :init (advice-add 'describe-function-1 :after #'elisp-demos-advice-describe-function-1) - (advice-add 'helpful-update :after #'elisp-demos-advice-helpful-update)) + (advice-add 'helpful-update :after #'elisp-demos-advice-helpful-update) + :config + (def-advice! +emacs-lisp-elisp-demos--search-a (orig-fn symbol) + "Add Doom's own demos to help buffers." + :around #'elisp-demos--search + (or (funcall orig-fn symbol) + (when-let* ((elisp-demos--elisp-demos.org (doom-glob doom-docs-dir "api.org"))) + (funcall orig-fn symbol))))) (def-package! buttercup