emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to set priority of a heading with the highest one among its children


From: Edouard Debry
Subject: How to set priority of a heading with the highest one among its children
Date: Thu, 20 Apr 2023 13:04:42 +0200
User-agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (Gojō) APEL-LB/10.8 EasyPG/1.0.0 Emacs/30.0.50 (x86_64-w64-mingw32) MULE/6.0 (HANACHIRUSATO)

Given this tree :

* TODO Main [#2]
** DONE Child1 [#0]
** TODO Child2 [#3]
** TODO Child3 [#4]
*** TODO Subchild1 [#1]
*** TODO Subchild2 [#2]

I would like that the priority of parent headings be automatically set to the 
highest
priority among its note done children.

So, in previous example, as soon as Subchild1 priority is set to 1 (0=highest, 
5=lowest),
then priority of Child3 should be replaced by 1 (instead of 4) and priority of 
Main should
also be changed to 1 as this became the priority of its child Child3, but it 
would not
be set to 0, priority of Child1, as this task is done.

The reason for this it that usually a project is a main heading, which is split 
in
subtasks and, I want the overall project priority to reflect the highest 
priority of its
not done tasks.

To do so, I need to create a recursive function :

(adjust-priority ()
  (apply-on-child  #'adjust-priority)
  (set-priority (if-child (collect highest-priority))))

and apply this function to the top level heading whenever a change in priority 
occurs in
its children.

But this involves org skills a bit beyond my understanding, I wonder if you 
could give
me some piece of advices on how to do that :
- is there a suitable hook for this function ?
- when in a given tree, how can I select the top level heading ?
- when at a given heading, how can I change programmatically the priority ?

For this latter question, I tried (org-entry-put nil "PRIORITY" "2"), but it 
replied that

 org-priority: Priority must be between ‘0’ and ‘5’


Regards



reply via email to

[Prev in Thread] Current Thread [Next in Thread]