ฉันจะบันทึกบัฟเฟอร์โหมดองค์กรโดยอัตโนมัติได้อย่างไร


22

ฉันใช้org-modeและวาระการประชุมเพื่อติดตามรายการที่ต้องทำอย่างสม่ำเสมอ เนื่องจากฉันใช้ Dropbox เพื่อซิงค์รายการของฉันฉันจึงต้องมีงานเดียวกันในคอมพิวเตอร์ทุกเครื่อง บางครั้งในระหว่างการล้างข้อมูลฉันจะลืมบันทึกการเปลี่ยนแปลงของฉันปล่อยให้ emacs เปิดที่บ้านเมื่อฉันเข้าไปในสำนักงาน (ดังนั้นฉันไม่ได้รับแจ้งให้บันทึกเมื่อปิด emacs) ฉันจะบันทึกการเปลี่ยนแปลงใน*.orgบัฟเฟอร์ของวาระที่ปรับเปลี่ยนโดยอัตโนมัติในวาระได้อย่างไร

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


คุณสามารถอธิบายได้อย่างไร "ฉันจะบันทึกการเปลี่ยนแปลงในบัฟเฟอร์ของ *. org โดยอัตโนมัติที่ถูกแก้ไขผ่านระเบียบวาระได้อย่างไร" ? ฉันไม่สามารถตัดสินใจได้ว่าจะเป็น "บันทึกโดยอัตโนมัติ ... ผ่านระเบียบวาระการประชุม" (ซึ่งดูเหมือนจะขัดแย้งกับตัวเอง) หรือ "บัฟเฟอร์ที่แก้ไขผ่านวาระการประชุม" (ซึ่งฉันไม่เข้าใจ)
Sigma

@Sigma ฉันได้อัปเดตคำถามเพื่อให้ความกระจ่าง
Ryan

1
วิธีแก้ปัญหาของฉันคือการฝึกฝนนิ้วของฉันให้แตะsปุ่มบ่อยๆเมื่ออยู่ในมุมมองกำหนดการ
mankoff

@mankoff ฉันคิดว่าฉันต้องฝึกตัวเองใหม่ ๆC-x C-sทุกครั้งที่ฉันแก้ไขไฟล์ org- วาระ (จากระเบียบวาระหรือโดยตรง) ไม่อัตโนมัติ แต่บันทึกทุกอย่างไว้
Jonathan Leech-Pepin

คำตอบ:


16

แฮ็คอย่างรวดเร็วซึ่งฉันไม่แน่ใจว่าจะตอบสนองการใช้งานของคุณอย่างแน่นอน

(add-hook 'org-agenda-mode-hook
          (lambda ()
            (add-hook 'auto-save-hook 'org-save-all-org-buffers nil t)
            (auto-save-mode)))

ตราบใดที่บัฟเฟอร์ของกำหนดการของ Org เปิดอยู่บัฟเฟอร์ขององค์กรทั้งหมดจะถูกบันทึกเป็นระยะ ๆ (ซึ่งจะเท่ากับสิ่งที่จะเกิดขึ้นหากsถูกกดเป็นประจำจากมุมมองของวาระ)

สิ่งนี้เป็นการเหยียดหยามauto-save-modeในเรื่องที่ว่าตัวบัฟเฟอร์ของวาระนั้นไม่สมเหตุสมผลเท่าที่auto-saveเกี่ยวข้อง

หากคุณบังเอิญใช้แฮ็คนั้นคุณควรตรวจสอบให้แน่ใจว่าไฟล์สำรองถูกเก็บไว้ในไฟล์. org ทั้งหมดของคุณเพื่อให้ปลอดภัย


1
ปัญหาสำคัญของวิธีนี้คือการบันทึกอัตโนมัติจะบันทึกบัฟเฟอร์ของระเบียบวาระการประชุมไปยังไฟล์ในไดเรกทอรีที่ใช้งานอยู่ สิ่งนี้สร้างไฟล์บันทึกอัตโนมัติจำนวนมากที่กระจัดกระจายอยู่ในระบบไฟล์ของฉัน ไม่แน่ใจว่าจะแก้ไขได้อย่างไร
holocronweaver

7

คุณสามารถบันทึกบัฟเฟอร์องค์กรทั้งหมดเมื่อใดก็ตามที่มีการเรียกใช้ฟังก์ชันวาระเฉพาะ ตัวอย่างเช่นในการบันทึกบัฟเฟอร์องค์กรทั้งหมดหลังจากที่คุณออกจากวาระ:

(advice-add 'org-agenda-quit :before 'org-save-all-org-buffers)

อีกวิธีหนึ่งคุณสามารถบันทึก org-buffers ทั้งหมดได้หลังจากแก้ไขแต่ละครั้งพูดหลังจากเพิ่มกำหนดเวลา:

(advice-add 'org-deadline :after 'org-save-all-org-buffers)

สิ่งนี้จะทำงานได้ทั้งในวาระการประชุมและบัฟเฟอร์องค์กร ใช้org-agenda-deadlineแทนหากคุณต้องการ จำกัด การบันทึกอัตโนมัติในวาระการประชุม

คุณสามารถทำเช่นเดียวกันกับฟังก์ชั่น org ใด ๆ ดังนั้นวิธีนี้ช่วยให้คุณสามารถเลือกได้ว่าจะบันทึกบัฟเฟอร์เมื่อใด วิธีนี้ครอบคลุมบางกรณีที่วิธีการโดย @Sigma คิดถึง: คุณสามารถบันทึกการเปลี่ยนแปลงวาระของคุณแม้ว่าคุณจะออกจากวาระก่อนที่จะauto-saveมีโอกาสที่จะก่อให้เกิดหรือเปลี่ยนแปลงนอกวาระและลืมที่จะบันทึก โดยส่วนตัวฉันใช้ทั้งสองวิธีเพื่อครอบคลุมฐานทั้งหมดของฉัน [แก้ไข: ดูความคิดเห็นเกี่ยวกับโซลูชัน @Sigma เพราะเหตุใดฉันจึงไม่ใช้โซลูชันของเขาอีกต่อไป]


2
วิธีนี้ใช้ได้ผลดีกว่าคำตอบที่ยอมรับตั้งแต่ครั้งเดียวที่ฉันลืมบันทึกคือหลังจากที่ฉันรีเฟรช (advice-add 'org-refile :after 'org-save-all-org-buffers)บันทึกไฟล์ org โดยอัตโนมัติหลังจากฉัน refiled เป็นไฟล์อื่น
นี้ต้องการความช่วยเหลือใน

นี่เป็นคำตอบที่ดีที่สุดเพราะสามารถใช้กับฟังก์ชั่น org ที่คุณต้องการ
KevinG

ฉันพบว่าการใช้สิ่งนี้กับorg-refileหมายความว่าฉันไม่สามารถ "ไปที่" พาดหัวที่แน่นอนได้อีกต่อไป (เมื่อเทียบกับการ refiling ภายใต้เคอร์เซอร์) โดยการโทรorg-refileด้วยอาร์กิวเมนต์คำนำหน้า ..
quantum285

6

ฉันเห็นคำตอบมากมายที่ซับซ้อนกว่านี้เหมาะกับฉัน:

`(add-hook 'auto-save-hook 'org-save-all-org-buffers)`

บันทึกอัตโนมัติเป็นค่าเริ่มต้นที่จะทำงานหลังจากไม่มีการใช้งาน 30 วินาที (และในสถานการณ์ที่ไม่เกี่ยวข้องอื่น ๆ ที่บันทึกไว้ในคู่มือ )


สิ่งที่ฉันกำลังมองหา
LVB

4

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

(defun my/save-all-agenda-buffers ()
  "Function used to save all agenda buffers that are
currently open, based on `org-agenda-files'."
  (interactive)
  (save-current-buffer
    (dolist (buffer (buffer-list t))
      (set-buffer buffer)
      (when (member (buffer-file-name)
                    (mapcar 'expand-file-name (org-agenda-files t)))
        (save-buffer)))))

;; save all the agenda files after each capture
(add-hook 'org-capture-after-finalize-hook 'my/save-all-agenda-buffers)

เปลี่ยน'org-capture-after-finalize-hookไป'org-agenda-finalize-hookเป็นซึ่งฉันเชื่อว่าถูกเรียกก่อนที่จะแสดงบัฟเฟอร์วาระ


ลืมที่จะพูดถึงฟังก์ชั่นของฉันต้องมี dash.el ให้ใช้งานได้โปรดจำไว้
Lee H

2
ในระหว่างการจับคุณสามารถจัดเก็บรายการในorg-refile-targetsปลายทางได้ทันทีเพื่อให้การบันทึกorg-agenda-filesไม่เพียงพอ ฉันอาจจะเรียกorg-save-all-org-buffersตัวเองว่า
sanityinc

1
PS ไม่จำเป็นต้องใช้ที่dashนั่น: mapcarสร้างขึ้นและทำสิ่งเดียวกัน
sanityinc

@sanityinc ขอบคุณฉันอัปเดตรหัสเพื่อใช้mapcarแทนรีบ!
Lee H
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.