【问题标题】:Org-mode & Elisp: How does one switch the buffer when using an ID to visit an entry?Org-mode & Elisp:使用ID访问条目时如何切换缓冲区?
【发布时间】:2016-02-09 18:11:37
【问题描述】:

我正在尝试编写一个 Elisp 函数,该函数在给定 ID 的情况下打开一个 Org 模式条目并对该条目进行操作。但是,当使用来自org.elorg-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 函数的上下文中实际切换到适当的缓冲区?

【问题讨论】:

    标签: emacs elisp org-mode


    【解决方案1】:

    试试:

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

    这似乎是你想要的。

    【讨论】:

      猜你喜欢
      • 2013-06-18
      • 1970-01-01
      • 2018-06-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      相关资源
      最近更新 更多