W moim pliku Org mam kilka zadań, z których jedno zawiera elementy zaczynające się od pola wyboru (ale tylko te). Wszystkie mają na końcu statystyczny plik cookie ([n / m]).
Szukam sposobu na automatyczną aktualizację zadania nadrzędnego od TODO
do DONE
momentu, gdy wszystkie pola wyboru zostaną oznaczone jako wykonane.
Dokumentacja mówi:
Jeśli chcesz, aby pozycja DO ZROBIENIA automatycznie zmieniała się na GOTOWE, gdy wszystkie dzieci są gotowe, możesz użyć następującej konfiguracji [...]
Inną możliwością jest użycie pól wyboru do identyfikacji (hierarchii) dużej liczby podzadań (patrz Pola wyboru).
Rozumiem, że ostatnia część jest taka, że jeśli elementy potomne są polami wyboru, stan nadrzędny powinien już być automatycznie aktualizowany (co nie jest prawdą).
czego mi brakuje?
Edytować:
Z org-after-todo-statistics-hook
dokumentacji (org.el):
Zaczep wywoływany po zaktualizowaniu pliku cookie statystyk TODO. Każda funkcja jest wywoływana z dwoma argumentami: liczbą niezrealizowanych wpisów i liczbą wykonanych wpisów.
Co oznacza, że proponowany kod z 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)
nie będzie liczyć elementów pola wyboru.
* Heading [0/1]
Odpowiedzi:
Jak wspomniałeś w zaktualizowanym pytaniu,
org-after-todo-statistics-hook
nie jest to, czego chcesz. To czego chceszorg-checkbox-statistics-hook
.Używam tej funkcji do robienia tego, co opisujesz (naprawdę powinni wprowadzić tę funkcję do trybu org):
(add-hook 'org-checkbox-statistics-hook 'my/org-checkbox-todo)
będzie to nazywać za każdym razem, gdy przełączasz pole wyboru.Wymaga to pliku cookie statystyk (rzecz, którą otrzymujesz
[/]
lub[%]
wtedyC-c C-c
) w nagłówku.źródło
Chciałem wersji, która spełnia to, czego szuka @ctietze - przełącz stan pola wyboru dla elementów na liście kontrolnej. Próbowałem zadzwonić,
org-reset-checkbox-state-subtree
ale wystąpiły błędy dotyczące zbyt wielu zagnieżdżonych ramek (używam Spacemac).Oto moje działające rozwiązanie:
źródło