写了个函数用来查找当日新建的 org-roam 笔记并插入到当前文件中

我个人有定期 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")))
3赞

很好,标记一下。我也有这样的需求,不过笔记没有包含日期戳,目前的做法是在标题下加个 CREATED的PROPERTIES,方便以后用到可以HACK。

:sweat_smile: 我也有这么做……不过不是放在 PROPERTIES 里

 (add-to-list 'org-roam-capture-templates `("d" "Default" plain (function org-roam-capture--get-point)
                                            "%?"
                                            :file-name "%<%Y%m%d%H%M%S>-${slug}"
                                            :head ,(concat "#+title: ${title}\n"
                                                           "#+STARTUP: showall\n"
                                                           "#+roam_alias:\n"
                                                           "#+roam_tags: 未分类\n\n"
                                                           "created at: %U\n\n")
                                            :unnarrowed t))

那是不是可以提个issue。我现在没有回顾笔记的习惯,只是想记录笔记的演进。

我想了下,要求把创建时间写入到 org-roam.db 恐怕不太现实,因为用户是可以调用 org-roam-db-clear 和 org-roam-db-build-cache 来重建数据库的,只要这两个操作还是分开的,那么在 org-roam-db-clear 后,创建时间的信息就丢掉了,org-roam-db-build-cache 没法获得这个信息……

文件名上的时间也没保证,像我就只有从web上捕获的才留日期。我看jethro的brain dump那个里面也只是部分保留日期在文件名中。

是的,所以我已经把我所有笔记的文件名都加上日期了。

楼主的函数启发了我。不光是当前日记笔记,有的时候我也想在整个笔记库中模糊搜索,然后选中多个相关笔记,标记后插入当前笔记,再用 org-transclusion 来预览编辑新的笔记。

1赞