Подтвердить что ты не робот

Как сделать все орг файлы в папке, добавленной в список рассылок, автоматически?

Я использую org-mode для написания заметок и организационной повестки дня, чтобы организовать все заметки, особенно для поиска некоторой информации. по ключевому слову или тегу.

Cc am может искать некоторые файлы по введенному тегу, Cc как по ключевым словам, эти функции из org-повестки дня хорошо использовать, однако мне нужно добавить org файл в список участников вручную.

Я добавил несколько кодов в .emacs, например

(setq org-agenda-files (list "path/folder/*.org"))

или

(setq org-agenda-files (file-expand-wildcards "path/folder/*.org"))

но оба не смогли автоматически добавить файлы в папку, указанную в списке, поэтому я не могу найти ключевое слово или тег среди этих org файлов, если только я не открываю org файл и не нахожу Cc [, чтобы добавить его в список участников.

Как я могу сделать все орг файлы под папкой, автоматически добавленной в повестку дня?

4b9b3361

Ответ 1

Достаточно просто назвать каталог. Например, это работает для меня очень хорошо:

(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) Чтобы включить все файлы с определенным расширением в список дополнительных файлов, вы можете попробовать следующую функцию, которую я написал некоторое время назад (более свежая версия может быть доступна здесь).

;; 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 и directory-files-recursively также предоставляет эту функциональность. Однако обратите внимание, что в этих случаях аргумент имени файла является (жадным) регулярным выражением. Таким образом, что-то вроде (directory-files-recursively "~/my-dir" "org") даст вам все файлы Org, включая файлы резервных копий (*.org~). Чтобы включить только файлы *.org, вы можете использовать (directory-files-recursively "~/my-dir" "org$").

Ответ 2

Существует более простой способ выполнения рекурсивного поиска файлов org:

(load-library "find-lisp")
(setq org-agenda-files
   (find-lisp-find-files "FOLDERNAME" "\.org$"))

Я добавил эти строки в свою конфигурацию org, и он просто работает.

(Я не эксперт в ELisp или emacs, просто обычный пользователь, который просто конвертировал из Vim в Spacemacs)