2009-08-09 6 views
4

Je souhaite enregistrer la sortie d'org-agenda dans un fichier texte, chaque fois que l'ordre du jour est calculé. De cette façon, je peux utiliser un programme externe (comme ATNotes sur windows ou conky sur linux), pour récupérer ce fichier texte et l'afficher sur mon bureau.Enregistrement de l'ordre du jour

Comment est-ce que je peux faire ceci?

Répondre

3

J'ai l'impression de pleuvoir sur votre parade après que vous ayez pris la peine d'écrire ce code (et que vous ayez aussi utilisé un conseil!), Mais en fait cette fonctionnalité est déjà cuite en org ... mode, et documenté dans le manuel. La commande que vous voulez est org-write-agenda (C-x C-w dans un tampon d'agenda). Voir la section de l'information sur le mode org intitulée "Exporter les vues de l'agenda".

+0

merci. J'ai écrit quelque chose de similaire il y a quelque temps (une modification par rapport au code écrit ci-dessous), mais c'est mieux. – vedang

2

Si vous voulez faire pendant que vous avez emacs ouvert, vous pouvez simplement appeler save-buffer sur le tampon *Agenda* via M-x save-buffer (depuis org-mode se lie C-x C-s-org-save-all-org-buffer. Vous pouvez lier save-buffer à quelque chose d'autre dans la org-mode-map si vous voulez.

.

Si vous voulez le faire via une cron, vous devriez être en mesure d'utiliser l'extrait dans this thread sur la liste de diffusion en mode org pour diriger la sortie vers un fichier que j'ai utilisé dans le passé:

emacs -batch -eval '(org-batch-agenda "a" org-agenda-ndays 7 org-agenda-include-diary nil org-agenda-files (quote ("~/org/todo.org")))' > agenda.txt 
+0

Je ne veux pas enregistrer le tampon dans un fichier chaque fois que je change quelque chose et que je recalcule l'ordre du jour, et je cherche une solution entièrement basée sur emacs. Je pensais dans le sens d'avoir à accrocher à la fonction qui calcule l'ordre du jour, ou peut-être en utilisant defadvice. Malheureusement, je n'en connais pas assez pour essayer quelque chose par moi-même. – vedang

1

J'ai donc finalement décidé d'ouvrir le manuel emacs lisp et de le comprendre moi-même. J'ai écrit ce morceau de code, qui semble fonctionner très bien! :)

;; Save the org-agenda for display with conky 
(defadvice org-todo-list (after saveorgagenda activate) 
    "save this output to my todo file" 
    (get-buffer-create "todo") 
    (with-current-buffer "todo" 
    (set-buffer-modified-p nil)) 
    (kill-buffer "todo") 
    (write-file "~/todo")) 

EDIT RAISONS:

1) Sans kill-buffer, le defadvice crée un nouveau tampon de todo à chaque exécution de liste org-todo. Cela devient assez irritant.

2) Sans la fonction get-buffer-create, kill-buffers échoue la première fois car il n'y a pas de tampon nommé todo à ce moment-là.

3) Sans set-buffer-modified-p, la fonction continuera de vous dire "todo buffer est modifié, le tuer vraiment? (Y ou n)" ce qui irait vraiment à l'encontre du but recherché.

Ouf! Je suis tellement heureux que j'ai pris le temps et l'effort de comprendre cela! : D

Questions connexes