diff lisp/calendar/holidays.el @ 101083:27e9141ce15b

(calendar-list-holidays, calendar-mark-holidays): Add event handling, for when called from menus with the calendar buffer not current.
author Glenn Morris <rgm@gnu.org>
date Sat, 10 Jan 2009 22:00:14 +0000
parents a9dc0e7c3f2b
children 6cae903fcecf
line wrap: on
line diff
--- a/lisp/calendar/holidays.el	Sat Jan 10 21:57:00 2009 +0000
+++ b/lisp/calendar/holidays.el	Sat Jan 10 22:00:14 2009 +0000
@@ -463,35 +463,41 @@
 
 ;; FIXME name that makes sense
 ;;;###cal-autoload
-(defun calendar-list-holidays ()
+(defun calendar-list-holidays (&optional event)
   "Create a buffer containing the holidays for the current calendar window.
 The holidays are those in the list `calendar-notable-days'.
-Returns non-nil if any holidays are found."
-  (interactive)
-  (message "Looking up holidays...")
-  (let ((holiday-list (calendar-holiday-list))
-        (m1 displayed-month)
-        (y1 displayed-year)
-        (m2 displayed-month)
-        (y2 displayed-year))
-    (if (not holiday-list)
-        (message "Looking up holidays...none found")
-      (calendar-in-read-only-buffer holiday-buffer
-        (calendar-increment-month m1 y1 -1)
-        (calendar-increment-month m2 y2 1)
-        (calendar-set-mode-line
-         (if (= y1 y2)
-             (format "Notable Dates from %s to %s, %d%%-"
-                     (calendar-month-name m1) (calendar-month-name m2) y2)
-           (format "Notable Dates from %s, %d to %s, %d%%-"
-                   (calendar-month-name m1) y1 (calendar-month-name m2) y2)))
-        (insert
-         (mapconcat
-          (lambda (x) (concat (calendar-date-string (car x))
-                              ": " (cadr x)))
-          holiday-list "\n")))
-      (message "Looking up holidays...done"))
-    holiday-list))
+Returns non-nil if any holidays are found.
+If EVENT is non-nil, it's an event indicating the buffer position to
+use instead of point."
+  (interactive (list last-nonmenu-event))
+  ;; If called from a menu, with the calendar window not selected.
+  (with-current-buffer
+      (if event (window-buffer (posn-window (event-start event)))
+        (current-buffer))
+    (message "Looking up holidays...")
+    (let ((holiday-list (calendar-holiday-list))
+          (m1 displayed-month)
+          (y1 displayed-year)
+          (m2 displayed-month)
+          (y2 displayed-year))
+      (if (not holiday-list)
+          (message "Looking up holidays...none found")
+        (calendar-in-read-only-buffer holiday-buffer
+          (calendar-increment-month m1 y1 -1)
+          (calendar-increment-month m2 y2 1)
+          (calendar-set-mode-line
+           (if (= y1 y2)
+               (format "Notable Dates from %s to %s, %d%%-"
+                       (calendar-month-name m1) (calendar-month-name m2) y2)
+             (format "Notable Dates from %s, %d to %s, %d%%-"
+                     (calendar-month-name m1) y1 (calendar-month-name m2) y2)))
+          (insert
+           (mapconcat
+            (lambda (x) (concat (calendar-date-string (car x))
+                                ": " (cadr x)))
+            holiday-list "\n")))
+        (message "Looking up holidays...done"))
+      holiday-list)))
 
 (define-obsolete-function-alias
   'list-calendar-holidays 'calendar-list-holidays "23.1")
@@ -658,14 +664,20 @@
 
 ;; FIXME move to calendar?
 ;;;###cal-autoload
-(defun calendar-mark-holidays ()
-  "Mark notable days in the calendar window."
-  (interactive)
-  (setq calendar-mark-holidays-flag t)
-  (message "Marking holidays...")
-  (dolist (holiday (calendar-holiday-list))
-    (calendar-mark-visible-date (car holiday) calendar-holiday-marker))
-  (message "Marking holidays...done"))
+(defun calendar-mark-holidays (&optional event)
+  "Mark notable days in the calendar window.
+If EVENT is non-nil, it's an event indicating the buffer position to
+use instead of point."
+  (interactive (list last-nonmenu-event))
+  ;; If called from a menu, with the calendar window not selected.
+  (with-current-buffer
+      (if event (window-buffer (posn-window (event-start event)))
+        (current-buffer))
+    (setq calendar-mark-holidays-flag t)
+    (message "Marking holidays...")
+    (dolist (holiday (calendar-holiday-list))
+      (calendar-mark-visible-date (car holiday) calendar-holiday-marker))
+    (message "Marking holidays...done")))
 
 (define-obsolete-function-alias
   'mark-calendar-holidays 'calendar-mark-holidays "23.1")