ne pas garder les fichiers org-agenda ouverts après avoir généré l'agenda

14

La génération de l'agenda d'aujourd'hui en mode Org ( C-c a a) ouvre les fichiers dans org-agenda-files. Je ne veux pas qu'Emacs ouvre ces tampons supplémentaires.

Existe-t-il un moyen simple de dire à Emacs de ne pas ouvrir ces tampons? (ou qu'est-ce qui revient au même, à les fermer automatiquement s'ils n'étaient pas ouverts avant d'appeler l'ordre du jour?).

MISE À JOUR:

Il s'agit d'une version plus compacte de la solution fournie par @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)

Malheureusement, ce n'est toujours pas parfait, car maintenant cliquer sur un événement dans l'agenda n'ouvre pas le fichier org correspondant.

Scaramouche
la source

Réponses:

11

Vous voulez org-agenda-exit, lié commodément à x par défaut dans la vue de l'agenda

Comme `org-agenda-Quit ', mais tuez tous les tampons créés par l'agenda. Les tampons d'organisation visités directement par l'utilisateur ne seront pas touchés.

J'ai trouvé cela en utilisant describe-mode.

user2699
la source
Réponse saine ici.
YoungFrog
1
Appréciez le pointeur vers describe-mode.
Matt
4

Le ou les org-agenda-filestampons ne doivent pas être supprimés avant la fin des fonctions de recherche. Les trois (3) la plupart des fonctions de recherche communs utilisés pour générer un *Org Agenda*tampon sont: org-agenda-list; org-search-view; et org-tags-view. org-agenda-filesest à la fois une variable et une fonction - deux animaux différents mais liés.

(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))
liste des lois
la source
C'est bon. Le seul problème est que je ne voudrais pas tuer un tampon qui était ouvert avant de créer l'agenda. Ainsi, il semble que la bonne solution nécessite de créer un conseil «autour».
scaramouche
@scaramouche - Lors de mes premiers tests, le projet révisé semble faire ce que vous cherchez - il intègre le aroundavec advice.
lawlist
Maintenant, il y a un autre problème: appuyer sur Entrée dans un événement de l'agenda n'ouvre pas le fichier correspondant. Il n'y a peut-être pas de bon moyen de mettre cela en œuvre.
scaramouche
Oui, cela a du sens (maintenant que j'y pense) parce que le *Org-Agenda*tampon est juste un copier-coller du org-agenda-files[genre de, il est en fait poussé dans une liste puis réorganisé et inséré dans le *Org-Agenda*tampon]. Lors de l'édition, un utilisateur revient à l'original org-agenda-filespour effectuer l'édition, que les fonctions d'édition supposent déjà ouverte. Si vous devez vraiment org-agenda-filesfermer le fichier lorsqu'il n'est pas utilisé, vous devrez réviser les fonctions d'édition pour ouvrir le fichier nécessaire, puis le refermer une fois terminé. Il peut également y avoir d'autres problèmes
Lawlist
1

Après avoir ouvert l'agenda, quittez-le simplement en appuyant sur x dans le tampon de l'agenda à tout moment. Si vous utilisez q pour calmer l'agenda, tous les tampons resteront ouverts.

Diogo
la source
3
Votre réponse est essentiellement une copie de user2699celle qui a été publiée le 19 février 2016.
lawlist
-1

Je suis passé à un nouveau flux de travail en mode organisationnel.

Auparavant, j'utilise:

  • NOTE.org comme stockage principal pour les notes de forme libre éditées à la main avec un raccourci clavier pour un accès rapide à ce fichier
  • TODO.orgpour org-rememberou(lambda () (interactive) (org-capture nil "t"))

TODO.org Je visite uniquement via C-c a a . Mais NOTE.orgdevenez impossible à maintenir avec une taille supérieure à 1 Mo de texte brut.

Donc , je partage ce dossier par les principaux sujets distingués facile, comme LEARNING.org, PURCHASES.org, emacs-python.org, linux.org,vps.org , ...

Au lieu de maintenir la liste des noms possibles, j'ai spécifié le répertoire:

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

Je suis satisfait de cette configuration car je peux trouver rapidement le sujet nécessaire en passant au tampon (par IDO via un nom de fichier significatif) et en recherchant (par C-s ) dans un espace limité.

Tous les horaires disponibles via à C-c a atravers tous.org fichiers.

Mais maintenant, j'ai beaucoup de .orgfichiers inutilisés ouverts aprèsC-c a a quoi je devrais tuer lorsqu'ils apparaissent lors des commutateurs de tampon.

Je pense que le rapport de bug devrait être soumis:

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
la source