Има ли някакъв начин подзадачите да наследяват крайни срокове в организационен режим?

Би било наистина удобно, ако за определени задачи в организационен режим подзадачите могат да наследят крайния срок на основната задача. Това поведение трябва да възникне в случай, че вече не съм посочил краен срок за подзадачата. По този начин всички подзадачи ще се покажат в изгледа на моя организационен дневен ред с подходящи крайни срокове, които лесно могат да се манипулират.


person vedang    schedule 02.02.2011    source източник


Отговори (6)


Какво ще кажете за функция за добавяне на подзадачи? Този добавя краен срок към подзадачата, ако нейният родител има такъв:

(defun my-org-insert-sub-task ()
  (interactive)
  (let ((parent-deadline (org-get-deadline-time nil)))
    (org-goto-sibling)
    (org-insert-todo-subheading t)
    (when parent-deadline
      (org-deadline nil parent-deadline))))

Не забравяйте да го свържете с ключ:

(define-key org-mode-map (kbd "C-c s") 'my-org-insert-sub-task)

Също така може да намерите тези настройки за полезни:

(setq org-enforce-todo-dependencies t)
(setq org-agenda-dim-blocked-tasks 'invisible)
person Joe Snikeris    schedule 19.01.2012
comment
:) различен подход към проблема! Не използвам свързване на клавиши за добавяне на задачи, просто ги добавям, като ги записвам във файла. Не знам дали мога да се откажа от този навик, когато опитам това, но със сигурност ще опитам. Благодаря. - person vedang; 20.01.2012
comment
Ако не можете да намерите начин да разрешите проблем, измислете нов проблем, който можете да разрешите! ;) - person Daniel Dinnyes; 13.01.2021

Наскоро този въпрос беше зададен и получи отговор в пощенския списък за организационен режим. Добавям тази дискусия тук с надеждата, че някой ще я намери за полезна:

http://article.gmane.org/gmane.emacs.orgmode/49215

Добавих този код в моя .emacs в този комит:

https://github.com/vedang/emacs-config/commit/1cb6c774a991d50853134d8085ca61dd12585993

person vedang    schedule 11.04.2012
comment
Това изглежда страхотно, но изглежда не работи за мен, тъй като org-entry-get-with-inheritance изглежда не може да получи специални свойства като DEADLINE... - person David Glasser; 13.09.2015

Ето съвет, който работи за последните версии на Org 9, за разлика от предишния ми отговор, който спря да работи в даден момент.

(defun org-entry-properties-inherit-deadline (orig-fun &optional pom which)
  "Call ORIG-FUN with POM, but if WHICH is `DEADLINE' do it recursively."

  (if (string= which "DEADLINE")
      (org-with-point-at pom
        (let (value)
          (while (not (or (setq value (funcall orig-fun (point) which))
                          (not (org-up-heading-safe)))))
          value)
    (funcall orig-fun pom which))))
(advice-add 'org-entry-properties :around #'org-entry-properties-inherit-deadline)
person Michael Hoffman    schedule 05.07.2018

DEADLINE е едно от тези свойства, които не се наследяват по подразбиране. Можете да промените това, като персонализирате променливата org-use-property-inheritance

person Manuel Batsching    schedule 10.08.2011
comment
Това не работи. Зададох стойността на org-use-property-inheritance на t и когато това не проработи, я зададох на ("DEADLINE"). Свойството за краен срок обаче не се наследява (не се отразява в моята организационна програма). - person vedang; 10.08.2011
comment
Прав сте, елементи с наследено свойство DEADLINE не се показват в дневния ред. Не знам как да променя това. Но те се показват в специален TODO списък, ако искате. (Можете да опитате това, за да видите дали наследяването работи.) Натиснете M-x org-tags-view и ограничете търсенето до нещо като DEADLINE<="<2011-09-01>". - person Manuel Batsching; 14.08.2011

Друг подход е да използвате org-agenda-bulk-action в org-agenda-mode.

  1. Дефинирайте stuck-projects като TODO заглавия, които все още нямат краен срок и все още не са планирани: Дефиниране на непланирани задачи като блокирани проекти в Emacs Org-Mode
  2. M-x org-agenda-list-stuck-projects. Това ще покаже списък със TODO заглавия без краен срок.
  3. m, за да маркирате записите, към които искате да добавите краен срок.
  4. B за извикване на org-agenda-bulk-action.
  5. d, за да зададете един краен срок за всички тях.
person incandescentman    schedule 13.05.2014

Org-mode има способността да наследява тагове като крайни срокове, но по подразбиране org-entry-get не го прави. Ето съвет, за да гарантирате, че DEADLINE винаги се наследява.

(defvar inherit-override nil)
(defun org-entry-get-inherit-deadline (orig-fun pom property &optional inherit &rest args)
  "Call ORIG-FUN with POM, but if PROPERTY is `DEADLINE', set INHERIT.

Passes through remaining ARGS.

Sets inherit-override variable which stops infinite loops."
  (when (and (eq inherit nil)
             (string= property "DEADLINE")
             (not inherit-override))
    (setq inherit t))
  (let ((inherit-override t))
    (apply orig-fun pom property inherit args)))

(advice-add 'org-entry-get :around #'org-entry-get-inherit-deadline)
person Michael Hoffman    schedule 23.04.2018
comment
Мисля, че това работи през Org 8, но не и за Org 9. - person Michael Hoffman; 05.07.2018
comment
да, изглежда не работи в 9.4 - person Daniel Dinnyes; 13.01.2021