non tenere aperti i file di agenda-agenda dopo aver generato l'agenda


14

La generazione dell'agenda di oggi in modalità Org ( C-c a a) apre i file in org-agenda-files. Non voglio che Emacs apra questi buffer extra.

C'è un modo semplice per dire a Emacs di non aprire questi buffer? (o qual è lo stesso, chiuderli automaticamente se non fossero aperti prima di chiamare l'agenda?).

AGGIORNARE:

Questa è una versione più compatta della soluzione fornita da @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)

Purtroppo, questo non è ancora perfetto, poiché ora facendo clic su un evento nell'agenda non si apre il file org corrispondente.

Risposte:


11

Volete org-agenda-exit, convenientemente associato a x per impostazione predefinita nella vista agenda

Come `org-agenda-Esci ', ma uccidi tutti i buffer creati dall'agenda. I buffer organizzativi visitati direttamente dall'utente non verranno toccati.

Ho trovato questo usando describe-mode.


Risposta sana qui.
YoungFrog,

1
Apprezzo il puntatore a describe-mode.
Matt

4

I org-agenda-filesbuffer non devono essere eliminati fino a quando non sono terminate le funzioni di ricerca. I tre (3) la maggior parte delle funzioni di ricerca comuni utilizzati per generare un *Org Agenda*tampone sono: org-agenda-list; org-search-view; e org-tags-view. org-agenda-filesè sia una variabile che una funzione - due animali diversi, ma correlati.

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

Quello è buono. L'unico problema è che non vorrei uccidere un buffer aperto prima di creare l'agenda. Quindi, sembra che la giusta soluzione richieda la creazione di un consiglio "in giro".
scaramouche,

@scaramouche - Nei miei test iniziali, la bozza rivista sembra fare quello che stai cercando - incorpora il aroundcon advice.
elenco delle leggi

Ora c'è un altro problema: premendo Invio in un evento nell'agenda non si apre il file corrispondente. Forse non esiste un modo carino di implementarlo.
scaramouche,

Sì, ha senso (ora che ci penso) perché il *Org-Agenda*buffer è solo una copia e incolla dal org-agenda-files[tipo di, viene effettivamente inserito in un elenco e quindi riorganizzato e inserito nel *Org-Agenda*buffer]. Durante la modifica, l'utente torna all'originale org-agenda-filesper effettuare la modifica, che le funzioni di modifica presuppongono sia già aperta. Se devi davvero org-agenda-fileschiudere il file quando non in uso, dovrai rivedere le funzioni di modifica per aprire il file necessario e richiuderlo al termine. Potrebbero esserci anche altri problemi
elenco legislativo

1

Dopo aver aperto l'agenda, è sufficiente uscire in qualsiasi momento premendo x nel buffer dell'agenda. Se usi q abbastanza per l'agenda, manterrà tutti i buffer aperti.


3
La tua risposta è sempre un duplicato di user2699quello che è stato pubblicato il 19 febbraio 2016.
elenco delle leggi

-1

Sono passato al nuovo flusso di lavoro in modalità organizzazione.

In precedenza ho usato:

  • NOTE.org come memoria principale per le note in formato libero modificate a mano con associazione a chiave per un rapido accesso a questo file
  • TODO.orgper org-remembero(lambda () (interactive) (org-capture nil "t"))

TODO.orgVisito solo tramite C-c a a. Ma NOTE.orgdiventa non mantenibile con dimensioni maggiori di 1 MiB di testo semplice.

Così ho diviso questo file principali temi illustri facile, come LEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org, ...

Invece di mantenere un elenco di nomi possibili ho specificato la directory:

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

Sono contento di questa configurazione perché posso trovare rapidamente l'argomento necessario passando al buffer (tramite IDO tramite un nome file significativo) e cercando (per C-s) in uno spazio limitato.

Tutti i programmi disponibili tramite C-c a atutti i .orgfile.

Ma ora ho molti .orgfile inutilizzati aperti dopo i C-c a aquali dovrei uccidere quando vengono visualizzati durante gli switch buffer.

Penso che la segnalazione di bug dovrebbe essere presentata:

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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.