TODO entries: Control over when selecting a state is treated as state change.

This commit introduces two new variables:

- org-treat-insert-todo-heading-as-state-change

  Default is nil.  When set to t, adding a new TODO item will be done
  by adding an item and the executing an "official" state change which
  potentially will trigger state logging.

- org-treat-S-cursor-todo-seletion-as-state-change

  Default is t.  When set to nil, selecting a TODO state with
  S-left/right will not trigger logging, only selecting a new state
  with `C-c C-t'.  I actually like this a lot and would even consider
  making this the default.
This commit is contained in:
Carsten Dominik 2009-05-27 18:54:44 +02:00
parent ca79257ca6
commit a18546c360
4 changed files with 50 additions and 5 deletions

View File

@ -1,3 +1,8 @@
2009-05-27 Carsten Dominik <carsten.dominik@gmail.com>
* org.texi (Structure editing, TODO basics): Document new
variables.
2009-05-21 Carsten Dominik <carsten.dominik@gmail.com>
* org.texi (Column attributes): Document new colciew operators.

View File

@ -958,7 +958,9 @@ current heading, the new heading is placed after the body instead of before
it. This command works from anywhere in the entry.
@kindex M-S-@key{RET}
@item M-S-@key{RET}
Insert new TODO entry with same level as current heading.
@vindex org-treat-insert-todo-heading-as-state-change
Insert new TODO entry with same level as current heading. See also the
variable @code{org-treat-insert-todo-heading-as-state-change}.
@kindex C-S-@key{RET}
@item C-S-@key{RET}
Insert new TODO entry with same level as current heading. Like
@ -3193,12 +3195,14 @@ more information.
@kindex S-@key{right}
@kindex S-@key{left}
@vindex org-treat-S-cursor-todo-seletion-as-state-change
@item S-@key{right}
@itemx S-@key{left}
Select the following/preceding TODO state, similar to cycling. Useful
mostly if more than two TODO states are possible (@pxref{TODO
extensions}). See also @ref{Conflicts} for a discussion of the interaction
with @code{shift-selection-mode}.
with @code{shift-selection-mode}. See also the variable
@code{org-treat-S-cursor-todo-seletion-as-state-change}.
@kindex C-c C-v
@kindex C-c / t
@cindex sparse tree, for TODO

View File

@ -1,3 +1,14 @@
2009-05-27 Carsten Dominik <carsten.dominik@gmail.com>
* org.el (org-treat-insert-todo-heading-as-state-change)
(org-treat-S-cursor-todo-seletion-as-state-change): New
variables.
(org-insert-todo-heading): Honor
`org-treat-insert-todo-heading-as-state-change'.
(org-shiftright, org-shiftleft): Honor
`org-treat-S-cursor-todo-seletion-as-state-change'.
(org-inhibit-logging): New variable.
2009-05-23 Carsten Dominik <carsten.dominik@gmail.com>
* org-agenda.el (org-remove-subtree-entries-from-agenda): Reduce

View File

@ -1817,6 +1817,22 @@ to change is while Emacs is running is through the customize interface."
:group 'org-todo
:type 'boolean)
(defcustom org-treat-insert-todo-heading-as-state-change nil
"Non-nil means, inserting a TODO heading is treated as state change.
So when the command \\[org-insert-todo-heading] is used, state change
logging will apply if appropriate. When nil, the new TODO item will
be inserted directly, and no logging will take place."
:group 'org-todo
:type 'boolean)
(defcustom org-treat-S-cursor-todo-seletion-as-state-change t
"Non-nil means, switching TODO states with S-cursor counts as state change.
This is the default behavior. However, setting this to nil allows a
convenient way to select a TODO state and bypass any logging associated
with that."
: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
@ -3811,6 +3827,7 @@ This variable is set by `org-before-change-function'.
"Mode hook for Org-mode, run after the mode was turned on.")
(defvar org-inhibit-startup nil) ; Dynamically-scoped param.
(defvar org-agenda-keep-modes nil) ; Dynamically-scoped param.
(defvar org-inhibit-logging nil) ; Dynamically-scoped param.
(defvar org-table-buffer-is-an nil)
(defconst org-outline-regexp "\\*+ ")
@ -5495,7 +5512,9 @@ state (TODO by default). Also with prefix arg, force first state."
new-mark-x)))
(beginning-of-line 1)
(and (looking-at "\\*+ ") (goto-char (match-end 0))
(insert new-mark " ")))
(if org-treat-insert-todo-heading-as-state-change
(org-todo new-mark)
(insert new-mark " "))))
(when org-provide-todo-statistics
(org-update-parent-todo-statistics))))
@ -9120,6 +9139,7 @@ Each function takes arguments (NEW-MARK OLD-MARK) and returns either
`nil' or a string to be used for the todo mark." )
(defvar org-agenda-headline-snapshot-before-repeat)
(defun org-todo (&optional arg)
"Change the TODO state of an item.
The state of an item is given by a keyword at the start of the heading,
@ -9278,6 +9298,7 @@ For calling through lisp, arg is also interpreted in the following way:
(not (member this org-done-keywords))))
(and logging (org-local-logging logging))
(when (and (or org-todo-log-states org-log-done)
(not org-inhibit-logging)
(not (memq arg '(nextset previousset))))
;; we need to look at recording a time and note
(setq dolog (or (nth 1 (assoc state org-todo-log-states))
@ -14475,7 +14496,9 @@ Depending on context, this does one of the following:
((org-at-timestamp-p t) (call-interactively 'org-timestamp-up-day))
((and (not (eq org-support-shift-select 'always))
(org-on-heading-p))
(org-call-with-arg 'org-todo 'right))
(let ((org-inhibit-logging
(not org-treat-S-cursor-todo-seletion-as-state-change)))
(org-call-with-arg 'org-todo 'right)))
((or (and org-support-shift-select
(not (eq org-support-shift-select 'always))
(org-at-item-bullet-p))
@ -14505,7 +14528,9 @@ Depending on context, this does one of the following:
((org-at-timestamp-p t) (call-interactively 'org-timestamp-down-day))
((and (not (eq org-support-shift-select 'always))
(org-on-heading-p))
(org-call-with-arg 'org-todo 'left))
(let ((org-inhibit-logging
(not org-treat-S-cursor-todo-seletion-as-state-change)))
(org-call-with-arg 'org-todo 'left)))
((or (and org-support-shift-select
(not (eq org-support-shift-select 'always))
(org-at-item-bullet-p))