อย่าเปิดไฟล์ org-วาระ - ไฟล์หลังจากสร้างวาระ


14

สร้างวาระการประชุมของวันนี้ใน Org-Mode ( C-c a a) org-agenda-filesเปิดไฟล์ใน ฉันไม่ต้องการให้ Emacs เปิดบัฟเฟอร์พิเศษเหล่านี้

มีวิธีง่าย ๆ ที่จะบอกว่า Emacs ไม่ให้เปิดบัฟเฟอร์เหล่านี้หรือไม่? (หรือเหมือนกันคือการปิดโดยอัตโนมัติหากพวกเขาไม่ได้เปิดก่อนที่จะเรียกวาระการประชุม?)

UPDATE:

นี่เป็นโซลูชันขนาดกะทัดรัดที่ให้บริการโดย @lawlist:

(require 'dash)

(defun my-org-keep-quiet (orig-fun &rest args)
  (let ((buffers-pre (-filter #'get-file-buffer (org-agenda-files))))
    (apply orig-fun args)
    (let* ((buffers-post (-filter #'get-file-buffer (org-agenda-files)))
           (buffers-new  (-difference buffers-post buffers-pre)))
      (mapcar (lambda (file) (kill-buffer (get-file-buffer file))) buffers-new))))

(advice-add 'org-agenda-list :around #'my-org-keep-quiet)
(advice-add 'org-search-view :around #'my-org-keep-quiet)
(advice-add 'org-tags-view   :around #'my-org-keep-quiet)

น่าเสียดายที่นี่ยังไม่สมบูรณ์แบบเนื่องจากตอนนี้การคลิกที่เหตุการณ์ในวาระการประชุมไม่ได้เปิดไฟล์ org ที่เกี่ยวข้อง

คำตอบ:


11

คุณต้องการorg-agenda-exitผูกกับ x ตามค่าเริ่มต้นในมุมมองกำหนดการ

เช่น "org-วาระ - เลิก" แต่ฆ่าบัฟเฟอร์ใด ๆ ที่สร้างขึ้นตามวาระ องค์กรบัฟเฟอร์ที่เข้าชมโดยตรงจากผู้ใช้จะไม่ได้รับการสัมผัส

describe-modeผมพบว่าการใช้นี้


มีคำตอบที่นี่
YoungFrog

1
describe-modeขอขอบคุณที่ชี้ไปยัง
Matt

4

org-agenda-filesบัฟเฟอร์ (s) ควรไม่ถูกฆ่าตายจนกระทั่งหลังจากที่ฟังก์ชั่นการค้นหาได้ดำเนินการเสร็จสิ้น ฟังก์ชันการค้นหาที่ใช้กันทั่วไปสาม (3) รายการที่ใช้สร้าง*Org Agenda*บัฟเฟอร์คือ: org-agenda-list; org-search-view; org-tags-viewและ org-agenda-filesเป็นทั้งตัวแปรและฟังก์ชั่น - สัตว์สองตัวที่แตกต่างกัน แต่เกี่ยวข้องกัน

(defvar opened-org-agenda-files nil)

(defun opened-org-agenda-files ()
  (let ((files (org-agenda-files)))
    (setq opened-org-agenda-files nil)
    (mapcar
      (lambda (x)
        (when (get-file-buffer x)
          (push x opened-org-agenda-files)))
      files)))

(defun kill-org-agenda-files ()
  (let ((files (org-agenda-files)))
    (mapcar
      (lambda (x)
        (when
            (and
              (get-file-buffer x)
              (not (member x opened-org-agenda-files)))
          (kill-buffer (get-file-buffer x))))
      files)))

(defadvice org-agenda-list (around opened-org-agenda-list-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

(defadvice org-search-view (around org-search-view-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

(defadvice org-tags-view (around org-tags-view-around activate)
  (opened-org-agenda-files)
  ad-do-it
  (kill-org-agenda-files))

ดีแล้ว. ปัญหาเดียวคือฉันไม่ต้องการฆ่าบัฟเฟอร์ที่เปิดก่อนสร้างวาระการประชุม ดังนั้นดูเหมือนว่าทางออกที่ถูกต้องจำเป็นต้องสร้างคำแนะนำ "รอบ"
scaramouche

@scaramouche - ในการทดสอบครั้งแรกของฉันร่างแก้ไขดูเหมือนจะทำสิ่งที่มันคือการที่คุณกำลังมองหา - มันรวมกับaround advice
กฎหมาย

ขณะนี้มีปัญหาอื่น: การกด Enter ในเหตุการณ์ในวาระการประชุมไม่ได้เปิดไฟล์ที่เกี่ยวข้อง อาจไม่มีวิธีที่ดีในการใช้สิ่งนี้
scaramouche

ใช่มันสมเหตุสมผลแล้ว (ตอนนี้ฉันคิดถึงมัน) เพราะ*Org-Agenda*บัฟเฟอร์เป็นเพียงแค่การคัดลอกและวางจากorg-agenda-files[ชนิดของมันมันถูกผลักเข้าไปในรายการจริง ๆ แล้วจัดโครงสร้างใหม่และแทรกลงใน*Org-Agenda*บัฟเฟอร์] เมื่อแก้ไขผู้ใช้จะกลับไปที่ต้นฉบับorg-agenda-filesเพื่อทำการแก้ไขซึ่งฟังก์ชั่นการแก้ไขถือว่าเปิดอยู่แล้ว หากคุณจำเป็นต้องorg-agenda-filesปิดตัวเองเมื่อไม่ได้ใช้งานคุณจะต้องแก้ไขฟังก์ชันการแก้ไขเพื่อเปิดไฟล์ที่จำเป็นแล้วปิดอีกครั้งเมื่อเสร็จสิ้น อาจมีปัญหาอื่น ๆ
กฎหมาย

1

หลังจากที่คุณเปิดวาระแล้วให้ออกโดยกด x ในบัฟเฟอร์ของวาระเมื่อใดก็ได้ ถ้าคุณใช้ q เพื่อทำค่อนข้างมากตารางจะเปิดบัฟเฟอร์ทั้งหมด


3
คำตอบของคุณคือการซ้ำซ้อนของคำตอบนั้นuser2699ในวันที่ 19 กุมภาพันธ์ 2559
ฏหมาย

-1

ฉันเปลี่ยนเป็นเวิร์กโฟลว์โหมดองค์กรใหม่

ก่อนหน้านี้ฉันใช้:

  • NOTE.org เป็นที่เก็บข้อมูลหลักสำหรับบันทึกย่อแบบอิสระที่แก้ไขด้วยมือโดยมีการผูกคีย์เพื่อเข้าถึงไฟล์นี้อย่างรวดเร็ว
  • TODO.orgสำหรับorg-rememberหรือ(lambda () (interactive) (org-capture nil "t"))

TODO.orgC-c a aฉันเข้าชมผ่านทาง แต่NOTE.orgไม่สามารถแก้ไขได้ด้วยขนาดที่ใหญ่กว่านั้นคือ 1 MiB ของข้อความธรรมดา

ดังนั้นผมจึงแยกไฟล์นี้โดยหัวข้อหลักที่โดดเด่นได้ง่ายเช่นLEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org...

แทนที่จะรักษารายชื่อที่เป็นไปได้ฉันได้ระบุไดเรกทอรี:

(setq org-agenda-file-regexp "\\`[^.#].*[^_]\\.org\\'"
      org-agenda-files (list org-directory))

ฉันมีความสุขกับการตั้งค่านี้เพราะฉันสามารถค้นหาหัวข้อที่จำเป็นได้อย่างรวดเร็วผ่านการสลับไปยังบัฟเฟอร์ (โดย IDO ผ่านชื่อไฟล์ที่มีความหมาย) และการค้นหา (โดยC-s) ในพื้นที่ จำกัด

ตารางทั้งหมดสามารถใช้ได้ผ่านไฟล์C-c a aทั้งหมด.org

แต่ตอนนี้ฉันมี.orgไฟล์ที่ไม่ได้ใช้เปิดอยู่จำนวนมากหลังจากนั้นC-c a aฉันควรจะฆ่าเมื่อมันปรากฏขึ้นในระหว่างการเปลี่ยนบัฟเฟอร์

ฉันคิดว่าควรส่งรายงานข้อผิดพลาด:

http://debbugs.gnu.org/cgi/bugreport.cgi?archive=yes&bug=22734

24.5; do not leave opened org-agenda-files on org-agenda-list, etc.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.