Add elisp demos for Doom API in helpful buffer

This commit is contained in:
Henrik Lissner 2019-07-21 14:53:19 +02:00
parent b90dede1ab
commit be789caa04
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
3 changed files with 58 additions and 11 deletions

View file

@ -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)

50
docs/api.org Normal file
View file

@ -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

View file

@ -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