Emacs 如何将文件夹下的所有组织文件自动添加到议程列表中?
我使用组织模式写笔记,组织议程来组织所有笔记,特别是搜索一些信息。按关键字或标记 C-C a m可以通过输入的标签搜索一些文件,C-C a s通过关键字,这些来自组织议程的功能可以很好地利用,但是,我需要手动将组织文件添加到议程列表中 我在.emacs中添加了一些代码,例如Emacs 如何将文件夹下的所有组织文件自动添加到议程列表中?,emacs,org-mode,Emacs,Org Mode,我使用组织模式写笔记,组织议程来组织所有笔记,特别是搜索一些信息。按关键字或标记 C-C a m可以通过输入的标签搜索一些文件,C-C a s通过关键字,这些来自组织议程的功能可以很好地利用,但是,我需要手动将组织文件添加到议程列表中 我在.emacs中添加了一些代码,例如 (setq org-agenda-files (list "path/folder/*.org")) 或 但是,两者都未能自动将指定文件夹下的文件添加到议程列表中,因此我无法在这些组织文件中搜索关键字或标记,除非我打开一个
(setq org-agenda-files (list "path/folder/*.org"))
或
但是,两者都未能自动将指定文件夹下的文件添加到议程列表中,因此我无法在这些组织文件中搜索关键字或标记,除非我打开一个组织文件并键入C-C[将其添加到议程列表中
如何使文件夹下的所有组织文件自动添加到议程中?仅命名目录就足够了。例如,这对我来说非常有效:
(setq组织议程文件(“~/org”))
还可以查看组织议程文本搜索额外文件
;它让您
添加仅包含在文本搜索中的额外文件。典型值可能为
是,
(setq组织议程文本搜索额外文件
"(议程档案)
“~/org/subdir/textfile1.txt”
“~/org/subdir/textfile1.txt”))
注意事项:如果在启动后将文件添加到目录中
Emacs,将不包括在内
编辑:(2018)要在额外文件列表中包含具有特定扩展名的所有文件,您可以尝试我以前编写的以下函数()
在提供的目录中递归查找.org文件
;根据Emacs Lisp介绍示例修改
(以递归方式定义sa查找组织文件(&可选目录filext)
“从目录中递归返回.org和.org_存档文件。
如果提供了FILEXT,则返回扩展名为FILEXT的文件。“
(交互式“D目录:”)
(let*(组织文件列表)
(大小写折叠搜索);文件系统区分大小写
(文件名regex“^[^.#].*)排除点、自动保存和备份文件
(filext(或filext“org$\\\\\\ org\u存档”))
(fileregex(格式为“%s\\.\\(%s$\\)”文件名regex filext))
(cur dir list(directory files directory t file name regex)))
;循环目录列表
(dolist(文件或目录cur dir list org file list);返回组织文件列表
(续)
((file-regular-p file或dir);常规文件
(如果(字符串匹配fileregex文件或目录);组织文件
(添加到列表“组织文件列表文件或目录”))
((file-directory-p file或dir)
(dolist(org file(sa递归查找org file file或dir filext)
组织文件列表);将找到的文件添加到结果
(添加到列表“组织文件列表组织文件(()()()))”)
您可以这样使用它:
(setq组织议程文本搜索额外文件
(追加(sa递归查找组织文件“~/org/dir1/”txt”)
(sa递归查找组织文件“~/org/dir2/”tex”))
编辑:(2019)正如@mingwei zhang的回答和@xiaobing的评论中提到的,
find lisp find files
,fromfind lisp
和directory files recursive
也提供了此功能。但是,请注意,在这些情况下,文件名参数是(贪婪的)类似于(目录文件递归“~/mydir”“org”)
的东西会给你所有的组织文件,包括备份文件(*.org~
)。要只包括*.org
文件,你可以使用(目录文件递归“~/mydir”“org$”
,有一种简单的方法可以递归搜索组织文件(礼貌):
编辑:您还可以通过添加数组筛选器从查找中筛选出某些目录。例如,筛选出xxxx/xxx/daily/
目录中的所有组织文件:
(setq org-agenda-files
(seq-filter (lambda(x) (not (string-match "/daily/"(file-name-directory x))))
(directory-files-recursively "~/Notes/roam" "\\.org$")
))
对于Emacs来说,看起来你做的是正确的——这只是一个相对路径问题吗?你能试着用完整路径做同样的事情吗?或者,你正在运行服务器而没有重新评估适当的命令吗?我已经用完整路径和相对路径试过了。现在,我知道了导致这个问题的原因,因为希望多个文件夹包含议程文件。我制作了两个case=setq org agenda file(…)=,导致函数无效。非常感谢您的话。哇~eaxtly!指定目录就足够了。目前,我知道我犯了什么错误导致了问题。正确地说,emacs允许一个案例(setq org agenda files…),如果要在议程文件中添加多个文件夹,则应在第一个文件夹旁边添加目录,所有目录都放在唯一代码上,如下所示(setq org agenda files“=directory1=”“=directory2=“…)非常感谢。此外,我真的很喜欢用emacs组织所有类型的文本文件,你的代码也很有用,似乎除了.org以外的文本文件只有在我们将它们逐个分配到.emacs后才能添加到议程文件中。有没有方便的方法将文件夹下的所有tex-files、.txt;.doc;.tex指向议程文件?比如我们上面提到的组织文件案例?再次感谢您的指导。我尝试了您的代码,但emacs显示了错误消息,Symbol的函数定义无效:递归查找组织文件我在
(append
,)之前添加了一个,(setq组织议程文本搜索额外文件)(append(递归查找组织文件…
错误消息消失,我用C-C/搜索关键字,emacs回答:错误的类型参数:arrayp,append有什么重要的东西我遗漏了吗?我在设置中多次检查它,它工作得很好。你一定是做错了什么。你没有给我足够的信息也可以做一个有根据的猜测。@XiangJi谢谢。事实上应该是sa-*
。我更改了几次函数。我想我没有升级
(setq org-agenda-files (directory-files-recursively "~/org/" "\\.org$"))
(setq org-agenda-files
(seq-filter (lambda(x) (not (string-match "/daily/"(file-name-directory x))))
(directory-files-recursively "~/Notes/roam" "\\.org$")
))
(load-library "find-lisp")
(setq org-agenda-files
(find-lisp-find-files "FOLDERNAME" "\.org$"))