diff --git a/org-roam-capture.el b/org-roam-capture.el index 100eea4..08d088c 100644 --- a/org-roam-capture.el +++ b/org-roam-capture.el @@ -505,7 +505,7 @@ also run Org-capture's template expansion." (funcall (if org-capture-p #'org-capture-fill-template #'identity) (org-roam-format template - (lambda (key) + (lambda (key default-val) (let ((fn (intern key)) (node-fn (intern (concat "org-roam-node-" key))) (ksym (intern (concat ":" key)))) @@ -516,7 +516,7 @@ also run Org-capture's template expansion." (funcall node-fn org-roam-capture--node)) ((plist-get org-roam-capture--info ksym) (plist-get org-roam-capture--info ksym)) - (t (let ((r (completing-read (format "%s: " key) nil))) + (t (let ((r (completing-read (format "%s: " key) nil nil nil default-val))) (plist-put org-roam-capture--info ksym r) r)))))))) diff --git a/org-roam-utils.el b/org-roam-utils.el index 349c9b9..22b2b37 100644 --- a/org-roam-utils.el +++ b/org-roam-utils.el @@ -186,21 +186,25 @@ BEG and END are markers for the beginning and end regions." ;;; Formatting (defun org-roam-format (template replacer) "Format TEMPLATE with the function REPLACER. -REPLACER takes an argument of the format variable and optionally -an extra argument which is the EXTRA value from the call to -`org-roam-format'. -Adapted from `s-format'." +The templates are of form ${foo} for variable foo, and +${foo=default} for variable foo with default value \"default\". +REPLACER takes an argument of the format variable and the default +value (possibly nil). Adapted from `s-format'." (let ((saved-match-data (match-data))) (unwind-protect (replace-regexp-in-string "\\${\\([^}]+\\)}" (lambda (md) (let ((var (match-string 1 md)) - (replacer-match-data (match-data))) + (replacer-match-data (match-data)) + default-val) + (when (string-match "\\(.+\\)=\\(.+\\)" var) + (setq default-val (match-string 2 var) + var (match-string 1 var))) (unwind-protect (let ((v (progn (set-match-data saved-match-data) - (funcall replacer var)))) + (funcall replacer var default-val)))) (if v (format "%s" v) (signal 'org-roam-format-resolve md))) (set-match-data replacer-match-data)))) template ;; Need literal to make sure it works @@ -218,7 +222,7 @@ Adapted from `s-format'." (string-width (org-roam-format format - (lambda (field) + (lambda (field _default_val) (setq fields-width (+ fields-width (string-to-number diff --git a/org-roam.el b/org-roam.el index 554da09..029c67e 100644 --- a/org-roam.el +++ b/org-roam.el @@ -505,7 +505,7 @@ Uses `org-roam-node-display-template' to format the entry." (let ((fmt (org-roam--process-display-format org-roam-node-display-template))) (org-roam-format (car fmt) - (lambda (field) + (lambda (field _default-val) (let* ((field (split-string field ":")) (field-name (car field)) (field-width (cadr field))