2016-02-09 144 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))) 

這似乎做你想要什麼。

相關問題