5

每次计算 org-agenda 时,我都想将 org-agenda 的输出保存到文本文件中。这样,我可以使用外部程序(如 Windows 上的 ATNotes 或 linux 上的 conky)来获取此文本文件并将其显示在我的桌面上。

我怎样才能做到这一点?

4

3 回答 3

4

我觉得我在你费尽心思编写这段代码剪断之后(并且还使用了一条周围的建议!),但实际上这个功能已经融入了 org-mode,并记录在手动的。您想要的命令是org-write-agenda(议程缓冲区中的 Cx Cw)。请参阅标题为“导出议程视图”的 org-mode 信息部分。

于 2010-04-20T22:04:13.673 回答
3

如果您想在打开 emacs 的情况下执行此操作,您可以通过调用save-buffer缓冲区*Agenda*M-x save-buffer因为 orgmode 绑定C-x C-s到如果需要,org-save-all-org-buffer. 您可以绑定save-buffer到其他内容org-mode-map

如果您想通过 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
于 2009-08-09T15:47:09.783 回答
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

于 2009-08-10T16:51:45.077 回答