about summary refs log tree commit diff stats
path: root/lisp/+org-capture.el
diff options
context:
space:
mode:
authorCase Duckworth2022-01-31 13:55:00 -0600
committerCase Duckworth2022-01-31 13:55:00 -0600
commit5bb0040b8acb17c49ba2e1010fc60263a372e345 (patch)
treeb9608caa6f768218f66113263215977454f4d1cc /lisp/+org-capture.el
parentRename ponder.jpg -> ponder.png (diff)
downloademacs-5bb0040b8acb17c49ba2e1010fc60263a372e345.tar.gz
emacs-5bb0040b8acb17c49ba2e1010fc60263a372e345.zip
Add `+org-define-capture-template'
Diffstat (limited to 'lisp/+org-capture.el')
-rw-r--r--lisp/+org-capture.el61
1 files changed, 60 insertions, 1 deletions
diff --git a/lisp/+org-capture.el b/lisp/+org-capture.el index 6c59b98..7ed4e00 100644 --- a/lisp/+org-capture.el +++ b/lisp/+org-capture.el
@@ -98,8 +98,67 @@ properly process the variable."
98 (setf (+org-capture--get ek (symbol-value list)) 98 (setf (+org-capture--get ek (symbol-value list))
99 (list (format "(Group %s)" ek))))))) 99 (list (format "(Group %s)" ek)))))))
100 100
101(defun +org-define-capture-template (keys title &rest args) 101(defcustom +org-capture-default-type 'entry
102 "Default template for `org-capture-templates'."
103 :type '(choice (const :tag "Entry" entry)
104 (const :tag "Item" item)
105 (const :tag "Check Item" checkitem)
106 (const :tag "Table Line" table-line)
107 (const :tag "Plain Text" plain)))
108
109(defcustom +org-capture-default-target ""
110 "Default target for `org-capture-templates'."
111 ;; TODO: type
112 )
113
114(defcustom +org-capture-default-template nil
115 "Default template for `org-capture-templates'."
116 ;; TODO: type
102 ) 117 )
103 118
119(defun +org-define-capture-templates-group (keys description)
120 "Add a group title to `org-capture-templates'."
121 (setf (+org-capture--get keys org-capture-templates)
122 (list description)))
123
124;; [[https://github.com/cadadr/configuration/blob/39813a771286e542af3aa333172858532c3bb257/emacs.d/gk/gk-org.el#L1573][from cadadr]]
125(defun +org-define-capture-template (keys description &rest args)
126 "Define a capture template and necessary antecedents.
127ARGS is a plist, which in addition to the additional options
128`org-capture-templates' accepts, takes the following and places
129them accordingly: :type, :target, and :template. Each of these
130corresponds to the same field in `org-capture-templates's
131docstring, which see. Likewise with KEYS and DESCRIPTION, which
132are passed separately to the function.
133
134This function will also create all the necessary intermediate
135capture keys needed for `org-capture'; that is, if KEYS is
136\"wcp\", entries for \"w\" and \"wc\" will both be ensured in
137`org-capture-templates'."
138 (declare (indent 2))
139 ;; Check for existence of parent groups
140 (when (> (length keys) 1)
141 (let ((expected (cl-loop for i from 1 to (1- (length keys))
142 collect (substring 0 i) into keys
143 finally return keys)))
144 (cl-loop
145 for ek in expected
146 if (not (+org-capture--get ek org-capture-templates))
147 do (+org-define-capture-templates-group ek (format "(Group %s)" ek)))))
148 (if (null args)
149 ;; Add the title
150 (+org-define-capture-templates-group keys description)
151 ;; Add the capture template.
152 (setf (+org-capture--get keys org-capture-templates)
153 (append (list (or (plist-get args :type)
154 +org-capture-default-type)
155 (or ( plist-get args :target)
156 +org-capture-default-target)
157 (or (plist-get args :template)
158 +org-capture-default-template))
159 (cl-loop for (key val) on args by #'cddr
160 unless (member key '(:type :target :template))
161 append (list key val))))))
162
104(provide '+org-capture) 163(provide '+org-capture)
105;;; +org-capture.el ends here 164;;; +org-capture.el ends here