Come si salvano automaticamente i buffer in modalità organizzazione?


22

Uso regolarmente org-modee l'agenda per tenere traccia del mio elenco di cose da fare. Poiché utilizzo Dropbox per sincronizzare il mio elenco, ho bisogno che le stesse attività siano disponibili su tutti i computer. A volte nel corso della mia pulizia dimenticherò di salvare le mie modifiche, lasciando Emacs aperto a casa quando vado in ufficio (quindi non mi viene chiesto di risparmiare sulla chiusura di Emacs). Come posso salvare automaticamente le modifiche ai *.orgbuffer dell'agenda che vengono modificate attraverso l'agenda?

EDIT: per chiarire, utilizzo la vista agenda dei miei compiti per mostrarmi una panoramica. Da quel punto di vista, posso cambiare lo stato delle attività. Inoltre, utilizzo la modalità di memorizzazione per aggiungere nuove attività, che possono quindi essere riclassificate nella vista agenda. Queste modifiche all'agenda producono buffer dell'agenda in modalità org modificati, che devono quindi essere salvati. Quando vengono apportate queste modifiche, vorrei che i buffer fossero salvati automaticamente.


Puoi chiarire "Come posso salvare automaticamente le modifiche ai buffer dell'agenda * .org che vengono modificate attraverso l'agenda?" ? Non riesco a decidere se si tratta di "salvare automaticamente ... attraverso l'agenda" (che sembra contraddire se stesso) o "buffer che vengono modificati attraverso l'agenda" (che non capisco)
Sigma,

@Sigma Ho aggiornato la domanda per chiarire.
Ryan,

1
Finora la mia soluzione è stata di riqualificare le dita per toccare sfrequentemente il tasto nella vista Agenda.
mankoff,

@mankoff Penso di essermi riqualificato per colpire C-x C-sogni volta che apporto modifiche in un file-agenda-org (dall'agenda o direttamente). Non automatico ma mantiene tutto salvato.
Jonathan Leech-Pepin,

Risposte:


16

Un trucco rapido, che non sono sicuro soddisferà il tuo caso d'uso sarebbe

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

Finché il buffer dell'agenda dell'organizzazione è aperto, tutti i buffer dell'organizzazione verranno salvati periodicamente (equivale a ciò che accadrebbe se sfosse premuto regolarmente dalla vista dell'agenda).

Ciò è in qualche modo abusivo auto-save-modein quanto il buffer dell'agenda stessa non ha molto senso per quanto auto-saveriguarda.

Se ti capita di usare quell'hack, è meglio assicurarsi che i file di backup siano conservati per tutti i tuoi file .org, per essere al sicuro.


1
Un grave problema con questo approccio è che il salvataggio automatico salverà il buffer dell'agenda in un file nella directory attiva. Ciò ha creato un numero enorme di file orfani di salvataggio automatico sparsi nel mio file system. Non sono sicuro di come porre rimedio.
holocronweaver,

7

È possibile salvare tutti i buffer dell'organizzazione ogni volta che viene chiamata una particolare funzione dell'agenda. Ad esempio, per salvare tutti i buffer dell'organizzazione dopo aver chiuso l'agenda:

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

In alternativa, è possibile salvare tutti i buffer dell'organizzazione dopo ogni modifica, ad esempio dopo aver aggiunto una scadenza:

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

Questo funzionerà sia in org-agenda che in buffer di organizzazione. Utilizzare org-agenda-deadlineinvece se si desidera limitare i salvataggi automatici all'agenda.

Puoi fare lo stesso per qualsiasi funzione organizzativa, quindi questo metodo ti consente di scegliere esattamente quando salvare i buffer organizzativi. Questo approccio copre alcuni casi angolari che mancano al metodo di @Sigma: puoi salvare le modifiche all'agenda anche se lasci l'agenda prima che auto-saveabbia la possibilità di attivarsi o apportare modifiche al di fuori dell'agenda e dimenticare di salvarle. Personalmente uso entrambi i metodi per coprire tutte le mie basi. [Modifica: vedi commento sulla soluzione @Sigma per il motivo per cui non uso più la sua soluzione.]


2
Questo ha funzionato meglio per me rispetto alla risposta accettata poiché l'unica volta che dimentico di salvare è dopo il refile. (advice-add 'org-refile :after 'org-save-all-org-buffers)salvato automaticamente i file dell'organizzazione dopo aver eseguito il refil a file diversi.
QUESTO UTENTE HA BISOGNO DI AIUTO

Questa è la risposta migliore, poiché può essere applicata a qualsiasi funzione organizzativa desiderata.
KevinG,

Ho scoperto che l'applicazione di questo org-refilesignifica che non posso più "Vai a" un certo titolo (invece di riempire quello sotto il cursore) chiamando org-refilecon un argomento prefisso.
quantum285,

6

Vedo molte risposte più complicate, questo ha funzionato per me:

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

L'impostazione predefinita di Auto Save viene eseguita dopo 30 secondi di inattività (e in altri scenari non correlati documentati nel manuale )


Esattamente quello che stavo cercando.
LVB,

4

Uso il seguente frammento per salvare automaticamente tutti i buffer della modalità agenda dopo una nuova acquisizione, ma puoi agganciarlo ovunque tu voglia:

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

Cambia il 'org-capture-after-finalize-hookin 'org-agenda-finalize-hook, che credo sia chiamato appena prima di visualizzare il buffer dell'agenda.


Ho dimenticato di menzionare che la mia funzione richiede che dash.el sia disponibile, quindi tienilo a mente.
Lee H,

2
Durante l'acquisizione, è possibile ri-archiviare immediatamente gli elementi in una qualsiasi delle org-refile-targetsdestinazioni, quindi è possibile che il salvataggio org-agenda-filesnon sia sufficiente. Probabilmente org-save-all-org-buffersmi chiamerei .
sanityinc,

1
PS Non c'è bisogno di usarlo dash: mapcarè integrato e fa la stessa cosa.
sanityinc,

@sanityinc grazie, ho aggiornato il codice da usare al mapcarposto del trattino!
Lee H,
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.