Comment enregistrer automatiquement les tampons en mode organisation?

22

J'utilise régulièrement org-modeet l'agenda pour garder une trace de ma liste de tâches. Étant donné que j'utilise Dropbox pour synchroniser ma liste, j'ai besoin que les mêmes tâches soient disponibles sur tous les ordinateurs. Parfois, au cours de mon nettoyage, j'oublie d'enregistrer mes modifications, laissant emacs ouvert à la maison lorsque je rentre au bureau (donc je ne suis pas invité à économiser à la fermeture d'emacs). Comment puis-je enregistrer automatiquement les modifications apportées aux *.orgtampons d'agenda qui sont modifiés via l'agenda?

EDIT: Pour clarifier, j'utilise la vue de l'agenda de mes tâches pour me montrer un aperçu. De cette vue, je peux changer l'état des tâches. De plus, j'utilise le mode souvenir pour ajouter de nouvelles tâches, qui peuvent ensuite être reclassées dans la vue de l'agenda. Ces changements dans l'agenda entraînent des tampons d'agenda en mode organisationnel modifiés, qui doivent ensuite être enregistrés. Lorsque ces modifications sont apportées, je souhaite que les tampons soient enregistrés automatiquement.

Ryan
la source
Pouvez-vous préciser "Comment puis-je enregistrer automatiquement les modifications apportées aux tampons d'agenda * .org qui sont modifiés via l'agenda?" ? Je ne peux pas décider si c'est "enregistrer automatiquement ... via l'agenda" (qui semble s'auto-contredire) ou "tampons qui sont modifiés via l'agenda" (que je ne comprends pas)
Sigma
@Sigma J'ai mis à jour la question pour clarifier.
Ryan
1
Jusqu'à présent, ma solution a été de réentraîner mes doigts à appuyer sfréquemment sur la touche lorsque je suis en mode Agenda.
mankoff
@mankoff Je pense que je me suis recyclé pour frapper C-x C-schaque fois que j'apporte des modifications dans un fichier org-agenda-file (à partir de l'agenda ou directement). Pas automatique mais garde tout sauvegardé.
Jonathan Leech-Pepin

Réponses:

16

Un hack rapide, dont je ne suis pas sûr qu'il satisfera votre cas d'utilisation serait

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

Tant que le tampon de l'agenda de l'organisation est ouvert, tous les tampons de l'organisation seront enregistrés périodiquement (ce qui équivaut à ce qui se passerait s'il sétait pressé régulièrement depuis la vue de l'agenda).

C'est quelque peu abusif auto-save-modedans la mesure où le tampon de l'agenda lui-même n'a pas beaucoup de sens en ce qui auto-saveconcerne.

Si vous utilisez ce hack, vous feriez mieux de vous assurer que les fichiers de sauvegarde sont conservés pour tous vos fichiers .org, par sécurité.

Sigma
la source
1
Un problème majeur avec cette approche est que l'enregistrement automatique enregistrera le tampon de l'agenda dans un fichier du répertoire actif. Cela a créé un grand nombre de fichiers d'enregistrement automatique orphelins dispersés sur mon système de fichiers. Je ne sais pas comment y remédier.
holocronweaver
7

Vous pouvez enregistrer tous les tampons d'organisation chaque fois qu'une fonction d'agenda particulière est appelée. Par exemple, pour enregistrer tous les tampons d'organisation après avoir quitté l'agenda:

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

Alternativement, vous pouvez enregistrer tous les tampons d'organisation après chaque modification, par exemple après l'ajout d'un délai:

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

Cela fonctionnera à la fois dans org-agenda et org buffers. Utilisez-le à la org-agenda-deadlineplace si vous souhaitez restreindre les enregistrements automatiques à l'agenda.

Vous pouvez faire de même pour n'importe quelle fonction d'organisation, donc cette méthode vous permet de choisir exactement quand enregistrer les tampons d'organisation. Cette approche couvre certains cas de coin que la méthode de @Sigma manque: vous pouvez enregistrer vos modifications d'agenda même si vous quittez l'agenda avant auto-savea une chance de se déclencher, ou effectuez des modifications en dehors de l'agenda et oubliez de les enregistrer. J'utilise personnellement les deux méthodes pour couvrir toutes mes bases. [Modifier: Voir le commentaire sur la solution @Sigma pour savoir pourquoi je n'utilise plus sa solution.]

holocronweaver
la source
2
Cela a mieux fonctionné pour moi que la réponse acceptée car la seule fois où j'oublie de sauvegarder, c'est après avoir refilé. (advice-add 'org-refile :after 'org-save-all-org-buffers)automatiquement enregistré les fichiers org après avoir refilé à différents fichiers.
CET UTILISATEUR A BESOIN D'AIDE
C'est la meilleure réponse, car elle peut être appliquée à toutes les fonctions organisationnelles que vous souhaitez.
KevinG
J'ai trouvé que l'application de cela à org-refilesignifie que je ne peux plus "aller à" un certain titre (au lieu de refaire celui sous le curseur) en appelant org-refileavec un argument préfixe ..
quantum285
6

Je vois beaucoup de réponses plus compliquées, cela a fonctionné pour moi:

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

L'enregistrement automatique est par défaut exécuté après 30 secondes d'inactivité (et dans d'autres scénarios non liés documentés dans le manuel )

Karim Nassar
la source
Exactement ce que je cherchais.
LVB
4

J'utilise l'extrait de code suivant pour enregistrer automatiquement tous les tampons du mode agenda après une nouvelle capture, mais vous pouvez le raccorder où vous le souhaitez:

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

Changez le 'org-capture-after-finalize-hooken 'org-agenda-finalize-hook, qui je crois s'appelle juste avant d'afficher le tampon de l'agenda.

Lee H
la source
J'ai oublié de mentionner que ma fonction nécessite que dash.el soit disponible, alors gardez cela à l'esprit.
Lee H
2
Pendant la capture, vous pouvez immédiatement re-classer les éléments vers l'une des org-refile-targetsdestinations, il est donc possible que l'enregistrement org-agenda-filesne soit pas suffisant. Je m'appellerais probablement org-save-all-org-buffers.
sanityinc
1
PS Pas besoin de l'utiliser dashlà: mapcarest intégré et fait la même chose.
sanityinc
@sanityinc merci, j'ai mis à jour le code à utiliser mapcarau lieu du tiret!
Lee H