wsug
2021 年8 月 1 日 08:47
1
发现我在把 org当成html用 的路上越走越远……
在html里,div如果需要更新数据,我们通常会为div创建一个不重复的唯一id。在js取到数据后根据div id动态更新数据。
org的标题行嵌套展开和div的层层嵌套是相似的,只不过大部分的org文件都是纯手工写的,估计少有人会想去自动更新,都是手动更新,也就不需要id
只要约定一些规则,就可以在正常做笔记(手动修改org文件内容)与自动做笔记(其它程序修改org文件内容)间不冲突(但不能同时进行)。
因为不需要唯一id完整的显示出来,在org标题上隐藏就好(可能较长),于是我用了链接的方式(也想不出其它办法来隐藏id) 像下面的样子
*** 一二三四五 [[id值可能较长][id]]
自动添加自动更新的内容
# 手动添加手动更新的内容
org-id-get-or-create
不知道是不是你想要的
org-id-get-create is an interactive compiled Lisp function in
‘org-id.el’.
(org-id-get-create &optional FORCE)
Create an ID for the current entry and return it.
If the entry already has an ID, just return it.
With optional argument FORCE, force the creation of a new ID.
如果 headline 没有 ID,会创建一个写入到 PROPERTIES 里
有这个 ID 后,创建指向这个 headline 的链接就可以这样写:
参考文献见 [[id:f1f20679-ba36-4aba-b798-b25494a44b75][Footnotes]]
3 个赞
wsug
2021 年8 月 1 日 13:24
3
原来还有这个命令,这个也可以解决问题,不过我还是觉得隐藏式的属性好些,默认不显示出来,鼠标移入等触发时才看到,这样和html标签的title属性更像
properties可以折叠,折叠以后就只剩一行,
也可以添加自定义函数控制是否展示properties,只是隐藏了就不好判断加过没有,看你的需求,似乎隐藏 properties,然后用保存 hook 之类的自动补上 id 最省事
(defun init-headline-id ()
"process every headline"
(interactive)
(org-with-point-at 1
(org-map-entries
(lambda ()
(let ((id (org-id-get)))
(when (not id)
(org-id-get-create)))))))
(add-hook 'before-save-hook 'init-headline-id)
下面是从 org-roam 作者那里搬运的隐藏和显示properties的函数
(defun org-hide-properties ()
"Hide all org-mode headline property drawers in buffer. Could be slow if it has a lot of overlays."
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward
"^ *:properties:\n\\( *:.+?:.*\n\\)+ *:end:\n" nil t)
(let ((ov_this (make-overlay (match-beginning 0) (match-end 0))))
(overlay-put ov_this 'display "")
(overlay-put ov_this 'hidden-prop-drawer t))))
(put 'org-toggle-properties-hide-state 'state 'hidden))
(defun org-show-properties ()
"Show all org-mode property drawers hidden by org-hide-properties."
(interactive)
(remove-overlays (point-min) (point-max) 'hidden-prop-drawer t)
(put 'org-toggle-properties-hide-state 'state 'shown))
(defun org-toggle-properties ()
"Toggle visibility of property drawers."
(interactive)
(if (eq (get 'org-toggle-properties-hide-state 'state) 'hidden)
(org-show-properties)
(org-hide-properties)))
3 个赞
还真是轮回啊,最开始的时候这个函数是出自 Emacs-china @Kinney 的解决方法 ,
现在又回到了 Emacs-china 。
你需要设一下这个参数:
org-id-link-to-org-use-id
wsug
2022 年1 月 12 日 08:32
8
div id实际上多是需要动态更新dom的内容时才用, 这个org-id能用于动态更新文本吗?
指的是一个已打开的org文件被其它程序局部更新内容,我现在用的办法是直接整个org文件内容全部改变 来实现的 ,如果能实现局部更新那就距离像使用网页应用一样使用org-mode更近一步了