我设置了 Org Capture 自动生成,UUID 和 创建时间:
* TODO add last modified timestamp to org heading
:PROPERTIES:
:ID: 17650B66-9F27-4555-AF48-E843E9238D2E
:CREATED: 2020-11-28T13:38:57+0800
:END:
现在我想要存储「最新修改时间」,即「自动」加入 :UPDATED: 2020-11-28T13:42:46+0800
。
搜索到一个方案,但看起来复杂,大概工作方式是每次保存,遍历所有 heading,更新修改时间:
我的笔记都存在 git 里,用 cron job 每天更新一次,备份到 github 私有仓库,一个思路是在 git commit 之前,一次性计算修改时间。
大家有类似需求吗?有没有现成的代码?或者有其它思路?
aeghn
2
最近一直在想重整一下 org-mode 的博客,目前主要遇到的问题就是更新 heading 的时间。
想了一段时间最后也就是这个方案,加一个 before-save-hook
,里面遍历全部的 heading, 如果有 :blogpost:
的 tag 就更新一下时间属性。
我也遇到这个问题,以前不觉得,现在发现笔记也需要版本控制…
也同样在纠结是在 org 文件和 heading 上维护一个修改时间,还是用 git 搞定…
不知道 lz 后来是如何解决这个问题的
不知道这个代码是否满足需求?
(defun absolutely-no-name-space/update-time-stampe-at-org-drawer ()
(interactive)
(org-set-property "LAST_MODIFIED" (absolutely-no-name-space/a-cool-time-stamp)))
(defun absolutely-no-name-space/a-cool-time-stamp ()
(let ((absolutely-no-name-space/present (format-time-string "[%Y-%m-%d %a %H:%M]")))
absolutely-no-name-space/present))
(add-hook 'before-save-hook #'absolutely-no-name-space/update-time-stampe-at-org-drawer)
我最终打算 last_modified + git 一起用,last_modified 的实现用的是这个帖子中基于 (time-stamp) 的解决方案
之前网上抄的一段代码,挺好。
(defun skx/update-org-modified-property ()
(interactive)
(message buffer-file-name)
(message (car (org-roam--extract-titles-title)))
(save-excursion
(widen)
(goto-char (point-min))
(when (re-search-forward "^#\\+LAST_MODIFIED:" (point-max) t)
(progn
(delete-region
(point)
(progn (end-of-line 1) (point))
)
;; (kill-line)
(insert " ")
(insert (format-time-string (org-time-stamp-format t t)))))))
(defun skx-org-mode-before-save-hook ()
(when (eq major-mode 'org-mode)
(skx/update-org-modified-property)))
guo
8
init.el
(add-hook 'before-save-hook 'time-stamp)
=xxx.org=
#+MACRO: comp-modified-date Time-stamp: <2021-02-25 18:07:03 gxy>
每次保存文件的时候时间会自动更新
guo
10