Mercurial > hg > xemacs-beta
diff lisp/calendar/cal-xemacs.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 0293115a14e9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/calendar/cal-xemacs.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,260 @@ +;;; cal-xemacs.el --- calendar functions for menu bar and popup menu support +;;; Original file is cal-menu.el. + +;; Copyright (C) 1994 Free Software Foundation, Inc. + +;; Author: Edward M. Reingold <reingold@cs.uiuc.edu> +;; Lara Rios <lrios@coewl.cen.uiuc.edu> +;; Ported to XEmacs by Chuck Thompson <cthomp@cs.uiuc.edu> +;; Keywords: calendar +;; Human-Keywords: calendar, popup menus, menu bar + +;; This file is part of XEmacs. + +;; XEmacs is free software; you can redistribute it and/or modify it +;; under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; XEmacs is distributed in the hope that it will be useful, 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 +;; along with XEmacs; see the file COPYING. If not, write to the Free +;; Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +;;; Commentary: + +;; This collection of functions implements menu bar and popup menu support for +;; calendar.el. + +;; Comments, corrections, and improvements should be sent to +;; Edward M. Reingold Department of Computer Science +;; (217) 333-6733 University of Illinois at Urbana-Champaign +;; reingold@cs.uiuc.edu 1304 West Springfield Avenue +;; Urbana, Illinois 61801 + +;;; Code: + +;;(define-key calendar-mode-map 'button2 'calendar-mouse-2-date-menu) +;;(define-key calendar-mode-map 'button2up 'ignore) + +(defconst calendar-popup-menu-3 + '("Calendar" + ["Scroll forward" scroll-calendar-left-three-months t] + ["Scroll backward" scroll-calendar-right-three-months t] + ["Mark diary entries" mark-diary-entries t] + ["List holidays" list-calendar-holidays t] + ["Mark holidays" mark-calendar-holidays t] + ["Unmark" calendar-unmark t] + ["Lunar phases" calendar-phases-of-moon t] + ["Show diary" show-all-diary-entries t] + ["Exit calendar" exit-calendar t] + )) + +(defun calendar-popup-menu-3 (e) + (interactive "@e") + (popup-menu calendar-popup-menu-3)) +(define-key calendar-mode-map 'button3 'calendar-popup-menu-3) + +(defvar calendar-foobar nil) + +(defun calendar-popup-menu-2 (e) + (interactive "@e") + (setq calendar-foobar (calendar-event-to-date e t)) + (let ((menu (list (format "Menu - %s" (calendar-date-string calendar-foobar) t t) + "-----" + ["Holidays" calendar-mouse-holidays t] + ["Mark date" calendar-mouse-set-mark t] + ["Sunrise/sunset" calendar-mouse-sunrise/sunset t] + ["Other calendars" calendar-mouse-print-dates (calendar-event-to-date e)] + ["Diary entries" calendar-mouse-view-diary-entries t] + ["Insert diary entry" calendar-mouse-insert-diary-entry t] + ["Other Diary file entries" + calendar-mouse-view-other-diary-entries + (calendar-cursor-to-date)] + ))) + (popup-menu menu))) +(define-key calendar-mode-map 'button2 'calendar-popup-menu-2) + +(defconst calendar-scroll-menu + '("Scroll" + ["Forward 1 Month" scroll-calendar-left t] + ["Forward 3 Months" scroll-calendar-left-three-months t] + ["Forward 1 Year" (scroll-calendar-left-three-months 4) t] + ["Backward 1 Month" scroll-calendar-right t] + ["Backward 3 Months" scroll-calendar-right-three-months t] + ["Backward 1 Year" (scroll-calendar-right-three-months 4) t])) + +(defconst calendar-goto-menu + '("Goto" + ["Today" calendar-current-month t] + ["Beginning of week" calendar-beginning-of-week (calendar-cursor-to-date)] + ["End of week" calendar-end-of-week (calendar-cursor-to-date)] + ["Beginning of month" calendar-beginning-of-month (calendar-cursor-to-date)] + ["End of month" calendar-end-of-month (calendar-cursor-to-date)] + ["Beginning of year" calendar-beginning-of-year (calendar-cursor-to-date)] + ["End of year" calendar-end-of-year (calendar-cursor-to-date)] + ["Other date" calendar-goto-date t] + ["ISO date" calendar-goto-iso-date t] + ["Astronomical date" calendar-goto-astro-day-number t] + ["Hebrew date" calendar-goto-hebrew-date t] + ["Islamic date" calendar-goto-islamic-date t] + ["Julian date" calendar-goto-julian-date t] + ("Mayan date" + ["Next Tzolkin" calendar-next-tzolkin-date t] + ["Previous Tzolkin" calendar-previous-tzolkin-date t] + ["Next Haab" calendar-next-haab-date t] + ["Previous Haab" calendar-previous-haab-date t] + ["Next Round" calendar-next-calendar-round-date t] + ["Previous Round" calendar-previous-calendar-round-date t]) + ["French date" calendar-goto-french-date t])) + +(defconst calendar-holidays-menu + '("Holidays" + ["One day" calendar-cursor-holidays (calendar-cursor-to-date)] + ["3 months" list-calendar-holidays t] + ["Mark" mark-calendar-holidays t] + ["Unmark" calendar-unmark t])) + +(defconst calendar-diary-menu + '("Diary" + ["Other file" view-other-diary-entries (calendar-cursor-to-date)] + ["Cursor date" view-diary-entries (calendar-cursor-to-date)] + ["Mark all" mark-diary-entries t] + ["Show all" show-all-diary-entries t] + ["Insert daily"insert-diary-entry t] + ["Insert weekly" insert-weekly-diary-entry (calendar-cursor-to-date)] + ["Insert monthly" insert-monthly-diary-entry (calendar-cursor-to-date)] + ["Insert yearly" insert-yearly-diary-entry (calendar-cursor-to-date)] + ["Insert anniversary" insert-anniversary-diary-entry (calendar-cursor-to-date)] + ["Insert block" insert-block-diary-entry (calendar-cursor-to-date)] + ["Insert cyclic" insert-cyclic-diary-entry (calendar-cursor-to-date)] + ["Insert Islamic" calendar-mouse-insert-islamic-diary-entry (calendar-cursor-to-date)] + ["Insert Hebrew" calendar-mouse-insert-hebrew-diary-entry (calendar-cursor-to-date)])) + +(defun calendar-add-menus () + (set-buffer-menubar (copy-sequence current-menubar)) + (if (assoc "Calendar" current-menubar) + nil + (add-submenu nil '("Calendar")) + (if (not (assoc "Scroll" current-menubar)) + (add-submenu '("Calendar") calendar-scroll-menu)) + (if (not (assoc "Goto" current-menubar)) + (add-submenu '("Calendar") calendar-goto-menu)) + (if (not (assoc "Holidays" current-menubar)) + (add-submenu '("Calendar") calendar-holidays-menu)) + (if (not (assoc "Diary" current-menubar)) + (add-submenu '("Calendar") calendar-diary-menu)) + (if (not (assoc "Moon" current-menubar)) + (add-menu-button '("Calendar") ["Moon" calendar-phases-of-moon t])))) + +(defun calendar-event-to-date (event &optional error) + "Date of last event. +If event is not on a specific date, signals an error if optional parameter +ERROR is t, otherwise just returns nil." + (save-excursion + (goto-char (event-point event)) + (calendar-cursor-to-date error))) + +(defun calendar-mouse-insert-hebrew-diary-entry (event) + "Pop up menu to insert a Hebrew-date diary entry." + (interactive "e") + (let ((menu (list (format "Hebrew insert menu - %s" + (calendar-hebrew-date-string + (calendar-cursor-to-date))) + "-----" + ["One time" insert-hebrew-diary-entry t] + ["Monthly" insert-monthly-hebrew-diary-entry t] + ["Yearly" insert-yearly-hebrew-diary-entry t]))) + (popup-menu menu))) + +(defun calendar-mouse-insert-islamic-diary-entry (event) + "Pop up menu to insert an Islamic-date diary entry." + (interactive "e") + (let ((menu (list (format "Islamic insert menu - %s" + (calendar-islamic-date-string + (calendar-cursor-to-date))) + "-----" + ["One time" insert-islamic-diary-entry t] + ["Monthly" insert-monthly-islamic-diary-entry t] + ["Yearly" insert-yearly-islamic-diary-entry t]))) + (popup-menu menu))) + +(defun calendar-mouse-sunrise/sunset () + "Show sunrise/sunset times for mouse-selected date." + (interactive) + (save-excursion + (calendar-goto-date calendar-foobar) + (setq calendar-foobar nil) + (calendar-sunrise-sunset))) + +(defun calendar-mouse-holidays () + "Show holidays for mouse-selected date." + (interactive) + (save-excursion + (calendar-goto-date calendar-foobar) + (setq calendar-foobar nil) + (calendar-cursor-holidays))) + +(defun calendar-mouse-view-diary-entries () + "View diary entries on mouse-selected date." + (interactive) + (save-excursion + (calendar-goto-date calendar-foobar) + (setq calendar-foobar nil) + (view-diary-entries 1))) + +(defun calendar-mouse-view-other-diary-entries (event) + "View diary entries from alternative file on mouse-selected date." + (interactive "e") + (save-excursion + (calendar-goto-date calendar-foobar) + (call-interactively 'view-other-diary-entries))) + +(defun calendar-mouse-insert-diary-entry (event) + "Insert diary entry for mouse-selected date." + (interactive "e") + (save-excursion + (calendar-goto-date calendar-foobar) + (insert-diary-entry nil))) + +(defun calendar-mouse-set-mark () + "Mark the date under the cursor." + (interactive) + (save-excursion + (calendar-goto-date calendar-foobar) + (setq calendar-foobar nil) + (calendar-set-mark nil))) + +(defun calendar-mouse-print-dates () + "Pop up menu of equivalent dates to mouse selected date." + (interactive) + (let* ((menu (list (format "Date Menu - %s (Gregorian)" + (calendar-date-string calendar-foobar)) + "-----" + (calendar-day-of-year-string calendar-foobar) + (format "ISO date: %s" (calendar-iso-date-string calendar-foobar)) + (format "Julian date: %s" + (calendar-julian-date-string calendar-foobar)) + (format "Astronomical (Julian) date (before noon): %s" + (calendar-astro-date-string calendar-foobar)) + (format "Hebrew date (before sunset): %s" + (calendar-hebrew-date-string calendar-foobar)) + (let ((i (calendar-islamic-date-string calendar-foobar))) + (if (not (string-equal i "")) + (format "Islamic date (before sunset): %s" i))) + (let ((f (calendar-french-date-string calendar-foobar))) + (if (not (string-equal f "")) + (format "French Revolutionary date: %s" f))) + (format "Mayan date: %s" (calendar-mayan-date-string calendar-foobar))))) + (popup-menu menu)) + (setq calendar-foobar nil)) + +(run-hooks 'cal-xemacs-load-hook) + +(provide 'cal-xemacs) + +;;; cal-menu.el ends here