我希望能够在每次计算org-agenda时将输出保存到文本文件中。这样,我就可以使用外部程序(如Windows上的ATNotes或Linux上的conky)来获取此文本文件并在桌面上显示它。您该如何实现?
在你费心编写这段代码(还用了一个 around advice!)之后,我觉得自己像是泼了你冷水。但实际上,这个功能已经被整合到 org-mode 中,并在手册中有详细说明。你需要的命令是 org-write-agenda
(在议程缓冲区中按下 C-x C-w)。请参见 org-mode 信息中的“导出议程视图”一节。
M-x save-buffer
在*Agenda*
缓冲区上调用save-buffer
(因为orgmode将C-x C-s
绑定到org-save-all-org-buffer
)。如果需要,您可以在org-mode-map
中将save-buffer
绑定到其他内容。 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 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