annotate lisp/calendar/calendar.el @ 1016:817b0ce337d7

* window.c (Fset_window_configuration): Removed #if 0'd code which assumes that minibuf_window is on the same frame as the window configuration. Removed special case for windows whose prevs point to themselves. * window.c (Fset_window_configuration): Rename the argument from ARG to CONFIGURATION, so it matches the docstring. The make-docfile program cares. * window.c [MULTI_FRAME] (syms_of_window): Don't staticpro minibuf_window; the frame list will take care of it. * window.c (window_loop): This used to keep track of the first window processed and wait until we came back around to it. Sadly, this doesn't work if that window gets deleted. So instead, use Fprevious_window to find the last window to process, and loop until we've done that one. * window.c [not MULTI_FRAME] (init_window_once): Don't forget to set the `mini_p' flag on the new minibuffer window to t. * window.c (Fwindow_at): Don't check the type of the frame argument. * window.c [not MULTI_FRAME] (window_loop): Set frame to zero, instead of trying to decode it. * window.c (init_window_once): Initialize minibuf_window before FRAME_ROOT_WINDOW, so the latter actually points to something.
author Jim Blandy <jimb@redhat.com>
date Wed, 19 Aug 1992 06:40:02 +0000
parents 2619b7a9c11e
children 1c718ee07ac9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
675
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 628
diff changeset
1 ;;; calendar.el --- Calendar functions.
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
2
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3 ;;; Copyright (C) 1988, 1989, 1990, 1991, 1992 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 811
diff changeset
4
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
5 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
6 ;; Keywords: calendar, Gregorian calendar, Julian calendar, Hebrew calendar,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
7 ;; Islamic calendar, ISO calendar, Julian day number, diary, holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
8
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
9 (defconst calendar-version "Version 5, released August 10, 1992")
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
10
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; This file is part of GNU Emacs.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; GNU Emacs is distributed in the hope that it will be useful,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; but WITHOUT ANY WARRANTY. No author or distributor
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; accepts responsibility to anyone for the consequences of using it
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; or for whether it serves any particular purpose or works at all,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; unless he says so in writing. Refer to the GNU Emacs General Public
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18 ;; License for full details.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; Everyone is granted permission to copy, modify and redistribute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU Emacs, but only under the conditions described in the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; GNU Emacs General Public License. A copy of this license is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; supposed to have been given to you along with GNU Emacs so you
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; can know your rights and responsibilities. It should be in a
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; file named COPYING. Among other things, the copyright notice
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;; and this notice must be preserved on all copies.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
28 ;;; Commentary:
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
29
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
30 ;; This collection of functions implements a calendar window. It
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
31 ;; generates a calendar for the current month, together with the previous
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
32 ;; and coming months, or for any other three-month period. The calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
33 ;; can be scrolled forward and backward in the window to show months in
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
34 ;; the past or future; the cursor can move forward and backward by days,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
35 ;; weeks, or months, making it possible, for instance, to jump to the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
36 ;; date a specified number of days, weeks, or months from the date under
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
37 ;; the cursor. The user can display a list of holidays and other notable
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
38 ;; days for the period shown; the notable days can be marked on the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
39 ;; calendar, if desired. The user can also specify that dates having
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
40 ;; corresponding diary entries (in a file that the user specifies) be
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
41 ;; marked; the diary entries for any date can be viewed in a separate
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
42 ;; window. The diary and the notable days can be viewed independently of
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
43 ;; the calendar. Dates can be translated from the (usual) Gregorian
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
44 ;; calendar to the day of the year/days remaining in year, to the ISO
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
45 ;; commercial calendar, to the Julian (old style) calendar, to the Hebrew
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
46 ;; calendar, to the Islamic calendar, to the French Revolutionary calendar,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
47 ;; to the Mayan calendar, and to the astronomical (Julian) day number.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
48 ;; When floating point is available, times of sunrise/sunset can be displayed,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
49 ;; as can the phases of the moon. Appointment notication for diary entries
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
50 ;; is available.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
51
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
52 ;; The following files are part of the calendar/diary code:
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
53
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
54 ;; diary.el, diary-insert.el Diary functions
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
55 ;; holidays.el Holiday functions
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
56 ;; cal-french.el French Revolutionary calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
57 ;; cal-mayan.el Mayan calendars
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
58 ;; solar.el Sunrise/sunset, equinoxes/solstices
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
59 ;; lunar.el Phases of the moon
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
60 ;; appt.el Appointment notification
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
61
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
62 ;; Comments, corrections, and improvements should be sent to
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
63 ;; Edward M. Reingold Department of Computer Science
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
64 ;; (217) 333-6733 University of Illinois at Urbana-Champaign
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 ;; reingold@cs.uiuc.edu 1304 West Springfield Avenue
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
66 ;; Urbana, Illinois 61801
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
68 ;; GNU Emacs users too numerous to list pointed out a variety of problems
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
69 ;; with earlier forms of the `infinite' sliding calendar and suggested some
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
70 ;; of the features included in this package. Especially significant in this
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
71 ;; regard was the suggestion of mark-diary-entries and view-diary-entries,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
72 ;; together ideas for their implementation, by
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
73 ;; Michael S. Littman Cognitive Science Research Group
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
74 ;; (201) 829-5155 Bell Communications Research
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
75 ;; mlittman@wind.bellcore.com 445 South St. Box 1961 (2L-331)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
76 ;; Morristown, NJ 07960
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
77
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
78 ;; The algorithms for the Hebrew calendar are those of the Rambam (Rabbi Moses
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
79 ;; Maimonides), from his Mishneh Torah, as implemented by
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
80 ;; Nachum Dershowitz Department of Computer Science
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
81 ;; (217) 333-4219 University of Illinois at Urbana-Champaign
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
82 ;; nachum@cs.uiuc.edu 1304 West Springfield Avenue
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
83 ;; Urbana, Illinois 61801
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
84
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
85 ;; Technical details of all the calendrical calculations can be found in
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
86
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
87 ;; ``Calendrical Calculations'' by Nachum Dershowitz and Edward M. Reingold,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
88 ;; Software--Practice and Experience, Volume 20, Number 9 (September, 1990),
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
89 ;; pages 899-928. ``Calendrical Calculations, Part II: Three Historical
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
90 ;; Calendars'' by E. M. Reingold, N. Dershowitz, and S. M. Clamen,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
91 ;; Report Number UIUCDCS-R-92-1743, Department of Computer Science,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
92 ;; University of Illinois, April, 1992.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
93
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
94 ;; Hard copies of these two papers can be obtained by sending email to
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
95 ;; reingold@cs.uiuc.edu with the SUBJECT "send-paper-cal" (no quotes) and
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
96 ;; the message BODY containing your mailing address (snail).
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
97
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
98 ;;; Code:
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
99
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
100 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
101 (defvar view-diary-entries-initially nil
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
102 "*If t, the diary entries for the current date will be displayed on entry.
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
103 The diary is displayed in another window when the calendar is first displayed,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
104 if the current date is visible. The number of days of diary entries displayed
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
105 is governed by the variable `number-of-diary-entries'.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
107 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108 (defvar number-of-diary-entries 1
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
109 "*Specifies how many days of diary entries are to be displayed initially.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
110 This variable affects the diary display when the command M-x diary is used,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
111 or if the value of the variable `view-diary-entries-initially' is t. For
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
112 example, if the default value 1 is used, then only the current day's diary
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
113 entries will be displayed. If the value 2 is used, then both the current
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
114 day's and the next day's entries will be displayed. The value can also be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
115 a vector such as [0 2 2 2 2 4 1]; this value will cause no diary entries to
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 be displayed on Sunday, the current date's and the next day's diary entries
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 to be displayed Monday through Thursday, Friday through Monday's entries to
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 be displayed on Friday, and only Saturday's entries to be displayed on
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
119 Saturday. This variable does not affect the diary display with the `d'
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 command from the calendar; in that case, the prefix argument controls the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
121 number of days of diary entries displayed.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
123 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
124 (defvar mark-diary-entries-in-calendar nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125 "*If t, dates with diary entries will be marked in the calendar window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
126 The marking symbol is specified by the variable `diary-entry-marker'.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
127
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
128 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129 (defvar diary-entry-marker "+"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 "*The symbol used to mark dates that have diary entries.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
131
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
132 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
133 (defvar view-calendar-holidays-initially nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 "*If t, the holidays for the current three month period will be displayed
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
135 on entry. The holidays are displayed in another window when the calendar is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 first displayed.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
137
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
138 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 (defvar mark-holidays-in-calendar nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 "*If t, dates of holidays will be marked in the calendar window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
141 The marking symbol is specified by the variable `calendar-holiday-marker'.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
142
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
143 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
144 (defvar calendar-holiday-marker "*"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
145 "*The symbol used to mark notable dates in the calendar.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
146
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
147 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
148 (defvar all-hebrew-calendar-holidays nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
149 "*If nil, the holidays from the Hebrew calendar that are shown will
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
150 include only those days of such major interest as to appear on secular
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151 calendars. If t, the holidays shown in the calendar will include all
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
152 special days that would be shown on a complete Hebrew calendar.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
154 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
155 (defvar all-christian-calendar-holidays nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
156 "*If nil, the holidays from the Christian calendar that are shown will
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
157 include only those days of such major interest as to appear on secular
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
158 calendars. If t, the holidays shown in the calendar will include all
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
159 special days that would be shown on a complete Christian calendar.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
160
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
161 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
162 (defvar all-islamic-calendar-holidays nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
163 "*If nil, the holidays from the Islamic calendar that are shown will
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
164 include only those days of such major interest as to appear on secular
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
165 calendars. If t, the holidays shown in the calendar will include all
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
166 special days that would be shown on a complete Islamic calendar.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
167
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
168 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
169 (defvar calendar-load-hook nil
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
170 "*List of functions to be called after the calendar is first loaded.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
171 This is the place to add key bindings to calendar-mode-map.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
172
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
173 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
174 (defvar initial-calendar-window-hook nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
175 "*List of functions to be called when the calendar window is first opened.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
176 The functions invoked are called after the calendar window is opened, but
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
177 once opened is never called again. Leaving the calendar with the `q' command
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
178 and reentering it will cause these functions to be called again.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
179
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
180 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
181 (defvar today-visible-calendar-hook nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
182 "*List of functions called whenever the current date is visible.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
183 This can be used, for example, to replace today's date with asterisks; a
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
184 function `calendar-star-date' is included for this purpose:
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
185 (setq today-visible-calendar-hook 'calendar-star-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
186 It could also be used to mark the current date with `='; a function is also
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
187 provided for this:
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
188 (setq today-visible-calendar-hook 'calendar-mark-today)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
189
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
190 The corresponding variable `today-invisible-calendar-hook' is the list of
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
191 functions called when the calendar function was called when the current
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
192 date is not visible in the window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
193
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
194 Other than the use of the provided functions, the changing of any
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
195 characters in the calendar buffer by the hooks may cause the failure of the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
196 functions that move by days and weeks.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
197
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
198 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
199 (defvar today-invisible-calendar-hook nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
200 "*List of functions called whenever the current date is not visible.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
201
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
202 The corresponding variable `today-visible-calendar-hook' is the list of
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
203 functions called when the calendar function was called when the current
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
204 date is visible in the window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
205
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
206 Other than the use of the provided functions, the changing of any
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
207 characters in the calendar buffer by the hooks may cause the failure of the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
208 functions that move by days and weeks.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
209
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
210 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
211 (defvar diary-file "~/diary"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
212 "*Name of the file in which one's personal diary of dates is kept.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
214 The file's entries are lines in any of the forms
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
215
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
216 MONTH/DAY
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
217 MONTH/DAY/YEAR
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
218 MONTHNAME DAY
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
219 MONTHNAME DAY, YEAR
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
220 DAYNAME
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
221
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
222 at the beginning of the line; the remainder of the line is the diary entry
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
223 string for that date. MONTH and DAY are one or two digit numbers, YEAR is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 a number and may be written in full or abbreviated to the final two digits.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
225 If the date does not contain a year, it is generic and applies to any year.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 DAYNAME entries apply to any date on which is on that day of the week.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 MONTHNAME and DAYNAME can be spelled in full, abbreviated to three
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 characters (with or without a period), capitalized or not. Any of DAY,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 MONTH, or MONTHNAME, YEAR can be `*' which matches any day, month, or year,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
230 respectively.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 The European style (in which the day precedes the month) can be used
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 instead, if you execute `european-calendar' when in the calendar, or set
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 `european-calendar-style' to t in your .emacs file. The European forms are
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 DAY/MONTH
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 DAY/MONTH/YEAR
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 DAY MONTHNAME
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 DAY MONTHNAME YEAR
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 DAYNAME
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242 To revert to the default American style from the European style, execute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 `american-calendar' in the calendar.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 A diary entry can be preceded by a diary-nonmarking-symbol (ordinarily `&')
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246 to make that entry nonmarking--that is, it will not be marked on dates in
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 the calendar window but will appear in a diary window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
249 Multiline diary entries are made by indenting lines after the first with
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 either a TAB or one or more spaces.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 Lines not in one the above formats are ignored. Here are some sample diary
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 entries (in the default American style):
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
254
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 12/22/1988 Twentieth wedding anniversary!!
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 &1/1. Happy New Year!
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 10/22 Ruth's birthday.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258 21: Payday
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259 Tuesday--weekly meeting with grad students at 10am
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 Supowit, Shen, Bitner, and Kapoor to attend.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 1/13/89 Friday the thirteenth!!
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262 &thu 4pm squash game with Lloyd.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 mar 16 Dad's birthday
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
264 April 15, 1989 Income tax due.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 &* 15 time cards due.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
266
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 If the first line of a diary entry consists only of the date or day name with
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 no trailing blanks or punctuation, then that line will not be displayed in the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
269 diary window; only the continuation lines will be shown. For example, the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
270 single diary entry
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
271
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
272 02/11/1989
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
273 Bill Blattner visits Princeton today
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
274 2pm Cognitive Studies Committee meeting
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
275 2:30-5:30 Lizzie at Lawrenceville for `Group Initiative'
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
276 4:00pm Jamie Tappenden
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
277 7:30pm Dinner at George and Ed's for Alan Ryan
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
278 7:30-10:00pm dance at Stewart Country Day School
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
279
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
280 will appear in the diary window without the date line at the beginning. This
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 facility allows the diary window to look neater, but can cause confusion if
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
282 used with more than one day's entries displayed.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
283
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
284 Diary entries can be based on Lisp sexps. For example, the diary entry
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
285
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 %%(diary-block 11 1 1990 11 10 1990) Vacation
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
288 causes the diary entry \"Vacation\" to appear from November 1 through November
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
289 10, 1990. Other functions available are `diary-float', `diary-anniversary',
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
290 `diary-cyclic', `diary-day-of-year', `diary-iso-date', `diary-french-date',
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
291 `diary-hebrew-date', `diary-islamic-date', `diary-mayan-date',
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
292 `diary-yahrzeit', `diary-sunrise-sunset', `diary-phases-of-moon',
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
293 `diary-parasha', `diary-omer', `diary-rosh-hodesh', and
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
294 `diary-sabbath-candles'. See the documentation for the function
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
295 `list-sexp-diary-entries' for more details.
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
296
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 Diary entries based on the Hebrew and/or the Islamic calendar are also
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 possible, but because these are somewhat slow, they are ignored
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 unless you set the `nongregorian-diary-listing-hook' and the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
300 `nongregorian-diary-marking-hook' appropriately. See the documentation
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
301 for these functions for details.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
302
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
303 Diary files can contain directives to include the contents of other files; for
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
304 details, see the documentation for the variable `list-diary-entries-hook'.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
305
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
306 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 (defvar diary-nonmarking-symbol "&"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 "*The symbol used to indicate that a diary entry is not to be marked in the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 calendar window.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
311 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
312 (defvar hebrew-diary-entry-symbol "H"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 "*The symbol used to indicate that a diary entry is according to the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 Hebrew calendar.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
316 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 (defvar islamic-diary-entry-symbol "I"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 "*The symbol used to indicate that a diary entry is according to the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 Islamic calendar.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
321 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 (defvar diary-include-string "#include"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
323 "*The string used to indicate the inclusion of another file of diary entries
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 in diary-file. See the documentation for the function
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
325 `include-other-diary-files'.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
327 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 (defvar sexp-diary-entry-symbol "%%"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 "*The string used to indicate a sexp diary entry in diary-file.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 See the documentation for the function `list-sexp-diary-entries'.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
332 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 (defvar abbreviated-calendar-year t
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
334 "*Interpret a two-digit year DD in a diary entry as being either 19DD or
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 20DD, as appropriate, for the Gregorian calendar; similarly for the Hebrew and
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
336 Islamic calendars. If this variable is nil, years must be written in full.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
338 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339 (defvar european-calendar-style nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 "*Use the European style of dates in the diary and in any displays. If this
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 variable is t, a date 1/2/1990 would be interpreted as February 1, 1990.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 The accepted European date styles are
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 DAY/MONTH
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 DAY/MONTH/YEAR
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 DAY MONTHNAME
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 DAY MONTHNAME YEAR
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 DAYNAME
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 Names can be capitalized or not, written in full, or abbreviated to three
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 characters with or without a period.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
352
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
353 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 (defvar american-date-diary-pattern
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 '((month "/" day "[^/0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 (month "/" day "/" year "[^0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 (monthname " *" day "[^,0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 (monthname " *" day ", *" year "[^0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 (dayname "\\W"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360 "*List of pseudo-patterns describing the American patterns of date used.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 See the documentation of diary-date-forms for an explanantion.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
363 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 (defvar european-date-diary-pattern
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 '((day "/" month "[^/0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 (day "/" month "/" year "[^0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 (backup day " *" monthname "\\W+\\<[^*0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 (day " *" monthname " *" year "[^0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 (dayname "\\W"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 "*List of pseudo-patterns describing the European patterns of date used.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 See the documentation of diary-date-forms for an explanantion.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
373 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 (defvar diary-date-forms
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 (if european-calendar-style
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 european-date-diary-pattern
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 american-date-diary-pattern)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 "*List of pseudo-patterns describing the forms of date used in the diary.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 The patterns on the list must be MUTUALLY EXCLUSIVE and must should not match
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 any portion of the diary entry itself, just the date component.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 A pseudo-pattern is a list of regular expressions and the keywords `month',
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 `day', `year', `monthname', and `dayname'. The keyword `monthname' will
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 match the name of the month, capitalized or not, or its three-letter
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 abbreviation, followed by a period or not; it will also match `*'.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 Similarly, `dayname' will match the name of the day, capitalized or not, or
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 its three-letter abbreviation, followed by a period or not. The keywords
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 `month', `day', and `year' will match those numerical values, preceded by
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389 arbitrarily many zeros; they will also match `*'.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 The matching of the diary entries with the date forms is done with the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 standard syntax table from Fundamental mode, but with the `*' changed so
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 that it is a word constituent.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 If, to be mutually exclusive, a pseudo-pattern must match a portion of the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 diary entry itself, the first element of the pattern MUST be `backup'. This
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
397 directive causes the date recognizer to back up to the beginning of the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
398 current word of the diary entry, so in no case can the pattern match more than
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
399 a portion of the first word of the diary entry.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
400
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
401 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 (defvar european-calendar-display-form
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
403 '((if dayname (concat dayname ", ")) day " " monthname " " year)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 "*The pseudo-pattern that governs the way a Gregorian date is formatted
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 in the European style. See the documentation of calendar-date-display-forms
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 for an explanantion.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
408 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 (defvar american-calendar-display-form
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
410 '((if dayname (concat dayname ", ")) monthname " " day ", " year)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 "*The pseudo-pattern that governs the way a Gregorian date is formatted
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 in the American style. See the documentation of calendar-date-display-forms
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 for an explanantion.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
415 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 (defvar calendar-date-display-form
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 (if european-calendar-style
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 european-calendar-display-form
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419 american-calendar-display-form)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 "*The pseudo-pattern that governs the way a Gregorian date is formatted
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 as a string by the function `calendar-date-string'. A pseudo-pattern is a
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
422 list of expressions that can involve the keywords `month', `day', and
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 `year', all numbers in string form, and `monthname' and `dayname', both
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
424 alphabetic strings. For example, the ISO standard would use the pseudo-
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
425 pattern
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 '(year \"-\" month \"-\" day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 while a typical American form would be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 '(month \"/\" day \"/\" (substring year -2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 and
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 '((format \"%9s, %9s %2s, %4s\" dayname monthname day year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 would give the usual American style in fixed-length fields.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 See the documentation of the function `calendar-date-string'.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
441 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
442 (defvar calendar-time-display-form
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
443 '(12-hours ":" minutes am-pm
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
444 (if time-zone " (") time-zone (if time-zone ")"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
445 "*The pseudo-pattern that governs the way a time of day is formatted.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
446
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
447 A pseudo-pattern is a list of expressions that can involve the keywords
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
448 `12-hours', `24-hours', and `minutes', all numbers in string form,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
449 and `am-pm' and `time-zone', both alphabetic strings.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
450
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
451 For example, the form
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
452
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
453 '(24-hours \":\" minutes
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
454 (if time-zone \" (\") time-zone (if time-zone \")\"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
455
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
456 would give military-style times like `21:07 (UT)'.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
457
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
458 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
459 (defvar calendar-latitude nil
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
460 "*Latitude of `calendar-location-name' in degrees, + north, - south.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
461 For example, 40.7 for New York City.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
462
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
463 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
464 (defvar calendar-longitude nil
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
465 "*Longitude of `calendar-location-name' in degrees, + east, - west.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
466 For example, -74.0 for New York City.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
467
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
468 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
469 (defvar calendar-location-name
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
470 '(let ((float-output-format "%.1f"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
471 (format "%s%s, %s%s"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
472 (abs calendar-latitude)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
473 (if (> calendar-latitude 0) "N" "S")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
474 (abs calendar-longitude)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
475 (if (> calendar-longitude 0) "E" "W")))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
476 "*An expression that evaluates to the name of the location at
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
477 `calendar-longitude', calendar-latitude'. Default value is just the latitude,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
478 longitude pair.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
479
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
480 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
481 (defvar calendar-time-zone (car (current-time-zone))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
482 "*Number of minutes difference between local standard time at
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
483 `calendar-location-name' and Universal (Greenwich) Time. For example, -300
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
484 for New York City, -480 for Los Angeles.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
485
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
486 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
487 (defvar calendar-standard-time-zone-name (car (nthcdr 2 (current-time-zone)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
488 "*Abbreviated name of standard time zone at `calendar-location-name'.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
489 For example, \"EST\" in New York City, \"PST\" for Los Angeles.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
490
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
491 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
492 (defvar calendar-daylight-time-zone-name (car (nthcdr 3 (current-time-zone)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
493 "*Abbreviated name of daylight-savings time zone at `calendar-location-name'.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
494 For example, \"EDT\" in New York City, \"PDT\" for Los Angeles.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
495
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
496 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
497 (defvar calendar-daylight-savings-starts
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
498 '(calendar-nth-named-day 1 0 4 year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
499 "*A sexp in the variable `year' that gives the Gregorian date, in the form
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
500 of a list (month day year), on which daylight savings time starts. This is
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
501 used to determine the starting date of daylight savings time for the holiday
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
502 list and for correcting times of day in the solar and lunar calculations. The
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
503 default value is the American rule of the first Sunday in April.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
504
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
505 For example, if daylight savings time is mandated to start on October 1,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
506 you would set `calendar-daylight-savings-starts' to
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
507
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
508 '(10 1 year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
509
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
510 For a more complex example, if daylight savings time begins on the first of
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
511 Nisan on the Hebrew calendar, we would set `calendar-daylight-savings-starts'
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
512 to
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
513
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
514 '(calendar-gregorian-from-absolute
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
515 (calendar-absolute-from-hebrew
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
516 (list 1 1 (+ year 3760))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
517
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
518 because Nisan is the first month in the Hebrew calendar.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
519
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
520 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
521 (defvar calendar-daylight-savings-ends
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
522 '(calendar-nth-named-day -1 0 10 year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
523 "*An expression in the variable `year' that gives the Gregorian date, in the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
524 form of a list (month day year), on which daylight savings time ends. This
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
525 is used to determine the ending date of daylight savings time for the holiday
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
526 list and for correcting times of day in the solar and lunar calculations.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
527 The default value is the American rule of the last Sunday in October.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
528 See the documentation for `calendar-daylight-savings-starts' for other
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
529 examples.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
530
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
531 (defun european-calendar ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
532 "Set the interpretation and display of dates to the European style."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
534 (setq european-calendar-style t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 (setq calendar-date-display-form european-calendar-display-form)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536 (setq diary-date-forms european-date-diary-pattern)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 (update-calendar-mode-line))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 (defun american-calendar ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 "Set the interpretation and display of dates to the American style."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
541 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 (setq european-calendar-style nil)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 (setq calendar-date-display-form american-calendar-display-form)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 (setq diary-date-forms american-date-diary-pattern)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
545 (update-calendar-mode-line))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
546
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
547 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
548 (defvar print-diary-entries-hook 'lpr-buffer
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
549 "*List of functions to be called after a temporary buffer is prepared with
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
550 the diary entries currently visible in the diary buffer. The default just
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
551 does the printing. Other uses might include, for example, rearranging the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
552 lines into order by day and time, saving the buffer instead of deleting it, or
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
553 changing the function used to do the printing.")
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
555 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
556 (defvar list-diary-entries-hook nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
557 "*List of functions to be called after the diary file is culled for
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
558 relevant entries. It is to be used for diary entries that are not found in
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
559 the diary file.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 A function `include-other-diary-files' is provided for use as the value of
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 this hook. This function enables you to use shared diary files together
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
563 with your own. The files included are specified in the diary-file by lines
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 of the form
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 #include \"filename\"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568 This is recursive; that is, #include directives in files thus included are
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 obeyed. You can change the \"#include\" to some other string by changing
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570 the variable `diary-include-string'. When you use `include-other-diary-files'
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571 as part of the list-diary-entries-hook, you will probably also want to use the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
572 function `mark-included-diary-files' as part of the mark-diary-entries-hook.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
573
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
574 For example, you could use
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
575
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
576 (setq list-diary-entries-hook
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
577 '(include-other-diary-files sort-diary-entries))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
578 (setq diary-display-hook 'fancy-diary-display)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
579
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
580 in your .emacs file to cause the fancy diary buffer to be displayed with
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
581 diary entries from various included files, each day's entries sorted into
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
582 lexicographic order.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
583
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
584 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
585 (defvar diary-display-hook 'simple-diary-display
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
586 "*List of functions that handle the display of the diary.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
587
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
588 Ordinarily, this just displays the diary buffer (with holidays indicated in
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
589 the mode line), if there are any relevant entries. At the time these
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
590 functions are called, the variable `diary-entries-list' is a list, in order
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
591 by date, of all relevant diary entries in the form of ((MONTH DAY YEAR)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
592 STRING), where string is the diary entry for the given date. This can be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
593 used, for example, to handle appointment notification, prepare a different
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
594 buffer for display (perhaps combined with holidays), or produce hard copy
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
595 output.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
596
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
597 A function `fancy-diary-display' is provided as an alternative
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
598 choice for this hook; this function prepares a special noneditable diary
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
599 buffer with the relevant diary entries that has neat day-by-day arrangement
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
600 with headings. The fancy diary buffer will show the holidays unless the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
601 variable `holidays-in-diary-buffer' is set to nil. Ordinarily, the fancy
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
602 diary buffer will not show days for which there are no diary entries, even
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
603 if that day is a holiday; if you want such days to be shown in the fancy
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
604 diary buffer, set the variable `diary-list-include-blanks' to t.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
605
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
606 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
607 (defvar nongregorian-diary-listing-hook nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
608 "*List of functions to be called for the diary file and included files as
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
609 they are processed for listing diary entries. You can use any or all of
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
610 `list-hebrew-diary-entries' and `list-islamic-diary-entries'. The
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
611 documentation for these functions describes the style of such diary entries.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
612
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
613 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 (defvar mark-diary-entries-hook nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615 "*List of functions called after marking diary entries in the calendar.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
616
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
617 A function `mark-included-diary-files' is also provided for use as the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
618 mark-diary-entries-hook; it enables you to use shared diary files together
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
619 with your own. The files included are specified in the diary-file by lines
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 of the form
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
621 #include \"filename\"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 This is recursive; that is, #include directives in files thus included are
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 obeyed. You can change the \"#include\" to some other string by changing the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 variable `diary-include-string'. When you use `mark-included-diary-files' as
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
625 part of the mark-diary-entries-hook, you will probably also want to use the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 function `include-other-diary-files' as part of the list-diary-entries-hook.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
628 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
629 (defvar nongregorian-diary-marking-hook nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
630 "*List of functions to be called as the diary file and included files are
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631 processed for marking diary entries. You can use either or both of
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 mark-hebrew-diary-entries and mark-islamic-diary-entries. The documentation
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 for these functions describes the style of such diary entries.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
635 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 (defvar diary-list-include-blanks nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
637 "*If nil, do not include days with no diary entry in the list of diary
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 entries. Such days will then not be shown in the the fancy diary buffer,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 even if they are holidays.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
641 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 (defvar holidays-in-diary-buffer t
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 "*If t, the holidays will be indicated in the mode line of the diary buffer
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644 (or in the fancy diary buffer next to the date). This slows down the diary
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
645 functions somewhat; setting it to nil will make the diary display faster.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
646
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
647 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
648 (defvar general-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
649 '((fixed 1 1 "New Year's Day")
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
650 (float 1 1 3 "Martin Luther King Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651 (fixed 2 2 "Ground Hog Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
652 (fixed 2 14 "Valentine's Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
653 (float 2 1 3 "President's Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
654 (fixed 3 17 "St. Patrick's Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
655 (fixed 4 1 "April Fool's Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
656 (float 5 0 2 "Mother's Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
657 (float 5 1 -1 "Memorial Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
658 (fixed 6 14 "Flag Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
659 (float 6 0 3 "Father's Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
660 (fixed 7 4 "Independence Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
661 (float 9 1 1 "Labor Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 (float 10 1 2 "Columbus Day")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 (fixed 10 31 "Halloween")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 (fixed 11 11 "Veteran's Day")
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
665 (float 11 4 4 "Thanksgiving"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
666 "*General holidays. Default value is for the United States. See the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
667 documentation for `calendar-holidays' for details.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
668
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
669 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
670 (defvar local-holidays nil
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
671 "*Local holidays.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
672 See the documentation for `calendar-holidays' for details.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
673
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
674 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
675 (defvar other-holidays nil
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
676 "*User defined holidays.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
677 See the documentation for `calendar-holidays' for details.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
678
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
679 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
680 (defvar hebrew-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
681 '((rosh-hashanah-etc)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
682 (if all-hebrew-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
683 (julian 11
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
684 (let* ((m displayed-month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
685 (y displayed-year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
686 (year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
687 (increment-calendar-month m y -1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
688 (let ((year (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
689 (calendar-julian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
690 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
691 (list m 1 y))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692 (if (zerop (% (1+ year) 4))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
693 22
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
694 21))) "\"Tal Umatar\" (evening)"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
695 (if all-hebrew-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
696 (hanukkah)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
697 (hebrew 9 25 "Hanukkah"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
698 (if all-hebrew-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
699 (hebrew 10
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
700 (let ((h-year (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
701 (calendar-hebrew-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
703 (list displayed-month 28 displayed-year))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
704 (if (= (% (calendar-absolute-from-hebrew (list 10 10 h-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
705 7)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
706 6)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
707 11 10))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
708 "Tzom Teveth"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
709 (if all-hebrew-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
710 (hebrew 11 15 "Tu B'Shevat"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
711 (if all-hebrew-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
712 (hebrew
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
713 11
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
714 (let ((m displayed-month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
715 (y displayed-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 (increment-calendar-month m y 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
717 (let* ((h-year (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 (calendar-hebrew-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
719 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
720 (list m
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
721 (calendar-last-day-of-month m y)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
722 y)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
723 (s-s
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
724 (calendar-hebrew-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725 (if (=
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
726 (% (calendar-absolute-from-hebrew
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 (list 7 1 h-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
728 7)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
729 6)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
730 (calendar-dayname-on-or-before
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
731 6 (calendar-absolute-from-hebrew
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
732 (list 11 17 h-year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
733 (calendar-dayname-on-or-before
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
734 6 (calendar-absolute-from-hebrew
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
735 (list 11 16 h-year))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736 (day (extract-calendar-day s-s)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
737 day))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 "Shabbat Shirah"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 (passover-etc)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
740 (if (and all-hebrew-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
741 (let* ((m displayed-month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
742 (y displayed-year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
743 (year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
744 (increment-calendar-month m y -1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
745 (let ((year (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
746 (calendar-julian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
747 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
748 (list m 1 y))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
749 (= 21 (% year 28)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
750 (julian 3 26 "Kiddush HaHamah"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
751 (if all-hebrew-calendar-holidays
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
752 (tisha-b-av-etc)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
753 "*Jewish holidays.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
754 See the documentation for `calendar-holidays' for details.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
755
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
756 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
757 (defvar christian-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
758 '((if all-christian-calendar-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
759 (fixed 1 6 "Epiphany"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
760 (easter-etc)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
761 (if all-christian-calendar-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
762 (greek-orthodox-easter))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
763 (if all-christian-calendar-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
764 (fixed 8 15 "Assumption"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
765 (if all-christian-calendar-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
766 (advent))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
767 (fixed 12 25 "Christmas")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
768 (if all-christian-calendar-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
769 (julian 12 25 "Eastern Orthodox Christmas")))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
770 "*Christian holidays.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
771 See the documentation for `calendar-holidays' for details.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
772
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
773 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
774 (defvar islamic-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
775 '((islamic 1 1 (format "Islamic New Year %d"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
776 (let ((m displayed-month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
777 (y displayed-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
778 (increment-calendar-month m y 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 (calendar-islamic-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
782 (list m (calendar-last-day-of-month m y) y)))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
783 (if all-islamic-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 (islamic 1 10 "Ashura"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 (if all-islamic-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
786 (islamic 3 12 "Mulad-al-Nabi"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 (if all-islamic-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
788 (islamic 7 26 "Shab-e-Mi'raj"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
789 (if all-islamic-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
790 (islamic 8 15 "Shab-e-Bara't"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
791 (islamic 9 1 "Ramadan Begins")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
792 (if all-islamic-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
793 (islamic 9 27 "Shab-e Qadr"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
794 (if all-islamic-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
795 (islamic 10 1 "Id-al-Fitr"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
796 (if all-islamic-calendar-holidays
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
797 (islamic 12 10 "Id-al-Adha")))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
798 "*Islamic holidays.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
799 See the documentation for `calendar-holidays' for details.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
800
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
801 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
802 (defvar solar-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
803 '((if (fboundp 'atan)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
804 (solar-equinoxes-solstices))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
805 (sexp (eval calendar-daylight-savings-starts)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
806 "Daylight Savings Time Begins")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
807 (sexp (eval calendar-daylight-savings-ends)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
808 "Daylight Savings Time Ends"))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
809 "*Sun-related holidays.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
810 See the documentation for `calendar-holidays' for details.")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
811
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
812 ;;;###autoload
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
813 (defvar calendar-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
814 (append general-holidays local-holidays other-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
815 christian-holidays hebrew-holidays islamic-holidays
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
816 solar-holidays)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
817 "*List of notable days for the command M-x holidays.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
818
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
819 Additional holidays are easy to add to the list, just put them in the list
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
820 `other-holidays' in your .emacs file. Similarly, by setting any of
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
821 `general-holidays', `local-holidays' `christian-holidays', `hebrew-holidays',
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
822 `islamic-holidays', or `solar-holidays' to nil in your .emacs file, you can
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
823 eliminate unwanted categories of holidays. The intention is that (in the US)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
824 `local-holidays' be set in site-init.el and `other-holidays' be set by the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
825 user.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
826
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
827 The possible holiday-forms are as follows:
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
828
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
829 (fixed MONTH DAY STRING) a fixed date on the Gregorian calendar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
830 (float MONTH DAYNAME K STRING) the Kth DAYNAME in MONTH on the Gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
831 calendar (0 for Sunday, etc.); K<0 means
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
832 count back from the end of the month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
833 (hebrew MONTH DAY STRING) a fixed date on the Hebrew calendar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
834 (islamic MONTH DAY STRING) a fixed date on the Islamic calendar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
835 (julian MONTH DAY STRING) a fixed date on the Julian calendar
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
836 (sexp SEXP STRING) SEXP is a Gregorian-date-valued expression
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
837 in the variable `year'; if it evaluates to
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
838 a visible date, that's the holiday; if it
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
839 evaluates to nil, there's no holiday
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840 (if BOOLEAN HOLIDAY-FORM &optional HOLIDAY-FORM) gives a choice between
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 two holidays based on the value of BOOLEAN
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842 (FUNCTION &optional ARGS) dates requiring special computation; ARGS,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 if any, are passed in a list to the function
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 `calendar-holiday-function-FUNCTION'
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 For example, to add Bastille Day, celebrated in France on July 14, add
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 (fixed 7 14 \"Bastille Day\")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850 to the list. To add Hurricane Supplication Day, celebrated in the Virgin
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 Islands on the fourth Monday in August, add
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
852
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853 (float 8 1 4 \"Hurricane Supplication Day\")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
855 to the list (the last Monday would be specified with `-1' instead of `4').
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
856 To add the last day of Hanukkah to the list, use
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
857
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
858 (hebrew 10 2 \"Last day of Hanukkah\")
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 since the Hebrew months are numbered with 1 starting from Nisan, while to
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 add the Islamic feast celebrating Mohammed's birthday use
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863 (islamic 3 12 \"Mohammed's Birthday\")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
865 since the Islamic months are numbered from 1 starting with Muharram. To
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
866 add Thomas Jefferson's birthday, April 2, 1743 (Julian), use
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868 (julian 4 2 \"Jefferson's Birthday\")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
869
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
870 To include a holiday conditionally, use the if or the sexp form. For example,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
871 to include American presidential elections, which occur on the first Tuesday
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 after the first Monday in November of years divisble by 4, add
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
874 (sexp (if (zerop (% year 4))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
875 (calendar-gregorian-from-absolute
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
876 (1+ (calendar-dayname-on-or-before
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
877 1 (+ 6 (calendar-absolute-from-gregorian
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
878 (list 11 1 year)))))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
879 \"US Presidential Election\")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
880
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
881 or
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
882
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 (if (zerop (% displayed-year 4))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 (fixed 11
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 (extract-calendar-day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 (calendar-gregorian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 (1+ (calendar-dayname-on-or-before
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
888 1 (+ 6 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
889 (list 11 1 displayed-year)))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
890 \"US Presidential Election\"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
891
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
892 to the list. To include the phases of the moon, add
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
893
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
894 (lunar-phases)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
895
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
896 to the holiday list, where `calendar-holiday-function-lunar-phases' is an
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
897 Emacs-Lisp function that you've written to return a (possibly empty) list of
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
898 the relevant VISIBLE dates with descriptive strings such as
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
899
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 (((2 6 1989) \"New Moon\") ((2 12 1989) \"First Quarter Moon\") ... )
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
902 The fixed, float, hebrew, islamic, julian, sexp, and if forms are implemented
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
903 by the inclusion of the functions `calendar-holiday-function-fixed',
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
904 `calendar-holiday-function-float', `calendar-holiday-function-hebrew',
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905 `calendar-holiday-function-islamic', `calendar-holiday-function-julian',
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
906 `calendar-holiday-function-sexp', and `calendar-holiday-function-if',
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
907 respectively.")
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
908
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
909 (defconst calendar-buffer "*Calendar*"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 "Name of the buffer used for the calendar.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
911
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
912 (defconst holiday-buffer "*Holidays*"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 "Name of the buffer used for the displaying the holidays.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 (defconst fancy-diary-buffer "*Fancy Diary Entries*"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916 "Name of the buffer used for the optional fancy display of the diary.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 (defmacro increment-calendar-month (mon yr n)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
919 "Move the variables MON and YR to the month and year N months forward
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
920 if N is positive or backward if N is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 (` (let (( macro-y (+ (* (, yr) 12) (, mon) -1 (, n) )))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 (setq (, mon) (1+ (% macro-y 12) ))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 (setq (, yr) (/ macro-y 12)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
925 (defmacro calendar-for-loop (var from init to final do &rest body)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
926 "Execute a for loop."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 (` (let (( (, var) (1- (, init)) ))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928 (while (>= (, final) (setq (, var) (1+ (, var))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
929 (,@ body)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 (defmacro calendar-sum (index initial condition expression)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932 "For INDEX = INITIAL and successive integers, as long as CONDITION holds,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
933 sum EXPRESSION."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
934 (` (let (( (, index) (, initial))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 (sum 0))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 (while (, condition)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 (setq sum (+ sum (, expression) ))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 (setq (, index) (1+ (, index))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
939 sum)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
941 ;; The following macros are for speed; the code would be clearer if they
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
942 ;; were functions, but they can be called thousands of times when
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
943 ;; looking up holidays or processing the diary. Here, for example, are the
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
944 ;; numbers of calls to calendar/diary/holiday functions in preparing the
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
945 ;; fancy diary display, for a moderately complex diary file, with functions
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
946 ;; used instead of macros. There were a total of 10000 such calls:
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
947 ;;
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
948 ;; 1934 extract-calendar-month
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
949 ;; 1852 extract-calendar-year
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
950 ;; 1819 extract-calendar-day
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
951 ;; 845 calendar-leap-year-p
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
952 ;; 837 calendar-day-number
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
953 ;; 775 calendar-absolute-from-gregorian
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
954 ;; 346 calendar-last-day-of-month
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
955 ;; 286 hebrew-calendar-last-day-of-month
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
956 ;; 188 hebrew-calendar-leap-year-p
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
957 ;; 180 hebrew-calendar-elapsed-days
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
958 ;; 163 hebrew-calendar-last-month-of-year
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
959 ;; 66 calendar-date-compare
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
960 ;; 65 hebrew-calendar-days-in-year
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
961 ;; 60 calendar-absolute-from-julian
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
962 ;; 50 calendar-absolute-from-hebrew
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
963 ;; 43 calendar-date-equal
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
964 ;; 38 calendar-gregorian-from-absolute
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
965 ;; .
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
966 ;; .
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
967 ;; .
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
968 ;;
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
969 ;; The use of these seven macros eliminates the overhead of 92% of the function
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
970 ;; calls; it's faster this way. For clarity, the defun form of each is given
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
971 ;; in comments after the defmacro form.
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
972
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 (defmacro extract-calendar-month (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
974 "Extract the month part of DATE which has the form (month day year)."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975 (` (car (, date))))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
976 ;;(defun extract-calendar-month (date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
977 ;; "Extract the month part of DATE which has the form (month day year)."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
978 ;; (car date))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 (defmacro extract-calendar-day (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 "Extract the day part of DATE which has the form (month day year)."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 (` (car (cdr (, date)))))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
983 ;;(defun extract-calendar-day (date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
984 ;; "Extract the day part of DATE which has the form (month day year)."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
985 ;; (car (cdr date)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 (defmacro extract-calendar-year (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 "Extract the year part of DATE which has the form (month day year)."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 (` (car (cdr (cdr (, date))))))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
990 ;;(defun extract-calendar-year (date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
991 ;; "Extract the year part of DATE which has the form (month day year)."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
992 ;; (car (cdr (cdr date))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
993
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
994 (defmacro calendar-leap-year-p (year)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
995 "Returns t if YEAR is a Gregorian leap year."
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
996 (` (or
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
997 (and (= (% (, year) 4) 0)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
998 (/= (% (, year) 100) 0))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
999 (= (% (, year) 400) 0))))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1000 ;;(defun calendar-leap-year-p (year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1001 ;; "Returns t if YEAR is a Gregorian leap year."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1002 ;; (or
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1003 ;; (and (= (% year 4) 0)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1004 ;; (/= (% year 100) 0))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1005 ;; (= (% year 400) 0)))
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1006
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1007 (defmacro calendar-last-day-of-month (month year)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1008 "The last day in MONTH during YEAR."
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1009 (` (if (and
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1010 (, (macroexpand (` (calendar-leap-year-p (, year)))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1011 (= (, month) 2))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1012 29
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1013 (aref [31 28 31 30 31 30 31 31 30 31 30 31] (1- (, month))))))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1014 ;;(defun calendar-last-day-of-month (month year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1015 ;; "The last day in MONTH during YEAR."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1016 ;; (if (and (calendar-leap-year-p year) (= month 2))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1017 ;; 29
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1018 ;; (aref [31 28 31 30 31 30 31 31 30 31 30 31] (1- month))))
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1019
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1020 (defmacro calendar-day-number (date)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1021 "Return the day number within the year of the date DATE.
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1022 For example, (calendar-day-number '(1 1 1987)) returns the value 1,
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1023 while (calendar-day-number '(12 31 1980)) returns 366."
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1024 ;;
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1025 ;; An explanation of the calculation can be found in PascAlgorithms by
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1026 ;; Edward and Ruth Reingold, Scott-Foresman/Little, Brown, 1988.
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1027 ;;
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1028 (` (let* ((month (, (macroexpand (` (extract-calendar-month (, date))))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1029 (day (, (macroexpand (` (extract-calendar-day (, date))))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1030 (year (, (macroexpand (` (extract-calendar-year (, date))))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1031 (day-of-year (+ day (* 31 (1- month)))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1032 (if (> month 2)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1033 (progn
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1034 (setq day-of-year (- day-of-year (/ (+ 23 (* 4 month)) 10)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1035 (if (, (macroexpand (` (calendar-leap-year-p year))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1036 (setq day-of-year (1+ day-of-year)))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1037 day-of-year)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1038 ;;(defun calendar-day-number (date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1039 ;; "Return the day number within the year of the date DATE.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1040 ;;For example, (calendar-day-number '(1 1 1987)) returns the value 1,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1041 ;;while (calendar-day-number '(12 31 1980)) returns 366."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1042 ;; (let* ((month (extract-calendar-month date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1043 ;; (day (extract-calendar-day date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1044 ;; (year (extract-calendar-year date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1045 ;; (day-of-year (+ day (* 31 (1- month)))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1046 ;; (if (> month 2)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1047 ;; (progn
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1048 ;; (setq day-of-year (- day-of-year (/ (+ 23 (* 4 month)) 10)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1049 ;; (if (calendar-leap-year-p year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1050 ;; (setq day-of-year (1+ day-of-year)))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1051 ;; day-of-year))
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1052
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1053 (defmacro calendar-absolute-from-gregorian (date)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1054 "The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1055 The Gregorian date Sunday, December 31, 1 BC is imaginary."
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1056 (` (let ((month (, (macroexpand (` (extract-calendar-month (, date))))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1057 (day (, (macroexpand (` (extract-calendar-day (, date))))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1058 (year (, (macroexpand (` (extract-calendar-year (, date)))))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1059 (+ (, (macroexpand (` (calendar-day-number (, date)))));; Days this year
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1060 (* 365 (1- year));; + Days in prior years
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1061 (/ (1- year) 4);; + Julian leap years
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1062 (- (/ (1- year) 100));; - century years
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1063 (/ (1- year) 400)))));; + Gregorian leap years
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1064 ;;(defun calendar-absolute-from-gregorian (date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1065 ;; "The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1066 ;;The Gregorian date Sunday, December 31, 1 BC is imaginary."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1067 ;; (let ((month (extract-calendar-month date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1068 ;; (day (extract-calendar-day date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1069 ;; (year (extract-calendar-year date)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1070 ;; (+ (calendar-day-number date);; Days this year
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1071 ;; (* 365 (1- year));; + Days in prior years
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1072 ;; (/ (1- year) 4);; + Julian leap years
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1073 ;; (- (/ (1- year) 100));; - century years
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1074 ;; (/ (1- year) 400))));; + Gregorian leap years
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1075
675
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 628
diff changeset
1076 ;;;###autoload
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1077 (defun calendar (&optional arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1078 "Display a three-month calendar in another window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1079 The three months appear side by side, with the current month in the middle
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1080 surrounded by the previous and next months. The cursor is put on today's date.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1081
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1082 If called with an optional prefix argument, prompts for month and year.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1083
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1084 This function is suitable for execution in a .emacs file; appropriate setting
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1085 of the variable `view-diary-entries-initially' will cause the diary entries for
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1086 the current date to be displayed in another window. The value of the variable
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1087 `number-of-diary-entries' controls the number of days of diary entries
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1088 displayed upon initial display of the calendar.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1089
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1090 An optional prefix argument ARG causes the calendar displayed to be ARG
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1091 months in the future if ARG is positive or in the past if ARG is negative;
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092 in this case the cursor goes on the first day of the month.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 Once in the calendar window, future or past months can be moved into view.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095 Arbitrary months can be displayed, or the calendar can be scrolled forward
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 or backward.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1097
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 The cursor can be moved forward or backward by one day, one week, one month,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 or one year. All of these commands take prefix arguments which, when negative,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 cause movement in the opposite direction. For convenience, the digit keys
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 and the minus sign are automatically prefixes. The window is replotted as
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 necessary to display the desired date.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 Diary entries can be marked on the calendar or displayed in another window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 Use M-x describe-mode for details of the key bindings in the calendar window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 The Gregorian calendar is assumed.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1110 After loading the calendar, the hooks given by the variable
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1111 `calendar-load-hook' are run. This the place to add key bindings to the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1112 calendar-mode-map.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1113
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1114 After preparing the calendar window initially, the hooks given by the variable
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 `initial-calendar-window-hook' are run.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1116
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1117 The hooks given by the variable `today-visible-calendar-hook' are run
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 everytime the calendar window gets scrolled, if the current date is visible
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 in the window. If it is not visible, the hooks given by the variable
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 `today-invisible-calendar-hook' are run. Thus, for example, setting
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 `today-visible-calendar-hook' to 'calendar-star-date will cause today's date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 to be replaced by asterisks to highlight it whenever it is in the window."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1123 (interactive "P")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 (set-buffer (get-buffer-create calendar-buffer))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1125 (calendar-mode)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 (setq calendar-window-configuration (current-window-configuration))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1127 (let* ((completion-ignore-case t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1128 (pop-up-windows t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1129 (split-height-threshold 1000)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1130 (date (calendar-current-date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1131 (month
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1132 (if arg
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1133 (cdr (assoc
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1134 (capitalize
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1135 (completing-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1136 "Month name: "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1137 (mapcar 'list (append calendar-month-name-array nil))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1138 nil t))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1139 (calendar-make-alist calendar-month-name-array)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1140 (extract-calendar-month date)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1141 (year
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1142 (if arg
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1143 (calendar-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1144 "Year (>0): "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1145 '(lambda (x) (> x 0))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1146 (int-to-string (extract-calendar-year date)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1147 (extract-calendar-year date))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 (pop-to-buffer calendar-buffer)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1149 (generate-calendar-window month year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1150 (if (and view-diary-entries-initially (calendar-date-is-visible-p date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1151 (view-diary-entries
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1152 (if (vectorp number-of-diary-entries)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1153 (aref number-of-diary-entries (calendar-day-of-week date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1154 number-of-diary-entries))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1155 (let* ((diary-buffer (get-file-buffer diary-file))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1156 (diary-window (if diary-buffer (get-buffer-window diary-buffer)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1157 (split-height-threshold (if diary-window 2 1000)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1158 (if view-calendar-holidays-initially
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1159 (list-calendar-holidays)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1160 (run-hooks 'initial-calendar-window-hook))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1161
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1162 (autoload 'view-diary-entries "diary"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1163 "Prepare and display a buffer with diary entries.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 Searches the file diary-file for entries that match ARG days starting with
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1165 the date indicated by the cursor position in the displayed three-month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166 calendar."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1168
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1169 (autoload 'calendar-sunrise-sunset "solar"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1170 "Local time of sunrise and sunset for date under cursor."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1171 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1172
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1173 (autoload 'calendar-phases-of-moon "lunar"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1174 "Create a buffer of the phases of the moon for the current calendar window."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1175 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1176
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1177 (autoload 'calendar-print-french-date "cal-french"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1178 "Show the French Revolutionary calendar equivalent of the date under the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1179 cursor."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1180 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1181
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1182 (autoload 'calendar-goto-french-date "cal-french"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1183 "Move cursor to French Revolutionary date."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1184 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1185
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1186 (autoload 'calendar-print-mayan-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1187 "Show the Mayan long count, Tzolkin, and Haab equivalents of the date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1188 under the cursor."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1189 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1190
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1191 (autoload 'calendar-goto-mayan-long-count-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1192 "Move cursor to Mayan long count date."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1193 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1194
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1195 (autoload 'calendar-next-haab-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1196 "Move cursor to next instance of Mayan Haab date."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1197 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1198
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1199 (autoload 'calendar-previous-haab-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1200 "Move cursor to previous instance of Mayan Haab date."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1201 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1202
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1203 (autoload 'calendar-next-tzolkin-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1204 "Move cursor to next instance of Mayan Tzolkin date."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1205 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1206
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1207 (autoload 'calendar-previous-tzolkin-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1208 "Move cursor to previous instance of Mayan Tzolkin date."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1209 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1210
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1211 (autoload 'calendar-next-calendar-round-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1212 "Move cursor to next instance of Mayan Haab/Tzoklin combination."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1213 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1214
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1215 (autoload 'calendar-previous-calendar-round-date "cal-mayan"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1216 "Move cursor to previous instance of Mayan Haab/Tzoklin combination."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1217 t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1218
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1219 (autoload 'show-all-diary-entries "diary"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1220 "Show all of the diary entries in the diary-file.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221 This function gets rid of the selective display of the diary-file so that
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1222 all entries, not just some, are visible. If there is no diary buffer, one
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1223 is created."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1226 (autoload 'mark-diary-entries "diary"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1227 "Mark days in the calendar window that have diary entries.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228 Each entry in diary-file visible in the calendar window is marked."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1231 (autoload 'insert-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 "Insert a diary entry for the date indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1235 (autoload 'insert-weekly-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236 "Insert a weekly diary entry for the day of the week indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1239 (autoload 'insert-monthly-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240 "Insert a monthly diary entry for the day of the month indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1243 (autoload 'insert-yearly-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 "Insert an annual diary entry for the day of the year indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1246
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1247 (autoload 'insert-anniversary-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 "Insert an anniversary diary entry for the date indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1251 (autoload 'insert-block-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 "Insert a block diary entry for the dates indicated by point and mark."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1255 (autoload 'insert-cyclic-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256 "Insert a cyclic diary entry starting at the date indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1259 (autoload 'insert-hebrew-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 "Insert a diary entry for the Hebrew date corresponding to the date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1264 (autoload 'insert-monthly-hebrew-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1265 "Insert a monthly diary entry for the day of the Hebrew month corresponding
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1266 to the date indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1267 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1269 (autoload 'insert-yearly-hebrew-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 "Insert an annual diary entry for the day of the Hebrew year corresponding
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 to the date indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1272 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1274 (autoload 'insert-islamic-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1275 "Insert a diary entry for the Islamic date corresponding to the date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1279 (autoload 'insert-monthly-islamic-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 "Insert a monthly diary entry for the day of the Islamic month corresponding
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 to the date indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1284 (autoload 'insert-yearly-islamic-diary-entry "diary-insert"
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 "Insert an annual diary entry for the day of the Islamic year corresponding
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286 to the date indicated by point."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 (autoload 'list-calendar-holidays "holidays"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 "Create a buffer containing the holidays for the current calendar window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 The holidays are those in the list `calendar-notable-days'. Returns t if any
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292 holidays are found, nil if not."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295 (autoload 'mark-calendar-holidays "holidays"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 "Mark notable days in the calendar window."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1297 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1299 (autoload 'calendar-cursor-holidays "holidays"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1300 "Find holidays for the date specified by the cursor in the calendar window."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1301 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1302
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1303 (defun generate-calendar-window (&optional mon yr)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1304 "Generate the calendar window for the current date.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1305 Or, for optional MON, YR."
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 (let* ((buffer-read-only nil)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1307 (today (calendar-current-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1308 (month (extract-calendar-month today))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1309 (day (extract-calendar-day today))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310 (year (extract-calendar-year today))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1311 (today-visible
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1312 (or (not mon)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1313 (let ((offset (calendar-interval mon yr month year)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1314 (and (<= offset 1) (>= offset -1)))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1315 (day-in-week (calendar-day-of-week today)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1316 (update-calendar-mode-line)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1317 (if mon
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1318 (generate-calendar mon yr)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1319 (generate-calendar month year))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 (calendar-cursor-to-visible-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1321 (if today-visible today (list displayed-month 1 displayed-year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 (set-buffer-modified-p nil)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1323 (or (one-window-p t)
811
e694e0879463 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 732
diff changeset
1324 (/= (frame-width) (window-width))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1325 (shrink-window (- (window-height) 9)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1326 (sit-for 0)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1327 (and mark-holidays-in-calendar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1328 (mark-calendar-holidays)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1329 (sit-for 0))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1330 (unwind-protect
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1331 (if mark-diary-entries-in-calendar (mark-diary-entries))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1332 (if today-visible
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1333 (run-hooks 'today-visible-calendar-hook)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1334 (run-hooks 'today-invisible-calendar-hook)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1335
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1336 (defun generate-calendar (month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 "Generate a three-month Gregorian calendar centered around MONTH, YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1338 (if (< (+ month (* 12 (1- year))) 2)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1339 (error "Months before February, 1 AD are not available."))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1340 (setq displayed-month month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1341 (setq displayed-year year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1342 (erase-buffer)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1343 (increment-calendar-month month year -1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1344 (calendar-for-loop i from 0 to 2 do
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1345 (generate-calendar-month month year (+ 5 (* 25 i)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1346 (increment-calendar-month month year 1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1347
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1348 (defun generate-calendar-month (month year indent)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 "Produce a calendar for MONTH, YEAR on the Gregorian calendar.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1350 The calendar is inserted in the buffer starting at the line on which point
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1351 is currently located, but indented INDENT spaces. The indentation is done
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352 from the first character on the line and does not disturb the first INDENT
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 characters on the line."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1354 (let* ((first-day-of-month (calendar-day-of-week (list month 1 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 (first-saturday (- 7 first-day-of-month))
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1356 (last (calendar-last-day-of-month month year))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1357 (heading (format "%s %d" (calendar-month-name month) year)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1358 (goto-char (point-min))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1359 (calendar-insert-indented
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
1360 heading (+ indent (/ (- 20 (length heading)) 2)) t)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1361 (calendar-insert-indented " S M Tu W Th F S" indent t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1362 (calendar-insert-indented "" indent);; Move to appropriate spot on line
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1363 ;; Add blank days before the first of the month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1364 (calendar-for-loop i from 1 to first-day-of-month do
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1365 (insert " "))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1366 ;; Put in the days of the month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1367 (calendar-for-loop i from 1 to last do
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1368 (insert (format "%2d " i))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1369 (and (= (% i 7) (% first-saturday 7))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 (/= i last)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371 (calendar-insert-indented "" 0 t) ;; Force onto following line
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1372 (calendar-insert-indented "" indent)))));; Go to proper spot
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1373
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1374 (defun calendar-insert-indented (string indent &optional newline)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1375 "Insert STRING at column INDENT.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1376 If the optional parameter NEWLINE is t, leave point at start of next line,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1377 inserting a newline if there was no next line; otherwise, leave point after
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1378 the inserted text. Value is always t."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379 ;; Try to move to that column.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1380 (move-to-column indent)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1381 ;; If line is too short, indent out to that column.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1382 (if (< (current-column) indent)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1383 (indent-to indent))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1384 (insert string)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1385 ;; Advance to next line, if requested.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1386 (if newline
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1387 (progn
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1388 (end-of-line)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1389 (if (eobp)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1390 (newline)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391 (forward-line 1))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1394 (defun redraw-calendar ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 "Redraw the calendar display."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 (let ((cursor-date (calendar-cursor-to-date)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1398 (generate-calendar-window displayed-month displayed-year)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 (calendar-cursor-to-visible-date cursor-date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1401 (defvar calendar-mode-map nil)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1402 (if calendar-mode-map
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1404 (setq calendar-mode-map (make-sparse-keymap))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1405 (calendar-for-loop i from 0 to 9 do
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1406 (define-key calendar-mode-map (int-to-string i) 'digit-argument))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1407 (let ((l (list 'narrow-to-region 'mark-word 'mark-sexp 'mark-paragraph
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 'mark-defun 'mark-whole-buffer 'mark-page 'kill-region
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 'copy-region-as-kill 'downcase-region 'upcase-region
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 'capitalize-region 'write-region)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 (while (car l)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 (let ((k (where-is-internal (car l))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 (while (car k)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 (define-key calendar-mode-map (car k) 'calendar-not-implemented)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1415 (setq k (cdr k)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1416 (setq l (cdr l)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1417 (define-key calendar-mode-map "-" 'negative-argument)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1418 (define-key calendar-mode-map "\C-x>" 'scroll-calendar-right)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 (define-key calendar-mode-map "\ev" 'scroll-calendar-right-three-months)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1420 (define-key calendar-mode-map "\C-x<" 'scroll-calendar-left)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 (define-key calendar-mode-map "\C-v" 'scroll-calendar-left-three-months)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 (define-key calendar-mode-map "\C-b" 'calendar-backward-day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1423 (define-key calendar-mode-map "\C-p" 'calendar-backward-week)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1424 (define-key calendar-mode-map "\e{" 'calendar-backward-month)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 (define-key calendar-mode-map "\C-x[" 'calendar-backward-year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 (define-key calendar-mode-map "\C-f" 'calendar-forward-day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 (define-key calendar-mode-map "\C-n" 'calendar-forward-week)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1428 (define-key calendar-mode-map "\e}" 'calendar-forward-month)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1429 (define-key calendar-mode-map "\C-x]" 'calendar-forward-year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 (define-key calendar-mode-map "\C-a" 'calendar-beginning-of-week)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 (define-key calendar-mode-map "\C-e" 'calendar-end-of-week)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432 (define-key calendar-mode-map "\ea" 'calendar-beginning-of-month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 (define-key calendar-mode-map "\ee" 'calendar-end-of-month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1434 (define-key calendar-mode-map "\e<" 'calendar-beginning-of-year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1435 (define-key calendar-mode-map "\e>" 'calendar-end-of-year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1436 (define-key calendar-mode-map "\C-@" 'calendar-set-mark)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1437 (define-key calendar-mode-map "\C-x\C-x" 'calendar-exchange-point-and-mark)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1438 (define-key calendar-mode-map "\e=" 'calendar-count-days-region)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1439 (define-key calendar-mode-map "gd" 'calendar-goto-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1440 (define-key calendar-mode-map "gj" 'calendar-goto-julian-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1441 (define-key calendar-mode-map "ga" 'calendar-goto-astro-day-number)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1442 (define-key calendar-mode-map "gh" 'calendar-goto-hebrew-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1443 (define-key calendar-mode-map "gi" 'calendar-goto-islamic-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1444 (define-key calendar-mode-map "gc" 'calendar-goto-iso-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1445 (define-key calendar-mode-map "gf" 'calendar-goto-french-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1446 (define-key calendar-mode-map "gml" 'calendar-goto-mayan-long-count-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1447 (define-key calendar-mode-map "gmpc" 'calendar-previous-calendar-round-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1448 (define-key calendar-mode-map "gmnc" 'calendar-next-calendar-round-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1449 (define-key calendar-mode-map "gmph" 'calendar-previous-haab-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1450 (define-key calendar-mode-map "gmnh" 'calendar-next-haab-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1451 (define-key calendar-mode-map "gmpt" 'calendar-previous-tzolkin-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1452 (define-key calendar-mode-map "gmnt" 'calendar-next-tzolkin-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1453 (define-key calendar-mode-map "S" 'calendar-sunrise-sunset)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1454 (define-key calendar-mode-map "M" 'calendar-phases-of-moon)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1455 (define-key calendar-mode-map " " 'scroll-other-window)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1456 (define-key calendar-mode-map "\C-c\C-l" 'redraw-calendar)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1457 (define-key calendar-mode-map "." 'calendar-current-month)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1458 (define-key calendar-mode-map "o" 'calendar-other-month)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1459 (define-key calendar-mode-map "q" 'exit-calendar)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1460 (define-key calendar-mode-map "a" 'list-calendar-holidays)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1461 (define-key calendar-mode-map "h" 'calendar-cursor-holidays)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1462 (define-key calendar-mode-map "x" 'mark-calendar-holidays)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1463 (define-key calendar-mode-map "u" 'calendar-unmark)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1464 (define-key calendar-mode-map "m" 'mark-diary-entries)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1465 (define-key calendar-mode-map "d" 'view-diary-entries)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1466 (define-key calendar-mode-map "s" 'show-all-diary-entries)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1467 (define-key calendar-mode-map "pd" 'calendar-print-day-of-year)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1468 (define-key calendar-mode-map "pc" 'calendar-print-iso-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1469 (define-key calendar-mode-map "pj" 'calendar-print-julian-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1470 (define-key calendar-mode-map "pa" 'calendar-print-astro-day-number)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1471 (define-key calendar-mode-map "ph" 'calendar-print-hebrew-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1472 (define-key calendar-mode-map "pi" 'calendar-print-islamic-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1473 (define-key calendar-mode-map "pf" 'calendar-print-french-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1474 (define-key calendar-mode-map "pm" 'calendar-print-mayan-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1475 (define-key calendar-mode-map "id" 'insert-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1476 (define-key calendar-mode-map "iw" 'insert-weekly-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1477 (define-key calendar-mode-map "im" 'insert-monthly-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1478 (define-key calendar-mode-map "iy" 'insert-yearly-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1479 (define-key calendar-mode-map "ia" 'insert-anniversary-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1480 (define-key calendar-mode-map "ib" 'insert-block-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1481 (define-key calendar-mode-map "ic" 'insert-cyclic-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1482 (define-key calendar-mode-map "ihd" 'insert-hebrew-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1483 (define-key calendar-mode-map "ihm" 'insert-monthly-hebrew-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1484 (define-key calendar-mode-map "ihy" 'insert-yearly-hebrew-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1485 (define-key calendar-mode-map "iid" 'insert-islamic-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1486 (define-key calendar-mode-map "iim" 'insert-monthly-islamic-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1487 (define-key calendar-mode-map "iiy" 'insert-yearly-islamic-diary-entry)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1488 (define-key calendar-mode-map "?" 'describe-calendar-mode))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1489
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1490 (defun describe-calendar-mode ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1491 "Create a help buffer with a brief description of the calendar-mode."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1492 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1493 (with-output-to-temp-buffer "*Help*"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1494 (princ
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1495 (format
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1496 "Calendar Mode:\nFor a complete description, type %s\n%s\n"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1497 (substitute-command-keys
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1498 "\\<calendar-mode-map>\\[describe-mode] from within the calendar")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1499 (substitute-command-keys "\\{calendar-mode-map}")))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1500 (print-help-return-message)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1501
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1502 ;; Calendar mode is suitable only for specially formatted data.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1503 (put 'calendar-mode 'mode-class 'special)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1504
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 (defvar calendar-mode-line-format
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1506 (list
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1507 (substitute-command-keys "\\<calendar-mode-map>\\[scroll-calendar-left]")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1508 "Calendar"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1509 (substitute-command-keys "\\<calendar-mode-map>\\[describe-calendar-mode] help/\\[calendar-other-month] other/\\[calendar-current-month] current")
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1510 '(calendar-date-string (calendar-current-date) t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1511 (substitute-command-keys "\\<calendar-mode-map>\\[scroll-calendar-right]"))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1512 "The mode line of the calendar buffer.")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1513
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 (defun calendar-mode ()
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1515 "A major mode for the calendar window.
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1516
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1517 The commands for cursor movement are:\\<calendar-mode-map>
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1518
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1519 \\[calendar-forward-day] one day forward \\[calendar-backward-day] one day backward
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1520 \\[calendar-forward-week] one week forward \\[calendar-backward-week] one week backward
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 \\[calendar-forward-month] one month forward \\[calendar-backward-month] one month backward
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 \\[calendar-forward-year] one year forward \\[calendar-backward-year] one year backward
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1523 \\[calendar-beginning-of-week] beginning of week \\[calendar-end-of-week] end of week
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 \\[calendar-beginning-of-month] beginning of month \\[calendar-end-of-month] end of month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 \\[calendar-beginning-of-year] beginning of year \\[calendar-end-of-year] end of year
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1526
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1527 \\[calendar-goto-date] go to date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1528
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1529 \\[calendar-goto-julian-date] go to Julian date \\[calendar-goto-astro-day-number] go to astronomical (Julian) day number
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1530 \\[calendar-goto-hebrew-date] go to Hebrew date \\[calendar-goto-islamic-date] go to Islamic date
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1531 \\[calendar-goto-iso-date] go to ISO date \\[calendar-goto-french-date] go to French Revolutionary date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1532
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1533 \\[calendar-goto-mayan-long-count-date] go to Mayan Long Count date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1534 \\[calendar-next-haab-date] go to next occurrence of Mayan Haab date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1535 \\[calendar-previous-haab-date] go to previous occurrence of Mayan Haab date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1536 \\[calendar-next-tzolkin-date] go to next occurrence of Mayan Tzolkin date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1537 \\[calendar-previous-tzolkin-date] go to previous occurrence of Mayan Tzolkin date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1538 \\[calendar-next-calendar-round-date] go to next occurrence of Mayan Calendar Round date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1539 \\[calendar-previous-calendar-round-date] go to previous occurrence of Mayan Calendar Round date
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1540
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1541 You can mark a date in the calendar and switch the point and mark:
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1542
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1543 \\[calendar-set-mark] mark date \\[calendar-exchange-point-and-mark] exchange point and mark
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1544
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1545 You can determine the number of days (inclusive) between the point and mark by
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1546
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1547 \\[calendar-count-days-region] count days in the region
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1548
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 The commands for calendar movement are:
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 \\[scroll-calendar-right] scroll one month right \\[scroll-calendar-left] scroll one month left
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 \\[scroll-calendar-right-three-months] scroll 3 months right \\[scroll-calendar-left-three-months] scroll 3 months left
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1553 \\[calendar-current-month] display current month \\[calendar-other-month] display another month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1554
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1555 Whenever it makes sense, the above commands take prefix arguments that
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1556 multiply their affect. For convenience, the digit keys and the minus sign
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 are bound to digit-argument, so they need not be prefixed with ESC.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1558
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1559 If the calendar window somehow becomes corrupted, it can be regenerated with
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1560
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 \\[redraw-calendar] redraw the calendar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 The following commands deal with holidays and other notable days:
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1565 \\[calendar-cursor-holidays] give holidays for the date specified by the cursor
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1566 \\[mark-calendar-holidays] mark notable days
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 \\[calendar-unmark] unmark dates
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 \\[list-calendar-holidays] display notable days
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1569
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1570 The command M-x holidays causes the notable dates for the current month, and
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1571 the preceding and succeeding months, to be displayed, independently of the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1572 calendar.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1573
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1574 The following commands control the diary:
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1575
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 \\[mark-diary-entries] mark diary entries \\[calendar-unmark] unmark dates
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 \\[view-diary-entries] display diary entries \\[show-all-diary-entries] show all diary entries
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1578 \\[print-diary-entries] print diary entries
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1579
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1580 Displaying the diary entries causes the diary entries from the diary-file
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1581 (for the date indicated by the cursor in the calendar window) to be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1582 displayed in another window. This function takes an integer argument that
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1583 specifies the number of days of calendar entries to be displayed, starting
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1584 with the date indicated by the cursor.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1585
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1586 The command \\[print-diary-entries] prints the diary buffer (as it appears)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1587 on the line printer.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 The command M-x diary causes the diary entries for the current date to be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 displayed, independently of the calendar. The number of days of entries is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 governed by number-of-diary-entries.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1593 The format of the entries in the diary file is described in the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1594 documentation string for the variable diary-file.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1596 When diary entries are in view in the window, they can be edited. It is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1597 important to keep in mind that the buffer displayed contains the entire
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1598 diary file, but with portions of it concealed from view. This means, for
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1599 instance, that the forward-char command can put the cursor at what appears
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600 to be the end of the line, but what is in reality the middle of some
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601 concealed line. BE CAREFUL WHEN EDITING THE DIARY ENTRIES! (Inserting
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1602 additional lines or adding/deleting characters in the middle of a visible
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603 line will not cause problems; watch out for end-of-line, however--it may
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 put you at the end of a concealed line far from where the cursor appears to
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 be!) BEFORE EDITING THE DIARY IT IS BEST TO DISPLAY THE ENTIRE FILE WITH
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1606 show-all-diary-entries. BE SURE TO WRITE THE FILE BEFORE EXITING FROM THE
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607 CALENDAR.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1609 The following commands assist in making diary entries:
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1610
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1611 \\[insert-diary-entry] insert a diary entry for the selected date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1612 \\[insert-weekly-diary-entry] insert a diary entry for the selected day of the week
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 \\[insert-monthly-diary-entry] insert a diary entry for the selected day of the month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 \\[insert-yearly-diary-entry] insert a diary entry for the selected day of the year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615 \\[insert-block-diary-entry] insert a diary entry for the block days between point and mark
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 \\[insert-anniversary-diary-entry] insert an anniversary diary entry for the selected date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 \\[insert-cyclic-diary-entry] insert a cyclic diary entry
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 There are corresponding commands to assist in making Hebrew- or Islamic-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1620 diary entries:
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1622 \\[insert-hebrew-diary-entry] insert a diary entry for the Hebrew date corresponding
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1623 to the selected date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 \\[insert-monthly-hebrew-diary-entry] insert a diary entry for the day of the Hebrew month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625 corresponding to the selected day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 \\[insert-yearly-hebrew-diary-entry] insert a diary entry for the day of the Hebrew year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 corresponding to the selected day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 \\[insert-islamic-diary-entry] insert a diary entry for the Islamic date corresponding
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1629 to the selected date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 \\[insert-monthly-islamic-diary-entry] insert a diary entry for the day of the Islamic month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 corresponding to the selected day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632 \\[insert-yearly-islamic-diary-entry] insert a diary entry for the day of the Islamic year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1633 corresponding to the selected day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1634
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1635 All of the diary entry commands make nonmarking entries when given a prefix
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1636 argument; with no prefix argument, the diary entries are marking.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1637
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1638 The day number in the year and the number of days remaining in the year can be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1639 determined by
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1640
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1641 \\[calendar-print-day-of-year] show day number and the number of days remaining in the year
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1642
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1643 Equivalent dates on the ISO commercial, Julian, Hebrew, Islamic, French
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1644 Revolutionary, and Mayan calendars can be determined by
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1645
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1646 \\[calendar-print-iso-date] show equivalent date on the ISO commercial calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1647 \\[calendar-print-julian-date] show equivalent date on the Julian calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1648 \\[calendar-print-hebrew-date] show equivalent date on the Hebrew calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1649 \\[calendar-print-islamic-date] show equivalent date on the Islamic calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1650 \\[calendar-print-french-date] show equivalent date on the French Revolutionary calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1651 \\[calendar-print-mayan-date] show equivalent date on the Mayan calendar
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1652
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1653 The astromonical (Julian) day number of a date is found with
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1654
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1655 \\[calendar-print-astro-day-number] show equivalent astronomical (Julian) day number
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1656
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1657 To find the times of sunrise and sunset and lunar phases use
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1658
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1659 \\[calendar-sunrise-sunset] show times of sunrise and sunset
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1660 \\[calendar-phases-of-moon] show times of quarters of the moon
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1661
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1662 The times given will be at latitude `solar-latitude', longitude
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1663 `solar-longitude' in time zone `solar-time-zone'. These variables, and the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1664 variables `solar-location-name', `solar-standard-time-zone-name',
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1665 `solar-daylight-time-zone-name', `solar-daylight-savings-starts', and
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1666 `solar-daylight-savings-ends', should be set for your location.
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 To exit from the calendar use
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1670 \\[exit-calendar] exit from calendar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1671
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1672 The variable `view-diary-entries-initially', whose default is nil, can be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1673 set to to t cause diary entries for the current date will be displayed in
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 another window when the calendar is first displayed, if the current date is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 visible. The variable `number-of-diary-entries' controls number of days of
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676 diary entries that will be displayed initially or with the command M-x
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 diary. For example, if the default value 1 is used, then only the current
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 day's diary entries will be displayed. If the value 2 is used, both the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679 current day's and the next day's entries will be displayed. The value can
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 also be a vector: If the value is [0 2 2 2 2 4 1] then no diary entries
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 will be displayed on Sunday, the current date's and the next day's diary
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 entries will be displayed Monday through Thursday, Friday through Monday's
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683 entries will be displayed on Friday, while on Saturday only that day's
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 entries will be displayed.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1686 The variable `view-calendar-holidays-initially' can be set to t to cause the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1687 holidays for the current three month period will be displayed on entry to the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1688 calendar. The holidays are displayed in another window.
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690 The variable `mark-diary-entries-in-calendar' can be set to t to cause any
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1691 dates visible with calendar entries to be marked with the symbol specified by
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1692 the variable `diary-entry-marker', normally a plus sign.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1693
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1694 The variable `calendar-load-hook', whose default value is nil, is list of
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1695 functions to be called when the calendar is first loaded.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1696
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1697 The variable `initial-calendar-window-hook', whose default value is nil, is
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1698 list of functions to be called when the calendar window is first opened. The
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1699 functions invoked are called after the calendar window is opened, but once
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1700 opened is never called again. Leaving the calendar with the `q' command and
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1701 reentering it will cause these functions to be called again.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1702
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1703 The variable `today-visible-calendar-hook', whose default value is nil, is the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1704 list of functions called after the calendar buffer has been prepared with the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1705 calendar when the current date is visible in the window. This can be used,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1706 for example, to replace today's date with asterisks; a function
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1707 calendar-star-date is included for this purpose: (setq
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1708 today-visible-calendar-hook 'calendar-star-date) It could also be used to mark
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1709 the current date with `*'; a function is also provided for this: (setq
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1710 today-visible-calendar-hook 'calendar-mark-today)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1711
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1712 The variable `today-invisible-calendar-hook', whose default value is nil, is
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1713 the list of functions called after the calendar buffer has been prepared with
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1714 the calendar when the current date is not visible in the window.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1715
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1716 The variable `diary-display-hook' is the list of functions called after the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1717 diary buffer is prepared. The default value simply displays the diary file
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1718 using selective-display to conceal irrelevant diary entries. An alternative
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1719 function `fancy-diary-display' is provided that, when used as the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1720 `diary-display-hook', causes a noneditable buffer to be prepared with a neatly
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1721 organized day-by-day listing of relevant diary entries, together with any
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1722 known holidays. The inclusion of the holidays slows this fancy display of the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1723 diary; to speed it up, set the variable `holidays-in-diary-buffer' to nil.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1724
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1725 The variable `print-diary-entries-hook' is the list of functions called after
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1726 a temporary buffer is prepared with the diary entries currently visible in the
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1727 diary buffer. The default value of this hook adds a heading (composed from
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1728 the diary buffer's mode line), does the printing with the command lpr-buffer,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1729 and kills the temporary buffer. Other uses might include, for example,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1730 rearranging the lines into order by day and time.
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1731
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1732 The Gregorian calendar is assumed."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1733
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1734 (kill-all-local-variables)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1735 (setq major-mode 'calendar-mode)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1736 (setq mode-name "Calendar")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737 (use-local-map calendar-mode-map)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1738 (setq buffer-read-only t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739 (setq indent-tabs-mode nil)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1740 (update-calendar-mode-line)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1741 (make-local-variable 'calendar-window-configuration);; Windows on entry.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1742 (make-local-variable 'calendar-mark-ring)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1743 (make-local-variable 'displayed-month);; Month in middle of window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1744 (make-local-variable 'displayed-year));; Year in middle of window.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1745
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1746 (defun calendar-string-spread (strings char length)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1747 "A list of STRINGS is concatenated separated by copies of CHAR so that it
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1748 fills LENGTH; there must be at least 2 strings. The effect is like mapconcat
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1749 but the separating pieces are as balanced as possible. Each item of STRINGS
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1750 is evaluated before concatenation so it can actually be an expression that
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1751 evaluates to a string. If LENGTH is too short, the STRINGS are just
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1752 concatenated and the result truncated."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1753 ;; The algorithm is based on equation (3.25) on page 85 of Concrete
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1754 ;; Mathematics by Ronald L. Graham, Donald E. Knuth, and Oren Patashnik,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1755 ;; Addison-Wesley, Reading, MA, 1989
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1756 (let* ((strings (mapcar 'eval strings))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1757 (n (- length (length (apply 'concat strings))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1758 (m (1- (length strings)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1759 (s (car strings))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1760 (strings (cdr strings))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1761 (i 0))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1762 (while strings
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1763 (setq s (concat s
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1764 (make-string (max 0 (/ (+ n i) m)) char)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1765 (car strings)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1766 (setq i (1+ i))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1767 (setq strings (cdr strings)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1768 (substring s 0 length)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1769
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1770 (defun update-calendar-mode-line ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1771 "Update the calendar mode line with the current date and date style."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1772 (if (bufferp (get-buffer calendar-buffer))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1773 (save-excursion
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1774 (set-buffer calendar-buffer)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1775 (setq mode-line-format
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1776 (calendar-string-spread
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1777 calendar-mode-line-format ? (frame-width))))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1778
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1779 (defun exit-calendar ()
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1780 "Get out of the calendar window and bury it and related buffers."
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1781 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1782 (let ((diary-buffer (get-file-buffer diary-file))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1783 (d-buffer (get-buffer fancy-diary-buffer))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1784 (h-buffer (get-buffer holiday-buffer)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1785 (if (not diary-buffer)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1786 (progn
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1787 (set-window-configuration calendar-window-configuration)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1788 (bury-buffer calendar-buffer)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1789 (if d-buffer (bury-buffer d-buffer))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1790 (if h-buffer (bury-buffer h-buffer)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1791 (if (or (not (buffer-modified-p diary-buffer))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1792 (yes-or-no-p "Diary modified; do you really want to exit the calendar? "))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1793 (progn
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1794 (set-window-configuration calendar-window-configuration)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1795 (bury-buffer calendar-buffer)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1796 (if d-buffer (bury-buffer d-buffer))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1797 (if h-buffer (bury-buffer h-buffer))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1798 (set-buffer diary-buffer)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1799 (set-buffer-modified-p nil)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1800 (bury-buffer diary-buffer))))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1801
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1802 (defun calendar-current-month ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1803 "Reposition the calendar window so the current date is visible."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1804 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1805 (let ((today (calendar-current-date)));; The date might have changed.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1806 (if (not (calendar-date-is-visible-p today))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1807 (generate-calendar-window)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1808 (update-calendar-mode-line)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1809 (calendar-cursor-to-visible-date today))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1810
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1811 (defun calendar-forward-month (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1812 "Move the cursor forward ARG months.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1813 Movement is backward if ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1814 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1815 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1816 (let* ((cursor-date (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1817 (error "Cursor is not on a date!")))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1818 (month (extract-calendar-month cursor-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1819 (day (extract-calendar-day cursor-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1820 (year (extract-calendar-year cursor-date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1821 (increment-calendar-month month year arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1822 (let ((last (calendar-last-day-of-month month year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1823 (if (< last day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1824 (setq day last)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1825 ;; Put the new month on the screen, if needed, and go to the new date.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1826 (let ((new-cursor-date (list month day year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827 (if (not (calendar-date-is-visible-p new-cursor-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828 (calendar-other-month month year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829 (calendar-cursor-to-visible-date new-cursor-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1830
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1831 (defun calendar-forward-year (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1832 "Move the cursor forward by ARG years.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1833 Movement is backward if ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1834 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1835 (calendar-forward-month (* 12 arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1836
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1837 (defun calendar-backward-month (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1838 "Move the cursor backward by ARG months.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1839 Movement is forward if ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1840 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1841 (calendar-forward-month (- arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1842
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1843 (defun calendar-backward-year (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1844 "Move the cursor backward ARG years.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845 Movement is forward is ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1846 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1847 (calendar-forward-month (* -12 arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1848
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1849 (defun scroll-calendar-left (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1850 "Scroll the displayed calendar left by ARG months.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1851 If ARG is negative the calendar is scrolled right. Maintains the relative
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1852 position of the cursor with respect to the calendar as well as possible."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1853 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1854 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855 (let ((old-date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1856 (today (calendar-current-date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1857 (if (/= arg 0)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1858 (progn
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1859 (increment-calendar-month displayed-month displayed-year arg)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1860 (generate-calendar-window displayed-month displayed-year)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1861 (calendar-cursor-to-visible-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1862 (cond
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1863 ((calendar-date-is-visible-p old-date) old-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864 ((calendar-date-is-visible-p today) today)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1865 (t (list displayed-month 1 displayed-year))))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1866
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1867 (defun scroll-calendar-right (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1868 "Scroll the displayed calendar window right by ARG months.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1869 If ARG is negative the calendar is scrolled left. Maintains the relative
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1870 position of the cursor with respect to the calendar as well as possible."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1871 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1872 (scroll-calendar-left (- arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1873
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1874 (defun scroll-calendar-left-three-months (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1875 "Scroll the displayed calendar window left by 3*ARG months.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1876 If ARG is negative the calendar is scrolled right. Maintains the relative
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1877 position of the cursor with respect to the calendar as well as possible."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1878 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1879 (scroll-calendar-left (* 3 arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1880
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1881 (defun scroll-calendar-right-three-months (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1882 "Scroll the displayed calendar window right by 3*ARG months.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1883 If ARG is negative the calendar is scrolled left. Maintains the relative
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1884 position of the cursor with respect to the calendar as well as possible."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1885 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1886 (scroll-calendar-left (* -3 arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1887
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1888 (defun calendar-current-date ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1889 "Returns the current date in a list (month day year).
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1890 If in the calendar buffer, also sets the current date local variables."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1891 (let* ((date (current-time-string))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1892 (garbage
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1893 (string-match
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1894 "^\\([A-Z][a-z]*\\) *\\([A-Z][a-z]*\\) *\\([0-9]*\\) .* \\([0-9]*\\)$"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1895 date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1896 (month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1897 (cdr (assoc
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1898 (substring date (match-beginning 2) (match-end 2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1899 (calendar-make-alist
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1900 calendar-month-name-array
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1901 1
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1902 '(lambda (x) (substring x 0 3))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1903 (day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1904 (string-to-int (substring date (match-beginning 3) (match-end 3))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1905 (year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1906 (string-to-int (substring date (match-beginning 4) (match-end 4)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1907 (list month day year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1908
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1909 (defun calendar-cursor-to-date ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1910 "Returns a list of the month, day, and year of current cursor position.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1911 Returns nil if the cursor is not on a specific day."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1912 (if (and (looking-at "[*0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1913 (< 2 (count-lines (point-min) (point))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914 (save-excursion
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1915 (re-search-backward "[^0-9]")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 (forward-char 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1917 (let*
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1918 ((day (string-to-int (buffer-substring (point) (+ 3 (point)))))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
1919 (day (if (= 0 day) starred-day day))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1920 (segment (/ (current-column) 25))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1921 (month (% (+ displayed-month segment -1) 12))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1922 (month (if (= 0 month) 12 month))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1923 (year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924 (cond
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1925 ((and (= 12 month) (= segment 0)) (1- displayed-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926 ((and (= 1 month) (= segment 2)) (1+ displayed-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1927 (t displayed-year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1928 (list month day year)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1929
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1930 (defun calendar-cursor-to-nearest-date ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1931 "Move the cursor to the closest date.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1932 The position of the cursor is unchanged if it is already on a date.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1933 Returns the list (month day year) giving the cursor position."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1934 (let ((date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1935 (column (current-column)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1936 (if date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1937 date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1938 (if (> 3 (count-lines (point-min) (point)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1939 (progn
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1940 (goto-line 3)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1941 (move-to-column column)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1942 (if (not (looking-at "[0-9]"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1943 (if (and (not (looking-at " *$"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1944 (or (< column 25)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1945 (and (> column 27)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1946 (< column 50))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1947 (and (> column 52)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1948 (< column 75))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1949 (progn
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1950 (re-search-forward "[0-9]" nil t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1951 (backward-char 1))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1952 (re-search-backward "[0-9]" nil t)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1953 (calendar-cursor-to-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1954
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1955 (defun calendar-forward-day (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1956 "Move the cursor forward ARG days.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1957 Moves backward if ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1958 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1959 (if (/= 0 arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1960 (let*
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1961 ((cursor-date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1962 (cursor-date (if cursor-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1963 cursor-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1964 (if (> arg 0) (setq arg (1- arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1965 (calendar-cursor-to-nearest-date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1966 (new-cursor-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1967 (calendar-gregorian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1968 (+ (calendar-absolute-from-gregorian cursor-date) arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1969 (new-display-month (extract-calendar-month new-cursor-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1970 (new-display-year (extract-calendar-year new-cursor-date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1971 ;; Put the new month on the screen, if needed, and go to the new date.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1972 (if (not (calendar-date-is-visible-p new-cursor-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1973 (calendar-other-month new-display-month new-display-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1974 (calendar-cursor-to-visible-date new-cursor-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1975
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1976 (defun calendar-backward-day (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1977 "Move the cursor back ARG days.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1978 Moves forward if ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1979 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1980 (calendar-forward-day (- arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1981
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1982 (defun calendar-forward-week (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1983 "Move the cursor forward ARG weeks.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1984 Moves backward if ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1985 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1986 (calendar-forward-day (* arg 7)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1987
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1988 (defun calendar-backward-week (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1989 "Move the cursor back ARG weeks.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1990 Moves forward if ARG is negative."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1991 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1992 (calendar-forward-day (* arg -7)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1993
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1994 (defun calendar-beginning-of-week (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1995 "Move the cursor back ARG Sundays."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1996 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1997 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1998 (let ((day (calendar-day-of-week (calendar-cursor-to-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1999 (calendar-backward-day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2000 (if (= day 0) (* 7 arg) (+ day (* 7 (1- arg)))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2001
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2002 (defun calendar-end-of-week (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2003 "Move the cursor forward ARG Saturdays."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2004 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2005 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2006 (let ((day (calendar-day-of-week (calendar-cursor-to-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2007 (calendar-forward-day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2008 (if (= day 6) (* 7 arg) (+ (- 6 day) (* 7 (1- arg)))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2009
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2010 (defun calendar-beginning-of-month (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2011 "Move the cursor backward ARG month beginnings."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2012 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2013 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2014 (let* ((date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2015 (month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2016 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2017 (year (extract-calendar-year date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2018 (if (= day 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2019 (calendar-backward-month arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2020 (calendar-cursor-to-visible-date (list month 1 year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2021 (calendar-backward-month (1- arg)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2022
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2023 (defun calendar-end-of-month (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2024 "Move the cursor forward ARG month ends."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2025 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2026 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2027 (let* ((date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2028 (month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2029 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2030 (year (extract-calendar-year date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2031 (last-day (calendar-last-day-of-month month year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2032 (if (/= day last-day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2033 (progn
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2034 (calendar-cursor-to-visible-date (list month last-day year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2035 (setq arg (1- arg))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2036 (increment-calendar-month month year arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2037 (let ((last-day (list
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2038 month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2039 (calendar-last-day-of-month month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2040 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2041 (if (not (calendar-date-is-visible-p last-day))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2042 (calendar-other-month month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2043 (calendar-cursor-to-visible-date last-day)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2044
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2045 (defun calendar-beginning-of-year (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2046 "Move the cursor backward ARG year beginnings."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2047 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2048 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2049 (let* ((date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2050 (month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2051 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2052 (year (extract-calendar-year date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2053 (jan-first (list 1 1 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2054 (if (and (= day 1) (= 1 month))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2055 (calendar-backward-month (* 12 arg))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2056 (if (and (= arg 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2057 (calendar-date-is-visible-p jan-first))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2058 (calendar-cursor-to-visible-date jan-first)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2059 (calendar-other-month 1 (- year (1- arg)))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2060
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2061 (defun calendar-end-of-year (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2062 "Move the cursor forward ARG year beginnings."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2063 (interactive "p")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2064 (calendar-cursor-to-nearest-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2065 (let* ((date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2066 (month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2067 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2068 (year (extract-calendar-year date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2069 (dec-31 (list 12 31 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2070 (if (and (= day 31) (= 12 month))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2071 (calendar-forward-month (* 12 arg))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2072 (if (and (= arg 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2073 (calendar-date-is-visible-p dec-31))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2074 (calendar-cursor-to-visible-date dec-31)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2075 (calendar-other-month 12 (- year (1- arg)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2076 (calendar-cursor-to-visible-date (list 12 31 displayed-year))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2077
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2078 (defun calendar-gregorian-from-absolute (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2079 "Compute the list (month day year) corresponding to the absolute DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2080 The absolute date is the number of days elapsed since the (imaginary)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2081 Gregorian date Sunday, December 31, 1 BC."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2082 (let* ((approx (/ date 366));; Approximation from below.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2083 (year ;; Search forward from the approximation.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2084 (+ approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2085 (calendar-sum y approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2086 (>= date (calendar-absolute-from-gregorian (list 1 1 (1+ y))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2087 1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2088 (month ;; Search forward from January.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2089 (1+ (calendar-sum m 1
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2090 (> date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2091 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2092 (list m (calendar-last-day-of-month m year) year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2093 1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2094 (day ;; Calculate the day by subtraction.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2095 (- date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2096 (1- (calendar-absolute-from-gregorian (list month 1 year))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2097 (list month day year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2098
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2099 (defun calendar-cursor-to-visible-date (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2100 "Move the cursor to DATE that is on the screen."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2101 (let ((month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2102 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2103 (year (extract-calendar-year date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2104 (goto-line (+ 3
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2105 (/ (+ day -1
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2106 (calendar-day-of-week (list month 1 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2107 7)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2108 (move-to-column (+ 6
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2109 (* 25
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2110 (1+ (calendar-interval
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2111 displayed-month displayed-year month year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2112 (* 3 (calendar-day-of-week date))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2113
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2114 (defun calendar-other-month (month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2115 "Display a three-month calendar centered around MONTH and YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2116 (interactive
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2117 (let* ((completion-ignore-case t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2118 (month (cdr (assoc
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2119 (capitalize
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2120 (completing-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2121 "Month name: "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2122 (mapcar 'list (append calendar-month-name-array nil))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2123 nil t))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2124 (calendar-make-alist calendar-month-name-array))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2125 (year (calendar-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2126 "Year (>0): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2127 '(lambda (x) (> x 0))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2128 (int-to-string
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2129 (extract-calendar-year (calendar-current-date))))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2130 (list month year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2131 (if (and (= month displayed-month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2132 (= year displayed-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2133 nil
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2134 (let ((old-date (calendar-cursor-to-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2135 (today (calendar-current-date)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2136 (generate-calendar-window month year)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2137 (calendar-cursor-to-visible-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2138 (cond
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2139 ((calendar-date-is-visible-p old-date) old-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2140 ((calendar-date-is-visible-p today) today)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2141 (t (list month 1 year)))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2142
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2143 (defun calendar-set-mark (arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2144 "Mark the date under the cursor, or jump to marked date.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2145 With no prefix argument, push current date onto marked date ring.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2146 With argument, jump to mark, pop it, and put point at end of ring."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2147 (interactive "P")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2148 (let ((date (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2149 (error "Cursor is not on a date!"))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2150 (if (null arg)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2151 (progn
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2152 (setq calendar-mark-ring (cons date calendar-mark-ring))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2153 ;; Since the top of the mark ring is the marked date in the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2154 ;; calendar, the mark ring in the calendar is one longer than
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2155 ;; in other buffers to get the same effect.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2156 (if (> (length calendar-mark-ring) (1+ mark-ring-max))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2157 (setcdr (nthcdr mark-ring-max calendar-mark-ring) nil))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2158 (message "Mark set"))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2159 (if (null calendar-mark-ring)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2160 (error "No mark set in this buffer")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2161 (calendar-goto-date (car calendar-mark-ring))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2162 (setq calendar-mark-ring
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2163 (cdr (nconc calendar-mark-ring (list date))))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2164
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2165 (defun calendar-exchange-point-and-mark ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2166 "Exchange the current cursor position with the marked date."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2167 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2168 (let ((mark (car calendar-mark-ring))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2169 (date (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2170 (error "Cursor is not on a date!"))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2171 (if (null mark)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2172 (error "No mark set in this buffer")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2173 (setq calendar-mark-ring (cons date (cdr calendar-mark-ring)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2174 (calendar-goto-date mark))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2175
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2176 (defun calendar-count-days-region ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2177 "Count the number of days (inclusive) between point and the mark."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2178 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2179 (let* ((days (- (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2180 (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2181 (error "Cursor is not on a date!")))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2182 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2183 (or (car calendar-mark-ring)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2184 (error "No mark set in this buffer")))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2185 (days (1+ (if (> days 0) days (- days)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2186 (message "Region has %d day%s (inclusive)"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2187 days (if (> days 1) "s" ""))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2188
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2189 (defun calendar-not-implemented ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2190 "Not implemented."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2191 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2192 (error "%s not available in the calendar"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2193 (global-key-binding (this-command-keys))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2194
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2195 (defun calendar-read (prompt acceptable &optional initial-contents)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2196 "Return an object read from the minibuffer.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2197 Prompt with the string PROMPT and use the function ACCEPTABLE to decide if
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2198 entered item is acceptable. If non-nil, optional third arg INITIAL-CONTENTS
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2199 is a string to insert in the minibuffer before reading."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2200 (let ((value (read-minibuffer prompt initial-contents)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2201 (while (not (funcall acceptable value))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2202 (setq value (read-minibuffer prompt initial-contents)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2203 value))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2204
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2205 (defun calendar-read-date ()
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2206 "Prompt for Gregorian date. Returns a list (month day year)."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2207 (let* ((year (calendar-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2208 "Year (>0): "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2209 '(lambda (x) (> x 0))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2210 (int-to-string (extract-calendar-year
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2211 (calendar-current-date)))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2212 (month-array calendar-month-name-array)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2213 (completion-ignore-case t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2214 (month (cdr (assoc
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2215 (capitalize
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2216 (completing-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2217 "Month name: "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2218 (mapcar 'list (append month-array nil))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2219 nil t))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2220 (calendar-make-alist month-array 1 'capitalize))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2221 (last (calendar-last-day-of-month month year))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2222 (day (calendar-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2223 (format "Day (1-%d): " last)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2224 '(lambda (x) (and (< 0 x) (<= x last))))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2225 (list month day year)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2226
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2227 (defun calendar-goto-date (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2228 "Move cursor to DATE."
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2229 (interactive (list (calendar-read-date)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2230 (let ((month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2231 (year (extract-calendar-year date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2232 (if (not (calendar-date-is-visible-p date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2233 (calendar-other-month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2234 (if (and (= month 1) (= year 1))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2235 2
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2236 month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2237 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2238 (calendar-cursor-to-visible-date date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2239
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2240 (defun calendar-goto-julian-date (date &optional noecho)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2241 "Move cursor to Julian DATE; echo Julian date unless NOECHO is t."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2242 (interactive
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2243 (let* ((today (calendar-current-date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2244 (year (calendar-read
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2245 "Julian calendar year (>0): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2246 '(lambda (x) (> x 0))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2247 (int-to-string
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2248 (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2249 (calendar-julian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2250 (calendar-absolute-from-gregorian
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2251 today))))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2252 (month-array calendar-month-name-array)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2253 (completion-ignore-case t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2254 (month (cdr (assoc
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2255 (capitalize
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2256 (completing-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2257 "Julian calendar month name: "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2258 (mapcar 'list (append month-array nil))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2259 nil t))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2260 (calendar-make-alist month-array 1 'capitalize))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2261 (last
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2262 (if (and (zerop (% year 4)) (= month 2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2263 29
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2264 (aref [31 28 31 30 31 30 31 31 30 31 30 31] (1- month))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2265 (day (calendar-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2266 (format "Julian calendar day (%d-%d): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2267 (if (and (= year 1) (= month 1)) 3 1) last)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2268 '(lambda (x)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2269 (and (< (if (and (= year 1) (= month 1)) 2 0) x)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2270 (<= x last))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2271 (list (list month day year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2272 (calendar-goto-date (calendar-gregorian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2273 (calendar-absolute-from-julian date)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2274 (or noecho (calendar-print-julian-date)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2275
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2276 (defun calendar-goto-hebrew-date (date &optional noecho)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2277 "Move cursor to Hebrew DATE; echo Hebrew date unless NOECHO is t."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2278 (interactive
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2279 (let* ((today (calendar-current-date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2280 (year (calendar-read
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2281 "Hebrew calendar year (>3760): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2282 '(lambda (x) (> x 3760))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2283 (int-to-string
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2284 (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2285 (calendar-hebrew-from-absolute
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2286 (calendar-absolute-from-gregorian today))))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2287 (month-array (if (hebrew-calendar-leap-year-p year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2288 calendar-hebrew-month-name-array-leap-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2289 calendar-hebrew-month-name-array-common-year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2290 (completion-ignore-case t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2291 (month (cdr (assoc
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2292 (capitalize
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2293 (completing-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2294 "Hebrew calendar month name: "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2295 (mapcar 'list (append month-array nil))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2296 (if (= year 3761)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2297 '(lambda (x)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2298 (let ((m (cdr
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2299 (assoc
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2300 (car x)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2301 (calendar-make-alist
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2302 month-array)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2303 (< 0
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2304 (calendar-absolute-from-hebrew
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2305 (list m
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2306 (hebrew-calendar-last-day-of-month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2307 m year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2308 year))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2309
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2310 t))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2311 (calendar-make-alist month-array 1 'capitalize))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2312 (last (hebrew-calendar-last-day-of-month month year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2313 (first (if (and (= year 3761) (= month 10))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2314 18 1))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2315 (day (calendar-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2316 (format "Hebrew calendar day (%d-%d): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2317 first last)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2318 '(lambda (x) (and (<= first x) (<= x last))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2319 (list (list month day year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2320 (calendar-goto-date (calendar-gregorian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2321 (calendar-absolute-from-hebrew date)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2322 (or noecho (calendar-print-hebrew-date)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2323
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2324 (defun calendar-goto-islamic-date (date &optional noecho)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2325 "Move cursor to Islamic DATE; echo Islamic date unless NOECHO is t."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2326 (interactive
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2327 (let* ((today (calendar-current-date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2328 (year (calendar-read
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2329 "Islamic calendar year (>0): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2330 '(lambda (x) (> x 0))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2331 (int-to-string
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2332 (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2333 (calendar-islamic-from-absolute
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2334 (calendar-absolute-from-gregorian today))))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2335 (month-array calendar-islamic-month-name-array)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2336 (completion-ignore-case t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2337 (month (cdr (assoc
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2338 (capitalize
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2339 (completing-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2340 "Islamic calendar month name: "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2341 (mapcar 'list (append month-array nil))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2342 nil t))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2343 (calendar-make-alist month-array 1 'capitalize))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2344 (last (islamic-calendar-last-day-of-month month year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2345 (day (calendar-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2346 (format "Islamic calendar day (1-%d): " last)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2347 '(lambda (x) (and (< 0 x) (<= x last))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2348 (list (list month day year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2349 (calendar-goto-date (calendar-gregorian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2350 (calendar-absolute-from-islamic date)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2351 (or noecho (calendar-print-islamic-date)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2352
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2353 (defun calendar-goto-iso-date (date &optional noecho)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2354 "Move cursor to ISO DATE; echo ISO date unless NOECHO is t."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2355 (interactive
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2356 (let* ((today (calendar-current-date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2357 (year (calendar-read
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2358 "ISO calendar year (>0): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2359 '(lambda (x) (> x 0))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2360 (int-to-string (extract-calendar-year today))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2361 (no-weeks (extract-calendar-month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2362 (calendar-iso-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2363 (1-
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2364 (calendar-dayname-on-or-before
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2365 1 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2366 (list 1 4 (1+ year))))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2367 (week (calendar-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2368 (format "ISO calendar week (1-%d): " no-weeks)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2369 '(lambda (x) (and (> x 0) (<= x no-weeks)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2370 (day (calendar-read
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2371 "ISO day (1-7): "
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2372 '(lambda (x) (and (<= 1 x) (<= x 7))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2373 (list (list week day year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2374 (calendar-goto-date (calendar-gregorian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2375 (calendar-absolute-from-iso date)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2376 (or noecho (calendar-print-iso-date)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2377
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2378 (defun calendar-interval (mon1 yr1 mon2 yr2)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2379 "The number of months difference between MON1, YR1 and MON2, YR2."
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2380 (+ (* 12 (- yr2 yr1))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2381 (- mon2 mon1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2382
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2383 (defun calendar-day-name (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2384 "Returns a string with the name of the day of the week of DATE."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2385 (aref calendar-day-name-array (calendar-day-of-week date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2386
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2387 (defconst calendar-day-name-array
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2388 ["Sunday" "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday"])
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2389
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2390 (defconst calendar-month-name-array
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2391 ["January" "February" "March" "April" "May" "June"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2392 "July" "August" "September" "October" "November" "December"])
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2393
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2394 (defun calendar-make-alist (sequence &optional start-index filter)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2395 "Make an assoc list corresponding to SEQUENCE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2396 Start at index 1, unless optional START-INDEX is provided.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2397 If FILTER is provided, apply it to each item in the list."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2398 (let ((index (if start-index (1- start-index) 0)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2399 (mapcar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2400 '(lambda (x)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2401 (setq index (1+ index))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2402 (cons (if filter (funcall filter x) x)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2403 index))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2404 (append sequence nil))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2405
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2406 (defun calendar-month-name (month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2407 "The name of MONTH."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2408 (aref calendar-month-name-array (1- month)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2409
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2410 (defun calendar-day-of-week (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2411 "Returns the day-of-the-week index of DATE, 0 for Sunday, 1 for Monday, etc."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2412 (% (calendar-absolute-from-gregorian date) 7))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2413
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2414 (defun calendar-unmark ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2415 "Delete the diary and holiday marks from the calendar."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2416 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2417 (setq mark-diary-entries-in-calendar nil)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2418 (setq mark-holidays-in-calendar nil)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2419 (save-excursion
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2420 (goto-line 3)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2421 (beginning-of-line)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2422 (let ((buffer-read-only nil)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2423 (start (point))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2424 (star-date (search-forward "**" nil t))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2425 (star-point (point)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2426 (if star-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2427 (progn ;; Don't delete today as left by calendar-star-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2428 (subst-char-in-region start (- star-point 2)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2429 (string-to-char diary-entry-marker) ? t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2430 (subst-char-in-region start (- star-point 2)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2431 (string-to-char calendar-holiday-marker) ? t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2432 (subst-char-in-region star-point (point-max)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2433 (string-to-char diary-entry-marker) ? t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2434 (subst-char-in-region star-point (point-max)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2435 (string-to-char calendar-holiday-marker) ? t))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2436 (subst-char-in-region start (point-max)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2437 (string-to-char diary-entry-marker) ? t)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2438 (subst-char-in-region start (point-max)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2439 (string-to-char calendar-holiday-marker) ? t))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2440 (set-buffer-modified-p nil))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2441
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2442 (defun calendar-date-is-visible-p (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2443 "Returns t if DATE is legal and is visible in the calendar window."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2444 (let ((gap (calendar-interval
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2445 displayed-month displayed-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2446 (extract-calendar-month date) (extract-calendar-year date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2447 (and (calendar-date-is-legal-p date) (> 2 gap) (< -2 gap))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2448
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2449 (defun calendar-date-is-legal-p (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2450 "Returns t if DATE is a legal date."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2451 (let ((month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2452 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2453 (year (extract-calendar-year date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2454 (and (<= 1 month) (<= month 12)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2455 (<= 1 day) (<= day (calendar-last-day-of-month month year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2456 (<= 1 year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2457
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2458 (defun calendar-date-equal (date1 date2)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2459 "Returns t if the DATE1 and DATE2 are the same."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2460 (and
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2461 (= (extract-calendar-month date1) (extract-calendar-month date2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2462 (= (extract-calendar-day date1) (extract-calendar-day date2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2463 (= (extract-calendar-year date1) (extract-calendar-year date2))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2464
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2465 (defun mark-visible-calendar-date (date &optional mark)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2466 "Leave mark DATE with MARK. MARK defaults to diary-entry-marker."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2467 (if (calendar-date-is-legal-p date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2468 (save-excursion
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2469 (set-buffer calendar-buffer)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2470 (calendar-cursor-to-visible-date date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2471 (forward-char 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2472 (let ((buffer-read-only nil))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2473 (delete-char 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2474 (insert (if mark mark diary-entry-marker))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2475 (forward-char -2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2476 (set-buffer-modified-p nil))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2477
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2478 (defun calendar-star-date ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2479 "Replace the date under the cursor in the calendar window with asterisks.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2480 This function can be used with the today-visible-calendar-hook run after the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2481 calendar window has been prepared."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2482 (let ((buffer-read-only nil))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2483 (make-variable-buffer-local 'starred-day)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2484 (forward-char 1)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2485 (setq starred-day
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2486 (string-to-int
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2487 (buffer-substring (point) (- (point) 2))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2488 (delete-char -2)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2489 (insert "**")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2490 (backward-char 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2491 (set-buffer-modified-p nil)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2492
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2493 (defun calendar-mark-today ()
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2494 "Mark the date under the cursor in the calendar window with an equal sign.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2495 This function can be used with the today-visible-calendar-hook run after the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2496 calendar window has been prepared."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2497 (let ((buffer-read-only nil))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2498 (forward-char 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2499 (delete-char 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2500 (insert "=")
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2501 (backward-char 2)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2502 (set-buffer-modified-p nil)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2503
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2504 (defun calendar-date-compare (date1 date2)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2505 "Returns t if DATE1 is before DATE2, nil otherwise.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2506 The actual dates are in the car of DATE1 and DATE2."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2507 (< (calendar-absolute-from-gregorian (car date1))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2508 (calendar-absolute-from-gregorian (car date2))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2509
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2510 (defun calendar-date-string (date &optional abbreviate nodayname)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2511 "A string form of DATE, driven by the variable `calendar-date-display-form'.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2512 An optional parameter ABBREVIATE, when t, causes the month and day names to be
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2513 abbreviated to three characters. An optional parameter NODAYNAME, when t,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2514 omits the name of the day of the week."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2515 (let* ((dayname
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2516 (if nodayname
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2517 nil
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2518 (if abbreviate
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2519 (substring (calendar-day-name date) 0 3)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2520 (calendar-day-name date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2521 (month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2522 (monthname
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2523 (if abbreviate
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2524 (substring
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2525 (calendar-month-name month) 0 3)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2526 (calendar-month-name month)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2527 (day (int-to-string (extract-calendar-day date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2528 (month (int-to-string month))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2529 (year (int-to-string (extract-calendar-year date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2530 (mapconcat 'eval calendar-date-display-form "")))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2531
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2532 (defun calendar-dayname-on-or-before (dayname date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2533 "Returns the absolute date of the DAYNAME on or before absolute DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2534 DAYNAME=0 means Sunday, DAYNAME=1 means Monday, and so on.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2535
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2536 Note: Applying this function to d+6 gives us the DAYNAME on or after an
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2537 absolute day d. Similarly, applying it to d+3 gives the DAYNAME nearest to
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2538 absolute date d, applying it to d-1 gives the DAYNAME previous to absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2539 date d, and applying it to d+7 gives the DAYNAME following absolute date d."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2540 (- date (% (- date dayname) 7)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2541
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2542 (defun calendar-nth-named-day (n dayname month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2543 "Returns the date of the Nth DAYNAME in MONTH, YEAR.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2544 A DAYNAME of 0 means Sunday, 1 means Monday, and so on. If N<0, the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2545 date returned is the Nth DAYNAME from the end of MONTH, YEAR (that is, -1 is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2546 the last DAYNAME, -2 is the penultimate DAYNAME, and so on."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2547 (calendar-gregorian-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2548 (if (> n 0)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2549 (+ (calendar-dayname-on-or-before
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2550 dayname (calendar-absolute-from-gregorian (list month 7 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2551 (* 7 (1- n)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2552 (+ (calendar-dayname-on-or-before
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2553 dayname
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2554 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2555 (list month (calendar-last-day-of-month month year) year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2556 (* 7 (1+ n))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2557
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2558 (defun calendar-print-day-of-year ()
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2559 "Show the day number in the year and the number of days remaining in the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2560 year for the date under the cursor."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2561 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2562 (let* ((date (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2563 (error "Cursor is not on a date!")))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2564 (year (extract-calendar-year date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2565 (day (calendar-day-number date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2566 (days-remaining (- (calendar-day-number (list 12 31 year)) day)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2567 (message "Day %d of %d; %d day%s remaining in the year"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2568 day year days-remaining (if (= days-remaining 1) "" "s"))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2569
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2570 (defun calendar-absolute-from-iso (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2571 "The number of days elapsed between the Gregorian date 12/31/1 BC and
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2572 DATE. The `ISO year' corresponds approximately to the Gregorian year, but
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2573 weeks start on Monday and end on Sunday. The first week of the ISO year is
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2574 the first such week in which at least 4 days are in a year. The ISO
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2575 commercial DATE has the form (week day year) in which week is in the range
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2576 1..52 and day is in the range 0..6 (1 = Monday, 2 = Tuesday, ..., 0 =
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2577 Sunday). The The Gregorian date Sunday, December 31, 1 BC is imaginary."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2578 (let* ((week (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2579 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2580 (year (extract-calendar-year date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2581 (+ (calendar-dayname-on-or-before
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2582 1 (+ 3 (calendar-absolute-from-gregorian (list 1 1 year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2583 (* 7 (1- week))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2584 (if (= day 0) 6 (1- day)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2585
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2586 (defun calendar-iso-from-absolute (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2587 "Compute the `ISO commercial date' corresponding to the absolute DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2588 The ISO year corresponds approximately to the Gregorian year, but weeks
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2589 start on Monday and end on Sunday. The first week of the ISO year is the
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2590 first such week in which at least 4 days are in a year. The ISO commercial
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2591 date has the form (week day year) in which week is in the range 1..52 and
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2592 day is in the range 0..6 (1 = Monday, 2 = Tuesday, ..., 0 = Sunday). The
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2593 absolute date is the number of days elapsed since the (imaginary) Gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2594 date Sunday, December 31, 1 BC."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2595 (let* ((approx (extract-calendar-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2596 (calendar-gregorian-from-absolute (- date 3))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2597 (year (+ approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2598 (calendar-sum y approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2599 (>= date (calendar-absolute-from-iso (list 1 1 (1+ y))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2600 1))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2601 (list
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2602 (1+ (/ (- date (calendar-absolute-from-iso (list 1 1 year))) 7))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2603 (% date 7)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2604 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2605
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2606 (defun calendar-print-iso-date ()
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2607 "Show the equivalent date on the `ISO commercial calendar' for the date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2608 under the cursor."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2609 (interactive)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2610 (let* ((greg-date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2611 (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2612 (error "Cursor is not on a date!")))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2613 (day (% (calendar-absolute-from-gregorian greg-date) 7))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2614 (iso-date (calendar-iso-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2615 (calendar-absolute-from-gregorian greg-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2616 (message "ISO date: Day %s of week %d of %d."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2617 (if (zerop day) 7 day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2618 (extract-calendar-month iso-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2619 (extract-calendar-year iso-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2620
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2621 (defun calendar-julian-from-absolute (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2622 "Compute the Julian (month day year) corresponding to the absolute DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2623 The absolute date is the number of days elapsed since the (imaginary)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2624 Gregorian date Sunday, December 31, 1 BC."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2625 (let* ((approx (/ (+ date 2) 366));; Approximation from below.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2626 (year ;; Search forward from the approximation.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2627 (+ approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2628 (calendar-sum y approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2629 (>= date (calendar-absolute-from-julian (list 1 1 (1+ y))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2630 1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2631 (month ;; Search forward from January.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2632 (1+ (calendar-sum m 1
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2633 (> date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2634 (calendar-absolute-from-julian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2635 (list m
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2636 (if (and (= m 2) (= (% year 4) 0))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2637 29
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2638 (aref [31 28 31 30 31 30 31 31 30 31 30 31]
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2639 (1- m)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2640 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2641 1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2642 (day ;; Calculate the day by subtraction.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2643 (- date (1- (calendar-absolute-from-julian (list month 1 year))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2644 (list month day year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2645
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2646 (defun calendar-absolute-from-julian (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2647 "The number of days elapsed between the Gregorian date 12/31/1 BC and DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2648 The Gregorian date Sunday, December 31, 1 BC is imaginary."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2649 (let ((month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2650 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2651 (year (extract-calendar-year date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2652 (+ (calendar-day-number date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2653 (if (and (= (% year 100) 0)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2654 (/= (% year 400) 0)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2655 (> month 2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2656 1 0);; Correct for Julian but not Gregorian leap year.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2657 (* 365 (1- year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2658 (/ (1- year) 4)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2659 -2)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2660
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2661 (defun calendar-print-julian-date ()
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2662 "Show the Julian calendar equivalent of the date under the cursor."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2663 (interactive)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2664 (message "Julian date: %s"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2665 (calendar-date-string
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2666 (calendar-julian-from-absolute
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2667 (calendar-absolute-from-gregorian
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2668 (or (calendar-cursor-to-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2669 (error "Cursor is not on a date!"))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2670 nil t)))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2671
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2672 (defun islamic-calendar-leap-year-p (year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2673 "Returns t if YEAR is a leap year on the Islamic calendar."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2674 (memq (% year 30)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2675 (list 2 5 7 10 13 16 18 21 24 26 29)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2676
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2677 (defun islamic-calendar-last-day-of-month (month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2678 "The last day in MONTH during YEAR on the Islamic calendar."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2679 (cond
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2680 ((memq month (list 1 3 5 7 9 11)) 30)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2681 ((memq month (list 2 4 6 8 10)) 29)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2682 (t (if (islamic-calendar-leap-year-p year) 30 29))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2683
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2684 (defun islamic-calendar-day-number (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2685 "Return the day number within the year of the Islamic date DATE."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2686 (let* ((month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2687 (day (extract-calendar-day date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2688 (+ (* 30 (/ month 2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2689 (* 29 (/ (1- month) 2))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2690 day)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2691
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2692 (defun calendar-absolute-from-islamic (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2693 "Absolute date of Islamic DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2694 The absolute date is the number of days elapsed since the (imaginary)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2695 Gregorian date Sunday, December 31, 1 BC."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2696 (let* ((month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2697 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2698 (year (extract-calendar-year date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2699 (y (% year 30))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2700 (leap-years-in-cycle
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2701 (cond
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2702 ((< y 3) 0) ((< y 6) 1) ((< y 8) 2) ((< y 11) 3) ((< y 14) 4)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2703 ((< y 17) 5) ((< y 19) 6) ((< y 22) 7) ((< y 25) 8) ((< y 27) 9)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2704 (t 10))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2705 (+ (islamic-calendar-day-number date);; days so far this year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2706 (* (1- year) 354) ;; days in all non-leap years
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2707 (* 11 (/ year 30)) ;; leap days in complete cycles
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2708 leap-years-in-cycle ;; leap days this cycle
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2709 227014))) ;; days before start of calendar
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2710
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2711 (defun calendar-islamic-from-absolute (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2712 "Compute the Islamic date (month day year) corresponding to absolute DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2713 The absolute date is the number of days elapsed since the (imaginary)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2714 Gregorian date Sunday, December 31, 1 BC."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2715 (if (< date 227015)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2716 (list 0 0 0);; pre-Islamic date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2717 (let* ((approx (/ (- date 227014) 355));; Approximation from below.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2718 (year ;; Search forward from the approximation.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2719 (+ approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2720 (calendar-sum y approx
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2721 (>= date (calendar-absolute-from-islamic
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2722 (list 1 1 (1+ y))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2723 1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2724 (month ;; Search forward from Muharram.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2725 (1+ (calendar-sum m 1
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2726 (> date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2727 (calendar-absolute-from-islamic
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2728 (list m
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2729 (islamic-calendar-last-day-of-month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2730 m year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2731 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2732 1)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2733 (day ;; Calculate the day by subtraction.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2734 (- date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2735 (1- (calendar-absolute-from-islamic (list month 1 year))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2736 (list month day year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2737
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2738 (defconst calendar-islamic-month-name-array
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2739 ["Muharram" "Safar" "Rabi I" "Rabi II" "Jumada I" "Jumada II"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2740 "Rajab" "Sha'ban" "Ramadan" "Shawwal" "Dhu al-Qada" "Dhu al-Hijjah"])
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2741
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2742 (defun calendar-print-islamic-date ()
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2743 "Show the Islamic calendar equivalent of the date under the cursor."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2744 (interactive)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2745 (let ((calendar-month-name-array calendar-islamic-month-name-array)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2746 (islamic-date (calendar-islamic-from-absolute
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2747 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2748 (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2749 (error "Cursor is not on a date!"))))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2750 (if (< (extract-calendar-year islamic-date) 1)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2751 (message "Date is pre-Islamic")
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2752 (message "Islamic date (until sunset): %s"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2753 (calendar-date-string islamic-date nil t)))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2754
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2755 (defun calendar-hebrew-from-absolute (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2756 "Compute the Hebrew date (month day year) corresponding to absolute DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2757 The absolute date is the number of days elapsed since the (imaginary)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2758 Gregorian date Sunday, December 31, 1 BC."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2759 (let* ((greg-date (calendar-gregorian-from-absolute date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2760 (month (aref [9 10 11 12 1 2 3 4 7 7 7 8]
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2761 (1- (extract-calendar-month greg-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2762 (day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2763 (year (+ 3760 (extract-calendar-year greg-date))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2764 (while (>= date (calendar-absolute-from-hebrew (list 7 1 (1+ year))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2765 (setq year (1+ year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2766 (let ((length (hebrew-calendar-last-month-of-year year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2767 (while (> date
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2768 (calendar-absolute-from-hebrew
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2769 (list month
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2770 (hebrew-calendar-last-day-of-month month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2771 year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2772 (setq month (1+ (% month length)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2773 (setq day (1+
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2774 (- date (calendar-absolute-from-hebrew (list month 1 year)))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2775 (list month day year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2776
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2777 (defun hebrew-calendar-leap-year-p (year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2778 "t if YEAR is a Hebrew calendar leap year."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2779 (< (% (1+ (* 7 year)) 19) 7))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2780
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2781 (defun hebrew-calendar-last-month-of-year (year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2782 "The last month of the Hebrew calendar YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2783 (if (hebrew-calendar-leap-year-p year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2784 13
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2785 12))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2786
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2787 (defun hebrew-calendar-last-day-of-month (month year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2788 "The last day of MONTH in YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2789 (if (or (memq month (list 2 4 6 10 13))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2790 (and (= month 12) (not (hebrew-calendar-leap-year-p year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2791 (and (= month 8) (not (hebrew-calendar-long-heshvan-p year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2792 (and (= month 9) (hebrew-calendar-short-kislev-p year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2793 29
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2794 30))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2795
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2796 (defun hebrew-calendar-elapsed-days (year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2797 "Number of days elapsed from the Sunday prior to the start of the Hebrew
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2798 calendar to the mean conjunction of Tishri of Hebrew YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2799 (let* ((months-elapsed
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2800 (+ (* 235 (/ (1- year) 19));; Months in complete cycles so far.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2801 (* 12 (% (1- year) 19)) ;; Regular months in this cycle
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2802 (/ (1+ (* 7 (% (1- year) 19))) 19)));; Leap months this cycle
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2803 (parts-elapsed (+ 204 (* 793 (% months-elapsed 1080))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2804 (hours-elapsed (+ 5
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2805 (* 12 months-elapsed)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2806 (* 793 (/ months-elapsed 1080))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2807 (/ parts-elapsed 1080)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2808 (parts ;; Conjunction parts
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2809 (+ (* 1080 (% hours-elapsed 24)) (% parts-elapsed 1080)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2810 (day ;; Conjunction day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2811 (+ 1 (* 29 months-elapsed) (/ hours-elapsed 24)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2812 (alternative-day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2813 (if (or (>= parts 19440) ;; If the new moon is at or after midday,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2814 (and (= (% day 7) 2);; ...or is on a Tuesday...
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2815 (>= parts 9924) ;; at 9 hours, 204 parts or later...
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2816 (not (hebrew-calendar-leap-year-p year)));; of a
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2817 ;; common year,
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2818 (and (= (% day 7) 1);; ...or is on a Monday...
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2819 (>= parts 16789) ;; at 15 hours, 589 parts or later...
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2820 (hebrew-calendar-leap-year-p (1- year))));; at the end
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2821 ;; of a leap year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2822 ;; Then postpone Rosh HaShanah one day
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2823 (1+ day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2824 ;; Else
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2825 day)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2826 (if ;; If Rosh HaShanah would occur on Sunday, Wednesday, or Friday
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2827 (memq (% alternative-day 7) (list 0 3 5))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2828 ;; Then postpone it one (more) day and return
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2829 (1+ alternative-day)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2830 ;; Else return
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2831 alternative-day)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2832
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2833 (defun hebrew-calendar-days-in-year (year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2834 "Number of days in Hebrew YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2835 (- (hebrew-calendar-elapsed-days (1+ year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2836 (hebrew-calendar-elapsed-days year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2837
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2838 (defun hebrew-calendar-long-heshvan-p (year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2839 "t if Heshvan is long in Hebrew YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2840 (= (% (hebrew-calendar-days-in-year year) 10) 5))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2841
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2842 (defun hebrew-calendar-short-kislev-p (year)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2843 "t if Kislev is short in Hebrew YEAR."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2844 (= (% (hebrew-calendar-days-in-year year) 10) 3))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2845
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2846 (defun calendar-absolute-from-hebrew (date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2847 "Absolute date of Hebrew DATE.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2848 The absolute date is the number of days elapsed since the (imaginary)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2849 Gregorian date Sunday, December 31, 1 BC."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2850 (let* ((month (extract-calendar-month date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2851 (day (extract-calendar-day date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2852 (year (extract-calendar-year date)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2853 (+ day ;; Days so far this month.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2854 (if (< month 7);; before Tishri
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2855 ;; Then add days in prior months this year before and after Nisan
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2856 (+ (calendar-sum
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2857 m 7 (<= m (hebrew-calendar-last-month-of-year year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2858 (hebrew-calendar-last-day-of-month m year))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2859 (calendar-sum
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2860 m 1 (< m month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2861 (hebrew-calendar-last-day-of-month m year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2862 ;; Else add days in prior months this year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2863 (calendar-sum
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2864 m 7 (< m month)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2865 (hebrew-calendar-last-day-of-month m year)))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2866 (hebrew-calendar-elapsed-days year);; Days in prior years.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2867 -1373429))) ;; Days elapsed before absolute date 1.
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2868
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2869 (defconst calendar-hebrew-month-name-array-common-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2870 ["Nisan" "Iyar" "Sivan" "Tammuz" "Av" "Elul" "Tishri"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2871 "Heshvan" "Kislev" "Teveth" "Shevat" "Adar"])
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2872
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2873 (defconst calendar-hebrew-month-name-array-leap-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2874 ["Nisan" "Iyar" "Sivan" "Tammuz" "Av" "Elul" "Tishri"
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2875 "Heshvan" "Kislev" "Teveth" "Shevat" "Adar I" "Adar II"])
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2876
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2877 (defun calendar-print-hebrew-date ()
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2878 "Show the Hebrew calendar equivalent of the date under the cursor."
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2879 (interactive)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2880 (let* ((hebrew-date (calendar-hebrew-from-absolute
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2881 (calendar-absolute-from-gregorian
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2882 (or (calendar-cursor-to-date)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2883 (error "Cursor is not on a date!")))))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2884 (calendar-month-name-array
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2885 (if (hebrew-calendar-leap-year-p (extract-calendar-year hebrew-date))
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2886 calendar-hebrew-month-name-array-leap-year
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2887 calendar-hebrew-month-name-array-common-year)))
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2888 (message "Hebrew date (until sunset): %s"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2889 (calendar-date-string hebrew-date nil t))))
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2890
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2891 (defun hebrew-calendar-yahrzeit (death-date year)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2892 "Absolute date of the anniversary of Hebrew DEATH-DATE in Hebrew YEAR."
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2893 (let* ((death-day (extract-calendar-day death-date))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2894 (death-month (extract-calendar-month death-date))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2895 (death-year (extract-calendar-year death-date)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2896 (cond
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2897 ;; If it's Heshvan 30 it depends on the first anniversary; if
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2898 ;; that was not Heshvan 30, use the day before Kislev 1.
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2899 ((and (= death-month 8)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2900 (= death-day 30)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2901 (not (hebrew-calendar-long-heshvan-p (1+ death-year))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2902 (1- (calendar-absolute-from-hebrew (list 9 1 year))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2903 ;; If it's Kislev 30 it depends on the first anniversary; if
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2904 ;; that was not Kislev 30, use the day before Teveth 1.
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2905 ((and (= death-month 9)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2906 (= death-day 30)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2907 (hebrew-calendar-short-kislev-p (1+ death-year)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2908 (1- (calendar-absolute-from-hebrew (list 10 1 year))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2909 ;; If it's Adar II, use the same day in last month of
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2910 ;; year (Adar or Adar II).
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2911 ((= death-month 13)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2912 (calendar-absolute-from-hebrew
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2913 (list (last-month-of-hebrew-year year) death-day year)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2914 ;; If it's the 30th in Adar I and $year$ is not a leap year
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2915 ;; (so Adar has only 29 days), use the last day in Shevat.
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2916 ((and (= death-day 30)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2917 (= death-month 12)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2918 (not (hebrew-calendar-leap-year-p death-year)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2919 (calendar-absolute-from-hebrew (list 11 30 year)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2920 ;; In all other cases, use the normal anniversary of the date of death.
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2921 (t (calendar-absolute-from-hebrew
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2922 (list death-month death-day year))))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2923
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2924 (defun calendar-set-mode-line (str)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2925 "Set mode line to STR, centered, surrounded by dashes."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2926 (setq mode-line-format
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2927 (calendar-string-spread (list "" str "") ?- (frame-width))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2928
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2929 ;;;###autoload
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2930 (defun list-yahrzeit-dates (death-date start-year end-year)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2931 "List of Yahrzeit dates for *Gregorian* DEATH-DATE from START-YEAR to
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2932 END-YEAR. When called interactively from the calendar window,
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2933 the date of death is taken from the cursor position."
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2934 (interactive
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2935 (let* ((death-date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2936 (if (equal (current-buffer) (get-buffer calendar-buffer))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2937 (calendar-cursor-to-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2938 (let* ((today (calendar-current-date))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2939 (year (calendar-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2940 "Year of death (>0): "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2941 '(lambda (x) (> x 0))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2942 (int-to-string (extract-calendar-year today))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2943 (month-array calendar-month-name-array)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2944 (completion-ignore-case t)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2945 (month (cdr (assoc
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2946 (capitalize
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2947 (completing-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2948 "Month of death (name): "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2949 (mapcar 'list (append month-array nil))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2950 nil t))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2951 (calendar-make-alist
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2952 month-array 1 'capitalize))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2953 (last (calendar-last-day-of-month month year))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2954 (day (calendar-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2955 (format "Day of death (1-%d): " last)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2956 '(lambda (x) (and (< 0 x) (<= x last))))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2957 (list month day year))))
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2958 (death-year (extract-calendar-year death-date))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2959 (start-year (calendar-read
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2960 (format "Starting year of Yahrzeit table (>%d): "
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2961 death-year)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2962 '(lambda (x) (> x death-year))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2963 (int-to-string (1+ death-year))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2964 (end-year (calendar-read
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2965 (format "Ending year of Yahrzeit table (>=%d): "
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2966 start-year)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2967 '(lambda (x) (>= x start-year)))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2968 (list death-date start-year end-year)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2969 (message "Computing yahrzeits...")
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2970 (let* ((yahrzeit-buffer "*Yahrzeits*")
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2971 (h-date (calendar-hebrew-from-absolute
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2972 (calendar-absolute-from-gregorian death-date)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2973 (h-month (extract-calendar-month h-date))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2974 (h-day (extract-calendar-day h-date))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2975 (h-year (extract-calendar-year h-date)))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2976 (set-buffer (get-buffer-create yahrzeit-buffer))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2977 (setq buffer-read-only nil)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2978 (calendar-set-mode-line
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2979 (format "Yahrzeit dates for %s = %s"
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2980 (calendar-date-string death-date)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2981 (let ((calendar-month-name-array
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2982 (if (hebrew-calendar-leap-year-p h-year)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2983 calendar-hebrew-month-name-array-leap-year
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
2984 calendar-hebrew-month-name-array-common-year)))
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2985 (calendar-date-string h-date nil t))))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2986 (erase-buffer)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2987 (goto-char (point-min))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2988 (calendar-for-loop i from start-year to end-year do
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2989 (insert
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2990 (calendar-date-string
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2991 (calendar-gregorian-from-absolute
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2992 (hebrew-calendar-yahrzeit
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2993 h-date
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2994 (extract-calendar-year
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2995 (calendar-hebrew-from-absolute
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2996 (calendar-absolute-from-gregorian (list 1 1 i))))))) "\n"))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2997 (goto-char (point-min))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2998 (set-buffer-modified-p nil)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
2999 (setq buffer-read-only t)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
3000 (display-buffer yahrzeit-buffer)
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
3001 (message "Computing yahrzeits...done")))
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 675
diff changeset
3002
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3003 (defun calendar-print-astro-day-number ()
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3004 "Show the astronomical (Julian) day number of afternoon on date
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3005 shown by cursor."
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3006 (interactive)
957
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3007 (message
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3008 "Astromonical (Julian) day number after noon Universal Time: %d"
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3009 (+ 1721425
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3010 (calendar-absolute-from-gregorian
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3011 (or (calendar-cursor-to-date)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3012 (error "Cursor is not on a date!"))))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3013
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3014 (defun calendar-goto-astro-day-number (daynumber &optional noecho)
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3015 "Move cursor to astronomical (Julian) DAYNUMBER.
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3016 Echo astronomical (Julian) day number unless NOECHO is t."
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3017 (interactive (list (calendar-read
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3018 "Astromonical (Julian) day number (>1721425): "
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3019 '(lambda (x) (> x 1721425)))))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3020 (calendar-goto-date (calendar-gregorian-from-absolute (- daynumber 1721425)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3021 (or noecho (calendar-print-astro-day-number)))
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3022
2619b7a9c11e entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 846
diff changeset
3023 (run-hooks 'calendar-load-hook)
628
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3024
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3025 (provide 'calendar)
ab209803a494 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3026
675
85fd29f25c75 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 628
diff changeset
3027 ;;; calendar.el ends here