У меня есть несколько задач в моем файле Org, одна из которых имеет элементы, начинающиеся с флажка (но только те). Все они имеют статистический файл cookie в конце ([n / m]).
Я ищу способ автоматического обновления родительской задачи, TODO
чтобы DONE
все флажки были помечены как выполненные.
Документация гласит:
Если вы хотите, чтобы запись TODO автоматически изменялась на ГОТОВО, когда все дочерние элементы сделаны, вы можете использовать следующую настройку [...]
Другой возможностью является использование флажков для идентификации (иерархии) большого количества подзадач (см. Флажки).
Насколько я понимаю, последняя часть состоит в том, что если дочерние элементы являются флажками, родительское состояние уже должно автоматически обновляться (что не так).
Что мне не хватает?
Редактировать:
Из org-after-todo-statistics-hook
документации (org.el):
Хук, который вызывается после обновления файла cookie статистики TODO. Каждая функция вызывается с двумя аргументами: количество незавершенных записей и количество выполненных записей.
Это означает, что предложенный код от orgmode.org:
(defun org-summary-todo (n-done n-not-done)
"Switch entry to DONE when all subentries are done, to TODO otherwise."
(let (org-log-done org-log-states) ; turn off logging
(org-todo (if (= n-not-done 0) "DONE" "TODO"))))
(add-hook 'org-after-todo-statistics-hook 'org-summary-todo)
не будет считать элементы флажка.
* Heading [0/1]
Ответы:
Как вы упомянули в обновленном вопросе,
org-after-todo-statistics-hook
это не то, что вы хотите. То, что вы хотитеorg-checkbox-statistics-hook
.Я использую эту функцию, чтобы сделать то, что вы описываете (они действительно должны включить эту функцию в org-mode):
(add-hook 'org-checkbox-statistics-hook 'my/org-checkbox-todo)
будет ли он вызывать его каждый раз, когда вы переключаете флажок.Для этого требуется, чтобы у вас был файл статистики (то, что вы получаете
[/]
или[%]
затемC-c C-c
) в заголовке.источник
Я хотел версию, которая делает то, что ищет @ctietze - переключение состояния флажка для элементов в контрольном списке. Я попытался позвонить,
org-reset-checkbox-state-subtree
но получил ошибки о слишком много вложенных кадров (я использую Spacemacs).Вот мое рабочее решение:
источник