Wie speichere ich automatisch Puffer im Organisationsmodus?

22

Ich benutze org-modeund verwende regelmäßig die Agenda, um meine To-Do-Liste zu verfolgen. Da ich Dropbox zum Synchronisieren meiner Liste verwende, müssen auf allen Computern dieselben Aufgaben verfügbar sein. Manchmal vergesse ich während meiner Bereinigung, meine Änderungen zu speichern, und lasse Emacs zu Hause geöffnet, wenn ich ins Büro gehe (daher werde ich nicht aufgefordert, beim Schließen von Emacs zu speichern). Wie kann ich Änderungen an *.orgAgenda-Puffern, die über die Agenda geändert werden, automatisch speichern ?

EDIT: Zur Verdeutlichung nutze ich die Agenda-Ansicht meiner Aufgaben, um mir einen Überblick zu verschaffen. Aus dieser Sicht kann ich den Status von Aufgaben ändern. Außerdem benutze ich den Erinnerungsmodus, um neue Aufgaben hinzuzufügen, die dann in der Agenda-Ansicht neu kategorisiert werden können. Diese Änderungen in der Agenda führen zu geänderten Agenda-Puffern im Organisationsmodus, die dann gespeichert werden müssen. Wenn diese Änderungen vorgenommen werden, möchte ich, dass die Puffer automatisch gespeichert werden.

Ryan
quelle
Können Sie klären, wie Änderungen an * .org-Agenda-Puffern, die über die Agenda geändert werden, automatisch gespeichert werden können? ? Ich kann mich nicht entscheiden, ob es "automatisch speichern ... durch die Agenda" ist (was sich selbst zu widersprechen scheint) oder "Puffer, die durch die Agenda geändert werden" (was ich nicht verstehe)
Sigma
@ Sigma Ich habe die Frage zur Klärung aktualisiert.
Ryan
1
Bisher bestand meine Lösung darin, meine Finger so zu trainieren, sdass sie in der Agenda-Ansicht häufig auf die Taste tippen .
mankoff
@mankoff Ich glaube, ich habe mich umgearbeitet, C-x C-sum jederzeit Änderungen in einer Organigrammdatei (von der Agenda oder direkt) vorzunehmen. Nicht automatisch, behält aber alles bei.
Jonathan Leech-Pepin

Antworten:

16

Ein schneller Hack, von dem ich nicht sicher bin, ob er Ihren Anwendungsfall befriedigt, wäre

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

Solange der Org-Agenda-Puffer geöffnet ist, werden alle Org-Puffer in regelmäßigen Abständen gespeichert (entspricht dem, was passieren würde, wenn sregelmäßig aus der Agenda-Ansicht gedrückt würde ).

Dies ist auto-save-modeinsofern etwas missbräuchlich , als der Agendapuffer selbst für die auto-saveBetrachtung wenig sinnvoll ist.

Wenn Sie diesen Hack verwenden, sollten Sie sicherstellen, dass Sicherungsdateien für alle Ihre .org-Dateien aufbewahrt werden, um auf der sicheren Seite zu sein.

Sigma
quelle
1
Ein Hauptproblem bei diesem Ansatz ist, dass beim automatischen Speichern der Agenda-Puffer in einer Datei im Active Directory gespeichert wird. Dadurch wurde eine große Anzahl verwaister, automatisch gespeicherter Dateien erstellt, die in meinem Dateisystem verstreut sind. Ich weiß nicht, wie ich Abhilfe schaffen soll.
Holocronweaver
7

Sie können alle Organisationspuffer speichern, wenn eine bestimmte Agenda-Funktion aufgerufen wird. So speichern Sie beispielsweise alle Organisationspuffer, nachdem Sie die Agenda verlassen haben:

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

Alternativ können Sie alle Organisationspuffer nach jeder Bearbeitung speichern, beispielsweise nachdem eine Frist hinzugefügt wurde:

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

Dies funktioniert sowohl in Organigramm- als auch in Organigrammpuffern. Verwenden Sie org-agenda-deadlinestattdessen, wenn Sie die automatische Speicherung auf die Agenda beschränken möchten.

Sie können dasselbe für jede Organisationsfunktion tun, sodass Sie mit dieser Methode genau auswählen können, wann die Organisationspuffer gespeichert werden sollen. Dieser Ansatz deckt einige Eckfälle ab, die die Methode von @Sigma übersieht: Sie können Ihre Agendaänderungen speichern lassen, auch wenn Sie die Agenda verlassen, bevor Sie auto-savedie Möglichkeit haben, Änderungen auszulösen, oder Änderungen außerhalb der Agenda vornehmen und vergessen, sie zu speichern. Ich persönlich benutze beide Methoden, um alle meine Grundlagen abzudecken. [Bearbeiten: Siehe Kommentar zur @ Sigma-Lösung, warum ich seine Lösung nicht mehr verwende.]

holocronweaver
quelle
2
Dies hat für mich besser funktioniert als die akzeptierte Antwort, da ich nur vergessen habe, zu speichern, nachdem ich neu gefeilt habe. (advice-add 'org-refile :after 'org-save-all-org-buffers)Die org-Dateien werden automatisch gespeichert, nachdem ich sie auf andere Dateien zurückgesetzt habe.
DIESER BENUTZER BRAUCHT HILFE
Dies ist die beste Antwort, da sie auf die von Ihnen gewünschten Organisationsfunktionen angewendet werden kann.
KevinG
Ich stellte fest, dass dies org-refilebedeutet, dass ich nicht länger zu einer bestimmten Überschrift "gehen" kann (im Gegensatz zum erneuten Füllen der Überschrift unter dem Cursor), indem org-refile
ich ein Präfixargument aufrufe
6

Ich sehe viele Antworten, die komplizierter sind, das hat bei mir funktioniert:

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

Das automatische Speichern wird standardmäßig nach 30 Sekunden Inaktivität ausgeführt (und in anderen nicht verwandten Szenarien , die im Handbuch dokumentiert sind ).

Karim Nassar
quelle
Genau das, wonach ich gesucht habe.
LVB
4

Ich verwende das folgende Snippet, um alle Puffer im Agenda-Modus nach einer neuen Aufnahme automatisch zu speichern, aber Sie können es an einer beliebigen Stelle einbinden:

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

Ändern Sie die Option 'org-capture-after-finalize-hookin 'org-agenda-finalize-hook, die meines Erachtens kurz vor dem Anzeigen des Agenda-Puffers aufgerufen wird.

Lee H
quelle
Ich habe vergessen zu erwähnen, dass für meine Funktion dash.el verfügbar sein muss. Denken Sie also daran.
Lee H
2
Während der Aufnahme können Sie Elemente sofort an einem der org-refile-targetsZiele erneut ablegen, sodass das Speichern möglicherweise org-agenda-filesnicht ausreicht. Ich würde org-save-all-org-buffersmich wahrscheinlich nur anrufen .
Sanityinc
1
PS Keine Notwendigkeit, dashdort zu verwenden : mapcarist eingebaut und macht das gleiche.
Sanityinc
@ sanityinc danke, ich habe den Code so aktualisiert, dass er mapcaranstelle von dash verwendet wird!
Lee H