我感觉 org-id-open 就是我当下关于 org-mode 的痛点了,具体来说它对我有以下缺点:
- org-id-open 根本不起作用,我试图打开一个链接,由于我有一些 .org.gpg 文件, 它就要我输入 password, 但目标链接根本不在 gpg 文件中。我关闭了所有 gpg buffer 还是会这样。但有时候又没这个问题,很奇怪。
- 打不开没 open 的文件的链接。
- 就算能 work 的时候,速度也很慢。
想问问有没有对 org-id-open override 的方案,比如用 rg 的?再比如,org-node 打开 ID 就很快而且准确,但它的实现是维护了一个 hash table, 映射 heading->node, node 包含 file path, position 等信息。我感觉比较理想的还是用 rg, 没有任何存储开销。
yibie
2
你的 .org-id-locations 这个文件是不是坏了
1 个赞
好像还挺简单,速度也挺快:
(defun my/org-id-open-with-rg (id)
(interactive "sEnter ID: ")
(let* ((org-directory (file-truename org-directory))
(command (format "rg -n --vimgrep -g !book -t org '^:ID:\s*%s' %s" id "~/notes/"))
(output (shell-command-to-string command))
(result (split-string output "\n" t)))
(if (null result)
(message "not found ID: %s" id)
(let* ((first-match (car result))
(parts (split-string first-match ":" t))
(file (nth 0 parts))
(line (string-to-number (nth 1 parts))))
(find-file file)
(goto-char (point-min))
(forward-line (1- line))))))
(advice-add 'org-id-open :override #'my/org-id-open-with-rg)
可能会遇到一些问题,遇到了再说。
感谢,你不说我根本不知道这个,的确 org-id-locations-file 被 ob-go 改了,我改回去,然后执行 org-id-update-id-locations, 就可以了,也相当快。