Lassen Sie keine Organigrammdateien offen, nachdem Sie ein Programm erstellt haben


14

Wenn Sie die heutige Agenda im Org-Modus ( C-c a a) erstellen, werden die Dateien in geöffnet org-agenda-files. Ich möchte nicht, dass Emacs diese zusätzlichen Puffer öffnet.

Gibt es eine einfache Möglichkeit, Emacs anzuweisen, diese Puffer nicht zu öffnen? (oder was ist das gleiche, um sie automatisch zu schließen, wenn sie vor dem Aufruf der Tagesordnung nicht geöffnet waren?).

AKTUALISIEREN:

Dies ist eine kompaktere Version der von @lawlist bereitgestellten Lösung:

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

Leider ist dies immer noch nicht perfekt, da durch Klicken auf eine Veranstaltung in der Agenda die entsprechende Organisationsdatei nicht geöffnet wird.

Antworten:


10

Sie möchten org-agenda-exitbequem per Voreinstellung in der Agenda-Ansicht an x ​​gebunden werden

Wie "org-agenda-Quit", aber töte alle Puffer, die durch die Agenda erstellt wurden. Vom Benutzer direkt aufgerufene Org-Puffer werden nicht berührt.

Ich fand das mit describe-mode.


Vernünftige Antwort hier.
YoungFrog

1
Schätzen Sie den Zeiger auf describe-mode.
Matt

4

Der org-agenda-filesPuffer (s) sollte nicht erst nach den Suchfunktionen getötet wird fertig. Die drei (3) häufigsten Suchfunktionen zum Erzeugen eines *Org Agenda*Puffers sind org-agenda-list:; org-search-view; und org-tags-view. org-agenda-filesist sowohl eine Variable als auch eine Funktion - zwei verschiedene, aber verwandte Tiere.

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

Das ist gut. Das einzige Problem ist, dass ich keinen Puffer löschen möchte, der vor dem Erstellen der Agenda geöffnet war. Es scheint also, dass die richtige Lösung die Erstellung eines Rundum-Hinweises erfordert.
Scaramouche

@scaramouche - In meinen ersten Tests scheint der überarbeitete Entwurf das zu tun, wonach Sie suchen - er enthält das aroundmit advice.
Gesetzesliste

Jetzt gibt es noch ein anderes Problem: Durch Drücken der Eingabetaste in einem Ereignis in der Agenda wird die entsprechende Datei nicht geöffnet. Vielleicht gibt es keine gute Möglichkeit, dies umzusetzen.
Scaramouche

Ja, das macht Sinn (jetzt, wo ich darüber nachdenke), weil der *Org-Agenda*Puffer nur ein Kopieren und Einfügen von org-agenda-files[Art, es wird tatsächlich in eine Liste verschoben und dann neu organisiert und in den *Org-Agenda*Puffer eingefügt ] ist. Während der Bearbeitung springt ein Benutzer zum Original zurück org-agenda-files, um die Bearbeitung vorzunehmen, von der die Bearbeitungsfunktionen annehmen, dass sie bereits geöffnet ist. Wenn Sie das Programm wirklich schließen müssen, org-agenda-fileswenn es nicht verwendet wird, müssen Sie die Bearbeitungsfunktionen überarbeiten, um die benötigte Datei zu öffnen und sie anschließend wieder zu schließen. Es kann auch andere Probleme geben
Gesetzesliste

1

Nachdem Sie die Agenda geöffnet haben, können Sie sie jederzeit durch Drücken von x im Puffer der Agenda verlassen. Wenn Sie q verwenden, um die Agenda vollständig zu durchlaufen, bleiben alle Puffer geöffnet.


3
Ihre Antwort ist im Wesentlichen ein Duplikat davon user2699, das am 19. Februar 2016 veröffentlicht wurde.
Gesetzesliste

-1

Ich habe zu einem neuen Workflow im Organisationsmodus gewechselt.

Bisher benutze ich:

  • NOTE.org als Hauptspeicher für von Hand bearbeitete Freiformnotizen mit Schlüsselbindung zum schnellen Zugriff auf diese Datei
  • TODO.orgfür org-rememberoder(lambda () (interactive) (org-capture nil "t"))

TODO.orgIch besuche nur über C-c a a. Aber NOTE.orgwerden wartbaren mit einer Größe von mehr als 1 MiB von Klartext.

Also habe ich diese Datei durch Haupt leicht unterschieden Themen aufgeteilt, wie LEARNING.org, PURCHASES.org, emacs-python.org, linux.org, vps.org, ...

Anstatt eine Liste möglicher Namen zu führen, habe ich ein Verzeichnis angegeben:

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

Ich bin mit diesem Setup zufrieden, weil ich benötigtes Thema schnell finden kann, indem ich auf Puffer (von IDO über einen aussagekräftigen Dateinamen) umschalte und C-sin begrenztem Raum (von ) suche.

Alle Zeitpläne C-c a aüber alle .orgDateien verfügbar .

Aber jetzt habe ich viele unbenutzte .orgDateien geöffnet , nach C-c a adenen ich töten sollte, wenn sie während der Pufferwechsel angezeigt werden.

Ich denke, dass ein Fehlerbericht eingereicht werden sollte:

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.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.