]> git.eshelyaron.com Git - emacs.git/commitdiff
appt.el fixes for bug#7019.
authorGlenn Morris <rgm@gnu.org>
Wed, 15 Sep 2010 02:55:44 +0000 (19:55 -0700)
committerGlenn Morris <rgm@gnu.org>
Wed, 15 Sep 2010 02:55:44 +0000 (19:55 -0700)
* lisp/calendar/appt.el (appt-check): If not displaying the diary,
use (diary 1) to only get the entries we need.
(appt-make-list): Sort diary-list-entries, if we cannot guarantee
that it is in day order.  (Bug#7019)

lisp/ChangeLog
lisp/calendar/appt.el

index 6972c9c743fa779a195a8e1e0141c5776d7b8e62..2e2f3b539b9a0864d330356a722d6f400186a8d2 100644 (file)
@@ -1,5 +1,10 @@
 2010-09-15  Glenn Morris  <rgm@gnu.org>
 
+       * calendar/appt.el (appt-check): If not displaying the diary,
+       use (diary 1) to only get the entries we need.
+       (appt-make-list): Sort diary-list-entries, if we cannot guarantee
+       that it is in day order.  (Bug#7019)
+
        * calendar/appt.el (appt-check): Rather than showing the diary,
        just turn off invisible display, and only if needed.
 
index 5767ef543ee2820bca8b193b28cbdb3745173900..8dae260ca397fd4134fbe68997668a8cc05e4725 100644 (file)
@@ -333,40 +333,42 @@ displayed in a window:
         (if (or force                      ; eg initialize, diary save
                 (null appt-prev-comp-time) ; first check
                 (< cur-comp-time appt-prev-comp-time)) ; new day
-            (condition-case nil
-                (if appt-display-diary
-                    (let ((diary-hook
-                           (if (assoc 'appt-make-list diary-hook)
-                               diary-hook
-                             (cons 'appt-make-list diary-hook))))
-                      (diary))
-                  (let* ((diary-display-function 'appt-make-list)
-                         (d-buff (find-buffer-visiting diary-file))
-                         (selective
-                          (if d-buff    ; diary buffer exists
-                              (with-current-buffer d-buff
-                                diary-selective-display)))
-                         d-buff2)
-                    ;; FIXME why not using diary-list-entries with
-                    ;; non-nil LIST-ONLY?
-                    (diary)
-                    ;; If the diary buffer existed before this command,
-                    ;; restore its display state.  Otherwise, kill it.
-                    (and (setq d-buff2 (find-buffer-visiting diary-file))
-                         (if d-buff
-                             (or selective
-                                 (with-current-buffer d-buff2
-                                   (if diary-selective-display
-                                       ;; diary-show-all-entries displays
-                                       ;; the diary buffer.
-                                       (diary-unhide-everything))))
-                           ;; FIXME does not kill any included diary files.
-                           ;; The real issue is that (diary) should not
-                           ;; have the side effect of visiting all the
-                           ;; diary files.  It is not really appt.el's job to
-                           ;; clean up this mess...
-                           (kill-buffer d-buff2)))))
-              (error nil)))
+            (ignore-errors
+              (if appt-display-diary
+                  (let ((diary-hook
+                         (if (assoc 'appt-make-list diary-hook)
+                             diary-hook
+                           (cons 'appt-make-list diary-hook))))
+                    (diary))
+                (let* ((diary-display-function 'appt-make-list)
+                       (d-buff (find-buffer-visiting diary-file))
+                       (selective
+                        (if d-buff    ; diary buffer exists
+                            (with-current-buffer d-buff
+                              diary-selective-display)))
+                       d-buff2)
+                  ;; Not displaying the diary, so we can ignore
+                  ;; diary-number-of-entries.  Since appt.el only
+                  ;; works on a daily basis, no need for more entries.
+                  ;; FIXME why not using diary-list-entries with
+                  ;; non-nil LIST-ONLY?
+                  (diary 1)
+                  ;; If the diary buffer existed before this command,
+                  ;; restore its display state.  Otherwise, kill it.
+                  (and (setq d-buff2 (find-buffer-visiting diary-file))
+                       (if d-buff
+                           (or selective
+                               (with-current-buffer d-buff2
+                                 (if diary-selective-display
+                                     ;; diary-show-all-entries displays
+                                     ;; the diary buffer.
+                                     (diary-unhide-everything))))
+                         ;; FIXME does not kill any included diary files.
+                         ;; The real issue is that (diary) should not
+                         ;; have the side effect of visiting all the
+                         ;; diary files.  It is not really appt.el's job to
+                         ;; clean up this mess...
+                         (kill-buffer d-buff2)))))))
         (setq appt-prev-comp-time cur-comp-time
               appt-mode-string nil
               appt-display-count nil)
@@ -582,6 +584,17 @@ appointment package (if it is not already active)."
               (let ((entry-list diary-entries-list)
                     (new-time-string "")
                     time-string)
+                ;; Below, we assume diary-entries-list was in date
+                ;; order.  It is, unless something on
+                ;; diary-list-entries-hook has changed it, eg
+                ;; diary-include-other-files (bug#7019).  It must be
+                ;; in date order if number = 1.
+                (and diary-list-entries-hook
+                     appt-display-diary
+                     (not (eq diary-number-of-entries 1))
+                     (not (memq (car (last diary-list-entries-hook))
+                                '(diary-sort-entries sort-diary-entries)))
+                     (setq entry-list (sort entry-list 'diary-entry-compare)))
                 ;; Skip diary entries for dates before today.
                 (while (and entry-list
                             (calendar-date-compare