Давно хотел подружить Org-Mode со своим телефоном. Ниже приведенный код - это то, что удалось накропать, так сказать, на коленках. В качестве связующего звена выбрал Gammu, так как эта программа, прекрасно работает с моим телефоном. Смысл в том, чтобы экспортировать TODO список в удобоваримый для Gammu формат и уже потом его синхронизировать с телефоном. Приведённый ниже код работоспособен. Его просто нужно выполнить в буфере Org-Mode. В итоге получаем отфарматированный файл VCS, который потом можно синхронизировать через Gammu с телефоном, например так (у меня bluetooth):
# gammu -c ~/.gammurc addnew org-phone-sync.vcs -yes
Так как я в Lisp не силён, то если у кого-то есть заинтересованность и возможность помочь, то буду очень благодарен. Возможно, что кому-то это может понадобиться кроме меня.
(defun agamestor/org-phone-sync-get-due ()
"Get format string of `DUE' value"
(let ((pom (point)) (time)
(second) (minute) (hour)
(day) (month) (year)
(due))
(setq time (decode-time (org-get-deadline-time pom)))
(setq
second (nth 0 time)
minute (nth 1 time)
hour (nth 2 time)
day (nth 3 time)
month (nth 4 time)
year (nth 5 time))
(format "%d%02d%02dT%02d%02d%02d" year month day hour minute second)))
(defun agamestor/org-phone-sync-get-summary ()
"Get format string of `SUMMARY' value"
(nth 4 (org-heading-components)))
(defun agamestor/org-phone-sync-export ()
(interactive)
(goto-char (point-min))
(when (not (outline-on-heading-p))
(outline-next-visible-heading 1)
(if (not (outline-on-heading-p))
(error "Error. Tasks not founded")))
(let ((org-buffer (current-buffer)))
(with-temp-file "~/.tmp/org-phone-sync.vcs"
(setq gammu-buffer (current-buffer))
(insert "BEGIN:VCALENDAR\n")
(insert "VERSION:1.0\n\n")
(set-buffer org-buffer)
(while (outline-on-heading-p)
(setq due (funcall 'agamestor/org-phone-sync-get-due))
(setq summary (funcall 'agamestor/org-phone-sync-get-summary))
(set-buffer gammu-buffer)
(insert "BEGIN:VTODO\n")
(insert "PRIORITY:2\n")
(insert "CATEGORIES:MISCELLANEOUS\n")
(insert (format "SUMMARY;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:%s\n" summary))
(insert (format "DUE:%s\n" due))
(insert "END:VTODO\n")
(insert "\n")
(set-buffer org-buffer)
(outline-next-visible-heading 1))
(set-buffer gammu-buffer)
(insert "END:VCALENDAR\n"))))
Ярлыки: Emacs, Gammu, Lisp, Org-Mode