2016-02-09 152 views
0

我正在尝试编写一个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代码缓冲区包含与ID XXXXXXXX-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函数的上下文中切换到合适的缓冲区?

回答

3

尝试:

(defun open-id (id) 
(org-id-goto id) 
(message "%s" (current-buffer))) 

这似乎做你想要什么。

相关问题