我正在尝试编写一个Elisp函数,该函数在给定其ID的情况下打开组织模式条目,并在该条目上进行操作。但是,如果使用org.el
中的org-open-link-from-string
和条目的值ID
属性,则Emacs似乎跳转到条目(即出现条目的缓冲区,并且光标移动到正确的条目),但调用org-open-link-from-string
后的任何代码似乎在原始缓冲区上运行。Org-mode&Elisp:如何使用ID访问条目时切换缓冲区?
例如,假设您评估*scratch*
中的以下代码,其中XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
是名为Test.org
的文件中的合法组织模式标识。再次,
*scratch*
是在您评估以下Test.org
代码缓冲区包含与IDXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
这里的组织模式进入缓冲区的评估代码,而在*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光标跳转到中的正确条目但是message
打印了*scratch*
,这是我们开始使用的缓冲区。此外,可能跟在org-open-link-from-string
的调用之后的其他代码在*scratch*
中运行,而不是Task.org
。
有没有办法完全跳到对应于ID
的条目,并在Elisp函数的上下文中切换到合适的缓冲区?