我个人有定期 review 自己的工作、笔记的习惯,用了 org-roam 后自然也想看看自己每天都新建了哪些笔记,但是 org-roam 并没有提供这个功能,于是自己写了个函数来做这个事情。
效果图:
代码在后面,但目前逻辑考虑的还不是很完善,要求笔记创建的模板里有 :file-name "%<%Y%m%d%H%M%S>-${slug}"
这部分,重点是前面的 %Y%m%d
,也就是说文件名里必须包含了创建的日期 —— 本来想从存储的 org-roam.db 里查找的,但是里面只存储了 mtime 和 atime,没有存创建时间,暂时先这样,对我自己来说够用了。
(require 's)
(defun get-org-roam-daily-notes (&optional date)
(let* ((date-string (if date (format "%%%s%%" date) (format-time-string "%%%Y%m%d%%")))
(today-notes (org-roam-db-query [:select [file (funcall min title)] :from titles :where (like file $r1) :group-by file] date-string)))
(seq-map (lambda (i) (append i (car (org-roam-db-query [:select [tags] :from tags :where (= file $s1)] (car i))))) today-notes)))
(defun insert-org-roam-daily-notes (&optional date)
(interactive)
(let* ((date-string (if date date (s-replace "-" "" (org-read-date))))
(notes (get-org-roam-daily-notes date-string))
(num-notes (length notes)))
(when (> num-notes 0)
(insert "\n")
(dotimes (i num-notes)
(let ((note (nth i notes)))
(indent-relative-maybe)
(insert (format "- %s: [[%s][%s]]\n" (string-join (nth 2 note)) (nth 0 note) (nth 1 note))))))))
(defun insert-org-roam-today-notes ()
(interactive)
(insert-org-roam-daily-notes (format-time-string "%Y%m%d")))