浏览代码

Merge branch 'maint'

Nicolas Goaziou 7 年之前
父节点
当前提交
a1659053d5
共有 1 个文件被更改,包括 25 次插入24 次删除
  1. 25 24
      lisp/org-agenda.el

+ 25 - 24
lisp/org-agenda.el

@@ -9925,32 +9925,33 @@ The prefix arg is passed through to the command if possible."
 		    (org-agenda-set-tags ,tag
 					 ,(if (eq action ?+) ''on ''off))))))
 
-	(?s
-	 (let ((time
-		(and (not arg)
-		     (org-read-date nil nil nil "(Re)Schedule to"
-				    org-overriding-default-time))))
+	((and (or ?s ?d) c)
+	 (let* ((schedule? (eq c ?s))
+		(prompt (if schedule? "(Re)Schedule to" "(Re)Set Deadline to"))
+		(time
+		 (and (not arg)
+		      (let ((new (org-read-date
+				  nil nil nil prompt org-overriding-default-time)))
+			;; A "double plus" answer applies to every
+			;; scheduled time.  Do not turn it into
+			;; a fixed date yet.
+			(if (string-match-p "\\`[ \t]*\\+\\+"
+					    org-read-date-final-answer)
+			    org-read-date-final-answer
+			  new)))))
 	   ;; Make sure to not prompt for a note when bulk
-	   ;; rescheduling as Org cannot cope with simultaneous notes.
-	   ;; Besides, it could be annoying depending on the number of
-	   ;; items re-scheduled.
+	   ;; rescheduling/resetting deadline as Org cannot cope with
+	   ;; simultaneous notes.  Besides, it could be annoying
+	   ;; depending on the number of marked items.
 	   (setq cmd
-		 `(lambda ()
-		    (let ((org-log-reschedule (and org-log-reschedule 'time)))
-		      (org-agenda-schedule arg ,time))))))
-	(?d
-	 (let ((time
-		(and (not arg)
-		     (org-read-date nil nil nil "(Re)Set Deadline to"
-				    org-overriding-default-time))))
-	   ;; Make sure to not prompt for a note when bulk
-	   ;; rescheduling as Org cannot cope with simultaneous
-	   ;; notes.  Besides, it could be annoying depending on the
-	   ;; number of items re-scheduled.
-	   (setq cmd
-		 `(lambda ()
-		    (let ((org-log-redeadline (and org-log-redeadline 'time)))
-		      (org-agenda-deadline arg ,time))))))
+		 (if schedule?
+		     `(lambda ()
+			(let ((org-log-reschedule
+			       (and org-log-reschedule 'time)))
+			  (org-agenda-schedule arg ,time)))
+		   `(lambda ()
+		      (let ((org-log-redeadline (and org-log-redeadline 'time)))
+			(org-agenda-deadline arg ,time)))))))
 
 	(?S
 	 (unless (org-agenda-check-type nil 'agenda 'todo)