¿Cómo guardo automáticamente los búferes del modo org?

22

Utilizo regularmente org-modey la agenda para realizar un seguimiento de mi lista de tareas pendientes. Como uso Dropbox para sincronizar mi lista, necesito que las mismas tareas estén disponibles en todas las computadoras. A veces, durante el curso de mi limpieza, me olvido de guardar mis cambios, dejando los emacs abiertos en casa cuando entro en la oficina (por lo tanto, no se me pide que ahorre al cerrar los emacs). ¿Cómo puedo guardar automáticamente los cambios en los *.orgbuffers de agenda que se modifican a través de la agenda?

EDITAR: Para aclarar, utilizo la vista de agenda de mis tareas para mostrarme una descripción general. Desde esa vista, puedo cambiar el estado de las tareas. Además, uso el modo recordar para agregar nuevas tareas, que luego se pueden recategorizar en la vista de agenda. Estos cambios en la agenda dan como resultado buffers de agenda modificados en modo org, que luego deben guardarse. Cuando se realizan estos cambios, me gustaría que los búferes se guarden automáticamente.

Ryan
fuente
¿Puede aclarar "¿Cómo puedo guardar automáticamente los cambios en los buffers de agenda * .org que se modifican a través de la agenda?" ? No puedo decidir si es "guardar automáticamente ... a través de la agenda" (que parece contradecirse) o "buffers que se modifican a través de la agenda" (que no entiendo)
Sigma
@ Sigma He actualizado la pregunta para aclarar.
Ryan
1
Mi solución hasta ahora ha sido volver a entrenar mis dedos para tocar la stecla con frecuencia cuando esté en la vista Agenda.
mankoff
@mankoff Creo que me he vuelto a entrenar para golpear C-x C-scada vez que hago algún cambio en un archivo de agenda de la organización (desde la agenda o directamente). No es automático, pero mantiene todo guardado.
Jonathan Leech-Pepin

Respuestas:

16

Un truco rápido, que no estoy seguro satisfará su caso de uso sería

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

Mientras el búfer de la agenda de la organización esté abierto, todos los búferes de la organización se guardarán periódicamente (es equivalente a lo que sucedería si sse pulsara regularmente desde la vista de la agenda).

Esto es un poco abusivo ya auto-save-modeque el búfer de la agenda en sí no tiene mucho sentido en lo que auto-saverespecta.

Si usa ese truco, será mejor que se asegure de que los archivos de copia de seguridad se guarden para todos sus archivos .org, para estar seguros.

Sigma
fuente
1
Un problema importante con este enfoque es que el guardado automático guardará el búfer de agenda en un archivo en el directorio activo. Esto creó una gran cantidad de archivos huérfanos de guardado automático dispersos en mi sistema de archivos. No estoy seguro de cómo remediarlo.
holocronweaver
7

Puede guardar todos los buffers de organización cada vez que se llama a una función de agenda en particular. Por ejemplo, para guardar todos los búferes de organización después de salir de la agenda:

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

Alternativamente, puede guardar todos los buffers de organización después de cada edición, digamos después de agregar una fecha límite:

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

Esto funcionará tanto en org-agenda como en buffers de org. Utilice org-agenda-deadlineen su lugar si desea restringir los guardados automáticos a la agenda.

Puede hacer lo mismo para cualquier función de organización, por lo que este método le permite elegir exactamente cuándo guardar los búferes de organización. Este enfoque cubre algunos casos esquimales que el método de @Sigma pierde: puede guardar los cambios de su agenda incluso si abandona la agenda antes de auto-savetener la oportunidad de activarse, o hacer cambios fuera de la agenda y olvida guardarlos. Yo personalmente uso ambos métodos para cubrir todas mis bases. [Editar: Vea el comentario en la solución @Sigma para saber por qué ya no uso su solución.]

Tejedor de holocrón
fuente
2
Esto funcionó mejor para mí que la respuesta aceptada, ya que la única vez que olvido guardar es después de volver a archivar. (advice-add 'org-refile :after 'org-save-all-org-buffers)guarde automáticamente los archivos de la organización después de volver a archivar en diferentes archivos.
ESTE USUARIO NECESITA AYUDA
Esta es la mejor respuesta, ya que se puede aplicar a las funciones de la organización que desee.
KevinG
Descubrí que aplicar esto a org-refilesignifica que ya no puedo "Ir a" un título determinado (en lugar de rellenar el que está debajo del cursor) llamando org-refilecon un argumento de prefijo ...
quantum285
6

Veo muchas respuestas que son más complicadas, esto funcionó para mí:

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

La opción Guardar automáticamente se ejecuta después de 30 segundos de inactividad (y en otros escenarios no relacionados documentados en el manual )

Karim Nassar
fuente
Exactamente lo que estaba buscando.
LVB
4

Utilizo el siguiente fragmento para guardar automáticamente todos los búferes de modo de agenda después de una nueva captura, pero puede conectarlo en cualquier lugar que desee:

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

Cambie 'org-capture-after-finalize-hooka 'org-agenda-finalize-hook, que creo que se llama justo antes de mostrar el búfer de agenda.

Lee H
fuente
Olvidé mencionar que mi función requiere que dash.el esté disponible, así que tenlo en cuenta.
Lee H
2
Durante la captura, puede volver a archivar elementos inmediatamente en cualquiera de los org-refile-targetsdestinos, por lo que es posible que guardar org-agenda-filesno sea suficiente. Probablemente solo org-save-all-org-buffersme llamaría a mí mismo.
sanityinc
1
PD No hay necesidad de usar dashallí: mapcarestá integrado y hace lo mismo.
sanityinc
@sanityinc gracias, ¡actualicé el código para usar en mapcarlugar del guión!
Lee H