ORG-MODE - запускать статус TODO на определенную дату?

9

Вместо того, чтобы вручную проверять файл тиклера или календарь каждое утро, как я могу создать триггер, который установит статус элемента в TODO на определенную дату?

earlio
источник

Ответы:

5

Не прямой ответ, но вы могли бы использовать поддержку Org для сроков и планирования вместо этого.

Вы можете создать свои элементы TODO и назначить им запланированную дату, которая в Org означает дату, когда вы планируете выполнить задачу, и когда она должна появиться в вашей повестке дня. (Если вы еще не используете представления программы org, они заслуживают некоторого изучения!)

В зависимости от ваших потребностей вы также можете назначить срок. Например: создайте TODO на пятницу, запланируйте его на следующую среду, когда вы действительно захотите его увидеть; и дайте ему крайний срок на следующую пятницу, к которому он должен завершиться.

glucas
источник
7

Вот кое-что, что я использую каждое утро, чтобы прочесать все мои задачи и изменить дату на сегодня, если она просрочена, и изменить ее со следующего действия на активное, если оно должно быть сегодня. Это нестандартное решение для моего собственного календаря, которым я пользуюсь в течение года, поэтому, несомненно, потребуется некоторая настройка с вашей стороны. Насколько я помню , что там было изменение 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") )))))
lawlist
источник