Вместо того, чтобы вручную проверять файл тиклера или календарь каждое утро, как я могу создать триггер, который установит статус элемента в TODO на определенную дату?
Не прямой ответ, но вы могли бы использовать поддержку Org для сроков и планирования вместо этого.
Вы можете создать свои элементы TODO и назначить им запланированную дату, которая в Org означает дату, когда вы планируете выполнить задачу, и когда она должна появиться в вашей повестке дня. (Если вы еще не используете представления программы org, они заслуживают некоторого изучения!)
В зависимости от ваших потребностей вы также можете назначить срок. Например: создайте TODO на пятницу, запланируйте его на следующую среду, когда вы действительно захотите его увидеть; и дайте ему крайний срок на следующую пятницу, к которому он должен завершиться.
Вот кое-что, что я использую каждое утро, чтобы прочесать все мои задачи и изменить дату на сегодня, если она просрочена, и изменить ее со следующего действия на активное, если оно должно быть сегодня. Это нестандартное решение для моего собственного календаря, которым я пользуюсь в течение года, поэтому, несомненно, потребуется некоторая настройка с вашей стороны. Насколько я помню , что там было изменение org-deadline
от org-mode
версии 7 и 8, и я могу использовать предыдущую версию в моей установке. В текущей версии может потребоваться дополнительный аргумент или что-то еще - если вам нужна дополнительная помощь, дайте мне знать, и я буду работать над ней в течение следующих нескольких дней, если позволит время.
Регулярное выражение, которое я использую, рассматривает заголовки с двумя звездами и будет слева от буфера. Ваша собственная установка, вероятно, потребует изменения регулярного выражения.
(defun org-carry-forward-uncompleted-tasks ()
"Carry forward uncompleted tasks."
(interactive)
(save-excursion
(goto-char (point-max))
(while (re-search-backward "^\\*\\* Active" nil t)
(unless (org-at-heading-p)
(org-back-to-heading t))
(let* (
(element (org-element-at-point))
(todo-state (org-element-property :todo-keyword element))
(deadline (org-element-property :deadline element))
(deadline-time-stamp
(when deadline
(time-to-days
(org-time-string-to-time
(org-element-property :raw-value deadline)))))
(today (time-to-days (current-time))) )
(when
(and
deadline-time-stamp
(> today deadline-time-stamp) ;; deadline is overdue
(string= todo-state "Active") ) ;; todo-state equals "X"
(org-deadline nil ".") )))))
(defun org-make-active-today ()
"Change task from Next Action to Active if deadline is less than or equal to today."
(interactive)
(save-excursion
(goto-char (point-max))
(while (re-search-backward "^\\*\\* Next Action" nil t)
(unless (org-at-heading-p)
(org-back-to-heading t))
(let* (
(element (org-element-at-point))
(todo-state (org-element-property :todo-keyword element))
(deadline (org-element-property :deadline element))
(deadline-time-stamp
(when deadline
(time-to-days
(org-time-string-to-time
(org-element-property :raw-value deadline) ))))
(today (time-to-days (current-time))) )
(when
(and
deadline-time-stamp
(>= today deadline-time-stamp) ;; deadline less than or equal to today
(string= todo-state "Next Action")) ;; todo-state equals "X"
(org-deadline nil ".")
(org-todo "Active") )))))