สัญลักษณ์แทนในไฟล์ org-วาระ


10

ฉันมีโฟลเดอร์ฐานโครงการ~/prjภายในซึ่งเรามีโครงการหลายราย, 2014_prj1, 2014_prj2, ... , ภายในของที่ผมมีในหมู่คนอื่น ๆdocโฟลเดอร์ เค้าโครงมีลักษณะดังนี้:

~/prj
~/prj/2014_prj1
~/prj/2014_prj1/README.org
~/prj/2014_prj1/data
~/prj/2014_prj1/doc
~/prj/2014_prj2
~/prj/2014_prj2/README.org
~/prj/2014_prj2/data
~/prj/2014_prj2/doc

ตอนนี้ฉันต้องการเพิ่มไดเรกทอรีโครงการทั้งหมด ( 2014_prjX) ไปยังorg-agenda-filesเช่นเดียวกับdocไดเรกทอรีย่อยทั้งหมดของไดเรกทอรีโครงการ dataโฟลเดอร์ที่ควรจะได้เป็นส่วนหนึ่งของorg-agenda-filesเพราะพวกเขาอาจจะมี 10000s ไฟล์

ฉันจะบรรลุสิ่งนี้ได้อย่างไร ฉันลองง่าย

(setq org-agenda-files (quote ("~/doc/notes"
                               "~/.emacs.d"
                               "~/prj/*/doc"
                               )
                        )

แต่นี่ทำให้ฉันเกิดข้อผิดพลาด

Non-existing agenda file ~/prj/*/doc

คำตอบ:


19

คุณสามารถใช้ฟังก์ชั่นfile-expand-wildcardsเพื่อรับไฟล์ทั้งหมดที่ตรงกับไวด์การ์ดเพิ่มไว้ในorg-agenda-filesตัวแปร บางสิ่งบางอย่างดังต่อไปนี้

(setq org-agenda-files (append '("~/doc/notes" "~/.emacs.d") (file-expand-wildcards "~/prj/*/doc")))

มีตะขอที่จะอนุญาตให้ชุดของไฟล์ถูกคำนวณแบบไดนามิกหรือไม่? เช่นถ้าฉันจะเพิ่มใหม่.orgไฟล์หลังจากที่ผมเริ่มต้น emacs org-agenda-filesผมจะยังคงเหมือนมันเป็นส่วนหนึ่งของ
John Wiseman

1

ฉันสร้างวิธีการทั่วไปที่มากขึ้นซึ่งช่วยให้คุณสามารถทำรังได้ลึกขึ้น ตัวอย่างเช่นฉันมีต้นไม้ที่อุดมไปด้วยโน้ตและบางโฟลเดอร์มีไฟล์ task.org อยู่ด้วย รหัสนี้จะรวบรวมการบินทั้งหมด:

(defun set-org-agenda-files ()
  (require 'f)
  (require 's)

  (setq org-agenda-files
    (f-entries org-directory
               (lambda (filename)
                 (s-ends-with-p "/tasks.org" filename))
               t)))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.