emacs - 将链接的组织文件添加到组织议程文件

标签 emacs org-mode

在 .emacs 中我有

(org-agenda-files (quote ("d:/GTD/a.org" "d:/GTD/b.org" "d:/GTD/c.org")))

在这三个文件中,我可以链接到其他组织文件。是否可以(即时,使用当前缓冲区)扫描 a.org、b.org、c.org 并添加指向 org-agenda-files 的链接?

更新 1。

有一种可能性。链接的文件位于几个明确定义的文件夹中。上How to add .org files under org-directory to agenda是有关如何添加所有文件的说明。有没有办法只将 a.org、b.org、c.org 中链接的内容添加到 org-agenda-files 中?

更新2。

我不知道为什么,但在添加 (interactive) 后,函数在 emacs 中变得可见。该函数的完整代码:

    (defun add-links-to-org-agenda-files ()
       (interactive)
       (org-element-map  
           (org-element-parse-buffer)
           'link
           (lambda (x) 
             (if (equal (org-element-property :type x) "file")
                (add-to-list 'org-agenda-files (org-element-property :path x))))))

问候

克日谢克

最佳答案

据我所知,组织中没有这样的内置内容。但是,您应该能够编写一个 Lisp 函数来执行此操作。最低限度应该是这样的:

    (org-element-map
        (org-element-parse-buffer)
        'link
        (lambda (x) (message (org-element-property :path x))))

从当前缓冲区的解析树中选择所有链接元素,并对每个元素应用一个函数。该函数选择每个链接的路径属性并将其打印在回显区域中。您希望添加代码来仅选择"file"类型的链接,并且您希望该函数将它们添加到 org-agenda-list(如果它们尚不存在)。这是一个可以完成这么多功能的函数 - 请注意,您必须将此函数应用于 org-agenda-files 列表中的每个文件,这将作为练习:

    (defun add-links-to-org-agenda-files ()
       (org-element-map  
           (org-element-parse-buffer)
           'link
           (lambda (x) 
             (if (equal (org-element-property :type x) "file")
                (add-to-list 'org-agenda-files (org-element-property :path x))))))

请参阅org-element API page了解更多信息。

关于emacs - 将链接的组织文件添加到组织议程文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38061773/

相关文章:

c++ - Emacs、Cedet 和语义

emacs - 如何在 emacs 中输入希腊符号,如\beta、\lambda?

org-mode - 如何在组织模式下将 [t] 选项添加到列导出到投影仪?

emacs - Emacs组织显示内联图像

emacs - Org-mode beamer - 如何创建简短的标题、作者、日期?

unicode - 使用 US 布局在 Emacs 中快速输入 unicode

python - 无法在 Mac OS X 上的 Emacs 中使用 python 模式

emacs - org-mode,从所有标记的条目中删除标签

emacs - 在Emacs组织模式下,如何将显示范围缩小到两个单独文件中的两个子树?

emacs - 有什么方法可以在 Redmine(或其他问题跟踪器)和纯文本待办事项列表之间进行同步?