2009-01-28 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-agenda-get-todos): Start search from correct position. * org.el (org-fast-todo-selection): Make sure TODO selection does not change buffer position. * org-list.el (org-toggle-checkbox): Implement adding or removing checkboxes from line or region when called with a prefix argument. * org-rmail.el (org-rmail-store-link): Protect the call to `rmail-narrow-to-non-pruned-header'. * org-clock.el (org-clock-special-range): Fix week display in clock tables. * org-exp.el (org-get-current-options): Fix bug when in indirect buffer. * org-agenda.el (org-agenda-dim-blocked-tasks): New option. (org-finalize-agenda): Call `org-agenda-dim-blocked-tasks'. (org-agenda-dim-blocked-tasks): New function. * org.el (org-enforce-todo-dependencies): New option. (org-block-todo-from-children-or-siblings): New function. * org-faces.el (org-agenda-dimmed-todo-face): New face.
This commit is contained in:
parent
f088b05476
commit
d6685abc9e
35 changed files with 314 additions and 126 deletions
|
@ -1,3 +1,7 @@
|
|||
2009-01-28 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org.texi (TODO dependencies): New section.
|
||||
|
||||
2009-01-27 Carsten Dominik <dominik@science.uva.nl>
|
||||
|
||||
* org.texi (Plain lists, TODO basics, Priorities)
|
||||
|
|
|
@ -1,3 +1,33 @@
|
|||
2009-01-28 Carsten Dominik <carsten.dominik@gmail.com>
|
||||
|
||||
* org-agenda.el (org-agenda-get-todos): Start search from correct
|
||||
position.
|
||||
|
||||
* org.el (org-fast-todo-selection): Make sure TODO selection does
|
||||
not change buffer position.
|
||||
|
||||
* org-list.el (org-toggle-checkbox): Implement adding or removing
|
||||
checkboxes from line or region when called with a prefix
|
||||
argument.
|
||||
|
||||
* org-rmail.el (org-rmail-store-link): Protect the call to
|
||||
`rmail-narrow-to-non-pruned-header'.
|
||||
|
||||
* org-clock.el (org-clock-special-range): Fix week display in
|
||||
clock tables.
|
||||
|
||||
* org-exp.el (org-get-current-options): Fix bug when in indirect
|
||||
buffer.
|
||||
|
||||
* org-agenda.el (org-agenda-dim-blocked-tasks): New option.
|
||||
(org-finalize-agenda): Call `org-agenda-dim-blocked-tasks'.
|
||||
(org-agenda-dim-blocked-tasks): New function.
|
||||
|
||||
* org.el (org-enforce-todo-dependencies): New option.
|
||||
(org-block-todo-from-children-or-siblings): New function.
|
||||
|
||||
* org-faces.el (org-agenda-dimmed-todo-face): New face.
|
||||
|
||||
2009-01-27 Carsten Dominik <carsten.dominik@gmail.com>
|
||||
|
||||
* org.el (org-todo): Return correct state type even if the blocker
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -513,6 +513,21 @@ deadlines are always turned off when the item is DONE."
|
|||
:group 'org-agenda-daily/weekly
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom org-agenda-dim-blocked-tasks t
|
||||
"Non-nil means, dim blocked tasks in the agenda display.
|
||||
This causes some overhead during agenda construction, but if you have turned
|
||||
on `org-enforce-todo-dependencies' or any other blocking mechanism, this
|
||||
will create useful feedback in the agenda.
|
||||
Instead ot t, this variable can also have the value `invisible'. Then
|
||||
blocked tasks will be invisible and only become visible when they
|
||||
become unblocked."
|
||||
:group 'org-agenda-daily/weekly
|
||||
:group 'org-agenda-todo-list
|
||||
:type '(choice
|
||||
(const :tag "Do not dim" nil)
|
||||
(const :tag "Dim to a grey face" t)
|
||||
(const :tag "Make invisibe" invisible)))
|
||||
|
||||
(defcustom org-timeline-show-empty-dates 3
|
||||
"Non-nil means, `org-timeline' also shows dates without an entry.
|
||||
When nil, only the days which actually have entries are shown.
|
||||
|
@ -2132,6 +2147,8 @@ VALUE defaults to t."
|
|||
(org-agenda-columns))
|
||||
(when org-agenda-fontify-priorities
|
||||
(org-fontify-priorities))
|
||||
(when (and org-agenda-dim-blocked-tasks org-blocker-hook)
|
||||
(org-agenda-dim-blocked-tasks))
|
||||
(run-hooks 'org-finalize-agenda-hook)
|
||||
(setq org-agenda-type (get-text-property (point) 'org-agenda-type))
|
||||
)))
|
||||
|
@ -2162,6 +2179,36 @@ VALUE defaults to t."
|
|||
((equal p h) 'bold)))
|
||||
(org-overlay-put ov 'org-type 'org-priority)))))
|
||||
|
||||
(defun org-agenda-dim-blocked-tasks ()
|
||||
"Dim currently blocked TODO's in the agenda display."
|
||||
(mapc (lambda (o) (if (eq (org-overlay-get o 'org-type) 'org-blocked-todo)
|
||||
(org-delete-overlay o)))
|
||||
(org-overlays-in (point-min) (point-max)))
|
||||
(save-excursion
|
||||
(let ((inhibit-read-only t)
|
||||
(invis (eq org-agenda-dim-blocked-tasks 'invisible))
|
||||
b e p ov h l)
|
||||
(goto-char (point-min))
|
||||
(while (let ((pos (next-single-property-change (point) 'todo-state)))
|
||||
(and pos (goto-char (1+ pos))))
|
||||
(let ((marker (get-text-property (point) 'org-hd-marker)))
|
||||
(when (and marker
|
||||
(not (with-current-buffer (marker-buffer marker)
|
||||
(save-excursion
|
||||
(goto-char marker)
|
||||
(run-hook-with-args-until-failure
|
||||
'org-blocker-hook
|
||||
(list :type 'todo-state-change
|
||||
:position marker
|
||||
:from 'todo
|
||||
:to 'done))))))
|
||||
(setq b (if invis (max (point-min) (1- (point))) (point))
|
||||
e (point-at-eol)
|
||||
ov (org-make-overlay b e))
|
||||
(if invis
|
||||
(org-overlay-put ov 'invisible t)
|
||||
(org-overlay-put ov 'face 'org-agenda-dimmed-todo-face))
|
||||
(org-overlay-put ov 'org-type 'org-blocked-todo)))))))
|
||||
|
||||
(defvar org-agenda-skip-function nil
|
||||
"Function to be called at each match during agenda construction.
|
||||
|
@ -3272,7 +3319,7 @@ the documentation of `org-diary'."
|
|||
(catch :skip
|
||||
(save-match-data
|
||||
(beginning-of-line)
|
||||
(setq beg (point) end (progn (outline-next-heading) (point)))
|
||||
(setq beg (point) end (save-excursion (outline-next-heading) (point)))
|
||||
(when (org-agenda-check-for-timestamp-as-reason-to-ignore-todo-item end)
|
||||
(goto-char (1+ beg))
|
||||
(or org-agenda-todo-list-sublevels (org-end-of-subtree 'invisible))
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
;; Author: John Wiegley <johnw@newartisans.com>
|
||||
;; Keywords: org data task
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;; Thomas Baumann <thomas dot baumann at ch dot tum dot de>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Bastien Guerry <bzg at altern dot org>
|
||||
;; Carsten Dominik <carsten dot dominik at gmail dot com>
|
||||
;; Keywords: org, wp, remember
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -724,6 +724,7 @@ the returned times will be formatted strings."
|
|||
(setq date (calendar-gregorian-from-absolute
|
||||
(calendar-absolute-from-iso (list w 1 y))))
|
||||
(setq d (nth 1 date) month (car date) y (nth 2 date)
|
||||
dow 1
|
||||
key 'week))
|
||||
((string-match "^\\([0-9]+\\)-\\([0-9]\\{1,2\\}\\)-\\([0-9]\\{1,2\\}\\)$" skey)
|
||||
(setq y (string-to-number (match-string 1 skey))
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -3031,7 +3031,10 @@ Does include HTML export options as well as TODO and CATEGORY stuff."
|
|||
(mapconcat 'identity org-export-exclude-tags " ")
|
||||
org-export-html-link-up
|
||||
org-export-html-link-home
|
||||
(file-name-nondirectory buffer-file-name)
|
||||
(or (ignore-errors
|
||||
(file-name-sans-extension
|
||||
(file-name-nondirectory (buffer-file-name (buffer-base-buffer)))))
|
||||
"NOFILENAME")
|
||||
"TODO FEEDBACK VERIFY DONE"
|
||||
"Me Jason Marie DONE"
|
||||
org-highest-priority org-lowest-priority org-default-priority
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
;;
|
||||
;; Emacs Lisp Archive Entry
|
||||
;; Filename: org-export-latex.el
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;; Author: Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Keywords: org, wp, tex
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -400,15 +400,15 @@ changes."
|
|||
(defface org-clock-overlay ;; copied from secondary-selection
|
||||
(org-compatible-face nil
|
||||
'((((class color) (min-colors 88) (background light))
|
||||
:background "yellow1")
|
||||
(:background "yellow1"))
|
||||
(((class color) (min-colors 88) (background dark))
|
||||
:background "SkyBlue4")
|
||||
(:background "SkyBlue4"))
|
||||
(((class color) (min-colors 16) (background light))
|
||||
:background "yellow")
|
||||
(:background "yellow"))
|
||||
(((class color) (min-colors 16) (background dark))
|
||||
:background "SkyBlue4")
|
||||
(:background "SkyBlue4"))
|
||||
(((class color) (min-colors 8))
|
||||
:background "cyan" :foreground "black")
|
||||
(:background "cyan" :foreground "black"))
|
||||
(t (:inverse-video t))))
|
||||
"Basic face for displaying the secondary selection."
|
||||
:group 'org-faces)
|
||||
|
@ -456,6 +456,11 @@ belong to the weekend.")
|
|||
"Face for items scheduled for a certain day."
|
||||
:group 'org-faces)
|
||||
|
||||
(defface org-agenda-dimmed-todo-face
|
||||
'((((background light)) (:foreground "grey50"))
|
||||
(((background dark)) (:foreground "grey50")))
|
||||
"Face used to dimm blocked tasks in the agenda."
|
||||
:group 'org-faces)
|
||||
|
||||
(defface org-scheduled-previously
|
||||
(org-compatible-face nil
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;; Tassilo Horn <tassilo at member dot fsf dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
;;
|
||||
;; Author: Philip Jackson <emacs@shellarchive.co.uk>
|
||||
;; Keywords: erc, irc, link, org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
;; Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -248,11 +248,15 @@ Return t when things worked, nil when we are not in an item."
|
|||
(skip-chars-forward " \t")
|
||||
(looking-at "\\[[- X]\\]"))))
|
||||
|
||||
(defun org-toggle-checkbox (&optional arg)
|
||||
"Toggle the checkbox in the current line."
|
||||
(defun org-toggle-checkbox (&optional toggle-presence)
|
||||
"Toggle the checkbox in the current line.
|
||||
With prefix arg TOGGLE-PRESENCE, add or remove checkboxes.
|
||||
When there is an active region, toggle status or presence of the checkbox
|
||||
in the first line, and make every item in the region have the same
|
||||
status or precence, respectively."
|
||||
(interactive "P")
|
||||
(catch 'exit
|
||||
(let (beg end status (firstnew 'unknown))
|
||||
(let (beg end status first-present first-status)
|
||||
(cond
|
||||
((org-region-active-p)
|
||||
(setq beg (region-beginning) end (region-end)))
|
||||
|
@ -260,23 +264,46 @@ Return t when things worked, nil when we are not in an item."
|
|||
(setq beg (point) end (save-excursion (outline-next-heading) (point))))
|
||||
((org-at-item-checkbox-p)
|
||||
(let ((pos (point)))
|
||||
(replace-match
|
||||
(cond (arg "[-]")
|
||||
((member (match-string 0) '("[ ]" "[-]")) "[X]")
|
||||
(t "[ ]"))
|
||||
t t)
|
||||
(if toggle-presence
|
||||
(progn
|
||||
(replace-match "")
|
||||
(goto-char (match-beginning 0))
|
||||
(just-one-space))
|
||||
(replace-match
|
||||
(cond ((member (match-string 0) '("[ ]" "[-]")) "[X]")
|
||||
(t "[ ]"))
|
||||
t t))
|
||||
(goto-char pos))
|
||||
(throw 'exit t))
|
||||
((org-at-item-p)
|
||||
;; add a checkbox
|
||||
(save-excursion
|
||||
(goto-char (match-end 0))
|
||||
(insert "[ ] "))
|
||||
(throw 'exit t))
|
||||
(t (error "Not at a checkbox or heading, and no active region")))
|
||||
(setq end (move-marker (make-marker) end))
|
||||
(save-excursion
|
||||
(goto-char beg)
|
||||
(setq first-present (org-at-item-checkbox-p)
|
||||
first-status (and first-present (equal (match-string 0) "[X]")))
|
||||
(while (< (point) end)
|
||||
(when (org-at-item-checkbox-p)
|
||||
(setq status (equal (match-string 0) "[X]"))
|
||||
(when (eq firstnew 'unknown)
|
||||
(setq firstnew (not status)))
|
||||
(replace-match
|
||||
(if (if arg (not status) firstnew) "[X]" "[ ]") t t))
|
||||
(if toggle-presence
|
||||
(cond
|
||||
((and first-present (org-at-item-checkbox-p))
|
||||
(save-excursion
|
||||
(replace-match "")
|
||||
(goto-char (match-beginning 0))
|
||||
(just-one-space)))
|
||||
((and (not first-present) (not (org-at-item-checkbox-p))
|
||||
(org-at-item-p))
|
||||
(save-excursion
|
||||
(goto-char (match-end 0))
|
||||
(insert "[ ] "))))
|
||||
(when (org-at-item-checkbox-p)
|
||||
(setq status (equal (match-string 0) "[X]"))
|
||||
(replace-match
|
||||
(if first-status "[ ]" "[X]") t t)))
|
||||
(beginning-of-line 2)))))
|
||||
(org-update-checkbox-count-maybe))
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: John Wiegley <johnw@gnu.org>
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Tokuya Kameshima <kames at fa2 dot so-net dot ne dot jp>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Thomas Baumann <thomas dot baumann at ch dot tum dot de>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
;;
|
||||
;; Author: Piotr Zielinski <piotr dot zielinski at gmail dot com>
|
||||
;; Maintainer: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Eric Schulte <schulte dot eric at gmail dot com>
|
||||
;; Keywords: tables, plotting
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
;; Author: David O'Toole <dto@gnu.org>
|
||||
;; Maintainer: Bastien Guerry <bzg AT altern DOT org>
|
||||
;; Keywords: hypermedia, outlines, wp
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -52,7 +52,8 @@
|
|||
(save-restriction
|
||||
(when (eq major-mode 'rmail-summary-mode)
|
||||
(rmail-show-message rmail-current-message))
|
||||
(rmail-narrow-to-non-pruned-header)
|
||||
(when (fboundp 'rmail-narrow-to-non-pruned-header)
|
||||
(rmail-narrow-to-non-pruned-header))
|
||||
(let* ((folder buffer-file-name)
|
||||
(message-id (mail-fetch-field "message-id"))
|
||||
(from (mail-fetch-field "from"))
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
;; Author: Andy Stewart <lazycat dot manatee at gmail dot com>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;; Author: Tokuya Kameshima <kames at fa2 dot so-net dot ne dot jp>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
|
214
lisp/org/org.el
214
lisp/org/org.el
|
@ -6,7 +6,7 @@
|
|||
;; Author: Carsten Dominik <carsten at orgmode dot org>
|
||||
;; Keywords: outlines, hypermedia, calendar, wp
|
||||
;; Homepage: http://orgmode.org
|
||||
;; Version: 6.19e
|
||||
;; Version: 6.20c
|
||||
;;
|
||||
;; This file is part of GNU Emacs.
|
||||
;;
|
||||
|
@ -94,7 +94,7 @@
|
|||
|
||||
;;; Version
|
||||
|
||||
(defconst org-version "6.19e"
|
||||
(defconst org-version "6.20c"
|
||||
"The version number of the file org.el.")
|
||||
|
||||
(defun org-version (&optional here)
|
||||
|
@ -1603,6 +1603,49 @@ Lisp variable `state'."
|
|||
:group 'org-todo
|
||||
:type 'hook)
|
||||
|
||||
(defvar org-blocker-hook nil
|
||||
"Hook for functions that are allowed to block a state change.
|
||||
|
||||
Each function gets as its single argument a property list, see
|
||||
`org-trigger-hook' for more information about this list.
|
||||
|
||||
If any of the functions in this hook returns nil, the state change
|
||||
is blocked.")
|
||||
|
||||
(defvar org-trigger-hook nil
|
||||
"Hook for functions that are triggered by a state change.
|
||||
|
||||
Each function gets as its single argument a property list with at least
|
||||
the following elements:
|
||||
|
||||
(:type type-of-change :position pos-at-entry-start
|
||||
:from old-state :to new-state)
|
||||
|
||||
Depending on the type, more properties may be present.
|
||||
|
||||
This mechanism is currently implemented for:
|
||||
|
||||
TODO state changes
|
||||
------------------
|
||||
:type todo-state-change
|
||||
:from previous state (keyword as a string), or nil, or a symbol
|
||||
'todo' or 'done', to indicate the general type of state.
|
||||
:to new state, like in :from")
|
||||
|
||||
(defcustom org-enforce-todo-dependencies nil
|
||||
"Non-nil means, undone TODO entries will block switching the parent to DONE.
|
||||
Also, if a parent has an :ORDERED: property, switching an entry to DONE will
|
||||
be blocked if any prior sibling is not yet done.
|
||||
You need to set this variable through the customize interface, or to
|
||||
restart emacs after changing the value."
|
||||
:set (lambda (var val)
|
||||
(set var val)
|
||||
(if val
|
||||
(add-hook 'org-blocker-hook 'org-block-todo-from-children-or-siblings)
|
||||
(remove-hook 'org-blocker-hook 'org-block-todo-from-children-or-siblings)))
|
||||
:group 'org-todo
|
||||
:type 'boolean)
|
||||
|
||||
(defcustom org-todo-state-tags-triggers nil
|
||||
"Tag changes that should be triggered by TODO state changes.
|
||||
This is a list. Each entry is
|
||||
|
@ -8272,34 +8315,6 @@ this is nil.")
|
|||
(push (nth 2 e) rtn)))
|
||||
rtn)))))
|
||||
|
||||
(defvar org-blocker-hook nil
|
||||
"Hook for functions that are allowed to block a state change.
|
||||
|
||||
Each function gets as its single argument a property list, see
|
||||
`org-trigger-hook' for more information about this list.
|
||||
|
||||
If any of the functions in this hook returns nil, the state change
|
||||
is blocked.")
|
||||
|
||||
(defvar org-trigger-hook nil
|
||||
"Hook for functions that are triggered by a state change.
|
||||
|
||||
Each function gets as its single argument a property list with at least
|
||||
the following elements:
|
||||
|
||||
(:type type-of-change :position pos-at-entry-start
|
||||
:from old-state :to new-state)
|
||||
|
||||
Depending on the type, more properties may be present.
|
||||
|
||||
This mechanism is currently implemented for:
|
||||
|
||||
TODO state changes
|
||||
------------------
|
||||
:type todo-state-change
|
||||
:from previous state (keyword as a string), or nil
|
||||
:to new state (keyword as a string), or nil")
|
||||
|
||||
(defvar org-agenda-headline-snapshot-before-repeat)
|
||||
(defun org-todo (&optional arg)
|
||||
"Change the TODO state of an item.
|
||||
|
@ -8492,6 +8507,60 @@ For calling through lisp, arg is also interpreted in the following way:
|
|||
(save-excursion
|
||||
(run-hook-with-args 'org-trigger-hook change-plist)))))))
|
||||
|
||||
(defun org-block-todo-from-children-or-siblings (change-plist)
|
||||
"Block turning an entry into a TODO, using the hierarchy.
|
||||
This checks whether the current task should be blocked from state
|
||||
changes. Such blocking occurs when:
|
||||
|
||||
1. The task has children which are not all in a completed state.
|
||||
|
||||
2. A task has a parent with the property :ORDERED:, and there
|
||||
are siblings prior to the current task with incomplete
|
||||
status."
|
||||
(catch 'dont-block
|
||||
;; If this is not a todo state change, or if this entry is already DONE,
|
||||
;; do not block
|
||||
(when (or (not (eq (plist-get change-plist :type) 'todo-state-change))
|
||||
(member (plist-get change-plist :from)
|
||||
(cons 'done org-done-keywords)))
|
||||
(throw 'dont-block t))
|
||||
;; If this task has children, and any are undone, it's blocked
|
||||
(save-excursion
|
||||
(org-back-to-heading t)
|
||||
(let ((this-level (funcall outline-level)))
|
||||
(outline-next-heading)
|
||||
(let ((child-level (funcall outline-level)))
|
||||
(while (and (not (eobp))
|
||||
(> child-level this-level))
|
||||
;; this todo has children, check whether they are all
|
||||
;; completed
|
||||
(if (and (not (org-entry-is-done-p))
|
||||
(org-entry-is-todo-p))
|
||||
(throw 'dont-block nil))
|
||||
(outline-next-heading)
|
||||
(setq child-level (funcall outline-level))))))
|
||||
;; Otherwise, if the task's parent has the :ORDERED: property, and
|
||||
;; any previous siblings are undone, it's blocked
|
||||
(save-excursion
|
||||
(org-back-to-heading t)
|
||||
(when (save-excursion
|
||||
(ignore-errors
|
||||
(outline-up-heading 1)
|
||||
(org-entry-get (point) "ORDERED")))
|
||||
(let* ((this-level (funcall outline-level))
|
||||
(current-level this-level))
|
||||
(while (and (not (bobp))
|
||||
(= current-level this-level))
|
||||
(outline-previous-heading)
|
||||
(setq current-level (funcall outline-level))
|
||||
(if (= current-level this-level)
|
||||
;; this todo has children, check whether they are all
|
||||
;; completed
|
||||
(if (and (not (org-entry-is-done-p))
|
||||
(org-entry-is-todo-p))
|
||||
(throw 'dont-block nil)))))))
|
||||
t)) ; don't block
|
||||
|
||||
(defun org-update-parent-todo-statistics ()
|
||||
"Update any statistics cookie in the parent of the current headline."
|
||||
(interactive)
|
||||
|
@ -8599,49 +8668,50 @@ Returns the new TODO keyword, or nil if no state change should occur."
|
|||
(ncol (/ (- (window-width) 4) fwidth))
|
||||
tg cnt e c tbl
|
||||
groups ingroup)
|
||||
(save-window-excursion
|
||||
(if expert
|
||||
(set-buffer (get-buffer-create " *Org todo*"))
|
||||
(org-switch-to-buffer-other-window (get-buffer-create " *Org todo*")))
|
||||
(erase-buffer)
|
||||
(org-set-local 'org-done-keywords done-keywords)
|
||||
(setq tbl fulltable cnt 0)
|
||||
(while (setq e (pop tbl))
|
||||
(save-excursion
|
||||
(save-window-excursion
|
||||
(if expert
|
||||
(set-buffer (get-buffer-create " *Org todo*"))
|
||||
(org-switch-to-buffer-other-window (get-buffer-create " *Org todo*")))
|
||||
(erase-buffer)
|
||||
(org-set-local 'org-done-keywords done-keywords)
|
||||
(setq tbl fulltable cnt 0)
|
||||
(while (setq e (pop tbl))
|
||||
(cond
|
||||
((equal e '(:startgroup))
|
||||
(push '() groups) (setq ingroup t)
|
||||
(when (not (= cnt 0))
|
||||
(setq cnt 0)
|
||||
(insert "\n"))
|
||||
(insert "{ "))
|
||||
((equal e '(:endgroup))
|
||||
(setq ingroup nil cnt 0)
|
||||
(insert "}\n"))
|
||||
(t
|
||||
(setq tg (car e) c (cdr e))
|
||||
(if ingroup (push tg (car groups)))
|
||||
(setq tg (org-add-props tg nil 'face
|
||||
(org-get-todo-face tg)))
|
||||
(if (and (= cnt 0) (not ingroup)) (insert " "))
|
||||
(insert "[" c "] " tg (make-string
|
||||
(- fwidth 4 (length tg)) ?\ ))
|
||||
(when (= (setq cnt (1+ cnt)) ncol)
|
||||
(insert "\n")
|
||||
(if ingroup (insert " "))
|
||||
(setq cnt 0)))))
|
||||
(insert "\n")
|
||||
(goto-char (point-min))
|
||||
(if (not expert) (org-fit-window-to-buffer))
|
||||
(message "[a-z..]:Set [SPC]:clear")
|
||||
(setq c (let ((inhibit-quit t)) (read-char-exclusive)))
|
||||
(cond
|
||||
((equal e '(:startgroup))
|
||||
(push '() groups) (setq ingroup t)
|
||||
(when (not (= cnt 0))
|
||||
(setq cnt 0)
|
||||
(insert "\n"))
|
||||
(insert "{ "))
|
||||
((equal e '(:endgroup))
|
||||
(setq ingroup nil cnt 0)
|
||||
(insert "}\n"))
|
||||
(t
|
||||
(setq tg (car e) c (cdr e))
|
||||
(if ingroup (push tg (car groups)))
|
||||
(setq tg (org-add-props tg nil 'face
|
||||
(org-get-todo-face tg)))
|
||||
(if (and (= cnt 0) (not ingroup)) (insert " "))
|
||||
(insert "[" c "] " tg (make-string
|
||||
(- fwidth 4 (length tg)) ?\ ))
|
||||
(when (= (setq cnt (1+ cnt)) ncol)
|
||||
(insert "\n")
|
||||
(if ingroup (insert " "))
|
||||
(setq cnt 0)))))
|
||||
(insert "\n")
|
||||
(goto-char (point-min))
|
||||
(if (not expert) (org-fit-window-to-buffer))
|
||||
(message "[a-z..]:Set [SPC]:clear")
|
||||
(setq c (let ((inhibit-quit t)) (read-char-exclusive)))
|
||||
(cond
|
||||
((or (= c ?\C-g)
|
||||
(and (= c ?q) (not (rassoc c fulltable))))
|
||||
(setq quit-flag t))
|
||||
((= c ?\ ) nil)
|
||||
((setq e (rassoc c fulltable) tg (car e))
|
||||
tg)
|
||||
(t (setq quit-flag t))))))
|
||||
((or (= c ?\C-g)
|
||||
(and (= c ?q) (not (rassoc c fulltable))))
|
||||
(setq quit-flag t))
|
||||
((= c ?\ ) nil)
|
||||
((setq e (rassoc c fulltable) tg (car e))
|
||||
tg)
|
||||
(t (setq quit-flag t)))))))
|
||||
|
||||
(defun org-entry-is-todo-p ()
|
||||
(member (org-get-todo-state) org-not-done-keywords))
|
||||
|
|
Loading…
Add table
Reference in a new issue