mirror of
https://github.com/org-roam/org-roam
synced 2025-08-31 14:43:32 -05:00
(feat!)capture: unify template variables
Instead of using various capture template variables, like org-roam-dailies-capture-templates or org-roam-capture-ref-templates, just use org-roam-capture-templates for everything. From now on, each individual template will able to optionally specify a more detailed context for which they're dedicated for, using :kind and :action properties. Both of them accept either, a symbol or a list of symbols. If it's a list, then it can optionally start with :not symbol to indicate inverse logic, otherwise it will act akin to memq. If it's a symbol, then it will work akin to eq, but with support for special 'any value, which indicates that it will work in any contexts; 'any can be also used inside of the list based values. Org-roam and the built-in extension will provide the following contexts: - :action {capture,goto,any} - :kind {normal,daily,protocol,any} but third party extensions / users can easily extend them for their own needs. If :action isn't specified it will implicitly default to 'capture, while :kind will default to 'normal contexts. BREAKING CHANGE: org-roam-dailies-capture-templates and org-roam-capture-ref-templates are now removed in the favor of unified approach.
This commit is contained in:
@@ -105,6 +105,29 @@ If FILE, set `default-directory' to FILE's directory and insert its contents."
|
||||
(setq-local default-directory (file-name-directory ,file)))
|
||||
,@body)))))
|
||||
|
||||
;;; Processing options
|
||||
(defun org-roam--valid-option-p (option choice)
|
||||
"Return t if OPTION satisfies CHOICE, else nil.
|
||||
OPTION is a symbol, while CHOICE is either, a symbol or a list of
|
||||
symbols that can optionally start with `:not' keyword.
|
||||
|
||||
If CHOICE is a list that indicates negation, then the function
|
||||
will return t if OPTION isn't in the list. Otherwise it will
|
||||
return t is OPTION is present in the CHOICE.
|
||||
|
||||
When CHOICE is a symbol, it will behave like `eq', except of
|
||||
special 'any value, in which case it will always return t,
|
||||
independently OPTION's value.
|
||||
|
||||
CHOICE as a list can too contain 'any, in which case any OPTION
|
||||
value will be considered as part of the CHOICE, with respect to
|
||||
negation."
|
||||
(let* ((choices (-list choice))
|
||||
(intersection (-intersection (list option 'any) choices))
|
||||
(negation (eq :not (car choices))))
|
||||
(or (and intersection (not negation))
|
||||
(and (not intersection) negation))))
|
||||
|
||||
;;; Formatting
|
||||
(defun org-roam-format-template (template replacer)
|
||||
"Format TEMPLATE with the function REPLACER.
|
||||
|
Reference in New Issue
Block a user