diff --git a/modules/lang/org/autoload/contrib-roam2.el b/modules/lang/org/autoload/contrib-roam2.el index e89dad3b5..72b6d3d9e 100644 --- a/modules/lang/org/autoload/contrib-roam2.el +++ b/modules/lang/org/autoload/contrib-roam2.el @@ -2,10 +2,10 @@ ;;;###if (featurep! +roam2) ;;; Custom node accessors - ;;;###autoload (autoload 'org-roam-node-doom-filetitle "lang/org/autoload/contrib-roam2" nil t) (cl-defmethod org-roam-node-doom-filetitle ((node org-roam-node)) - "Return NODE's file level \"#+title:\"." + "Return the value of \"#+title:\" (if any) from file that NODE resides in. +If there's no file-level title in the file, return empty string." (or (if (= (org-roam-node-level node) 0) (org-roam-node-title node) (org-roam-get-keyword "TITLE" (org-roam-node-file node))) @@ -13,25 +13,28 @@ ;;;###autoload (autoload 'org-roam-node-doom-hierarchy "lang/org/autoload/contrib-roam2" nil t) (cl-defmethod org-roam-node-doom-hierarchy ((node org-roam-node)) - "Return NODE's hierarchy, constructed of its file-title, OLP and title. -This will automatically strip out any missing elements or -duplicates from the hierarchy." + "Return hierarchy for NODE, constructed of its file title, OLP and direct title. +If some elements are missing, they will be stripped out." (let ((title (org-roam-node-title node)) (olp (org-roam-node-olp node)) (level (org-roam-node-level node)) - (filetitle (org-roam-node-doom-filetitle node))) - ;; TODO Add 'face based text properties for each type? + (filetitle (org-roam-node-doom-filetitle node)) + (separator (propertize " > " 'face 'shadow))) (cl-case level ;; node is a top-level file (0 filetitle) ;; node is a level 1 heading - (1 (concat filetitle " > " title)) + (1 (concat (propertize filetitle 'face '(shadow italic)) + separator title)) ;; node is a heading with an arbitrary outline path - (t (concat filetitle " > " (string-join olp " > ") " > " title))))) + (t (concat (propertize filetitle 'face '(shadow italic)) + separator (propertize (string-join olp " > ") 'face '(shadow italic)) + separator title))))) ;;;###autoload (autoload 'org-roam-node-doom-subdirs "lang/org/autoload/contrib-roam2" nil t) (cl-defmethod org-roam-node-doom-subdirs ((node org-roam-node)) - "Return NODE's subdirectories, relative to `org-roam-directory'." + "Return subdirectories of `org-roam-directory' in which NODE resides in. +If there's none, return an empty string." (if-let ((dirs (thread-first node (org-roam-node-file) (file-relative-name org-roam-directory) @@ -41,5 +44,15 @@ duplicates from the hierarchy." ;;;###autoload (autoload 'org-roam-node-doom-tags "lang/org/autoload/contrib-roam2" nil t) (cl-defmethod org-roam-node-doom-tags ((node org-roam-node)) - "Return tags formatted in the same way how they appear in org files." - (mapconcat (lambda (s) (concat ":" s)) (org-roam-node-tags node) nil)) + "Return tags formatted in the same way how they appear in org files. +Treat subdirectories as tags too. If there's no elements to build +the tags of, return an empty string." + (let ((tags (org-roam-node-tags node)) + (subdirs (org-roam-node-doom-subdirs node))) + (when tags + (setq tags (propertize (concat (mapconcat (lambda (s) (concat ":" s)) tags nil) ":") + 'face 'shadow))) + (unless (string-empty-p subdirs) + (setq subdirs (propertize (concat ":" (replace-regexp-in-string "/\\|\\\\" ":" subdirs)) + 'face '(shadow italic)))) + (replace-regexp-in-string ":+" (propertize ":" 'face 'shadow) (concat subdirs tags)))) diff --git a/modules/lang/org/contrib/roam2.el b/modules/lang/org/contrib/roam2.el index ff1af099a..fe98141b5 100644 --- a/modules/lang/org/contrib/roam2.el +++ b/modules/lang/org/contrib/roam2.el @@ -75,7 +75,7 @@ In case of failure, fail gracefully." (or org-roam-db-location (concat doom-etc-dir "org-roam.db")) org-roam-node-display-template - "${doom-hierarchy:*} ${doom-tags:35} ${doom-subdirs}" + "${doom-hierarchy:*} ${doom-tags:45}" org-roam-completion-everywhere t org-roam-mode-section-functions #'(org-roam-backlinks-section