feat(org): overhaul org-roam
capture
This commit is contained in:
parent
a5c2996c9a
commit
9add49f478
55
config.org
55
config.org
|
@ -3465,17 +3465,22 @@ Since Org-roam is currently my primary method of using Org, I only use its templ
|
||||||
(read-directory-name "Directory: " org-roam-directory))))
|
(read-directory-name "Directory: " org-roam-directory))))
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
I want there to only be one capture template when I'm making new links, so that I don't get distracted. However, when I'm explicitly telling Roam to make a new node, it would be a shame if there was only one option. To fix this, I'll add new variables representing the /default/ templates to use in situations where I don't want to have to choose.
|
I want there to only be one capture template when I'm making new links, so that I don't get distracted by a prompt. However, when I'm explicitly telling Roam to use node capture, it would be a shame if there was only one option. To fix this, I can split my capture templates into three contexts: a default template for when not explicitly capturing, a list of templates for capturing on a node that already exists, and the regular list for when the node is new.
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
|
||||||
(defvar org-roam-capture-default-template nil
|
(defvar org-roam-capture-default-template nil
|
||||||
"The default capture template to use when not explicitly capturing.")
|
"The default capture template to use when not explicitly capturing.")
|
||||||
|
|
||||||
|
(defvar org-roam-capture-existing-templates nil
|
||||||
|
"Capture templates to use when capturing on an existing node.")
|
||||||
|
|
||||||
(defvar org-roam-dailies-capture-default-template nil
|
(defvar org-roam-dailies-capture-default-template nil
|
||||||
"The default daily capture template to use when not explicitly capturing.")
|
"The default daily capture template to use when not explicitly capturing.")
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
(We don't distinguish between new and existing dailies, since dailies are meant to follow a single format, which can just be covered by the default template.)
|
||||||
|
|
||||||
With those variables created, we can define our templates.
|
With those variables created, we can define our templates.
|
||||||
|
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
|
@ -3493,26 +3498,12 @@ With those variables created, we can define our templates.
|
||||||
"#+title: %<%Y-%m-%d>")
|
"#+title: %<%Y-%m-%d>")
|
||||||
:unnarrowed t
|
:unnarrowed t
|
||||||
:immediate-finish t))
|
:immediate-finish t))
|
||||||
;; Active templates
|
;; new-file templates
|
||||||
(setq org-roam-capture-templates
|
(setq org-roam-capture-templates
|
||||||
'(("f" "Standalone file" plain ""
|
'(("f" "Standalone file" plain ""
|
||||||
:target (file+head "${file-maybe-dir}"
|
:target (file+head "${file-maybe-dir}"
|
||||||
"#+title: ${title}")
|
"#+title: ${title}")
|
||||||
:unnarrowed t)
|
:unnarrowed t))
|
||||||
("n" "Citation Note" plain ""
|
|
||||||
:target (file+head "${file-maybe-cite}"
|
|
||||||
"#+title: ${note-title}")
|
|
||||||
:immediate-finish t
|
|
||||||
:unnarrowed t)
|
|
||||||
("h" "Heading" entry
|
|
||||||
"`(make-string (org-outline-level) ?*)`* ${title}
|
|
||||||
:RELATED:
|
|
||||||
Subnote of `(let ((node (org-roam-node-at-point)))
|
|
||||||
(format \"[[id:%s][%s]]\"
|
|
||||||
(org-roam-node-id node)
|
|
||||||
(org-roam-node-title node)))`$1
|
|
||||||
:END:\n\n$0"
|
|
||||||
:target (file "20240329114914-a.org")))
|
|
||||||
org-roam-dailies-capture-templates
|
org-roam-dailies-capture-templates
|
||||||
'(("e" "Event" entry "* $1\n%^t\n\n$0"
|
'(("e" "Event" entry "* $1\n%^t\n\n$0"
|
||||||
:target (file+head "%<%Y-%m-%d>.org"
|
:target (file+head "%<%Y-%m-%d>.org"
|
||||||
|
@ -3534,10 +3525,22 @@ Now we just have to advise Org-roam with the proper logic!
|
||||||
#+begin_src emacs-lisp
|
#+begin_src emacs-lisp
|
||||||
(defadvice! ~/org-roam-default-capture (old-fn &rest args)
|
(defadvice! ~/org-roam-default-capture (old-fn &rest args)
|
||||||
"Use default capture template when not explicitly capturing."
|
"Use default capture template when not explicitly capturing."
|
||||||
:around '(org-roam-node-find org-roam-node-insert)
|
:around #'org-roam-node-insert
|
||||||
(let ((org-roam-capture-templates (list org-roam-capture-default-template)))
|
(let ((org-roam-capture-templates (list org-roam-capture-default-template)))
|
||||||
(apply old-fn args)))
|
(apply old-fn args)))
|
||||||
|
|
||||||
|
(cl-defun ~/org-roam-capture (&optional goto keys &key filter-fn templates info)
|
||||||
|
(let ((node (org-roam-node-read nil filter-fn)))
|
||||||
|
(org-roam-capture- :goto goto
|
||||||
|
:info info
|
||||||
|
:keys keys
|
||||||
|
:templates (or templates
|
||||||
|
(when (org-roam-node-file node)
|
||||||
|
org-roam-capture-existing-templates))
|
||||||
|
:node node
|
||||||
|
:props '(:immediate-finish nil))))
|
||||||
|
(advice-add #'org-roam-capture :override #'~/org-roam-capture)
|
||||||
|
|
||||||
(defadvice! ~/org-roam-dailies-default-capture (old-fn time &optional goto keys)
|
(defadvice! ~/org-roam-dailies-default-capture (old-fn time &optional goto keys)
|
||||||
"Use default capture template when not explicitly capturing."
|
"Use default capture template when not explicitly capturing."
|
||||||
:around #'org-roam-dailies--capture
|
:around #'org-roam-dailies--capture
|
||||||
|
@ -3675,7 +3678,23 @@ This "overview" agenda command is very nice. It's so nice, in fact, that it's al
|
||||||
"o A" #'org-agenda)
|
"o A" #'org-agenda)
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
*** TODO Tweaks
|
||||||
|
|
||||||
|
When finding a node with ~org-roam-node-find~, the universal argument to open it in another window doesn't work when the node is new. We can fix this with an override:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(cl-defun ~/org-roam-node-find (&optional other-window initial-input filter-fn pred &key templates)
|
||||||
|
(let ((node (org-roam-node-read initial-input filter-fn pred)))
|
||||||
|
(if (org-roam-node-file node)
|
||||||
|
(org-roam-node-visit node other-window)
|
||||||
|
(org-roam-capture-
|
||||||
|
:node node
|
||||||
|
:templates (or templates (list org-roam-capture-default-template))
|
||||||
|
:props (if other-window
|
||||||
|
'(:after-finalize find-file-other-window)
|
||||||
|
'(:finalize find-file))))))
|
||||||
|
(advice-add #'org-roam-node-find :override #'~/org-roam-node-find)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Citations
|
** Citations
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue