summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Guerry <bzg@altern.org>2013-02-05 18:49:19 +0100
committerBastien Guerry <bzg@altern.org>2013-02-06 17:23:25 +0100
commitc5ac9d415e57bb98abf74c58befa88e0153dabf8 (patch)
tree597c38a38a38a8f87ab54cbee4a729ee6fd7ce75
parent8ecc966292f322ec6d0d0fb29e1087a55d22975f (diff)
downloadorg-mode-c5ac9d415e57bb98abf74c58befa88e0153dabf8.tar.gz
org.el: Allow C-u C-u to insert a warning/delay cookie for org-deadline/org-schedule
* org.el (org-deadline): Allow a double universal prefix argument to insert/update a warning cookie. (org-deadline): Allow a double universal prefix argument to insert/update a delay cookie.
-rw-r--r--lisp/org.el83
1 files changed, 61 insertions, 22 deletions
diff --git a/lisp/org.el b/lisp/org.el
index 3e9ef8b..c5e5800 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -12503,9 +12503,10 @@ of `org-todo-keywords-1'."
(message "%d TODO entries found"
(org-occur (concat "^" org-outline-regexp " *" kwd-re )))))
-(defun org-deadline (&optional remove time)
+(defun org-deadline (&optional arg time)
"Insert the \"DEADLINE:\" string with a timestamp to make a deadline.
-With argument REMOVE, remove any deadline from the item.
+With one universal prefix argument, remove any deadline from the item.
+With two universal prefix arguments, prompt for a warning delay.
With argument TIME, set the deadline at the corresponding date. TIME
can either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
(interactive "P")
@@ -12514,7 +12515,7 @@ can either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
'region-start-level 'region))
org-loop-over-headlines-in-active-region)
(org-map-entries
- `(org-deadline ',remove ,time)
+ `(org-deadline ',arg ,time)
org-loop-over-headlines-in-active-region
cl (if (outline-invisible-p) (org-end-of-subtree nil t))))
(let* ((old-date (org-entry-get nil "DEADLINE"))
@@ -12523,13 +12524,31 @@ can either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
"\\([.+-]+[0-9]+[hdwmy]\\(?:[/ ][-+]?[0-9]+[hdwmy]\\)?\\) ?"
old-date)
(match-string 1 old-date))))
- (if remove
- (progn
- (when (and old-date org-log-redeadline)
- (org-add-log-setup 'deldeadline nil old-date 'findpos
- org-log-redeadline))
- (org-remove-timestamp-with-keyword org-deadline-string)
- (message "Item no longer has a deadline."))
+ (cond
+ ((equal arg '(4))
+ (when (and old-date org-log-redeadline)
+ (org-add-log-setup 'deldeadline nil old-date 'findpos
+ org-log-redeadline))
+ (org-remove-timestamp-with-keyword org-deadline-string)
+ (message "Item no longer has a deadline."))
+ ((equal arg '(16))
+ (save-excursion
+ (if (re-search-forward
+ org-deadline-time-regexp
+ (save-excursion (outline-next-heading) (point)) t)
+ (let* ((rpl0 (match-string 1))
+ (rpl (replace-regexp-in-string " -[0-9]+[hdwmy]" "" rpl0)))
+ (replace-match
+ (concat org-deadline-string
+ " <" rpl
+ (format " -%dd" (abs
+ (- (time-to-days
+ (save-match-data
+ (org-read-date nil t nil "Warn starting from")))
+ (time-to-days nil))))
+ ">") t t))
+ (user-error "No deadline information to update"))))
+ (t
(org-add-planning-info 'deadline time 'closed)
(when (and old-date org-log-redeadline
(not (equal old-date
@@ -12549,11 +12568,12 @@ can either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
(concat (substring org-last-inserted-timestamp 0 -1)
" " repeater
(substring org-last-inserted-timestamp -1))))))
- (message "Deadline on %s" org-last-inserted-timestamp)))))
+ (message "Deadline on %s" org-last-inserted-timestamp))))))
-(defun org-schedule (&optional remove time)
+(defun org-schedule (&optional arg time)
"Insert the SCHEDULED: string with a timestamp to schedule a TODO item.
-With argument REMOVE, remove any scheduling date from the item.
+With one universal prefix argument, remove any scheduling date from the item.
+With two universal prefix arguments, prompt for a delay cookie.
With argument TIME, scheduled at the corresponding date. TIME can
either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
(interactive "P")
@@ -12562,7 +12582,7 @@ either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
'region-start-level 'region))
org-loop-over-headlines-in-active-region)
(org-map-entries
- `(org-schedule ',remove ,time)
+ `(org-schedule ',arg ,time)
org-loop-over-headlines-in-active-region
cl (if (outline-invisible-p) (org-end-of-subtree nil t))))
(let* ((old-date (org-entry-get nil "SCHEDULED"))
@@ -12571,13 +12591,32 @@ either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
"\\([.+-]+[0-9]+[hdwmy]\\(?:[/ ][-+]?[0-9]+[hdwmy]\\)?\\) ?"
old-date)
(match-string 1 old-date))))
- (if remove
- (progn
- (when (and old-date org-log-reschedule)
- (org-add-log-setup 'delschedule nil old-date 'findpos
- org-log-reschedule))
- (org-remove-timestamp-with-keyword org-scheduled-string)
- (message "Item is no longer scheduled."))
+ (cond
+ ((equal arg '(4))
+ (progn
+ (when (and old-date org-log-reschedule)
+ (org-add-log-setup 'delschedule nil old-date 'findpos
+ org-log-reschedule))
+ (org-remove-timestamp-with-keyword org-scheduled-string)
+ (message "Item is no longer scheduled.")))
+ ((equal arg '(16))
+ (save-excursion
+ (if (re-search-forward
+ org-scheduled-time-regexp
+ (save-excursion (outline-next-heading) (point)) t)
+ (let* ((rpl0 (match-string 1))
+ (rpl (replace-regexp-in-string " -[0-9]+[hdwmy]" "" rpl0)))
+ (replace-match
+ (concat org-scheduled-string
+ " <" rpl
+ (format " -%dd" (abs
+ (- (time-to-days
+ (save-match-data
+ (org-read-date nil t nil "Delay until")))
+ (time-to-days nil))))
+ ">") t t))
+ (user-error "No scheduled information to update"))))
+ (t
(org-add-planning-info 'scheduled time 'closed)
(when (and old-date org-log-reschedule
(not (equal old-date
@@ -12597,7 +12636,7 @@ either be an Org date like \"2011-07-24\" or a delta like \"+2d\"."
(concat (substring org-last-inserted-timestamp 0 -1)
" " repeater
(substring org-last-inserted-timestamp -1))))))
- (message "Scheduled to %s" org-last-inserted-timestamp)))))
+ (message "Scheduled to %s" org-last-inserted-timestamp))))))
(defun org-get-scheduled-time (pom &optional inherit)
"Get the scheduled time as a time tuple, of a format suitable