Org-mode & Elisp:使用 ID 访问条目时如何切换缓冲区?
Org-mode & Elisp: How does one switch the buffer when using an ID to visit an entry?
我正在尝试编写一个 Elisp 函数,它打开一个给定 ID 的 Org 模式条目并对该条目进行操作。但是,当使用 org.el
中的 org-open-link-from-string
和条目的 ID
属性 的值时,Emacs 似乎跳转到条目(即条目的缓冲区出现,并且光标移动到正确的条目),但是调用 org-open-link-from-string
之后的任何代码似乎都在原始缓冲区上运行。
例如,假设您评估 *scratch*
中的以下代码,其中 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
是名为 Test.org
的文件中的合法组织模式 ID。再次,
*scratch*
是您计算下面代码的缓冲区
Test.org
是包含 ID 为 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
的 Org-mode 条目的缓冲区
这是在 *scratch*
:
中计算的代码
(defun testfn-visit-org-entry (id)
(org-open-link-from-string (concat "id:" id))
(message "%s" (current-buffer))
)
(testfn-visit-org-entry "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
Emacs 光标跳转到 Test.org
中的正确条目,但 message
打印我们开始的缓冲区 *scratch*
。此外,调用 org-open-link-from-string
在 *scratch*
中运行,而不是 Task.org
。
有没有办法完全跳转到ID
对应的条目,并在Elisp函数的上下文中实际切换到适当的缓冲区?
尝试:
(defun open-id (id)
(org-id-goto id)
(message "%s" (current-buffer)))
这似乎是你想要的。
我正在尝试编写一个 Elisp 函数,它打开一个给定 ID 的 Org 模式条目并对该条目进行操作。但是,当使用 org.el
中的 org-open-link-from-string
和条目的 ID
属性 的值时,Emacs 似乎跳转到条目(即条目的缓冲区出现,并且光标移动到正确的条目),但是调用 org-open-link-from-string
之后的任何代码似乎都在原始缓冲区上运行。
例如,假设您评估 *scratch*
中的以下代码,其中 XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
是名为 Test.org
的文件中的合法组织模式 ID。再次,
*scratch*
是您计算下面代码的缓冲区Test.org
是包含 ID 为XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
的 Org-mode 条目的缓冲区
这是在 *scratch*
:
(defun testfn-visit-org-entry (id)
(org-open-link-from-string (concat "id:" id))
(message "%s" (current-buffer))
)
(testfn-visit-org-entry "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")
Emacs 光标跳转到 Test.org
中的正确条目,但 message
打印我们开始的缓冲区 *scratch*
。此外,调用 org-open-link-from-string
在 *scratch*
中运行,而不是 Task.org
。
有没有办法完全跳转到ID
对应的条目,并在Elisp函数的上下文中实际切换到适当的缓冲区?
尝试:
(defun open-id (id)
(org-id-goto id)
(message "%s" (current-buffer)))
这似乎是你想要的。