cal-menu.el 21.9 KB
Newer Older
Richard M. Stallman's avatar
Richard M. Stallman committed
1 2
;;; cal-menu.el --- calendar functions for menu bar and popup menu support

3 4
;; Copyright (C) 1994, 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
;;   2008  Free Software Foundation, Inc.
Richard M. Stallman's avatar
Richard M. Stallman committed
5 6

;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
Glenn Morris's avatar
Glenn Morris committed
7
;;         Lara Rios <lrios@coewl.cen.uiuc.edu>
8
;; Maintainer: Glenn Morris <rgm@gnu.org>
Richard M. Stallman's avatar
Richard M. Stallman committed
9 10 11 12 13
;; Keywords: calendar
;; Human-Keywords: calendar, popup menus, menu bar

;; This file is part of GNU Emacs.

14 15
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
16
;; the Free Software Foundation; either version 3, or (at your option)
17 18
;; any later version.

Richard M. Stallman's avatar
Richard M. Stallman committed
19
;; GNU Emacs is distributed in the hope that it will be useful,
20 21 22 23 24
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
Erik Naggum's avatar
Erik Naggum committed
25
;; along with GNU Emacs; see the file COPYING.  If not, write to the
Lute Kamstra's avatar
Lute Kamstra committed
26 27
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.
Richard M. Stallman's avatar
Richard M. Stallman committed
28 29 30 31 32 33 34 35

;;; Commentary:

;; This collection of functions implements menu bar and popup menu support for
;; calendar.el.

;;; Code:

Glenn Morris's avatar
Glenn Morris committed
36 37 38
;; The code in this file is only called from calendar.el, but can't
;; require it (to supress undefined function warnings from compiler)
;; without a recursive require.
Glenn Morris's avatar
Glenn Morris committed
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
;; All these functions are either autoloaded, or autoloaded or defined
;; in calendar.el.
(declare-function calendar-increment-month "calendar" (n &optional mon yr))
(declare-function calendar-month-name      "calendar" (month &optional abbrev))
(declare-function extract-calendar-year    "calendar" (date))
(declare-function calendar-cursor-to-date  "calendar" (&optional error))
(declare-function holiday-list             "holidays" (y1 y2 &optional l label))
(declare-function calendar-sunrise-sunset  "solar"    nil)
(declare-function calendar-current-date    "calendar" nil)
(declare-function calendar-cursor-holidays "holidays" nil)
(declare-function calendar-date-string     "calendar"
                  (date &optional abbreviate nodayname))
(declare-function insert-diary-entry       "diary-lib" (arg))
(declare-function calendar-set-mark        "calendar"  (arg))
(declare-function cal-tex-cursor-day       "cal-tex"   (&optional arg))
(declare-function cal-tex-cursor-week      "cal-tex"   (&optional arg))
(declare-function cal-tex-cursor-week2     "cal-tex"   (&optional arg))
(declare-function cal-tex-cursor-week-iso  "cal-tex"   (&optional arg))
(declare-function cal-tex-cursor-week-monday     "cal-tex"    (&optional arg))
(declare-function cal-tex-cursor-filofax-daily   "cal-tex"    (&optional arg))
(declare-function cal-tex-cursor-filofax-2week   "cal-tex"    (&optional arg))
(declare-function cal-tex-cursor-filofax-week    "cal-tex"    (&optional arg))
(declare-function cal-tex-cursor-month           "cal-tex"    (arg))
(declare-function cal-tex-cursor-month-landscape "cal-tex"    (&optional arg))
(declare-function cal-tex-cursor-year            "cal-tex"    (&optional arg))
(declare-function cal-tex-cursor-filofax-year    "cal-tex"    (&optional arg))
(declare-function cal-tex-cursor-year-landscape  "cal-tex"    (&optional arg))
(declare-function calendar-day-of-year-string    "calendar"   (&optional date))
(declare-function calendar-iso-date-string       "cal-iso"    (&optional date))
(declare-function calendar-julian-date-string    "cal-julian" (&optional date))
(declare-function calendar-astro-date-string     "cal-julian" (&optional date))
(declare-function calendar-absolute-from-gregorian "calendar" (date))
(declare-function calendar-hebrew-date-string    "cal-hebrew" (&optional date))
(declare-function calendar-persian-date-string   "cal-persia" (&optional date))
(declare-function calendar-bahai-date-string     "cal-bahai"  (&optional date))
(declare-function calendar-islamic-date-string   "cal-islam"  (&optional date))
(declare-function calendar-chinese-date-string   "cal-china"  (&optional date))
(declare-function calendar-coptic-date-string    "cal-coptic" (&optional date))
(declare-function calendar-ethiopic-date-string  "cal-coptic" (&optional date))
(declare-function calendar-french-date-string    "cal-french" (&optional date))
(declare-function calendar-mayan-date-string     "cal-mayan"  (&optional date))
(declare-function calendar-print-chinese-date    "cal-china"  nil)
(declare-function calendar-goto-date             "cal-move"   (date))
Glenn Morris's avatar
Glenn Morris committed
82

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
(defconst cal-menu-moon-menu
  '("Moon"
    ["Lunar Phases" calendar-phases-of-moon]))

(defconst cal-menu-diary-menu
  '("Diary"
    ["Other File" view-other-diary-entries]
    ["Cursor Date" diary-view-entries]
    ["Mark All" mark-diary-entries]
    ["Show All" diary-show-all-entries]
    ["Insert Diary Entry" insert-diary-entry]
    ["Insert Weekly" insert-weekly-diary-entry]
    ["Insert Monthly" insert-monthly-diary-entry]
    ["Insert Yearly" insert-yearly-diary-entry]
    ["Insert Anniversary" insert-anniversary-diary-entry]
    ["Insert Block" insert-block-diary-entry]
    ["Insert Cyclic" insert-cyclic-diary-entry]
    ("Insert Baha'i"
     [" " nil :suffix (calendar-bahai-date-string (calendar-cursor-to-date))]
102 103 104
     ["One time" diary-bahai-insert-entry]
     ["Monthly" diary-bahai-insert-monthly-entry]
     ["Yearly" diary-bahai-insert-yearly-entry])
105 106 107 108 109 110 111 112 113 114 115 116
    ("Insert Islamic"
     [" " nil :suffix (calendar-islamic-date-string (calendar-cursor-to-date))]
     ["One time" insert-islamic-diary-entry]
     ["Monthly" insert-monthly-islamic-diary-entry]
     ["Yearly" insert-yearly-islamic-diary-entry])
    ("Insert Hebrew"
     [" " nil :suffix (calendar-hebrew-date-string (calendar-cursor-to-date))]
     ["One time" insert-hebrew-diary-entry]
     ["Monthly" insert-monthly-hebrew-diary-entry]
     ["Yearly" insert-yearly-hebrew-diary-entry])))

(defun cal-menu-holiday-window-suffix ()
117
  "Return a string suffix for the \"Window\" entry in `cal-menu-holidays-menu'."
118 119 120 121 122 123 124 125 126 127 128 129 130
  (let ((my1 (calendar-increment-month -1))
        (my2 (calendar-increment-month 1)))
    (if (= (cdr my1) (cdr my2))
        (format "%s-%s, %d"
                (calendar-month-name (car my1) 'abbrev)
                (calendar-month-name (car my2) 'abbrev)
                (cdr my2))
      (format "%s, %d-%s, %d"
              (calendar-month-name (car my1) 'abbrev)
              (cdr my1)
              (calendar-month-name (car my2) 'abbrev)
              (cdr my2)))))

131 132
(defvar displayed-year)                 ; from generate-calendar

133 134 135 136 137
(defconst cal-menu-holidays-menu
  `("Holidays"
    ["For Cursor Date -" calendar-cursor-holidays
     :suffix (calendar-date-string (calendar-cursor-to-date) t t)
     :visible (calendar-cursor-to-date)]
138
    ["For Window -" calendar-list-holidays
139 140 141 142 143 144
     :suffix (cal-menu-holiday-window-suffix)]
    ["For Today -" cal-menu-today-holidays
     :suffix (calendar-date-string (calendar-current-date) t t)]
    "--"
    ,@(let ((l ()))
        ;; Show 11 years--5 before, 5 after year of middle month.
145 146
        ;; We used to use :suffix rather than :label and bumped into
        ;; an easymenu bug:
147
        ;; http://lists.gnu.org/archive/html/emacs-devel/2007-11/msg01813.html
148
        ;; The bug has since been fixed.
149
        (dotimes (i 11)
150
          (push (vector (format "hol-year-%d" i)
151 152 153 154
                        `(lambda ()
                           (interactive)
                           (holiday-list (+ displayed-year ,(- i 5))
                                         (+ displayed-year ,(- i 5))))
155 156
                        :label `(format "For Year %d"
                                       (+ displayed-year ,(- i 5))))
157
                l))
158 159 160 161 162 163
        (nreverse l))
    "--"
    ["Unmark Calendar" calendar-unmark]
    ["Mark Holidays" mark-calendar-holidays]))

(defconst cal-menu-goto-menu
164
  '("Go To"
165 166 167 168 169 170 171 172 173 174 175 176 177 178
    ["Today" calendar-goto-today]
    ["Beginning of Week" calendar-beginning-of-week]
    ["End of Week" calendar-end-of-week]
    ["Beginning of Month" calendar-beginning-of-month]
    ["End of Month" calendar-end-of-month]
    ["Beginning of Year" calendar-beginning-of-year]
    ["End of Year" calendar-end-of-year]
    ["Other Date" calendar-goto-date]
    ["Day of Year" calendar-goto-day-of-year]
    ["ISO Week" calendar-goto-iso-week]
    ["ISO Date" calendar-goto-iso-date]
    ["Astronomical Date" calendar-goto-astro-day-number]
    ["Hebrew Date" calendar-goto-hebrew-date]
    ["Persian Date" calendar-goto-persian-date]
179
    ["Baha'i Date" calendar-bahai-goto-date]
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
    ["Islamic Date" calendar-goto-islamic-date]
    ["Julian Date" calendar-goto-julian-date]
    ["Chinese Date" calendar-goto-chinese-date]
    ["Coptic Date" calendar-goto-coptic-date]
    ["Ethiopic Date" calendar-goto-ethiopic-date]
    ("Mayan Date"
     ["Next Tzolkin" calendar-next-tzolkin-date]
     ["Previous Tzolkin" calendar-previous-tzolkin-date]
     ["Next Haab" calendar-next-haab-date]
     ["Previous Haab" calendar-previous-haab-date]
     ["Next Round" calendar-next-calendar-round-date]
     ["Previous Round" calendar-previous-calendar-round-date])
    ["French Date" calendar-goto-french-date]))

(defconst cal-menu-scroll-menu
  '("Scroll"
196 197
    ["Forward 1 Month" calendar-scroll-left]
    ["Forward 3 Months" calendar-scroll-left-three-months]
198
    ["Forward 1 Year" "4\C-v"]
199 200
    ["Backward 1 Month" calendar-scroll-right]
    ["Backward 3 Months" calendar-scroll-right-three-months]
201
    ["Backward 1 Year" "4\ev"]))
202

203
(defun cal-menu-x-popup-menu (position menu)
204 205
  "Like `x-popup-menu', but print an error message if popups are unavailable.
POSITION and MENU are passed to `x-popup-menu'."
206 207
  (if (display-popup-menus-p)
      (x-popup-menu position menu)
208
    (error "Popup menus are not available on this system")))
209

210 211 212 213
(defun cal-menu-list-holidays-year ()
  "Display a list of the holidays of the selected date's year."
  (interactive)
  (let ((year (extract-calendar-year (calendar-cursor-to-date))))
214
    (holiday-list year year)))
215 216 217 218 219

(defun cal-menu-list-holidays-following-year ()
  "Display a list of the holidays of the following year."
  (interactive)
  (let ((year (1+ (extract-calendar-year (calendar-cursor-to-date)))))
220
    (holiday-list year year)))
221 222 223 224 225

(defun cal-menu-list-holidays-previous-year ()
  "Display a list of the holidays of the previous year."
  (interactive)
  (let ((year (1- (extract-calendar-year (calendar-cursor-to-date)))))
226
    (holiday-list year year)))
227

228 229 230
(defun calendar-event-to-date (&optional error)
  "Date of last event.
If event is not on a specific date, signals an error if optional parameter
231
ERROR is non-nil, otherwise just returns nil."
232 233
  (with-current-buffer
      (window-buffer (posn-window (event-start last-input-event)))
Richard M. Stallman's avatar
Richard M. Stallman committed
234
    (goto-char (posn-point (event-start last-input-event)))
235
    (calendar-cursor-to-date error)))
Richard M. Stallman's avatar
Richard M. Stallman committed
236

237
(defun calendar-mouse-goto-date (date)
238
  "Go to DATE in the buffer specified by `last-input-event'."
239 240 241
  (set-buffer (window-buffer (posn-window (event-start last-input-event))))
  (calendar-goto-date date))

Richard M. Stallman's avatar
Richard M. Stallman committed
242 243 244 245
(defun calendar-mouse-sunrise/sunset ()
  "Show sunrise/sunset times for mouse-selected date."
  (interactive)
  (save-excursion
246
    (calendar-mouse-goto-date (calendar-event-to-date))
Richard M. Stallman's avatar
Richard M. Stallman committed
247 248
    (calendar-sunrise-sunset)))

249 250 251 252 253 254 255
(defun cal-menu-today-holidays ()
  "Show holidays for today's date."
  (interactive)
  (save-excursion
    (calendar-cursor-to-date (calendar-current-date))
    (calendar-cursor-holidays)))

256
(autoload 'calendar-check-holidays "holidays")
257 258
(autoload 'diary-list-entries "diary-lib")

259
(defun calendar-mouse-holidays (&optional event)
260 261
  "Pop up menu of holidays for mouse selected date.
EVENT is the event that invoked this command."
262
  (interactive "e")
263
  (let* ((date (calendar-event-to-date))
264
         (l (mapcar 'list (calendar-check-holidays date)))
265
         (selection
266
          (cal-menu-x-popup-menu
267 268 269 270 271 272 273
           event
           (list
            (format "Holidays for %s" (calendar-date-string date))
            (append
             (list (format "Holidays for %s" (calendar-date-string date)))
             (if l l '("None")))))))
    (and selection (call-interactively selection))))
Richard M. Stallman's avatar
Richard M. Stallman committed
274

275 276
(defvar holidays-in-diary-buffer)       ; only called from calendar.el

277
(defun calendar-mouse-view-diary-entries (&optional date diary event)
278
  "Pop up menu of diary entries for mouse-selected date.
279 280 281
Use optional DATE and alternative file DIARY.  EVENT is the event
that invoked this command.  Shows holidays if `holidays-in-diary-buffer'
is non-nil."
282
  (interactive "i\ni\ne")
283
  (let* ((date (or date (calendar-event-to-date)))
284 285 286 287
         (diary-file (if diary diary diary-file))
         (diary-list-include-blanks nil)
         (diary-display-hook 'ignore)
         (diary-entries
288
          (mapcar (lambda (x) (split-string (cadr x) "\n"))
289
                  (diary-list-entries date 1 'list-only)))
290
         (holidays (if holidays-in-diary-buffer
291
                       (calendar-check-holidays date)))
292 293 294 295
         (title (concat "Diary entries "
                        (if diary (format "from %s " diary) "")
                        "for "
                        (calendar-date-string date)))
296
         (selection
297
          (cal-menu-x-popup-menu
298
           event
299 300 301
           (list title
                 (append
                  (list title)
302
                  (mapcar (lambda (x) (list (concat "     " x))) holidays)
303 304 305
                  (if holidays
                      (list "--shadow-etched-in" "--shadow-etched-in"))
                  (if diary-entries
306
                      (mapcar 'list (apply 'append diary-entries))
307
                    '("None")))))))
308
    (and selection (call-interactively selection))))
Richard M. Stallman's avatar
Richard M. Stallman committed
309

310
(defun calendar-mouse-view-other-diary-entries ()
311
  "Pop up menu of diary entries from alternative file on mouse-selected date."
312
  (interactive)
313 314 315
  (calendar-mouse-view-diary-entries
   (calendar-event-to-date)
   (read-file-name "Enter diary file name: " default-directory nil t)))
316

317 318 319 320
(defun calendar-mouse-insert-diary-entry ()
  "Insert diary entry for mouse-selected date."
  (interactive)
  (save-excursion
321
    (calendar-mouse-goto-date (calendar-event-to-date))
322 323
    (insert-diary-entry nil)))

324 325 326 327
(defun calendar-mouse-set-mark ()
  "Mark the date under the cursor."
  (interactive)
  (save-excursion
328
    (calendar-mouse-goto-date (calendar-event-to-date))
329 330
    (calendar-set-mark nil)))

331 332 333 334
(defun cal-tex-mouse-day ()
  "Make a buffer with LaTeX commands for the day mouse is on."
  (interactive)
  (save-excursion
335
    (calendar-mouse-goto-date (calendar-event-to-date))
336 337 338 339
    (cal-tex-cursor-day nil)))

(defun cal-tex-mouse-week ()
  "One page calendar for week indicated by cursor.
340
Holidays are included if `cal-tex-holidays' is non-nil."
341 342
  (interactive)
  (save-excursion
343
    (calendar-mouse-goto-date (calendar-event-to-date))
344 345 346 347 348 349 350
    (cal-tex-cursor-week nil)))

(defun cal-tex-mouse-week2 ()
  "Make a buffer with LaTeX commands for the week cursor is on.
The printed output will be on two pages."
  (interactive)
  (save-excursion
351
    (calendar-mouse-goto-date (calendar-event-to-date))
352 353
    (cal-tex-cursor-week2 nil)))

354
(defun cal-tex-mouse-week-iso ()
355
  "One page calendar for week indicated by cursor.
356
Holidays are included if `cal-tex-holidays' is non-nil."
357 358
  (interactive)
  (save-excursion
359
    (calendar-mouse-goto-date (calendar-event-to-date))
360
    (cal-tex-cursor-week-iso nil)))
361

362
(defun cal-tex-mouse-week-monday ()
363 364 365
  "One page calendar for week indicated by cursor."
  (interactive)
  (save-excursion
366
    (calendar-mouse-goto-date (calendar-event-to-date))
367
    (cal-tex-cursor-week-monday nil)))
368

369 370 371 372 373 374 375
(defun cal-tex-mouse-filofax-daily ()
  "Day-per-page Filofax calendar for week indicated by cursor."
  (interactive)
  (save-excursion
    (calendar-mouse-goto-date (calendar-event-to-date))
    (cal-tex-cursor-filofax-daily nil)))

376
(defun cal-tex-mouse-filofax-2week ()
377 378 379
  "One page Filofax calendar for week indicated by cursor."
  (interactive)
  (save-excursion
380
    (calendar-mouse-goto-date (calendar-event-to-date))
381
    (cal-tex-cursor-filofax-2week nil)))
382

383
(defun cal-tex-mouse-filofax-week ()
384 385 386
  "Two page Filofax calendar for week indicated by cursor."
  (interactive)
  (save-excursion
387
    (calendar-mouse-goto-date (calendar-event-to-date))
388
    (cal-tex-cursor-filofax-week nil)))
389 390 391 392 393 394

(defun cal-tex-mouse-month ()
  "Make a buffer with LaTeX commands for the month cursor is on.
Calendar is condensed onto one page."
  (interactive)
  (save-excursion
395
    (calendar-mouse-goto-date (calendar-event-to-date))
396 397 398 399 400 401 402
    (cal-tex-cursor-month nil)))

(defun cal-tex-mouse-month-landscape ()
  "Make a buffer with LaTeX commands for the month cursor is on.
The output is in landscape format, one month to a page."
  (interactive)
  (save-excursion
403
    (calendar-mouse-goto-date (calendar-event-to-date))
404 405 406 407 408 409
    (cal-tex-cursor-month-landscape nil)))

(defun cal-tex-mouse-year ()
  "Make a buffer with LaTeX commands for the year cursor is on."
  (interactive)
  (save-excursion
410
    (calendar-mouse-goto-date (calendar-event-to-date))
411 412 413 414 415 416
    (cal-tex-cursor-year nil)))

(defun cal-tex-mouse-filofax-year ()
  "Make a buffer with LaTeX commands for Filofax calendar of year cursor is on."
  (interactive)
  (save-excursion
417
    (calendar-mouse-goto-date (calendar-event-to-date))
418 419 420 421 422 423
    (cal-tex-cursor-filofax-year nil)))

(defun cal-tex-mouse-year-landscape ()
  "Make a buffer with LaTeX commands for the year cursor is on."
  (interactive)
  (save-excursion
424
    (calendar-mouse-goto-date (calendar-event-to-date))
425 426
    (cal-tex-cursor-year-landscape nil)))

427
(defun calendar-mouse-print-dates (&optional event)
428 429
  "Pop up menu of equivalent dates to mouse selected date.
EVENT is the event that invoked this command."
430 431
  (interactive "e")
  (let* ((date (calendar-event-to-date))
432
        (selection
433
         (cal-menu-x-popup-menu
434 435
          event
          (list
436
           (concat (calendar-date-string date) " (Gregorian)")
437 438 439 440 441 442 443 444
           (append
            (list
             (concat (calendar-date-string date) " (Gregorian)")
             (list (calendar-day-of-year-string date))
             (list (format "ISO date: %s" (calendar-iso-date-string date)))
             (list (format "Julian date: %s"
                           (calendar-julian-date-string date)))
             (list
Edward M. Reingold's avatar
Edward M. Reingold committed
445
              (format "Astronomical (Julian) day number (at noon UTC): %s.0"
446
                           (calendar-astro-date-string date)))
447
             (list
448
              (format "Fixed (RD) date: %s"
449
                      (calendar-absolute-from-gregorian date)))
450
             (list (format "Hebrew date (before sunset): %s"
451 452
                           (calendar-hebrew-date-string date)))
             (list (format "Persian date: %s"
453 454 455
                           (calendar-persian-date-string date)))
             (list (format "Baha'i date (before sunset): %s"
                           (calendar-bahai-date-string date))))
456 457 458
            (let ((i (calendar-islamic-date-string date)))
              (if (not (string-equal i ""))
                  (list (list (format "Islamic date (before sunset): %s" i)))))
459 460 461
            (list
             (list (format "Chinese date: %s"
                           (calendar-chinese-date-string date))))
462 463
            ;; (list '("Chinese date (select to echo Chinese date)"
            ;;         . calendar-mouse-chinese-date))
464 465 466 467 468 469 470 471 472 473 474 475 476 477 478
            (let ((c (calendar-coptic-date-string date)))
              (if (not (string-equal c ""))
                  (list (list (format "Coptic date: %s" c)))))
            (let ((e (calendar-ethiopic-date-string date)))
              (if (not (string-equal e ""))
                  (list (list (format "Ethiopic date: %s" e)))))
            (let ((f (calendar-french-date-string date)))
              (if (not (string-equal f ""))
                  (list (list (format "French Revolutionary date: %s" f)))))
            (list
             (list
              (format "Mayan date: %s"
                      (calendar-mayan-date-string date)))))))))
        (and selection (call-interactively selection))))

479 480 481 482
(defun calendar-mouse-chinese-date ()
  "Show Chinese equivalent for mouse-selected date."
  (interactive)
  (save-excursion
483
    (calendar-mouse-goto-date (calendar-event-to-date))
484
    (calendar-print-chinese-date)))
Richard M. Stallman's avatar
Richard M. Stallman committed
485

486 487 488 489 490
(defun cal-menu-set-date-title (menu)
  "Convert date of last event to title suitable for MENU."
  (easy-menu-filter-return
   menu (calendar-date-string (calendar-event-to-date t) t nil)))

491
(easy-menu-define cal-menu-context-mouse-menu nil
492
  "Pop up menu for Mouse-2 for selected date in the calendar window."
493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520
  '("foo" :filter cal-menu-set-date-title
    "--"
    ["Holidays" calendar-mouse-holidays]
    ["Mark date" calendar-mouse-set-mark]
    ["Sunrise/sunset" calendar-mouse-sunrise/sunset]
    ["Other calendars" calendar-mouse-print-dates]
    ("Prepare LaTeX buffer"
     ["Daily (1 page)" cal-tex-mouse-day]
     ["Weekly (1 page)" cal-tex-mouse-week]
     ["Weekly (2 pages)" cal-tex-mouse-week2]
     ["Weekly (other style; 1 page)" cal-tex-mouse-week-iso]
     ["Weekly (yet another style; 1 page)" cal-tex-mouse-week-monday]
     ["Monthly" cal-tex-mouse-month]
     ["Monthly (landscape)" cal-tex-mouse-month-landscape]
     ["Yearly" cal-tex-mouse-year]
     ["Yearly (landscape)" cal-tex-mouse-year-landscape]
     ("Filofax styles"
      ["Filofax Daily (one-day-per-page)" cal-tex-mouse-filofax-daily]
      ["Filofax Weekly (2-weeks-at-a-glance)" cal-tex-mouse-filofax-2week]
      ["Filofax Weekly (week-at-a-glance)" cal-tex-mouse-filofax-week]
      ["Filofax Yearly" cal-tex-mouse-filofax-year]))
    ["Diary entries" calendar-mouse-view-diary-entries]
    ["Insert diary entry" calendar-mouse-insert-diary-entry]
    ["Other diary file entries" calendar-mouse-view-other-diary-entries]))

(easy-menu-define cal-menu-global-mouse-menu nil
  "Menu bound to a mouse event, not specific to the mouse-click location."
  '("Calendar"
521 522
    ["Scroll forward" calendar-scroll-left-three-months]
    ["Scroll backward" calendar-scroll-right-three-months]
523
    ["Mark diary entries" mark-diary-entries]
524 525
    ["List holidays" calendar-list-holidays]
    ["Mark holidays" calendar-mark-holidays]
526 527 528 529
    ["Unmark" calendar-unmark]
    ["Lunar phases" calendar-phases-of-moon]
    ["Show diary" diary-show-all-entries]
    ["Exit calendar" exit-calendar]))
Richard M. Stallman's avatar
Richard M. Stallman committed
530 531 532 533 534

(run-hooks 'cal-menu-load-hook)

(provide 'cal-menu)

535
;; arch-tag: aa81cf73-ce89-48a4-97ec-9ef861e87fe9
Richard M. Stallman's avatar
Richard M. Stallman committed
536
;;; cal-menu.el ends here