Commit d6685abc authored by Carsten Dominik's avatar Carsten Dominik
Browse files

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.
parent f088b054
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)
......
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.
;;
......
......@@ -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