问题描述在图片里面,我现在没有解决的办法,这里不自动化觉得很痛苦啊。
请大家给我一点建议,谢谢了!
Org-capture 模版里面的%(sexp) 可以实现这个功能,sexp为自定义函数,写个函数返回上一条entry和+1的数据就可以了。
至于函数的话,你可以参考org-element来实现。
谢谢给方向,刚才看到org-element.el,有点复杂,我慢慢消化学习吧。谢谢你!
不熟悉 org-mode 的代码,从 Lisp 操作 org-mode 实在费劲,几乎没什么文档。
好不容易想办法找出你所说的「上一个 Entry」,或许有帮助。
(defun chunyang-org-last-child (olp)
"返回 OLP 下最后一个 Heading 的标题."
(let ((m (ignore-errors (org-find-olp olp 'this-buffer))))
(when m
(goto-char m)
;; Goto last child
(org-end-of-subtree 'invisible-ok)
(org-back-to-heading 'invisible-ok)
;; If there is no child, the point is not changed
(when (/= m (point))
(org-entry-get (point) "ITEM")))))
(with-temp-buffer
(insert "* 音乐教育实践\n"
"** hxy\n"
"*** 课堂记录\n"
"**** 1课, 2018-08-12\n"
"**** 2课, 2018-08-19\n"
"* 其它内容")
(org-mode)
(chunyang-org-last-child '("音乐教育实践" "hxy" "课堂记录")))
;; => "2课, 2018-08-19"
谢谢你!
你的代码在单独的lisp文件中运行起来是有效的,不过我加入到capture的模板中调用出错,可能是我的调用方式有问题。我调用如下,
然后capture出来的首行是下面感觉函数没有被解释执行,然后遇到语法错误就中断了。
是需要这个环境,所以不能直接用在 org-capture-templates
,你需要再写个函数把你的 ~/org/gen.org
也传进去,可能像下面这样
(defun chunyang-org-last-child (file olp)
"返回 FILE 中 OLP 下最后一个 Heading 的标题."
(with-temp-buffer
(insert-file-contents file)
(org-mode)
(let ((m (ignore-errors (org-find-olp olp 'this-buffer))))
(when m
(goto-char m)
;; Goto last child
(org-end-of-subtree 'invisible-ok)
(org-back-to-heading 'invisible-ok)
;; If there is no child, the point is not changed
(when (/= m (point))
(org-entry-get (point) "ITEM"))))))
而且你自己还要处理返回 nil
的情况。我不清楚 org-capture-templates
的高级用法,需要你自己摸索。
好的,你已经给我很多启发了,我正在试验,然后在各种领悟中去学习elisp吧,哈哈。
谢谢你!