从org-follow-link-hook返回链接类型属性

时间:2014-11-19 19:27:44

标签: emacs elisp org-mode

当我按照内部链接时,我希望org-mode自动缩小为子树。因此,在this thread之后,我将此代码添加到我的init.el文件中:

(add-hook 'org-follow-link-hook (lambda () (org-narrow-to-subtree)))

这很有效。但是......当我按照外部链接(如网页的URL)时,它也缩小到当前子树。

是否有某种方法可以返回链接类型属性(内部对外部),以便我可以限制此行为?

像这样......

Org-follow-link hook
    If link type==internal
        Narrow
    End if

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以包装该功能并检查您是否处于不同的状态 缩小之前的位置。

(defun my-org-open-at-point ()
  (interactive)
  (let ((starting-loc (point)))
    (call-interactively #'org-open-at-point)
    (when (not (equal starting-loc (point)))
      (org-narrow-to-subtree))))

(define-key org-mode-map [remap org-open-at-point] 'my-org-open-at-point)

这适用于内部链接,但我认为链接失败了 Emacs中的其他文件(可以使用标记修复)。这个 但是没有发生,因为当前的缓冲区保持不变。

(defun test-org-open-at-point-which-buffer ()
  (interactive)
  (message "before call: %s" (current-buffer))
  (call-interactively #'org-open-at-point)
  (message "after call: %s" (current-buffer)))

我没有查看org-open-at-point的来源以找出原因 那是。


顺便说一下,要获取链接类型,可以使用

(org-element-property :type (org-element-context))

当点在链接上时。