org-roam v1.2.3 链接 headline

我看到 org-roam v1.2.0 好像可以链接 headline,通过 org-roam-store-link 来实现,但我发现在 org-roam v1.2.3 中没有这个函数了,是现在的版本不支持 headline 链接了吗?现在大家还有用 headline 链接吗?

  • org-insert-link 两次 第二次编辑link 成如下格式
  • file:/path/to/filename.org::headline

啊我没太懂您说的 org-insert-link 两次是什么意思?我看 org-roam-store-link 是通过给 headline 建立 id 来进行索引的,org-insert-link 这个要怎么操作呢

  • 第一次 org-insert-link 只能选择 file: 连接到文件
  • 光标停在刚刚生成的链接上 第二次 org-insert-link 这次可以在 minibuffer上修改链接 改成这样的格式 file:/path/to/filename.org::headline
  • 也可以在目标 headline 上org-store-link , 再切回来 org-insert-link
  • 以上是 org-mode 本来就有的功能

嗯嗯明白了,谢谢指点。不过我感觉这种方式还是不太方便,因为要手动输入文件路径。org-store-link 是要方便一些

用,但比较用文件名,稍显麻烦。

Headline 反向链接的功能是有。但是插入链接得手动。因为 org-insert-link 中是没有 headline 的数据。

这个功能如果能有, Org-roam 用几个大文件就可以实现 Roam 的概念。很久以前就有人提了,目前还是没有实现。

之前有回复过类似的功能,用 ivy 实现了一个特性

主要的使用场景是插入概念性的笔记。因为这些笔记的层级关系太过明显。缺点 是,时间久了以后,流畅性还是不足。

Helm 有可以把多种搜索后端整合到一起的功能,如果把单个大文件单拿出来, 以 headline 搜索为结果,并入到 helm 的 org-roam-find-file 也许是一个不 错的选择。

(setq-default wr--head-var-a "headline name")

(defun wr/counsel-outline-action (x)
  (setq wr--head-var-a (car x)))

(defun wr/counsel-outline ()
  (interactive)
  (let ((settings (cdr (assq major-mode counsel-outline-settings))))
    (ivy-read "Outline: " (counsel-outline-candidates settings)
              :action (or (plist-get settings :action)
                          #'wr/counsel-outline-action)
              :history (or (plist-get settings :history)
                           'counsel-outline-history)
              :preselect (max (1- counsel-outline--preselect) 0)
              :caller (or (plist-get settings :caller)
                          'wr/counsel-outline))))

(defun wr/insert-a-head-from-a-file (x)
  (interactive)
  (xref-push-marker-stack)
  (save-restriction
    (save-excursion
      (with-ivy-window
        (pcase (cdr x)
          (`(:path ,foo :title ,bar) (progn
                                       (with-temp-buffer
                                         (erase-buffer)
                                         (insert-file-contents foo)
                                         (call-interactively #'wr/counsel-outline))
                                       (insert (format "[[file:%s::*%s][%s]]" foo (car (last (split-string (substring-no-properties wr--head-var-a) " → ")))
                                                       (string-trim-left (car (last (split-string (substring-no-properties wr--head-var-a) " → "))))))))))
      (message "A head has been inserted.")
      (xref-goto-xref))))


(ivy-set-actions
 t
 '(("h" wr/insert-a-head-from-a-file "insert")))