保存 org-agenda

5
我希望能够在每次计算org-agenda时将输出保存到文本文件中。这样,我就可以使用外部程序(如Windows上的ATNotes或Linux上的conky)来获取此文本文件并在桌面上显示它。您该如何实现?
3个回答

4

在你费心编写这段代码(还用了一个 around advice!)之后,我觉得自己像是泼了你冷水。但实际上,这个功能已经被整合到 org-mode 中,并在手册中有详细说明。你需要的命令是 org-write-agenda(在议程缓冲区中按下 C-x C-w)。请参见 org-mode 信息中的“导出议程视图”一节。


谢谢。我之前写过类似的东西(对下面代码的修改),但这个更好。 - vedang

3
如果您想在emacs打开时进行操作,只需通过M-x save-buffer*Agenda*缓冲区上调用save-buffer(因为orgmode将C-x C-s绑定到org-save-all-org-buffer)。如果需要,您可以在org-mode-map中将save-buffer绑定到其他内容。
如果您想通过cron来完成,请使用org-mode邮件列表中此主题中的代码片段将输出导入文件。我过去曾使用过这个方法:
    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

我不想每次更改内容并重新计算议程时都将缓冲区保存到文件中,我正在寻找完全基于emacs的解决方案。我考虑过挂钩到计算议程的函数上,或者使用defadvice。不幸的是,我不了解足够的emacs lisp来尝试自己做任何事情。 - vedang

1

所以我最终决定打开Emacs Lisp手册,自己去解决这个问题。我写了这段代码,看起来运行得很好! :)

;; 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"))

编辑原因:

1)没有kill-buffer,defadvice会在每次执行org-todo-list时创建一个新的todo缓冲区。这会变得非常烦人。

2)没有get-buffer-create函数,第一次kill-buffers失败,因为此时没有名为todo的缓冲区。

3)没有set-buffer-modified-p,该函数将不断告诉您“todo缓冲区已修改。真的要杀死它吗?(y或n)”,这实际上会打败整个目的。

哇!我很高兴我真的花时间和精力去解决这个问题!:D


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接