将文件夹上的所有组织文件加载到议程

Dox*_*Dox 10 emacs elisp org-mode

我找到了一个组织教程,其中解释了如何从文件夹加载组织文件,使用

(setq org-agenda-files (list "~/org/work.org"
                             "~/org/school.org" 
                             "~/org/home.org"))
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉 emacs 将给定文件夹中的所有组织文件加载到议程中?

Dox*_*Dox 10

受到 Aaron 给出的答案的启发,我将配置更改为

(setq org-agenda-files (list "~/org"))
Run Code Online (Sandbox Code Playgroud)

问题就解决了。


Aar*_*ler 7

使用 Emacs 24.3 附带的 Org 模式,来自C-h v org-agenda-files RET

If an entry is a directory, all files in that directory that are matched by
`org-agenda-file-regexp' will be part of the file list.
Run Code Online (Sandbox Code Playgroud)

来自C-h v org-agenda-file-regexp RET

org-agenda-file-regexp is a variable defined in 'org.el'.
Its value is "\\`[^.].*\\.org\\'"
[...]
You can customize this variable.
Run Code Online (Sandbox Code Playgroud)

因此,简而言之:评估(add-to-list 'org-agenda-files (expand-file-name "~/org")),如果您org-agenda-file-regexp处于默认值,Org 模式将从~/org名称以.org. (如果您org-agenda-file-regexp不是默认值,或者如果您需要它匹配的不仅仅是名称.orgM-x customize-variable RET org-agenda-file-regexp RET.

  • @Dox 不过,这只是解决方案的一半,因为它只会将那些在评估表达式时出现在 `~/org` 中的文件添加到 `org-agenda-files` 中——也就是说,如果你添加一个新的在您的 Emacs 会话期间,它不会被自动选择作为议程项目的来源,直到您下次启动 Emacs。当然,如果这足以满足您的需求,那就去做吧,但值得一提的是,`org-agenda-file-regexp` 和 `org-agenda-files` 中目录的特殊处理是有原因的。:) (2认同)
  • @Dox 很好!假设你所有的 Org 文件都在 `~/org` 中并以 `.org` 结尾,你需要做的就是添加 `(add-to-list 'org-agenda-files (expand-file-name "~/ org"))` 到您的 init 文件中,新的 Emacs 会话将自动扫描您所有的组织文件以查找议程项目。(您可以在现有的 Emacs 会话中通过执行 `Cx Ce` 而获得相同的效果,同时点在表达式的结束括号上;然后,要查看效果,例如执行 `Mx org-agenda RET t`。) (2认同)