emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] DOCT integration: template specific hooks [9.5.5 (9.5.5-g003


From: No Wayman
Subject: Re: [PATCH] DOCT integration: template specific hooks [9.5.5 (9.5.5-g003cc7 @ /home/n/.emacs.d/elpaca/builds/org/)]
Date: Tue, 27 Sep 2022 07:06:08 -0400
User-agent: mu4e 1.9.0; emacs 29.0.50


No Wayman <iarchivedmywholelife@gmail.com> writes:

The attached patch is the first step toward integrating DOCT[1] syntax into Org mode. It adds property options to org-capture-templates which make it easier to run template-specific hooks. The current approach for running such hooks involves adding to the desired global hook variable and filtering by the template's keys.
e.g.

#+begin_src emacs-lisp :lexical t
(defun +example-template-hook ()
  (when (eq (org-capture-get :key t) "e")
    (message "hook run")))

(add-hook 'org-capture-mode-hook #'+example-template-hook)

(let ((org-capture-templates '("e" "example" (file "") "")))
  (org-capture nil "e"))
#+end_src


The hook has to be maintained separately from the template declaration. The criteria to determine the selected template is baked into the hook function. This is fragile (change the binding for the template and you must update the hook function),
mixes concerns, and makes templates harder to share.

Contrast the above with the following syntax enabled by the attached patch:
#+begin_src emacs-lisp :lexical t
(let ((org-capture-templates
       '(("t" "test" plain (file "/tmp/test.org")
          "test %?"
          :hook ((lambda () (insert "mode-hook\n")))
:before-finalize ((lambda () (insert "before-finalize\n"))) ;; Only a message because this happens outside the context
          ;; of the capture buffer.
:after-finalize ((lambda () (message "after-finalize"))) :prepare-finalize ((lambda () (insert "prepare-finalize\n")))))))
  (org-capture nil "t"))
#+end_src

These template-specific hook functions run prior to their global counterparts.

Ihor, an implementation note: I have not used `run-hooks' with these because they have no associated symbol.
The functions are lists stored directly on `org-capture-plist'.

[1]: https://github.com/progfolio/doct

And, of course, the patch...

Attachment: 0001-org-capture-Add-template-hook-properties.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]