我正在使用org-mode来编写笔记和组织议程来组织所有笔记,特别是搜索一些信息。通过关键字或标签。
Cc am 可以按标签输入搜索某些文件,抄送按关键字搜索,org-agenda中的那些功能很好用,但是,我需要添加org - 手动将文件列入议程清单。
我在 .emacs 中添加了一些代码,例如
(setq org-agenda-files (list "path/folder/*.org"))
或
(setq org-agenda-files (file-expand-wildcards "path/folder/*.org"))
但是,两者都无法自动添加指定到议程列表中的文件夹下的文件,因此我无法在这些组织文件中搜索关键字或标签,除非我打开组织文件并输入 Cc [ 将其添加到议程列表中。
如何将文件夹下的所有组织文件自动添加到议程中?
答案 0 :(得分:60)
只需命名目录即可。例如,这对我很有用:
(setq org-agenda-files '("~/org"))
另请查看org-agenda-text-search-extra-files
;它让你
添加仅包含在文本搜索中的额外文件。一个典型的价值可能
是,
(setq org-agenda-text-search-extra-files
'(agenda-archives
"~/org/subdir/textfile1.txt"
"~/org/subdir/textfile1.txt"))
警告:如果在启动后将文件添加到目录中 Emacs,它不会被包括在内。
编辑(2018)要在额外文件列表中包含具有特定扩展名的所有文件,您可以尝试以后写的以下函数(a more recent version might be available here)。
;; recursively find .org files in provided directory
;; modified from an Emacs Lisp Intro example
(defun sa-find-org-file-recursively (&optional directory filext)
"Return .org and .org_archive files recursively from DIRECTORY.
If FILEXT is provided, return files with extension FILEXT instead."
(interactive "DDirectory: ")
(let* (org-file-list
(case-fold-search t) ; filesystems are case sensitive
(file-name-regex "^[^.#].*") ; exclude dot, autosave, and backupfiles
(filext (or filext "org$\\\|org_archive"))
(fileregex (format "%s\\.\\(%s$\\)" file-name-regex filext))
(cur-dir-list (directory-files directory t file-name-regex)))
;; loop over directory listing
(dolist (file-or-dir cur-dir-list org-file-list) ; returns org-file-list
(cond
((file-regular-p file-or-dir) ; regular files
(if (string-match fileregex file-or-dir) ; org files
(add-to-list 'org-file-list file-or-dir)))
((file-directory-p file-or-dir)
(dolist (org-file (sa-find-org-file-recursively file-or-dir filext)
org-file-list) ; add files found to result
(add-to-list 'org-file-list org-file)))))))
你可以像这样使用它:
(setq org-agenda-text-search-extra-files
(append (sa-find-org-file-recursively "~/org/dir1/" "txt")
(sa-find-org-file-recursively "~/org/dir2/" "tex")))
编辑(2019)正如@ mingwei-zhang的回答和@xiaobing的评论所述,来自find-lisp-find-files
和find-lisp
的{{1}}也是提供此功能。但请注意,在这些情况下,文件名参数是(贪婪的)正则表达式。因此directory-files-recursively
之类的内容会为您提供所有Org文件,包括备份文件((directory-files-recursively "~/my-dir" "org")
)。要仅包含*.org~
个文件,您可以使用*.org
。
答案 1 :(得分:11)
有一种更简单的方法可以对org文件进行递归搜索:
(load-library "find-lisp")
(setq org-agenda-files
(find-lisp-find-files "FOLDERNAME" "\.org$"))
我在我的org配置中添加了这些行,它只是起作用。
(我不是ELisp或emacs的专家,只是刚从Vim转换为Spacemacs的普通用户)