jangan biarkan file agenda-org terbuka setelah membuat agenda

14

Membuat agenda hari ini di Mode-Org ( C-c a a) membuka file-file di org-agenda-files. Saya tidak ingin Emacs membuka buffer tambahan ini.

Apakah ada cara mudah untuk memberi tahu Emacs untuk tidak membuka buffer ini? (atau apa yang sama, untuk secara otomatis menutupnya jika tidak dibuka sebelum memanggil agenda?).

MEMPERBARUI:

Ini adalah versi yang lebih ringkas dari solusi yang disediakan oleh @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)

Sayangnya, ini masih belum sempurna, karena sekarang mengklik suatu acara di agenda tidak membuka file org yang sesuai.

pengecut yg berlagak
sumber

Jawaban:

11

Anda ingin org-agenda-exit, dengan mudah terikat ke x secara default dalam tampilan agenda

Seperti `org-agenda-Berhenti ', tetapi bunuh penyangga apa pun yang dibuat oleh agenda. Buffer organisasi yang dikunjungi langsung oleh pengguna tidak akan disentuh.

Saya menemukan ini menggunakan describe-mode.

pengguna2699
sumber
Jawab Sane di sini.
YoungFrog
1
Hargai pointer ke describe-mode.
Matt
4

The org-agenda-filespenyangga (s) harus tidak dibunuh sampai setelah fungsi pencarian telah selesai. Tiga (3) sebagian besar fungsi pencarian umum yang digunakan untuk menghasilkan *Org Agenda*penyangga adalah: org-agenda-list; org-search-view; dan org-tags-view. org-agenda-fileskeduanya merupakan variabel dan fungsi - dua hewan yang berbeda, tetapi terkait.

(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))
daftar hukum
sumber
Itu bagus. Satu-satunya masalah adalah bahwa saya tidak ingin membunuh buffer yang terbuka sebelum membuat agenda. Dengan demikian, tampaknya solusi yang tepat memerlukan membuat saran "sekitar".
scaramouche
@scaramouche - Dalam pengujian awal saya, draf yang direvisi tampaknya melakukan apa yang Anda cari - digabungkan arounddengan advice.
hukum
Sekarang ada masalah lain: menekan enter dalam acara di agenda tidak membuka file yang sesuai. Mungkin tidak ada cara yang baik untuk mengimplementasikan ini.
scaramouche
Ya, itu masuk akal (sekarang saya memikirkannya) karena *Org-Agenda*buffer hanya berupa salin dan tempel dari org-agenda-files[jenis, itu sebenarnya didorong ke dalam daftar dan kemudian direorganisasi dan dimasukkan ke dalam *Org-Agenda*buffer]. Saat mengedit, pengguna melompat kembali ke aslinya org-agenda-filesuntuk melakukan pengeditan, yang diasumsikan fungsi pengeditan sudah terbuka. Jika Anda benar-benar harus org-agenda-filesmenutup ketika tidak digunakan, maka Anda harus merevisi fungsi pengeditan untuk membuka file yang diperlukan dan kemudian menutupnya lagi setelah selesai. Mungkin juga ada masalah lain
hukum
1

Setelah Anda membuka agenda, keluar saja dengan menekan x pada buffer agenda setiap saat. Jika Anda menggunakan q untuk cukup agenda, itu akan membuat semua buffer terbuka.

Diogo
sumber
3
Jawaban Anda adalah duplikat dari user2699yang diposting pada 19 Februari 2016.
lawlist
-1

Saya beralih ke alur kerja mode-org baru.

Sebelumnya saya menggunakan:

  • NOTE.org sebagai penyimpanan utama untuk catatan formulir gratis yang diedit dengan tangan dengan kunci mengikat untuk akses cepat ke file ini
  • TODO.orguntuk org-rememberatau(lambda () (interactive) (org-capture nil "t"))

TODO.orgSaya mengunjungi hanya melalui C-c a a. Tetapi NOTE.orgmenjadi tidak dapat dipelihara dengan ukuran lebih besar dari 1 MiB teks biasa.

Jadi saya membagi file ini dengan topik dibedakan utama mudah, seperti LEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org, ...

Alih-alih mempertahankan daftar nama yang mungkin saya tentukan direktori:

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

Saya senang dengan pengaturan ini karena saya dapat dengan cepat menemukan topik yang diperlukan melalui beralih ke buffer (dengan IDO melalui nama file yang bermakna) dan mencari (oleh C-s) dalam ruang terbatas.

Semua jadwal tersedia melalui C-c a asemua .orgfile.

Tapi sekarang saya memiliki banyak .orgfile yang tidak terpakai yang dibuka dan setelah C-c a aitu saya harus membunuh ketika mereka muncul selama switch buffer.

Saya pikir laporan bug harus diserahkan:

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.
gavenkoa
sumber