Сохранение повестки дня

Я хотел бы сохранять выходные данные org-agenda в текстовый файл каждый раз, когда рассчитывается org-agenda. Таким образом, я могу использовать внешнюю программу (например, ATNotes в Windows или conky в Linux), чтобы взять этот текстовый файл и отобразить его на своем рабочем столе.

Как я могу это сделать?


person vedang    schedule 09.08.2009    source источник


Ответы (3)


Мне кажется, что я испорчу ваш парад после того, как вы взяли на себя труд написать этот код, урезанный (и воспользовавшись советом, тоже!), но на самом деле эта функция уже запечена в организационном режиме и задокументирована в руководство. Вам нужна команда org-write-agenda (C-x C-w в буфере расписания). См. раздел информации об организационном режиме под названием «Экспорт представлений повестки дня».

person Robert P. Goldman    schedule 20.04.2010
comment
Спасибо. Некоторое время назад я написал что-то подобное (модификация кода, написанного ниже), но это лучше. - person vedang; 21.04.2010

Если вы хотите сделать это, пока у вас открыт emacs, вы можете просто вызвать save-buffer в буфере *Agenda* через M-x save-buffer (поскольку orgmode связывает C-x C-s с org-save-all-org-buffer., вы можете связать save-buffer с чем-то еще в org-mode-map, если хотите.

Если вы хотите сделать это через cron, вы должны иметь возможность использовать фрагмент в этом thread в списке рассылки организационного режима, чтобы передать вывод в файл. Я использовал это в прошлом:

    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
person seth    schedule 09.08.2009
comment
Я не хочу сохранять буфер в файл каждый раз, когда я что-то меняю и пересчитываю повестку дня, и я ищу решение, полностью основанное на emacs. Я думал о том, чтобы подключиться к функции, которая вычисляет повестку дня, или, может быть, использовать defadvice. К сожалению, я недостаточно знаю emacs lisp, чтобы попробовать что-нибудь самостоятельно. - person vedang; 10.08.2009

Так что я, наконец, решил открыть руководство по 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. Это становится довольно раздражающим.

2) Без функции get-buffer-create kill-buffers не работает в первый раз, так как в это время нет буфера с именем todo.

3) Без set-buffer-modified-p функция будет продолжать говорить вам «буфер todo изменен. Действительно убить его? (y или n)», что на самом деле сведет на нет всю цель.

Вау! Я так счастлив, что действительно потратил время и усилия, чтобы понять это! :D

person vedang    schedule 10.08.2009