J'ai plusieurs tâches dans mon fichier Org, dont l'une contient des éléments commençant par une case à cocher (mais uniquement ceux-ci). Ils ont tous un cookie statistique à leur fin ([n / m]).
Je cherche un moyen de mettre à jour automatiquement la tâche parent de TODO
à DONE
une fois que toutes les cases à cocher sont également marquées comme terminées.
La documentation dit:
Si vous souhaitez qu'une entrée TODO passe automatiquement à DONE lorsque tous les enfants ont terminé, vous pouvez utiliser la configuration suivante [...]
Une autre possibilité est l'utilisation de cases à cocher pour identifier (une hiérarchie de) un grand nombre de sous-tâches (voir Cases à cocher).
La façon dont je comprends cette dernière partie est que si les éléments enfants sont des cases à cocher, l'état parent doit déjà être automatiquement mis à jour (ce qui n'est pas le cas).
Qu'est-ce que je rate?
Éditer:
À partir de org-after-todo-statistics-hook
la documentation (org.el):
Hook appelé après la mise à jour d'un cookie de statistiques TODO. Chaque fonction est appelée avec deux arguments: le nombre d'entrées non terminées et le nombre d'entrées terminées.
Ce qui signifie que le code proposé par 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)
ne comptera pas les éléments des cases à cocher.
* Heading [0/1]
Réponses:
Comme vous l'avez mentionné dans votre question mise à jour, ce
org-after-todo-statistics-hook
n'est pas ce que vous voulez. Ce que tu veux c'estorg-checkbox-statistics-hook
.J'utilise cette fonction pour faire ce que vous décrivez (ils devraient vraiment mettre cette fonctionnalité en mode org):
(add-hook 'org-checkbox-statistics-hook 'my/org-checkbox-todo)
l'appellera-t-il chaque fois que vous basculerez une case à cocher.Cela nécessite que vous ayez un cookie de statistiques (la chose que vous obtenez avec
[/]
ou[%]
ensuiteC-c C-c
) dans l'en-tête.la source
Je voulais une version qui fasse ce que @ctietze recherche - basculer l'état de la case à cocher pour les éléments de la liste de contrôle. J'ai essayé d'appeler
org-reset-checkbox-state-subtree
mais j'ai eu des erreurs concernant trop de trames imbriquées (j'utilise Spacemacs).Voici ma solution de travail:
la source