Bagaimana cara saya menyimpan buffer mode-org secara otomatis?

22

Saya secara teratur menggunakan org-modedan agenda untuk melacak daftar tugas saya. Karena saya menggunakan Dropbox untuk menyinkronkan daftar saya, saya perlu tugas yang sama tersedia di semua komputer. Kadang-kadang selama pembersihan saya, saya akan lupa untuk menyimpan perubahan saya, meninggalkan emacs terbuka di rumah ketika saya pergi ke kantor (jadi saya tidak diminta untuk menghemat pada penutupan emacs). Bagaimana saya bisa secara otomatis menyimpan perubahan ke *.orgbuffer agenda yang dimodifikasi melalui agenda?

EDIT: Untuk memperjelas, saya menggunakan tampilan agenda tugas saya untuk menunjukkan kepada saya gambaran umum. Dari tampilan itu, saya dapat mengubah status tugas. Selain itu, saya menggunakan mode ingat untuk menambahkan tugas baru, yang kemudian dapat dikategorikan ulang dalam tampilan agenda. Perubahan-perubahan dalam agenda ini menghasilkan buffer agenda mode-org yang dimodifikasi, yang kemudian harus disimpan. Ketika perubahan ini dibuat, saya ingin buffer disimpan secara otomatis.

Ryan
sumber
Dapatkah Anda mengklarifikasi "Bagaimana cara saya menyimpan perubahan secara otomatis ke * .org agenda buffer yang dimodifikasi melalui agenda?" ? Saya tidak dapat memutuskan apakah itu "secara otomatis menyimpan ... melalui agenda" (yang tampaknya bertentangan sendiri) atau "buffer yang dimodifikasi melalui agenda" (yang saya tidak mengerti)
Sigma
@ Sigma Saya telah memperbarui pertanyaan untuk menjelaskan.
Ryan
1
Solusi saya sejauh ini adalah melatih ulang jari saya untuk ssering mengetuk tombol ketika dalam tampilan Agenda.
mankoff
@mankoff Saya pikir saya telah melatih diri untuk memukul C-x C-skapan saja saya membuat perubahan dalam file org-agenda (dari agenda atau langsung). Tidak otomatis tetapi menyimpan semuanya.
Jonathan Leech-Pepin

Jawaban:

16

Peretasan cepat, yang saya tidak yakin akan memuaskan kasus penggunaan Anda

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

Selama buffer agenda Organisasi terbuka, semua buffer organisasi akan disimpan secara berkala (setara dengan apa yang akan terjadi jika sditekan secara teratur dari tampilan agenda).

Ini agak menyalahgunakan auto-save-modedalam hal agenda penyangga itu sendiri tidak masuk akal sejauh auto-savemenyangkut.

Jika Anda menggunakan hack itu, Anda sebaiknya memastikan bahwa file cadangan disimpan untuk semua file .org Anda, agar aman.

Sigma
sumber
1
Masalah utama dengan pendekatan ini adalah bahwa penyimpanan otomatis akan menyimpan buffer agenda ke file di direktori aktif. Ini menciptakan sejumlah besar file simpan otomatis yatim yang tersebar di seluruh sistem file saya. Tidak yakin bagaimana memperbaiki.
holocronweaver
7

Anda dapat menyimpan semua buffer org setiap kali fungsi agenda tertentu dipanggil. Misalnya, untuk menyimpan semua buffer org setelah Anda keluar dari agenda:

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

Atau, Anda dapat menyimpan semua buffer org setelah setiap pengeditan, katakan setelah tenggat waktu ditambahkan:

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

Ini akan berfungsi baik dalam org-agenda dan buffer org. Gunakan org-agenda-deadlinesebaliknya jika Anda ingin membatasi penyimpanan otomatis ke agenda.

Anda dapat melakukan hal yang sama untuk fungsi org mana pun, sehingga metode ini memungkinkan Anda untuk memilih kapan tepatnya menyimpan buffer org. Pendekatan ini mencakup beberapa kasus sudut yang dilewatkan oleh metode oleh @Sigma: Anda dapat menyimpan perubahan agenda Anda, bahkan jika Anda meninggalkan agenda sebelum auto-savememiliki kesempatan untuk memicu, atau membuat perubahan di luar agenda dan lupa menyimpannya. Saya pribadi menggunakan kedua metode ini untuk mencakup semua basis saya. [Sunting: Lihat komentar pada solusi @Sigma mengapa saya tidak lagi menggunakan solusinya.]

holocronweaver
sumber
2
Ini bekerja lebih baik untuk saya daripada jawaban yang diterima karena satu-satunya waktu saya lupa menyimpan adalah setelah saya refile. (advice-add 'org-refile :after 'org-save-all-org-buffers)secara otomatis menyimpan file org setelah saya refile ke file yang berbeda.
PENGGUNA INI MEMBUTUHKAN BANTUAN
Ini adalah jawaban terbaik, karena dapat diterapkan ke fungsi org mana pun yang Anda inginkan.
KevinG
Saya menemukan bahwa menerapkan ini org-refileberarti bahwa saya tidak lagi dapat "Pergi ke" judul berita tertentu (sebagai kebalikan dari yang di-refile di bawah kursor) dengan menelepon org-refiledengan argumen awalan ..
quantum285
6

Saya melihat banyak jawaban yang lebih rumit, ini berhasil untuk saya:

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

Simpan Otomatis default untuk berjalan setelah 30 detik tidak aktif (dan dalam skenario tidak terkait lainnya yang didokumentasikan dalam manual )

Karim Nassar
sumber
Persis apa yang saya cari.
LVB
4

Saya menggunakan cuplikan berikut untuk secara otomatis menyimpan semua buffer mode agenda setelah penangkapan baru, tetapi Anda dapat mengaitkannya di mana saja yang Anda inginkan:

(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)

Ubah 'org-capture-after-finalize-hookto 'org-agenda-finalize-hook, yang saya yakini dipanggil sebelum menampilkan buffer agenda.

Lee H
sumber
Lupa menyebutkan fungsi saya memerlukan dash.el tersedia, jadi ingatlah itu.
Lee H
2
Selama pengambilan, Anda dapat segera mengajukan kembali item ke salah satu org-refile-targetstujuan, jadi mungkin saja penghematan org-agenda-filesitu tidak mencukupi. Saya mungkin akan menyebut org-save-all-org-buffersdiri saya sendiri.
sanityinc
1
PS Tidak perlu digunakan di dashsana: mapcarsudah terpasang dan melakukan hal yang sama.
sanityinc
@sanityinc terima kasih, saya memperbarui kode untuk digunakan, mapcarbukan dash!
Lee H