comparison man/xemacs/calendar.texi @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
comparison
equal deleted inserted replaced
-1:000000000000 0:376386a54a3c
1 @node Calendar/Diary, Sorting, Reading Mail, Top
2 @section Calendar Mode and the Diary
3 @cindex calendar
4 @findex calendar
5
6 Emacs provides the functions of a desk calendar, with a diary of past
7 or planned events. Display the calendar by typing @kbd{M-x calendar}.
8 This command creates a window containing a three-month calendar centered
9 on the current month, with point on the current date. Or, provide a
10 prefix argument by typing @kbd{C-u M-x calendar}; then you are prompted
11 for the month and year to be the center of the three-month calendar. In
12 either case, you are now in Calendar mode.
13
14 Calendar mode makes it easy to look at the holidays or diary entries
15 associated with various dates, and to change the diary entries. You can move
16 freely between the Calendar window and other windows. To exit the calendar,
17 type @kbd{q}.
18
19 @menu
20 * Calendar Motion:: Moving through the calendar; selecting a date.
21 * Scroll Calendar:: Bringing earlier or later months onto the screen.
22 * Mark and Region:: Remembering dates, the mark ring.
23 * General Calendar:: Conveniences for moving about.
24 * Holidays:: Displaying dates of holidays.
25 * Sunrise/Sunset:: Displaying local times of sunrise and sunset.
26 * Lunar Phases:: Displaying phases of the moon.
27 * Other Calendars:: Converting dates to other calendar systems.
28 * Diary:: Displaying events from your diary.
29 * Calendar Customization:: Altering the behavior of the features above.
30 @end menu
31
32 @node Calendar Motion, Scroll Calendar, Calendar/Diary, Calendar/Diary
33 @subsection Movement in the Calendar
34
35 Calendar mode lets you move in logical units of time such as days,
36 weeks, months, and years. Sometimes you need to move to a specific date
37 in order to enter commands affecting its display or the associated diary
38 entries. If you move outside the three months originally displayed, the
39 calendar display scrolls automatically through time.
40
41 @menu
42 * Calendar Unit Motion:: Moving by days, weeks, months, and years.
43 * Move to Beginning or End:: Moving to start/end of weeks, months, and years.
44 * Specified Dates:: Moving to the current date or another specific date.
45 @end menu
46
47 @node Calendar Unit Motion, Move to Beginning or End, Calendar Motion, Calendar Motion
48 @subsubsection Motion by Integral Days, Weeks, Months, Years
49
50 The commands for movement in the calendar buffer parallel the
51 commands for movement in text. You can move forward and backward by
52 days, weeks, months, and years.
53
54 @table @kbd
55 @item C-f
56 Move point one day forward (@code{calendar-forward-day}).
57 @item C-b
58 Move point one day backward (@code{calendar-backward-day}).
59 @item C-n
60 Move point one week forward (@code{calendar-forward-week}).
61 @item C-p
62 Move point one week backward (@code{calendar-backward-week}).
63 @item M-@}
64 Move point one month forward (@code{calendar-forward-month}).
65 @item M-@{
66 Move point one month backward (@code{calendar-backward-month}).
67 @item C-x ]
68 Move point one year forward (@code{calendar-forward-year}).
69 @item C-x [
70 Move point one year backward (@code{calendar-forward-year}).
71 @end table
72
73 @kindex C-f (Calendar mode)
74 @findex calendar-forward-day
75 @kindex C-b (Calendar mode)
76 @findex calendar-backward-day
77 @kindex C-n (Calendar mode)
78 @findex calendar-forward-week
79 @kindex C-p (Calendar mode)
80 @findex calendar-backward-week
81 The day and week commands are natural analogues of the usual Emacs
82 commands for moving by characters and by lines. Just as @kbd{C-n}
83 usually moves to the same column in the following line, in Calendar
84 mode it moves to the same day in the following week. And @kbd{C-p}
85 moves to the same day in the previous week.
86
87 @kindex M-@} (Calendar mode)
88 @findex calendar-forward-month
89 @kindex M-@{ (Calendar mode)
90 @findex calendar-backward-month
91 @kindex C-x ] (Calendar mode)
92 @findex calendar-forward-year
93 @kindex C-x [ (Calendar mode)
94 @findex calendar-forward-year
95 The commands for motion by months and years work like those for
96 weeks, but move a larger distance. The month commands @kbd{M-@}} and
97 @kbd{M-@{} move forward or backward by an entire month's time. The
98 year commands @kbd{C-x ]} and @kbd{C-x [} move forward or backward a
99 whole year.
100
101 The easiest way to remember these commands is to consider months and
102 years analogous to paragraphs and pages of text, respectively. But the
103 commands themselves are not quite analogous. The ordinary Emacs paragraph
104 commands move to the beginning or end of a paragraph, whereas these month
105 and year commands move by an entire month or an entire year, which usually
106 involves skipping across the end of a month or year.
107
108 Each of these commands accepts a numeric argument as a repeat count. For
109 convenience, the digit keys and the minus sign are bound in Calendar mode so
110 that it is unnecessary to type the @kbd{M-} prefix. For example, @kbd{100
111 C-f} moves point 100 days forward from its present location.
112
113 @node Move to Beginning or End, Specified Dates, Calendar Unit Motion, Calendar Motion
114 @subsubsection Beginning or End of Week, Month or Year
115
116 A week (or month, or year) is not just a quantity of days; we think
117 of new weeks (months, years) as starting on particular days. So
118 Calendar mode provides commands to move to the beginning or end of the
119 week, month or year:
120
121 @table @kbd
122 @kindex C-a (Calendar mode)
123 @findex calendar-beginning-of-week
124 @item C-a
125 Move point to beginning of week (@code{calendar-beginning-of-week}).
126 @kindex C-e (Calendar mode)
127 @findex calendar-end-of-week
128 @item C-e
129 Move point to end of week (@code{calendar-end-of-week}).
130 @kindex M-a (Calendar mode)
131 @findex calendar-beginning-of-month
132 @item M-a
133 Move point to beginning of month (@code{calendar-beginning-of-month}).
134 @kindex M-e (Calendar mode)
135 @findex calendar-end-of-month
136 @item M-e
137 Move point to end of month (@code{calendar-end-of-month}).
138 @kindex M-< (Calendar mode)
139 @findex calendar-beginning-of-year
140 @item M-<
141 Move point to beginning of year (@code{calendar-beginning-of-year}).
142 @kindex M-> (Calendar mode)
143 @findex calendar-end-of-year
144 @item M->
145 Move point to end of year (@code{calendar-end-of-year}).
146 @end table
147
148 These commands also take numeric arguments as repeat counts, with the
149 repeat count indicating how many weeks, months, or years to move
150 backward or forward.
151
152 @node Specified Dates,,Move to Beginning or End, Calendar Motion
153 @subsubsection Particular Dates
154
155 Calendar mode provides some commands for getting to a particular date
156 quickly.
157
158 @table @kbd
159 @item g d
160 Move point to specified date (@code{calendar-goto-date}).
161 @item o
162 Center calendar around specified month (@code{calendar-other-month}).
163 @item .
164 Move point to today's date (@code{calendar-current-month}).
165 @end table
166
167 @kindex g d (Calendar mode)
168 @findex calendar-goto-date
169 @kbd{g d} (@code{calendar-goto-date}) prompts for a year, a month, and a day
170 of the month, and then goes to that date. Because the calendar includes all
171 dates from the beginning of the current era, you must type the year in its
172 entirety; that is, type @samp{1990}, not @samp{90}.
173
174 @kindex o (Calendar mode)
175 @findex calendar-other-month
176 @kbd{o} (@code{calendar-other-month}) prompts for a month and year,
177 then centers the three-month calendar around that month.
178
179 @kindex . (Calendar mode)
180 @findex calendar-current-month
181 You can return to the current date with @kbd{.}
182 (@code{calendar-current-month}).
183
184 @node Scroll Calendar, Mark and Region, Calendar Motion, Calendar/Diary
185 @subsection Scrolling the Calendar through Time
186
187 The calendar display scrolls automatically through time when you move out
188 of the visible portion. You can also scroll it manually. Imagine that the
189 calendar window contains a long strip of paper with the months on it.
190 Scrolling it means moving the strip so that new months become visible in
191 the window.
192
193 @table @kbd
194 @item C-x <
195 Scroll calendar one month forward (@code{scroll-calendar-left}).
196 @item C-x >
197 Scroll calendar one month backward (@code{scroll-calendar-right}).
198 @item C-v
199 Scroll calendar three months forward
200 (@code{scroll-calendar-left-three-months}).
201 @item M-v
202 Scroll calendar three months backward
203 (@code{scroll-calendar-right-three-months}).
204 @end table
205
206 @kindex C-x < (Calendar mode)
207 @findex scroll-calendar-left
208 @kindex C-x > (Calendar mode)
209 @findex scroll-calendar-right
210 The most basic calendar scroll commands scroll by one month at a
211 time. This means that there are two months of overlap between the
212 display before the command and the display after. @kbd{C-x <} scrolls
213 the calendar contents one month to the left; that is, it moves the
214 display forward in time. @kbd{C-x >} scrolls the contents to the
215 right, which moves backwards in time.
216
217 @kindex C-v (Calendar mode)
218 @findex scroll-calendar-left-three-months
219 @kindex M-v (Calendar mode)
220 @findex scroll-calendar-right-three-months
221 The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire
222 ``screenful''---three months---in analogy with the usual meaning of these
223 commands. @kbd{C-v} makes later dates visible and @kbd{M-v} makes earlier
224 dates visible. These commands also take a numeric argument as a repeat
225 count; in particular, since @kbd{C-u} (@code{universal-argument}) multiplies
226 the next command by four, typing @kbd{C-u C-v} scrolls the calendar forward by
227 a year and typing @kbd{C-u M-v} scrolls the calendar backward by a year.
228
229 Any of the special Calendar mode commands scrolls the calendar automatically
230 as necessary to ensure that the date you have moved to is visible.
231
232 @node Mark and Region, General Calendar, Scroll Calendar, Calendar/Diary
233 @subsection The Mark and the Region
234
235 The concept of the mark applies to the calendar just as to any other
236 buffer, but it marks a @emph{date}, not a @emph{position} in the buffer.
237 The region consists of the days between the mark and point (including
238 the starting and stopping dates).
239
240 @table @kbd
241 @item C-SPC
242 Set the mark to today's date (@code{calendar-set-mark}).
243 @item C-@@
244 The same.
245 @item C-x C-x
246 Interchange mark and point (@code{calendar-exchange-point-and-mark}).
247 @item M-=
248 Display the number of days in the current region
249 (@code{calendar-count-days-region}).
250 @end table
251
252 @kindex C-@@ (Calendar mode)
253 @kindex C-SPC (Calendar mode)
254 @findex calendar-set-mark
255 @kindex C-x C-x (Calendar mode)
256 @findex calendar-exchange-point-and-mark
257 You set the mark in the calendar, as in any other buffer, by using @kbd{C-@@}
258 or @kbd{C-SPC} (@code{calendar-set-mark}). You return to the marked date
259 with the command @kbd{C-x C-x} (@code{calendar-exchange-point-and-mark})
260 which puts the mark where point was and point where mark was. The calendar
261 is scrolled as necessary, if the marked date was not visible on the
262 screen. This does not change the extent of the region.
263
264 @kindex M-= (Calendar mode)
265 @findex calendar-count-days-region
266 To determine the number of days in the region, type @kbd{M-=}
267 (@code{calendar-count-days-region}). The numbers of days printed is
268 @emph{inclusive}, that is, includes the days specified by mark and point.
269
270 @cindex mark ring
271 The main use of the mark in the calendar is to remember dates that you may
272 want to go back to. To make this feature more useful, the mark ring
273 (@pxref{Mark Ring}) operates exactly as in other buffers: Emacs remembers
274 16 previous locations of the mark. To return to a marked date, type @kbd{C-u
275 C-SPC} (or @kbd{C-u C-@@}); this is the command @code{calendar-set-mark} given
276 a numeric argument. It moves point to where the mark was, restores the mark
277 from the ring of former marks, and stores the previous point at the end of
278 the mark ring. So, repeated use of this command moves point through all
279 the old marks on the ring, one by one.
280
281 @node General Calendar, Holidays, Mark and Region, Calendar/Diary
282 @subsection Miscellaneous Calendar Commands
283
284 @table @kbd
285 @item p d
286 Display day-in-year (@code{calendar-print-day-of-year}).
287 @item ?
288 Briefly describe calendar commands (@code{describe-calendar-mode}).
289 @item SPC
290 Scroll the next window (@code{scroll-other-window}).
291 @item C-c C-l
292 Regenerate the calendar window (@code{redraw-calendar}).
293 @item q
294 Exit from calendar (@code{exit-calendar}).
295 @end table
296
297 @kindex p d (Calendar mode)
298 @cindex day of year
299 @findex calendar-print-day-of-year
300 If you want to know how many days have elapsed since the start of
301 the year, or the number of days remaining in the year, type the @kbd{p d}
302 command (@code{calendar-print-day-of-year}). This displays both
303 of those numbers in the echo area.
304
305 @kindex ? (Calendar mode)
306 @findex describe-calendar-mode
307 To display a brief description of the calendar commands, type @kbd{?}
308 (@code{describe-calendar-mode}). For a fuller description, type @kbd{C-h m}.
309
310 @kindex SPC (Calendar mode)
311 @findex scroll-other-window
312 You can use @kbd{SPC} (@code{scroll-other-window}) to scroll the other
313 window. This is handy when you display a list of holidays or diary entries
314 in another window.
315
316 @kindex C-c C-l (Calendar mode)
317 @findex redraw-calendar
318 If the calendar window gets corrupted, type @kbd{C-c C-l}
319 (@code{redraw-calendar}) to redraw it.
320
321 @kindex q (Calendar mode)
322 @findex exit-calendar
323 To exit from the calendar, type @kbd{q} (@code{exit-calendar}). This
324 buries all buffers related to the calendar and returns the window display
325 to what it was when you entered the calendar.
326
327 @node Holidays, Sunrise/Sunset, General Calendar, Calendar/Diary
328 @subsection Holidays
329 @cindex holidays
330
331 The Emacs calendar knows about all major and many minor holidays.
332
333 @table @kbd
334 @item h
335 Display holidays for the date indicated by point
336 (@code{calendar-cursor-holidays}).
337 @item x
338 Mark holidays in the calendar window (@code{mark-calendar-holidays}).
339 @item u
340 Unmark calendar window (@code{calendar-unmark}).
341 @item a
342 List all holidays for the displayed three months in another window
343 (@code{list-calendar-holidays}).
344 @item M-x holidays
345 List all holidays for three months around today's date in another
346 window.
347 @end table
348
349 @kindex h (Calendar mode)
350 @findex calendar-cursor-holidays
351 To see if any holidays fall on a given date, position point on that
352 date in the calendar window and use the @kbd{h} command. The holidays
353 are usually listed in the echo area, but if there are too many to fit in
354 one line, then they are displayed in a separate window.
355
356 @kindex x (Calendar mode)
357 @findex mark-calendar-holidays
358 @kindex u (Calendar mode)
359 @findex calendar-unmark
360 To find the distribution of holidays for a wider period, you can use the
361 @kbd{x} command. This places a @samp{*} next to every date on which a holiday
362 falls. The command applies both to the currently visible dates and to new
363 dates that become visible by scrolling. To turn marking off and erase the
364 current marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}).
365
366 @kindex a (Calendar mode)
367 @findex list-calendar-holidays
368 To get even more detailed information, use the @kbd{a} command, which
369 displays a separate buffer containing a list of all holidays in the
370 current three-month range.
371
372 @findex holidays
373 You can display the list of holidays for the current month and the
374 preceding and succeeding months even if you don't have a calendar
375 window. Use the command @kbd{M-x holidays}. If you want the list of
376 holidays centered around a different month, use @kbd{C-u M-x holidays}
377 and type the month and year.
378
379 The holidays known to Emacs include American holidays and the major
380 Christian, Jewish, and Islamic holidays; when floating point is available,
381 Emacs also knows about solstices and equinoxes. The dates used by Emacs
382 for holidays are based on @emph{current practice}, not historical fact.
383 Historically, for instance, the start of daylight savings time and even
384 its existence have varied from year to year. However present American
385 law mandates that daylight savings time begins on the first Sunday in
386 April; this is the definition that Emacs uses, even though it is wrong
387 for some prior years.
388
389 @node Sunrise/Sunset, Lunar Phases, Holidays, Calendar/Diary
390 @subsection Times of Sunrise and Sunset
391 @cindex sunrise
392 @cindex sunset
393
394 Emacs can tell you, to within a minute or two, the times of sunrise and
395 sunset for any date, if floating point is available.
396
397 @table @kbd
398 @item S
399 Display times of sunrise and sunset for the date indicated by point
400 (@code{calendar-sunrise-sunset}).
401 @item M-x sunrise-sunset
402 Display times of sunrise and sunset for today's date.
403 @end table
404
405 @kindex S (Calendar mode)
406 @findex calendar-sunrise-sunset
407 @findex sunrise-sunset
408 Move point to the date you want, and type @kbd{S}, to display the
409 @emph{local times} of sunrise and sunset in the echo area.
410
411 You can display the times of sunrise and sunset for the current date
412 even if you don't have a calendar window. Use the command @kbd{M-x
413 sunrise-sunset}. If you want the times of sunrise and sunset for a
414 different date, use @kbd{C-u M-x sunrise-sunset} and type the year,
415 month, and day.
416
417 Because the times of sunrise and sunset depend on the location on
418 earth, you need to tell Emacs your latitude, longitude, and location
419 name. Here is an example of what to set:
420
421 @vindex calendar-location-name
422 @vindex calendar-longitude
423 @vindex calendar-latitude
424 @example
425 (setq calendar-latitude 40.1)
426 (setq calendar-longitude -88.2)
427 (setq calendar-location-name "Urbana, IL")
428 @end example
429
430 @noindent
431 Use one decimal place in the values of @code{calendar-latitude} and
432 @code{calendar-longitude}.
433
434 Your time zone also affects the local time of sunrise and sunset.
435 Emacs usually gets this information from the operating system, but if
436 these values are not what you want (or if the operating system does not
437 supply them), you'll need to set them yourself, like this:
438
439 @vindex calendar-time-zone
440 @vindex calendar-standard-time-zone-name
441 @vindex calendar-daylight-time-zone-name
442 @example
443 (setq calendar-time-zone -360)
444 (setq calendar-standard-time-zone-name "CST")
445 (setq calendar-daylight-time-zone-name "CDT")
446 @end example
447
448 @noindent
449 The value of @code{calendar-time-zone} is the number of minutes
450 difference between your local standard time and Universal Time
451 (Greenwich time). The values of @code{calendar-standard-time-zone-name}
452 and @code{calendar-daylight-time-zone-name} are the abbreviations used
453 in your time zone.
454
455 Emacs displays the times of sunrise and sunset @emph{corrected for
456 daylight savings time} (this convenience is unusual; most tables of
457 sunrise and sunset use standard time). The default rule for the
458 starting and stopping dates of daylight savings time is the American
459 rule. @xref{Daylight Savings}
460
461 You can display the times of sunrise and sunset for any location and
462 any date with @kbd{C-u C-u M-x sunrise-sunset}. Emacs asks you for a
463 longitude, latitude, number of minutes difference from Universal time,
464 and date, and then tells you the times of sunrise and sunset for that
465 location on that date. The times are usually given in the echo area,
466 but if the message is too long fit in one line, they are displayed in a
467 separate window.
468
469 @node Lunar Phases, Other Calendars, Sunrise/Sunset, Calendar/Diary
470 @subsection Phases of the Moon
471 @cindex phases of the moon
472 @cindex moon, phases of
473
474 Emacs can tell you the dates and times of the phases of the moon (new
475 moon, first quarter, full moon, last quarter), if floating point is available.
476
477 @table @kbd
478 @item M
479 List, in another window, the dates and times for all the quarters of the
480 moon for the three-month period shown in the calendar window
481 (@code{calendar-phases-of-moon}).
482 @item M-x phases-of-moon
483 List dates and times of the quarters of the moon for three months around
484 today's date in another window.
485 @end table
486
487 @kindex M (Calendar mode)
488 @findex calendar-phases-of-moon
489 Use the @kbd{M} command to display a separate buffer of the phases of
490 the moon for the current three-month range. The dates and times listed
491 are accurate to within a few minutes.
492
493 @findex phases-of-moon
494 You can display the list of the phases of the moon for the current
495 month and the preceding and succeeding months even if you don't have a
496 calendar window. Use the command @kbd{M-x phases-of-moon}. If you want
497 the phases of the moon centered around a different month, use @kbd{C-u
498 M-x phases-of-moon} and type the month and year.
499
500 @vindex calendar-time-zone
501 The dates and times given for the phases of the moon are given in
502 local time (corrected for daylight savings, when appropriate); but if
503 the variable @code{calendar-time-zone} is void, Universal Time (the
504 Greenwich time zone) is used. @xref{Daylight Savings}
505
506 @node Other Calendars, Diary, Lunar Phases, Calendar/Diary
507 @subsection Our Calendar and Other Calendars
508
509 @cindex Gregorian calendar
510 The Emacs calendar displayed is @emph{always} the Gregorian calendar,
511 sometimes called the ``new style'' calendar, which is used in most of
512 the world today. However, this calendar did not exist before the
513 sixteenth century and was not widely used before the eighteenth century;
514 it did not fully displace the Julian calendar and gain universal
515 acceptance until the early twentieth century. This poses a problem for
516 the Emacs calendar: you can ask for the calendar of any month starting
517 with January, year 1 of the current era, but the calendar displayed is
518 the Gregorian, even for a date at which the Gregorian calendar did not
519 exist!
520
521 Emacs knows about several different calendars, though, not just the
522 Gregorian calendar. The following commands describe the date indicated
523 by point in various calendar notations:
524
525 @table @kbd
526 @item p c
527 Display ISO commercial calendar equivalent for selected day
528 (@code{calendar-print-iso-date}).
529 @item p j
530 Display Julian date for selected day (@code{calendar-print-julian-date}).
531 @item p a
532 Display astronomical (Julian) day number for selected day
533 (@code{calendar-print-astro-day-number}).
534 @item p h
535 Display Hebrew date for selected day (@code{calendar-print-hebrew-date}).
536 @item p i
537 Display Islamic date for selected day (@code{calendar-print-islamic-date}).
538 @item p f
539 Display French Revolutionary date for selected day
540 (@code{calendar-print-french-date}).
541 @item p m
542 Display Mayan date for selected day (@code{calendar-print-mayan-date}).
543 @end table
544
545 If you are interested in these calendars, you can convert dates one at a
546 time. Put point on the desired date of the Gregorian calendar and press the
547 appropriate keys. The @kbd{p} is a mnemonic for ``print'' since Emacs
548 ``prints' the equivalent date in the echo area.
549
550 @kindex p c (Calendar mode)
551 @findex calendar-print-iso-date
552 @cindex ISO commercial calendar
553 The ISO commercial calendar is used largely in Europe.
554
555 @kindex p j (Calendar mode)
556 @findex calendar-print-julian-date
557 @cindex Julian calendar
558 The Julian calendar, named after Julius Caesar, was the one used in Europe
559 throughout medieval times, and in many countries up until the nineteenth
560 century.
561
562 @kindex p a (Calendar mode)
563 @findex calendar-print-astro-day-number
564 @cindex Julian day numbers
565 @cindex astronomical day numbers
566 Astronomers use a simple counting of days elapsed since noon, Monday,
567 January 1, 4713 B.C. on the Julian calendar. The number of days elapsed
568 is called the @emph{Julian day number} or the @emph{Astronomical day number}.
569
570 @kindex p h (Calendar mode)
571 @findex calendar-print-hebrew-date
572 @cindex Hebrew calendar
573 The Hebrew calendar is the one used to determine the dates of Jewish
574 holidays. Hebrew calendar dates begin and end at sunset.
575
576 @kindex p i (Calendar mode)
577 @findex calendar-print-islamic-date
578 @cindex Islamic calendar
579 The Islamic (Moslem) calendar is the one used to determine the dates
580 of Moslem holidays. There is no universal agreement in the Islamic
581 world about the calendar; Emacs uses a widely accepted version, but the
582 precise dates of Islamic holidays often depend on proclamation by
583 religious authorities, not on calculations. As a consequence, the
584 actual dates of occurrence can vary slightly from the dates computed by
585 Emacs. Islamic calendar dates begin and end at sunset.
586
587 @kindex p f (Calendar mode)
588 @findex calendar-print-french-date
589 @cindex French Revolutionary calendar
590 The French Revolutionary calendar was created by the Jacobins after the 1789
591 revolution, to represent a more secular and nature-based view of the annual
592 cycle, and to install a 10-day week in a rationalization measure similar to
593 the metric system. The French government officially abandoned this
594 calendar at the end of 1805.
595
596 @kindex p m (Calendar mode)
597 @findex calendar-print-mayan-date
598 @cindex Mayan calendar
599 The Maya of Central America used three separate, overlapping calendar
600 systems, the @emph{long count}, the @emph{tzolkin}, and the @emph{haab}.
601 Emacs knows about all three of these calendars. Experts dispute the
602 exact correlation between the Mayan calendar and our calendar; Emacs uses the
603 Goodman-Martinez-Thompson correlation in its calculations.
604
605 You can move to dates that you specify on the Commercial, Julian,
606 astronomical, Hebrew, Islamic, or French calendars:
607
608 @kindex g c (Calendar mode)
609 @findex calendar-goto-iso-date
610 @kindex g j (Calendar mode)
611 @findex calendar-goto-julian-date
612 @kindex g a (Calendar mode)
613 @findex calendar-goto-astro-day-number
614 @kindex g h (Calendar mode)
615 @findex calendar-goto-hebrew-date
616 @kindex g i (Calendar mode)
617 @findex calendar-goto-islamic-date
618 @kindex g f (Calendar mode)
619 @findex calendar-goto-french-date
620 @table @kbd
621 @item g c
622 Move point to a date specified by the ISO commercial calendar
623 (@code{calendar-goto-iso-date}).
624 @item g j
625 Move point to a date specified by the Julian calendar
626 (@code{calendar-goto-julian-date}).
627 @item g a
628 Move point to a date specified by astronomical (Julian) day number
629 (@code{calendar-goto-astro-day-number}).
630 @item g h
631 Move point to a date specified by the Hebrew calendar
632 (@code{calendar-goto-hebrew-date}).
633 @item g i
634 Move point to a date specified by the Islamic calendar
635 (@code{calendar-goto-islamic-date}).
636 @item g f
637 Move point to a date specified by the French Revolutionary calendar
638 (@code{calendar-goto-french-date}).
639 @end table
640
641 These commands ask you for a date on the other calendar, move point to
642 the Gregorian calendar date equivalent to that date, and display the
643 other calendar's date in the echo area. Emacs uses strict completion
644 (@pxref{Completion}) whenever it asks you to type a month name, so you
645 don't have to worry about the spelling of Hebrew, Islamic, or French names.
646
647 @findex list-yahrzeit-dates
648 @cindex yahrzeits
649 One common question concerning the Hebrew calendar is the computation
650 of the anniversary of a date of death, called a ``yahrzeit.'' The Emacs
651 calendar includes a facility for such calculations. If you are in the
652 calendar, the command @kbd{M-x list-yahrzeit-dates} asks you for a
653 range of years and then displays a list of the yahrzeit dates for those
654 years for the date given by point. If you are not in the calendar,
655 this command first asks you for the date of death and the range of
656 years, and then displays the list of yahrzeit dates.
657
658 Emacs also has many commands for movement on the Mayan calendars.
659
660 @table @kbd
661 @item g m l
662 Move point to a date specified by the Mayan long count calendar
663 (@code{calendar-goto-mayan-long-count-date}).
664 @item g m p t
665 Move point to the previous occurrence of a date specified by the Mayan
666 tzolkin calendar (@code{calendar-previous-tzolkin-date}).
667 @item g m n t
668 Move point to the next occurrence of a date specified by the Mayan
669 tzolkin calendar (@code{calendar-next-tzolkin-date}).
670 @item g m p h
671 Move point to the previous occurrence of a date specified by the Mayan
672 haab calendar (@code{calendar-previous-haab-date}).
673 @item g m n h
674 Move point to the next occurrence of a date specified by the Mayan
675 haab calendar (@code{calendar-next-haab-date}).
676 @item g m p c
677 Move point to the previous occurrence of a date specified by the Mayan
678 calendar round (@code{calendar-previous-calendar-round-date}).
679 @item g m n c
680 Move point to the next occurrence of a date specified by the Mayan
681 calendar round (@code{calendar-next-calendar-round-date}).
682 @end table
683
684 @cindex Mayan long count
685 To understand these commands, you need to understand the Mayan calendars.
686 The long count is a counting of days with units
687
688 @table @asis
689 @item 1 kin
690 = 1 day
691 @item 1 uinal
692 = 20 kin
693 @item 1 tun
694 = 18 uinal
695 @item 1 katun
696 = 20 tun
697 @item 1 baktun
698 = 20 katun
699 @end table
700
701 @kindex g m l (Calendar mode)
702 @findex calendar-goto-mayan-long-count-date
703 @noindent
704 Thus, the long count date 12.16.11.16.6 means 12 baktun, 16 katun, 11
705 tun, 16 uinal, and 6 kin. The Emacs calendar can handle Mayan long
706 count dates as early as 7.17.18.13.1, but no earlier. When you use the
707 @kbd{g m l} command, type the Mayan long count date with the baktun,
708 katun, tun, uinal, and kin separated by periods.
709
710 @kindex g m p t (Calendar mode)
711 @findex calendar-previous-tzolkin-date
712 @kindex g m n t (Calendar mode)
713 @findex calendar-next-tzolkin-date
714 @cindex Mayan tzolkin calendar
715 The Mayan tzolkin calendar is a cycle of 260 days formed by a pair of
716 independent cycles of 13 and 20 days. Like the haab cycle, this cycle
717 repeats endlessly, and you can go backward and forward to the previous
718 or next (respectively) point in the cycle. When you type @kbd{g m p t},
719 Emacs asks you for a tzolkin date and moves point to the
720 previous occurrence of that date; type @kbd{g m n t} to go to the next
721 occurrence.
722
723 @kindex g m p h (Calendar mode)
724 @findex calendar-previous-haab-date
725 @kindex g m n h (Calendar mode)
726 @findex calendar-next-haab-date
727 @cindex Mayan haab calendar
728 The Mayan haab calendar is a cycle of 365 days arranged as 18 months
729 of 20 days each, followed a 5-day monthless period. Since this cycle
730 repeats endlessly, Emacs lets you go backward and forward to the
731 previous or next (respectively) point in the cycle. Type @kbd{g m p h}
732 to go to the previous haab date; Emacs asks you for a haab date and
733 moves point to the previous occurrence of that date. Similarly,
734 type @kbd{g m n h} to go to the next haab date.
735
736 @kindex g m p c (Calendar mode)
737 @findex calendar-previous-calendar-round-date
738 @kindex g m n c (Calendar mode)
739 @findex calendar-next-calendar-round-date
740 @cindex Mayan calendar round
741 The Maya also used the combination of the tzolkin date and the haab
742 date. This combination is a cycle of about 52 years called a
743 @emph{calendar round}. If you type @kbd{g m p c}, Emacs asks you for
744 both a haab and a tzolkin date and then moves point to the previous
745 occurrence of that combination. Use @kbd{g m p c} to move point to the
746 next occurrence. Emacs signals an error if the haab/tzolkin date you
747 have typed cannot occur.
748
749 Emacs uses strict completion (@pxref{Completion}) whenever it asks you
750 to type a Mayan name, so you don't have to worry about spelling.
751
752 @node Diary, Calendar Customization, Other Calendars, Calendar/Diary
753 @subsection The Diary
754 @cindex diary
755
756 Associated with the Emacs calendar is a diary that keeps track of
757 appointments or other events on a daily basis. To use the diary
758 feature, you must first create a @dfn{diary file} containing a list of
759 events and their dates. Then Emacs can automatically pick out and
760 display the events for today, for the immediate future, or for any
761 specified date.@refill
762
763 By default, Emacs expects your diary file to be named @file{~/diary}.
764 It uses the same format as the @code{calendar} utility. A sample
765 @file{~/diary} file is:
766
767 @example
768 12/22/1988 Twentieth wedding anniversary!!
769 &1/1. Happy New Year!
770 10/22 Ruth's birthday.
771 * 21, *: Payday
772 Tuesday--weekly meeting with grad students at 10am
773 Supowit, Shen, Bitner, and Kapoor to attend.
774 1/13/89 Friday the thirteenth!!
775 &thu 4pm squash game with Lloyd.
776 mar 16 Dad's birthday
777 April 15, 1989 Income tax due.
778 &* 15 time cards due.
779 @end example
780
781 Although you probably will start by creating a diary manually, Emacs
782 provides a number of commands to let you view, add, and change diary
783 entries. You can also share diary entries with other users
784 (@pxref{Included Diary Files}).
785
786 @menu
787 * Diary Commands:: Viewing diary entries and associated calendar dates.
788 * Format of Diary File:: Entering events in your diary.
789 * Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc.
790 @end menu
791
792 @node Diary Commands, Format of Diary File, Diary, Diary
793 @subsection Commands Displaying Diary Entries
794
795 Once you have created a @file{~/diary} file, you can view it within
796 Calendar mode. You can also view today's events independently of
797 Calendar mode.
798
799 @table @kbd
800 @item d
801 Display any diary entries for the selected date
802 (@code{view-diary-entries}).
803 @item s
804 Display entire diary file (@code{show-all-diary-entries}).
805 @item m
806 Mark all visible dates that have diary entries
807 (@code{mark-diary-entries}).
808 @item u
809 Unmark calendar window (@code{calendar-unmark}).
810 @item M-x print-diary-entries
811 Print a hard copy of the diary display as it appears.
812 @item M-x diary
813 Display any diary entries for today's date.
814 @end table
815
816 @kindex d (Calendar mode)
817 @findex view-diary-entries
818 Displaying the diary entries with @kbd{d} shows in a separate window the
819 diary entries for the date indicated by point in the calendar window. The
820 mode line of the new window shows the date of the diary entries and any
821 holidays that fall on that date.
822
823 If you specify a numeric argument with @kbd{d}, then all the diary
824 entries for that many successive days are shown. Thus, @kbd{2 d}
825 displays all the entries for the selected date and for the following
826 day.
827
828 @kindex m (Calendar mode)
829 @findex mark-diary-entries
830 @kindex u (Calendar mode)
831 @findex calendar-unmark
832 To get a broader overview of which days are mentioned in the diary, use
833 the @kbd{m} command to mark those days in the calendar window. The marks
834 appear next to the dates to which they apply. The @kbd{m} command affects
835 the dates currently visible and, if you scroll the calendar, newly visible
836 dates as well. The @kbd{u} command deletes all diary marks (and all
837 holiday marks too; @pxref{Holidays}), not only in the dates currently
838 visible, but dates that become visible when you scroll the calendar.
839
840 @kindex s (Calendar mode)
841 @findex show-all-diary-entries
842 For more detailed information, use the @kbd{s} command, which displays
843 the entire diary file.
844
845 Display of selected diary entries uses the selective display feature,
846 the same feature that Outline mode uses to show part of an outline
847 (@pxref{Outline Mode}). This involves hiding the diary entries that are
848 not relevant, by changing the preceding newline into an ASCII control-m
849 (code 015). The hidden lines are part of the buffer's text, but they
850 are invisible; they don't appear on the screen. When you save the diary
851 file, the control-m characters are saved as newlines; thus, the
852 invisible lines become ordinary lines in the file.
853
854 @findex print-diary-entries
855 Because the diary buffer as you see it is an illusion, simply printing
856 the contents does not print what you see on your screen. So there is a
857 special command to print a hard copy of the buffer @emph{as it appears};
858 this command is @kbd{M-x print-diary-entries}. It sends the data
859 directly to the printer. You can customize it like @code{lpr-region}
860 (@pxref{Hardcopy}).
861
862 @findex diary
863 The command @kbd{M-x diary} displays the diary entries for the current
864 date, independently of the calendar display, and optionally for the next
865 few days as well; the variable @code{number-of-diary-entries} specifies
866 how many days to include (@pxref{Customization}).
867
868 If you put in your @file{.emacs} file:
869
870 @example
871 (diary)
872 @end example
873
874 @noindent
875 it automatically displays a window with the day's diary entries, when
876 you enter Emacs. The mode line of the displayed window shows the date
877 and any holidays that fall on that date.
878
879 @node Format of Diary File, Special Diary Entries, Diary Commands, Diary
880 @subsection The Diary File
881 @cindex diary file
882
883 @vindex diary-file
884 Your @dfn{diary file} is a file that records events associated with
885 particular dates. The name of the diary file is specified by the variable
886 @code{diary-file}; @file{~/diary} is the default. You can use the same file
887 for the @code{calendar} utility program, since its formats are a subset of the
888 ones allowed by the Emacs Calendar.
889
890 Each entry in the file describes one event and consists of one or more
891 lines. It always begins with a date specification at the left margin.
892 The rest of the entry is simply text to describe the event. If the
893 entry has more than one line, then the lines after the first must begin
894 with whitespace to indicate they continue a previous entry.
895
896 Here are some sample diary entries, illustrating different ways of
897 formatting a date. The examples all show dates in American order (month, day,
898 year), but Calendar mode offers (day, month, year) ordering too.
899
900 @example
901 4/20/93 Switch-over to new tabulation system
902 apr. 25 Start tabulating annual results
903 4/30 Results for April are due
904 */25 Monthly cycle finishes
905 Friday Don't leave without backing up files
906 @end example
907
908 The first entry appears only once, on April 20, 1993. The second and
909 third appear every year on the specified dates, and the fourth uses a
910 wildcard (asterisk) for the month, so it appears on the 25th of every
911 month. The final entry appears every week on Friday.
912
913 You can also use just numbers to express a date, as in
914 @samp{@var{month}/@var{day}} or
915 @samp{@var{month}/@var{day}/@var{year}}. This must be followed by a
916 nondigit. In the date itself, @var{month} and @var{day} are numbers of
917 one or two digits. @var{year} is a number and may be abbreviated to the
918 last two digits; that is, you can use @samp{11/12/1989} or
919 @samp{11/12/89}.
920
921 A date may be @dfn{generic}, or partially unspecified. Then the entry
922 applies to all dates that match the specification. If the date does
923 not contain a year, it is generic and applies to any year.
924 Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*};
925 this matches any month, day, or year, respectively. Thus, a diary entry
926 @samp{3/*/*} matches any day in March of any year.@refill
927
928 Dates can also have the form @samp{@var{monthname} @var{day}} or
929 @samp{@var{monthname} @var{day}, @var{year}}, where the month's name can
930 be spelled in full or abbreviated to three characters (with or without a
931 period). Case is not significant. If the date does not contain a year,
932 it is generic and applies to any year. Also, @var{monthname},
933 @var{day}, or @var{year} can be a @samp{*} which matches any month, day,
934 or year, respectively.@refill
935
936 @vindex european-calendar-style
937 @findex european-calendar
938 If you prefer the European style of writing dates---in which the day
939 comes before the month---type @kbd{M-x european-calendar} while in the
940 calendar, or set the variable @code{european-calendar-style} to @code{t}
941 in your @file{.emacs} file @emph{before} the calendar or diary command.
942 This mode interprets all dates in the diary in the European manner, and
943 also uses European style for displaying diary dates. (Note that there
944 is no comma after the @var{monthname} in the European style.)@refill
945
946 @findex american-calendar
947 To revert to the (default) American style of writing dates, type @kbd{M-x
948 american-calendar}.
949
950 You can use the name of a day of the week as a generic date which
951 applies to any date falling on that day of the week. You can abbreviate
952 the day of the week to three letters (with or without a period) or spell
953 it in full; it need not be capitalized.
954
955 You can inhibit the marking of certain diary entries in the calendar
956 window; to do this, insert an ampersand (@samp{&}) at the beginning of
957 the entry, before the date. This has no effect on display of the entry
958 in the diary window; it affects only marks on dates in the calendar
959 window. Nonmarking entries are especially useful for generic entries
960 that would otherwise mark many different dates.
961
962 Lines that do not begin with valid dates and do not continue a preceding
963 entry are ignored.
964
965 If the first line of a diary entry consists only of the date or day
966 name with no following blanks or punctuation, then the diary window
967 display doesn't include that line; only the continuation lines appear.
968 For example:
969
970 @example
971 02/11/1989
972 Bill B. visits Princeton today
973 2pm Cognitive Studies Committee meeting
974 2:30-5:30 Liz at Lawrenceville
975 4:00pm Dentist appt
976 7:30pm Dinner at George's
977 8:00-10:00pm concert
978 @end example
979
980 @noindent
981 appears in the diary window without the date line at the beginning.
982 This style of entry looks neater when you display just a single day's
983 entries, but can cause confusion if you ask for more than one day's
984 entries.
985
986 You can edit the diary entries as they appear in the window, but it is
987 important to remember that the buffer displayed contains the @emph{entire}
988 diary file, with portions of it concealed from view. This means, for
989 instance, that the @kbd{C-f} (@code{forward-char}) command can put point
990 at what appears to be the end of the line, but what is in reality the
991 middle of some concealed line. @emph{Be careful when editing the diary
992 entries!} Inserting additional lines or adding/deleting characters in the
993 middle of a visible line cannot cause problems. Watch out for @kbd{C-e}
994 (@code{end-of-line}), however; it may put you at the end of a concealed
995 line far from where point appears to be! Before editing the diary, it
996 is best to display the entire file with @kbd{s}
997 (@code{show-all-diary-entries}).@refill
998
999 While in the calendar, there are several commands to help you in making
1000 entries to your diary.
1001
1002 @table @kbd
1003 @item i d
1004 Add a diary entry for the selected date (@code{insert-diary-entry}).
1005 @item i w
1006 Add a diary entry for the selected day of the week (@code{insert-weekly-diary-entry}).
1007 @item i m
1008 Add a diary entry for the selected day of the month (@code{insert-monthly-diary-entry}).
1009 @item i y
1010 Add a diary entry for the selected day of the year (@code{insert-yearly-diary-entry}).
1011 @end table
1012
1013 @kindex i d (Calendar mode)
1014 @findex insert-diary-entry
1015 You can make a diary entry for a specific date by moving point to that
1016 date in the calendar window and using the @kbd{i d} command. This
1017 command displays the end of your diary file in another window and
1018 inserts the date; you can then type the rest of the diary entry.
1019
1020 @kindex i w (Calendar mode)
1021 @findex insert-weekly-diary-entry
1022 If you want to make a diary entry that applies to a specific day of
1023 the week, move point to that day of the week (any occurrence will do)
1024 and use the @kbd{i w} command. This displays the end of your diary file
1025 in another window and inserts the day-of-week as a generic date; you can
1026 then type the rest of the diary entry.
1027
1028 @kindex i m (Calendar mode)
1029 @findex insert-monthly-diary-entry
1030 @kindex i y (Calendar mode)
1031 @findex insert-yearly-diary-entry
1032 You make a monthly diary entry in the same fashion. Move point to the
1033 day of the month, use the @kbd{i m} command, and type the diary entry.
1034 Similarly, you make a yearly diary entry with the @kbd{i y} command.
1035
1036 All of the above commands make marking diary entries. If you want the diary
1037 entry to be nonmarking, give a prefix argument to the command. For example,
1038 @kbd{C-u i w} makes a nonmarking, weekly diary entry.
1039
1040 If you modify the diary, be sure to write the file before exiting from the
1041 calendar.
1042
1043 @node Special Diary Entries,, Format of Diary File, Diary
1044 @subsection Special Diary Entries
1045
1046 In addition to entries based on calendar dates, your diary file can contain
1047 entries for regularly occurring events such as anniversaries. These entries
1048 are based on expressions (sexps) that Emacs evaluates as it scans the diary
1049 file. Such an entry is indicated by @samp{%%} at the beginning (preceded by
1050 @samp{&} for a nonmarking entry), followed by a sexp in parentheses. Calendar
1051 mode offers commands to make it easier to put some of these special entries in
1052 your diary.
1053
1054 @table @kbd
1055 @item i a
1056 Add an anniversary diary entry for the selected date (@code{insert-anniversary-diary-entry}).
1057 @item i b
1058 Add a block diary entry for the current region (@code{insert-block-diary-entry}).
1059 @item i c
1060 Add a cyclic diary entry starting at the date (@code{insert-cyclic-diary-entry}).
1061 @end table
1062
1063 @kindex i a (Calendar mode)
1064 @findex insert-anniversary-diary-entry
1065 If you want to make a diary entry that applies to the anniversary of a
1066 specific date, move point to that date and use the @kbd{i a} command.
1067 This displays the end of your diary file in another window and inserts
1068 the anniversary description; you can then type the rest of the diary
1069 entry.
1070
1071 @findex diary-anniversary
1072 The effect of @kbd{i a} is to add a @code{diary-anniversary} sexp to your
1073 diary file. You can also add one manually, for instance:
1074
1075 @example
1076 %%(diary-anniversary 10 31 1948) Arthur's birthday
1077 @end example
1078
1079 @noindent
1080 This entry applies to October 31 in any year after 1948; @samp{10 31 1948}
1081 specifies the date. (If you are using the European calendar style, the month
1082 and day are interchanged.) The reason this sexp requires a beginning
1083 year is that advanced diary functions can use it to calculate the number of
1084 elapsed years (@pxref{Sexp Diary Entries}).@refill
1085
1086 @kindex i b (Calendar mode)
1087 @findex insert-block-diary-entry
1088 You can make a diary entry entry for a block of dates by setting the mark
1089 at the date at one end of the block, moving point to the date at the other
1090 end of the block, and using the @kbd{i b} command. This command
1091 causes the end of your diary file to be displayed in another window and the
1092 block description to be inserted; you can then type the diary entry.
1093
1094 @findex diary-block
1095 Here is such a diary entry that applies to all dates from June 24, 1990
1096 through July 10, 1990:
1097
1098 @example
1099 %%(diary-block 6 24 1990 7 10 1990) Vacation
1100 @end example
1101
1102 @noindent
1103 The @samp{6 24 1990} indicates the starting date and the @samp{7 10 1990}
1104 indicates the stopping date. (Again, if you are using the European calendar
1105 style, the month and day are interchanged.)
1106
1107 @kindex i c (Calendar mode)
1108 @findex insert-cyclic-diary-entry
1109 You can specify cyclic diary entries that repeat after a fixed
1110 interval of days. Move point to the starting date and use the @kbd{i c}
1111 command. After you specify the length of interval, this command
1112 displays the end of your diary file in another window and inserts the
1113 cyclic event description; you can then type the rest of the diary
1114 entry.
1115
1116 The sexp corresponding to the @kbd{i c} command looks like:
1117
1118 @findex diary-cyclic
1119 @example
1120 %%(diary-cyclic 50 3 1 1990) Renew medication
1121 @end example
1122
1123 @noindent
1124 which applies to March 1, 1990 and every 50th day following; @samp{3 1 1990}
1125 specifies the starting date. (If you are using the European calendar style,
1126 the month and day are interchanged.)
1127
1128 All three of the these commands make marking diary entries. If you want the
1129 diary entry to be nonmarking, give a numeric argument to the command. For
1130 example, @kbd{C-u i a} makes a nonmarking anniversary diary
1131 entry.
1132
1133 Marking sexp diary entries in the calendar is @emph{extremely}
1134 time-consuming, since every date visible in the calendar window must be
1135 individually checked. So it's a good idea to make sexp diary entries
1136 nonmarking with @samp{&}.
1137
1138 One sophisticated kind of sexp, a floating diary entry, has no corresponding
1139 command. The floating diary entry specifies a regularly-occurring event
1140 by offsets specified in days, weeks, and months. It is comparable to a
1141 crontab entry interpreted by the @code{cron} utility on Unix systems.@refill
1142
1143 Here is a nonmarking, floating diary entry that applies to the last
1144 Thursday in November:
1145
1146 @findex diary-float
1147 @example
1148 &%%(diary-float 11 4 -1) American Thanksgiving
1149 @end example
1150
1151 @noindent
1152 The 11 specifies November (the eleventh month), the 4 specifies Thursday
1153 (the fourth day of the week, where Sunday is numbered zero), and the
1154 @minus{}1 specifies ``last'' (1 would mean ``first'', 2 would mean
1155 ``second'', @minus{}2 would mean ``second-to-last'', and so on). The
1156 month can be a single month or a list of months. Thus you could change
1157 the 11 above to @samp{'(1 2 3)} and have the entry apply to the last
1158 Thursday of January, February, and March. If the month is @code{t}, the
1159 entry applies to all months of the year.@refill
1160
1161 The sexp feature of the diary allows you to specify diary entries
1162 based on any Emacs Lisp expression. You can use the library of built-in
1163 functions or you can write your own functions. The built-in functions
1164 include the ones shown in this section, plus a few others (@pxref{Sexp
1165 Diary Entries}).
1166
1167 The generality of sexps lets you specify any diary entry that you can
1168 describe algorithmically. Suppose you get paid on the 21st of the month
1169 if it is a weekday, and to the Friday before if the 21st is on a
1170 weekend. The diary entry
1171
1172 @example
1173 &%%(let ((dayname (calendar-day-of-week date))
1174 (day (car (cdr date))))
1175 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
1176 (and (memq day '(19 20)) (= dayname 5)))
1177 ) Pay check deposited
1178 @end example
1179
1180 @noindent
1181 to just those dates. This example illustrates how the sexp can depend
1182 on the variable @code{date}; this variable is a list (@var{month}
1183 @var{day} @var{year}) that gives the Gregorian date for which the diary
1184 entries are being found. If the value of the sexp is @code{t}, the
1185 entry applies to that date. If the sexp evaluates to @code{nil}, the
1186 entry does @emph{not} apply to that date.
1187
1188
1189 @node Calendar Customization,, Diary, Calendar/Diary
1190 @subsection Customizing the Calendar and Diary
1191
1192 There are many customizations that you can use to make the calendar and
1193 diary suit your personal tastes.
1194
1195 @menu
1196 * Calendar Customizing:: Defaults you can set.
1197 * Holiday Customizing:: Defining your own holidays.
1198 * Date Display Format:: Changing the format.
1199 * Time Display Format:: Changing the format.
1200 * Daylight Savings:: Changing the default.
1201 * Diary Customizing:: Defaults you can set.
1202 * Hebrew/Islamic Entries:: How to obtain them.
1203 * Fancy Diary Display:: Enhancing the diary display, sorting entries.
1204 * Included Diary Files:: Sharing a common diary file.
1205 * Sexp Diary Entries:: Fancy things you can do.
1206 * Appt Customizing:: Customizing appointment reminders.
1207 @end menu
1208
1209 @node Calendar Customizing
1210 @subsubsection Customizing the Calendar
1211 @vindex view-diary-entries-initially
1212
1213 If you set the variable @code{view-diary-entries-initially} to
1214 @code{t}, calling up the calendar automatically displays the diary
1215 entries for the current date as well. The diary dates appear only if
1216 the current date is visible. If you add both of the following lines to
1217 your @file{.emacs} file:@refill
1218
1219 @example
1220 (setq view-diary-entries-initially t)
1221 (calendar)
1222 @end example
1223
1224 @noindent
1225 they display both the calendar and diary windows whenever you start Emacs.
1226
1227 @vindex view-calendar-holidays-initially
1228 Similarly, if you set the variable
1229 @code{view-calendar-holidays-initially} to @code{t}, entering the
1230 calendar automatically displays a list of holidays for the current three
1231 month period. The holiday list appears in a separate window.@refill
1232
1233 @vindex mark-diary-entries-in-calendar
1234 You can set the variable @code{mark-diary-entries-in-calendar} to @code{t}
1235 in order to place a plus sign (@samp{+}) beside any dates with diary entries.
1236 Whenever the calendar window is displayed or redisplayed, the diary entries
1237 are automatically marked for holidays.
1238
1239 @vindex mark-holidays-in-calendar
1240 Similarly, setting the variable @code{mark-holidays-in-calendar} to
1241 @code{t} places an asterisk (@samp{*}) after all holiday dates visible
1242 in the calendar window.
1243
1244 @vindex calendar-load-hook
1245 There are many customizations that you can make with the hooks
1246 provided. For example, the variable @code{calendar-load-hook}, whose
1247 default value is @code{nil}, is a normal hook run when the calendar
1248 package is first loaded (before actually starting to display the
1249 calendar).
1250
1251 @vindex initial-calendar-window-hook
1252 The variable @code{initial-calendar-window-hook}, whose default value
1253 is @code{nil}, is a normal hook run the first time the calendar window
1254 is displayed. The function is invoked only when you first enter
1255 Calendar mode, not when you redisplay an existing Calendar window. But
1256 if you leave the calendar with the @kbd{q} command and reenter it, the
1257 hook runs again.@refill
1258
1259 @vindex today-visible-calendar-hook
1260 The variable @code{today-visible-calendar-hook}, whose default value
1261 is @code{nil}, is a normal hook run after the calendar buffer has been
1262 prepared with the calendar when the current date is visible in the
1263 window. One use of this hook is to replace today's date with asterisks;
1264 a function @code{calendar-star-date} is included for this purpose. In
1265 your @file{.emacs} file, put:@refill
1266
1267 @findex calendar-star-date
1268 @example
1269 (setq today-visible-calendar-hook 'calendar-star-date)
1270 @end example
1271
1272 @noindent
1273 Another standard hook function adds asterisks around the current date.
1274 Here's how to use it:
1275
1276 @findex calendar-mark-today
1277 @example
1278 (setq today-visible-calendar-hook 'calendar-mark-today)
1279 @end example
1280
1281 @vindex today-invisible-calendar-hook
1282 @noindent
1283 A corresponding variable, @code{today-invisible-calendar-hook}, whose
1284 default value is @code{nil}, is a normal hook run after the calendar
1285 buffer text has been prepared, if the current date is @emph{not} visible
1286 in the window.@refill
1287
1288 @node Holiday Customizing
1289 @subsubsection Customizing the Holidays
1290
1291 @vindex calendar-holidays
1292 @vindex christian-holidays
1293 @vindex hebrew-holidays
1294 @vindex islamic-holidays
1295 Emacs knows about holidays defined by entries on one of several lists.
1296 You can customize theses lists of holidays to your own needs, adding
1297 holidays or deleting lists of holidays. The lists of holidays that
1298 Emacs uses are for general holidays (@code{general-holidays}), local
1299 holidays (@code{local-holidays}), Christian holidays
1300 (@code{christian-holidays}), Hebrew (Jewish) holidays
1301 (@code{hebrew-holidays}), Islamic (Moslem) holidays
1302 (@code{islamic-holidays}), and other holidays (@code{other-holidays}).
1303
1304 @vindex general-holidays
1305 The general holidays are, by default, holidays common throughout the
1306 United States. To eliminate these holidays, set @code{general-holidays}
1307 to @code{nil}.
1308
1309 @vindex local-holidays
1310 There are no default local holidays (but sites may supply some). You
1311 can set the variable @code{local-holidays} to any list of holidays, as
1312 described below.
1313
1314 @vindex all-christian-calendar-holidays
1315 @vindex all-hebrew-calendar-holidays
1316 @vindex all-islamic-calendar-holidays
1317 By default, Emacs does not consider all the holidays of these
1318 religions, only those commonly found in secular calendars. For a more
1319 extensive collection of religious holidays, you can set any (or all) of
1320 the variables @code{all-christian-calendar-holidays},
1321 @code{all-hebrew-calendar-holidays}, or
1322 @code{all-islamic-calendar-holidays} to @code{t}. If you want to
1323 eliminate the religious holidays, set any or all of the corresponding
1324 variables @code{christian-holidays}, @code{hebrew-holidays}, and
1325 @code{islamic-holidays} to @code{nil}.@refill
1326
1327 @vindex other-holidays
1328 You can set the variable @code{other-holidays} to any list of
1329 holidays. This list, normally empty, is intended for your use.
1330
1331 @cindex holiday forms
1332 Each of the lists (@code{general-holidays}, @code{local-holidays},
1333 @code{christian-holidays}, @code{hebrew-holidays},
1334 @code{islamic-holidays}, and @code{other-holidays}) is a list of
1335 @dfn{holiday forms}, each holiday form describing a holiday (or
1336 sometimes a list of holidays). Holiday forms may have the following
1337 formats:
1338
1339 @table @code
1340 @item (holiday-fixed @var{month} @var{day} @var{string})
1341 A fixed date on the Gregorian calendar. @var{month} and @var{day} are
1342 numbers, @var{string} is the name of the holiday.
1343
1344 @item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
1345 The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
1346 (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
1347 from the end of the month. @var{string} is the name of the holiday.
1348
1349 @item (holiday-hebrew @var{month} @var{day} @var{string})
1350 A fixed date on the Hebrew calendar. @var{month} and @var{day} are
1351 numbers, @var{string} is the name of the holiday.
1352
1353 @item (holiday-islamic @var{month} @var{day} @var{string})
1354 A fixed date on the Islamic calendar. @var{month} and @var{day} are
1355 numbers, @var{string} is the name of the holiday.
1356
1357 @item (holiday-julian @var{month} @var{day} @var{string})
1358 A fixed date on the Julian calendar. @var{month} and @var{day} are
1359 numbers, @var{string} is the name of the holiday.
1360
1361 @item (holiday-sexp @var{sexp} @var{string})
1362 @var{sexp} is a Lisp expression that should use the variable @code{year}
1363 to compute the date of a holiday, or @code{nil} if the holiday doesn't
1364 happen this year. The value represents the date as a list of the form
1365 @code{(@var{month} @var{day} @var{year})}. @var{string} is the name of
1366 the holiday.
1367
1368 @item (if @var{boolean} @var{holiday-form} &optional @var{holiday-form})
1369 A choice between two holidays based on the value of @var{boolean}.
1370
1371 @item (@var{function} &optional @var{args})
1372 Dates requiring special computation; @var{args}, if any, are passed in
1373 a list to the function @code{calendar-holiday-function-@var{function}}.
1374 @end table
1375
1376 For example, suppose you want to add Bastille Day, celebrated in
1377 France on July 14. You can do this by adding the following line
1378 to your @file{.emacs} file:
1379
1380 @smallexample
1381 (setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
1382 @end smallexample
1383
1384 @noindent
1385 The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
1386 fourteenth day of the seventh month (July).
1387
1388 Many holidays occur on a specific day of the week, at a specific time
1389 of month. Here is a holiday form describing Hurricane Supplication Day,
1390 celebrated in the Virgin Islands on the fourth Monday in August:
1391
1392 @smallexample
1393 (holiday-float 8 1 4 "Hurricane Supplication Day")
1394 @end smallexample
1395
1396 @noindent
1397 Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
1398 Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
1399 the month (1 specifies the first occurrence, 2 the second occurrence,
1400 @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
1401 so on).
1402
1403 You can specify holidays that occur on fixed days of the Hebrew,
1404 Islamic, and Julian calendars too. For example,
1405
1406 @smallexample
1407 (setq other-holidays
1408 '((holiday-hebrew 10 2 "Last day of Hanukkah")
1409 (holiday-islamic 3 12 "Mohammed's Birthday")
1410 (holiday-julian 4 2 "Jefferson's Birthday")))
1411 @end smallexample
1412
1413 @noindent
1414 adds the last day of Hanukkah (since the Hebrew months are numbered with
1415 1 starting from Nisan), the Islamic feast celebrating Mohammed's
1416 birthday (since the Islamic months are numbered from 1 starting with
1417 Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
1418 Julian calendar.
1419
1420 To include a holiday conditionally, use either the @samp{if} or the
1421 @samp{sexp} form. For example, American presidential elections occur on
1422 the first Tuesday after the first Monday in November of years divisible
1423 by 4:
1424
1425 @smallexample
1426 (holiday-sexp (if (= 0 (% year 4))
1427 (calendar-gregorian-from-absolute
1428 (1+ (calendar-dayname-on-or-before
1429 1 (+ 6 (calendar-absolute-from-gregorian
1430 (list 11 1 year))))))
1431 "US Presidential Election"))
1432 @end smallexample
1433
1434 @noindent
1435 or
1436
1437 @smallexample
1438 (if (= 0 (% displayed-year 4))
1439 (fixed 11
1440 (extract-calendar-day
1441 (calendar-gregorian-from-absolute
1442 (1+ (calendar-dayname-on-or-before
1443 1 (+ 6 (calendar-absolute-from-gregorian
1444 (list 11 1 displayed-year)))))))
1445 "US Presidential Election"))
1446 @end smallexample
1447
1448 Some holidays just don't fit into any of these forms because special
1449 calculations are involved in their determination. In such cases you
1450 must write a Lisp function to do the calculation. To include
1451 eclipses of the sun, for example, add @code{(eclipses)} to
1452 @code{other-holidays} and write an Emacs Lisp function
1453 @code{eclipses} that returns a (possibly
1454 empty) list of the relevant Gregorian dates among the
1455 range visible in the calendar window, with descriptive strings, like
1456 this:
1457
1458 @smallexample
1459 (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
1460 @end smallexample
1461
1462 @node Date Display Format
1463 @subsubsection Date Display Format
1464 @vindex calendar-date-display-form
1465
1466 You can customize the manner of displaying dates in the diary,
1467 in mode lines, and in messages by setting
1468 @code{calendar-date-display-form}. This variable is a list of
1469 expressions that can involve the variables @code{month}, @code{day}, and
1470 @code{year}, all numbers in string form, and @code{monthname} and
1471 @code{dayname}, both alphabetic strings. In the American style, the
1472 default value of this list is as follows:
1473
1474 @smallexample
1475 ((if dayname (concat dayname ", ")) monthname " " day ", " year)
1476 @end smallexample
1477
1478 @noindent
1479 while in the European style this value is the default:
1480
1481 @smallexample
1482 ((if dayname (concat dayname ", ")) day " " monthname " " year)
1483 @end smallexample
1484
1485 The ISO standard date representation is this:
1486
1487 @smallexample
1488 (year "-" month "-" day)
1489 @end smallexample
1490
1491 @noindent
1492 This specifies a typical American format:
1493
1494 @smallexample
1495 (month "/" day "/" (substring year -2))
1496 @end smallexample
1497
1498 @node Time Display Format
1499 @subsubsection Time Display Format
1500 @vindex calendar-time-display-form
1501
1502 In the calendar, diary, and related buffers, Emacs displays times of
1503 day in the conventional American style with the hours from 1 through 12,
1504 minutes, and either @samp{am} or @samp{pm}. If you prefer the
1505 ``military'' (European) style of writing times---in which the hours go
1506 from 00 to 23---you can alter the variable
1507 @code{calendar-time-display-form}. This variable is a list of
1508 expressions that can involve the variables @code{12-hours},
1509 @code{24-hours}, and @code{minutes}, all numbers in string form, and
1510 @code{am-pm} and @code{time-zone}, both alphabetic strings. The default
1511 definition of @code{calendar-time-display-form} is as follows:
1512
1513 @smallexample
1514 (12-hours ":" minutes am-pm
1515 (if time-zone " (") time-zone (if time-zone ")"))
1516 @end smallexample
1517
1518 Setting @code{calendar-time-display-form} to
1519
1520 @smallexample
1521 (24-hours ":" minutes
1522 (if time-zone " (") time-zone (if time-zone ")"))
1523 @end smallexample
1524
1525 @noindent
1526 gives military-style times like @samp{21:07 (UT)} if time zone names are
1527 defined, and times like @samp{21:07} if they are not.
1528
1529 @node Daylight Savings
1530 @subsubsection Daylight Savings Time
1531 @cindex daylight savings time
1532
1533 Emacs understands the difference between standard time and daylight
1534 savings time---the times given for sunrise, sunset, solstices,
1535 equinoxes, and the phases of the moon take that into account. The rules
1536 for daylight savings time vary from place to place and have also varied
1537 historically from year to year. To do the job properly, Emacs needs to
1538 know which rules to use.
1539
1540 Some operating systems keep track of the rules that apply to the place
1541 where you are; on these systems, Emacs gets the information it needs
1542 from the system automatically. If some or all of this information is
1543 missing, Emacs fills in the gaps with the rules currently used in
1544 Cambridge, Massachusetts. If the default choice of rules is not
1545 appropriate for your location, you can tell Emacs the rules to use by
1546 setting certain variables.
1547
1548 @vindex calendar-daylight-savings-starts
1549 @vindex calendar-daylight-savings-ends
1550 These variables are @code{calendar-daylight-savings-starts} and
1551 @code{calendar-daylight-savings-ends}. Their values should be Lisp
1552 expressions that refer to the variable @code{year}, and evaluate to the
1553 Gregorian date on which daylight savings time starts or (respectively)
1554 ends, in the form of a list @code{(@var{month} @var{day} @var{year})}.
1555 The values should be @code{nil} if your area does not use daylight
1556 savings time.
1557
1558 Emacs uses these expressions to determine the starting date of
1559 daylight savings time for the holiday list and for correcting times of
1560 day in the solar and lunar calculations.
1561
1562 The values for Cambridge, Massachusetts are as follows:
1563
1564 @example
1565 @group
1566 (calendar-nth-named-day 1 0 4 year)
1567 (calendar-nth-named-day -1 0 10 year)
1568 @end group
1569 @end example
1570
1571 @noindent
1572 i.e. the first 0th day (Sunday) of the fourth month (April) in
1573 the year specified by @code{year}, and the last Sunday of the tenth month
1574 (October) of that year. If daylight savings time were
1575 changed to start on October 1, you would set
1576 @code{calendar-daylight-savings-starts} to this:
1577
1578 @example
1579 (list 10 1 year)
1580 @end example
1581
1582 For a more complex example, suppose daylight savings time begins on
1583 the first of Nisan on the Hebrew calendar. You would set
1584 @code{calendar-daylight-savings-starts} as follows:
1585
1586 @example
1587 (calendar-gregorian-from-absolute
1588 (calendar-absolute-from-hebrew
1589 (list 1 1 (+ year 3760))))
1590 @end example
1591
1592 @noindent
1593 because Nisan is the first month in the Hebrew calendar and the Hebrew
1594 year differs from the Gregorian year by 3760 at Nisan.
1595
1596 If there is no daylight savings time at your location, or if you want
1597 all times in standard time, set @code{calendar-daylight-savings-starts}
1598 and @code{calendar-daylight-savings-ends} to @code{nil}.
1599
1600 @vindex calendar-daylight-time-offset
1601 This variable specifies the difference between daylight savings time and
1602 standard time, measured in minutes. The value for Cambridge is 60.
1603
1604 @vindex calendar-daylight-savings-starts-time
1605 @vindex calendar-daylight-savings-ends-time
1606 These variables specify is the number of minutes after midnight local time
1607 when the transition to and from daylight savings time should occur. For
1608 Cambridge, both variables' values are 120.
1609
1610 @node Diary Customizing
1611 @subsubsection Customizing the Diary
1612
1613 @vindex holidays-in-diary-buffer
1614 Ordinarily, the mode line of the diary buffer window indicates any
1615 holidays that fall on the date of the diary entries. The process of
1616 checking for holidays can take several seconds, so including holiday
1617 information delays the display of the diary buffer noticeably. If you'd
1618 prefer to have a faster display of the diary buffer but without the
1619 holiday information, set the variable @code{holidays-in-diary-buffer} to
1620 @code{nil}.@refill
1621
1622 @vindex number-of-diary-entries
1623 The variable @code{number-of-diary-entries} controls the number of
1624 days of diary entries to be displayed at one time. It affects the
1625 initial display when @code{view-diary-entries-initially} is @code{t}, as
1626 well as the command @kbd{M-x diary}. For example, the default value is
1627 1, which says to display only the current day's diary entries. If the
1628 value is 2, both the current day's and the next day's entries are
1629 displayed. The value can also be a vector of seven elements: if the
1630 value is @code{[0 2 2 2 2 4 1]} then no diary entries appear on Sunday,
1631 the current date's and the next day's diary entries appear Monday
1632 through Thursday, Friday through Monday's entries appear on Friday,
1633 while on Saturday only that day's entries appear.
1634
1635 @vindex print-diary-entries-hook
1636 @findex print-diary-entries
1637 The variable @code{print-diary-entries-hook} is a normal hook run
1638 after preparation of a temporary buffer containing just the diary
1639 entries currently visible in the diary buffer. (The other, irrelevant
1640 diary entries are really absent from the temporary buffer; in the diary
1641 buffer, they are merely hidden.) The default value of this hook does
1642 the printing with the command @code{lpr-buffer}. If you want to use a
1643 different command to do the printing, just change the value of this
1644 hook. Other uses might include, for example, rearranging the lines into
1645 order by day and time.
1646
1647 @vindex diary-date-forms
1648 You can customize the form of dates in your diary file, if neither the
1649 standard American nor European styles suits your needs, by setting the
1650 variable @code{diary-date-forms}. This variable is a list of forms of
1651 dates recognized in the diary file. Each form is a list of regular
1652 expressions (@pxref{Regexps}) and the variables @code{month},
1653 @code{day}, @code{year}, @code{monthname}, and @code{dayname}. The
1654 variable @code{monthname} matches the name of the month, capitalized or
1655 not, or its three-letter abbreviation, followed by a period or not; it
1656 matches @samp{*}. Similarly, @code{dayname} matches the name of the
1657 day, capitalized or not, or its three-letter abbreviation, followed by a
1658 period or not. The variables @code{month}, @code{day}, and @code{year}
1659 match those numerical values, preceded by arbitrarily many zeros; they
1660 also match @samp{*}. The default value of @code{diary-date-forms} in
1661 the American style is
1662
1663 @example
1664 ((month "/" day "[^/0-9]")
1665 (month "/" day "/" year "[^0-9]")
1666 (monthname " *" day "[^,0-9]")
1667 (monthname " *" day ", *" year "[^0-9]")
1668 (dayname "\\W"))
1669 @end example
1670
1671 @noindent
1672 Emacs matches of the diary entries with the date forms is done with the
1673 standard syntax table from Fundamental mode
1674 (@pxref{Syntax Tables,,,lispref,XEmacs Lisp Reference Manual}),
1675 but with the @samp{*} changed so that it is a word constituent.@refill
1676
1677 The forms on the list must be @emph{mutually exclusive} and must not
1678 match any portion of the diary entry itself, just the date. If, to be
1679 mutually exclusive, the pattern must match a portion of the diary entry
1680 itself, the first element of the form @emph{must} be @code{backup}.
1681 This causes the date recognizer to back up to the beginning of the
1682 current word of the diary entry. Even if you use @code{backup}, the
1683 form must absolutely not match more than a portion of the first word of
1684 the diary entry. The default value of @code{diary-date-forms} in the
1685 European style is this list:
1686
1687 @example
1688 ((day "/" month "[^/0-9]")
1689 (day "/" month "/" year "[^0-9]")
1690 (backup day " *" monthname "\\W+\\<[^*0-9]")
1691 (day " *" monthname " *" year "[^0-9]")
1692 (dayname "\\W"))
1693 @end example
1694
1695 @noindent
1696 Notice the use of @code{backup} in the middle form because part of the
1697 diary entry must be matched to distinguish this form from the following one.
1698
1699 @node Hebrew/Islamic Entries
1700 @subsubsection Hebrew- and Islamic-Date Diary Entries
1701
1702 Your diary file can have entries based on Hebrew or Islamic dates, as
1703 well as entries based on our usual Gregorian calendar. However, because
1704 the processing of such entries is time-consuming and most people don't
1705 need them, you must customize the processing of your diary file to
1706 specify that you want such entries recognized. If you want Hebrew-date
1707 diary entries, for example, you must include these lines in your
1708 @file{.emacs} file:
1709
1710 @vindex nongregorian-diary-listing-hook
1711 @vindex nongregorian-diary-marking-hook
1712 @findex list-hebrew-diary-entries
1713 @findex mark-hebrew-diary-entries
1714 @smallexample
1715 (setq nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
1716 (setq nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
1717 @end smallexample
1718
1719 @noindent
1720 If you want Islamic-date entries, include these lines in your
1721 @file{.emacs} file:
1722
1723 @findex list-islamic-diary-entries
1724 @findex mark-islamic-diary-entries
1725 @smallexample
1726 (setq nongregorian-diary-listing-hook 'list-islamic-diary-entries)
1727 (setq nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
1728 @end smallexample
1729
1730 @noindent
1731 If you want both Hebrew- and Islamic-date entries, include these lines:
1732
1733 @smallexample
1734 (setq nongregorian-diary-listing-hook
1735 '(list-hebrew-diary-entries list-islamic-diary-entries))
1736 (setq nongregorian-diary-marking-hook
1737 '(mark-hebrew-diary-entries mark-islamic-diary-entries))
1738 @end smallexample
1739
1740 Hebrew- and Islamic-date diary entries have the same formats as
1741 Gregorian-date diary entries, except that the date must be preceded with
1742 an @samp{H} for Hebrew dates and an @samp{I} for Islamic dates.
1743 Moreover, because the Hebrew and Islamic month names are not uniquely
1744 specified by the first three letters, you may not abbreviate them. For
1745 example, a diary entry for the Hebrew date Heshvan 25 could look like
1746
1747 @smallexample
1748 HHeshvan 25 Happy Hebrew birthday!
1749 @end smallexample
1750
1751 @noindent
1752 and would appear in the diary for any date that corresponds to Heshvan 25
1753 on the Hebrew calendar. Similarly, an Islamic-date diary entry might be
1754
1755 @smallexample
1756 IDhu al-Qada 25 Happy Islamic birthday!
1757 @end smallexample
1758
1759 @noindent
1760 and would appear in the diary for any date that corresponds to Dhu al-Qada 25
1761 on the Islamic calendar.
1762
1763 As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
1764 are nonmarking if they are preceded with an ampersand (@samp{&}).
1765
1766 There are commands to help you in making Hebrew- and Islamic-date
1767 entries to your diary:
1768
1769 @table @kbd
1770 @item i h d
1771 Add a diary entry for the Hebrew date corresponding to the selected date
1772 (@code{insert-hebrew-diary-entry}).
1773 @item i h m
1774 Add a diary entry for the day of the Hebrew month corresponding to the
1775 selected date (@code{insert-monthly-hebrew-diary-entry}).
1776 @item i h y
1777 Add a diary entry for the day of the Hebrew year corresponding to the
1778 selected date (@code{insert-yearly-hebrew-diary-entry}).
1779 @item i i d
1780 Add a diary entry for the Islamic date corresponding to the selected date
1781 (@code{insert-islamic-diary-entry}).
1782 @item i i m
1783 Add a diary entry for the day of the Islamic month corresponding to the
1784 selected date (@code{insert-monthly-islamic-diary-entry}).
1785 @item i i y
1786 Add a diary entry for the day of the Islamic year corresponding to the
1787 selected date (@code{insert-yearly-islamic-diary-entry}).
1788 @end table
1789
1790 @findex insert-hebrew-diary-entry
1791 @findex insert-monthly-hebrew-diary-entry
1792 @findex insert-yearly-hebrew-diary-entry
1793 @findex insert-islamic-diary-entry
1794 @findex insert-monthly-islamic-diary-entry
1795 @findex insert-yearly-islamic-diary-entry
1796 These commands work exactly like the corresponding commands for ordinary
1797 diary entries: Move point to a date in the calendar window and the above
1798 commands insert the Hebrew or Islamic date (corresponding to the date
1799 indicated by point) at the end of your diary file and you can then type the
1800 diary entry. If you want the diary entry to be nonmarking, give a numeric
1801 argument to the command.
1802
1803 @node Fancy Diary Display
1804 @subsubsection Fancy Diary Display
1805 @vindex diary-display-hook
1806 @findex simple-diary-display
1807
1808 Diary display works by preparing the diary buffer and then running the
1809 hook @code{diary-display-hook}. The default value of this hook hides
1810 the irrelevant diary entries and then displays the buffer
1811 (@code{simple-diary-display}). However, if you specify the hook as
1812 follows,
1813
1814 @cindex diary buffer
1815 @findex fancy-diary-display
1816 @example
1817 (add-hook 'diary-display-hook 'fancy-diary-display)
1818 @end example
1819
1820 @noindent
1821 then fancy mode displays diary entries and holidays by copying them into
1822 a special buffer that exists only for display. Copying provides an
1823 opportunity to change the displayed text to make it prettier---for
1824 example, to sort the entries by the dates they apply to.
1825
1826 As with simple diary display, you can print a hard copy of the buffer
1827 with @code{print-diary-entries}. To print a hard copy of a day-by-day
1828 diary for a week by positioning point on Sunday of that week, type
1829 @kbd{7 d} and then do @kbd{M-x print-diary-entries}. As usual, the
1830 inclusion of the holidays slows down the display slightly; you can speed
1831 things up by setting the variable @code{holidays-in-diary-buffer} to
1832 @code{nil}.
1833
1834 @vindex diary-list-include-blanks
1835 Ordinarily, the fancy diary buffer does not show days for which there are
1836 no diary entries, even if that day is a holiday. If you want such days to be
1837 shown in the fancy diary buffer, set the variable
1838 @code{diary-list-include-blanks} to @code{t}.@refill
1839
1840 @cindex sorting diary entries
1841 If you use the fancy diary display, you can use the normal hook
1842 @code{list-diary-entries-hook} to sort each day's diary entries by their
1843 time of day. Add this line to your @file{.emacs} file:
1844
1845 @findex sort-diary-entries
1846 @example
1847 (add-hook 'list-diary-entries-hook 'sort-diary-entries)
1848 @end example
1849
1850 @noindent
1851 For each day, this sorts diary entries that begin with a recognizable
1852 time of day according to their times. Diary entries without times come
1853 first within each day.
1854
1855 @node Included Diary Files
1856 @subsubsection Included Diary Files
1857
1858 If you use the fancy diary display, you can have diary entries from other
1859 files included with your own by an ``include'' mechanism. This facility makes
1860 possible the sharing of common diary files among groups of users. Lines in
1861 the diary file of this form:
1862
1863 @smallexample
1864 #include "@var{filename}"
1865 @end smallexample
1866
1867 @noindent
1868 includes the diary entries from the file @var{filename} in the fancy
1869 diary buffer (because the ordinary diary buffer is just the buffer
1870 associated with your diary file, you cannot use the include mechanism
1871 unless you use the fancy diary buffer). The include mechanism is
1872 recursive, by the way, so that included files can include other files,
1873 and so on; you must be careful not to have a cycle of inclusions, of
1874 course. To enable the include facility, add lines as follows to your
1875 @file{.emacs} file:
1876
1877 @vindex list-diary-entries-hook
1878 @vindex mark-diary-entries-hook
1879 @findex include-other-diary-files
1880 @findex mark-included-diary-files
1881 @smallexample
1882 (add-hook 'list-diary-entries-hook 'include-other-diary-files)
1883 (add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
1884 @end smallexample
1885
1886 @node Sexp Diary Entries
1887 @subsubsection Sexp Entries and the Fancy Diary Display
1888 @cindex sexp diary entries
1889
1890 Sexp diary entries allow you to do more than just have complicated
1891 conditions under which a diary entry applies. If you use the fancy
1892 diary display, sexp entries can generate the text of the entry depending
1893 on the date itself. For example, an anniversary diary entry can insert
1894 the number of years since the anniversary date into the text of the
1895 diary entry. Thus the @samp{%d} in this dairy entry:
1896
1897 @findex diary-anniversary
1898 @smallexample
1899 %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
1900 @end smallexample
1901
1902 @noindent
1903 gets replaced by the age, so on October 31, 1990 the entry appears in
1904 the fancy diary buffer like this:
1905
1906 @smallexample
1907 Arthur's birthday (42 years old)
1908 @end smallexample
1909
1910 @noindent
1911 If the diary file instead contains this entry:
1912
1913 @smallexample
1914 %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
1915 @end smallexample
1916
1917 @noindent
1918 the entry in the fancy diary buffer for October 31, 1990 appears like this:
1919
1920 @smallexample
1921 Arthur's 42nd birthday
1922 @end smallexample
1923
1924 Similarly, cyclic diary entries can interpolate the number of repetitions
1925 that have occurred:
1926
1927 @findex diary-cyclic
1928 @smallexample
1929 %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
1930 @end smallexample
1931
1932 @noindent
1933 looks like this:
1934
1935 @smallexample
1936 Renew medication (5th time)
1937 @end smallexample
1938
1939 @noindent
1940 in the fancy diary display on September 8, 1990.
1941
1942 The generality of sexp diary entries lets you specify any diary entry
1943 that you can describe algorithmically. Suppose you get paid on the 21st
1944 of the month if it is a weekday, and to the Friday before if the 21st is
1945 on a weekend. The diary entry
1946
1947 @smallexample
1948 &%%(let ((dayname (calendar-day-of-week date))
1949 (day (car (cdr date))))
1950 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
1951 (and (memq day '(19 20)) (= dayname 5)))
1952 ) Pay check deposited
1953 @end smallexample
1954
1955 @noindent
1956 applies to just those dates. This example illustrates how the sexp can
1957 depend on the variable @code{date}; this variable is a list (@var{month}
1958 @var{day} @var{year}) that gives the Gregorian date for which the diary
1959 entries are being found. If the value of the expression is @code{t},
1960 the entry applies to that date. If the expression evaluates to
1961 @code{nil}, the entry does @emph{not} apply to that date.
1962
1963 The following sexp diary entries take advantage of the ability (in the fancy
1964 diary display) to concoct diary entries based on the date:
1965
1966 @findex diary-sunrise-sunset
1967 @findex diary-phases-of-moon
1968 @findex diary-day-of-year
1969 @findex diary-iso-date
1970 @findex diary-julian-date
1971 @findex diary-astro-day-number
1972 @findex diary-hebrew-date
1973 @findex diary-islamic-date
1974 @findex diary-french-date
1975 @findex diary-mayan-date
1976 @table @code
1977 @item %%(diary-sunrise-sunset)
1978 Make a diary entry for the local times of today's sunrise and sunset.
1979 @item %%(diary-phases-of-moon)
1980 Make a diary entry for the phases (quarters) of the moon.
1981 @item %%(diary-day-of-year)
1982 Make a diary entry with today's day number in the current year and the number
1983 of days remaining in the current year.
1984 @item %%(diary-iso-date)
1985 Make a diary entry with today's equivalent ISO commercial date.
1986 @item %%(diary-julian-date)
1987 Make a diary entry with today's equivalent date on the Julian calendar.
1988 @item %%(diary-astro-day-number)
1989 Make a diary entry with today's equivalent astronomical (Julian) day number.
1990 @item %%(diary-hebrew-date)
1991 Make a diary entry with today's equivalent date on the Hebrew calendar.
1992 @item %%(diary-islamic-date)
1993 Make a diary entry with today's equivalent date on the Islamic calendar.
1994 @item %%(diary-french-date)
1995 Make a diary entry with today's equivalent date on the French Revolutionary
1996 calendar.
1997 @item %%(diary-mayan-date)
1998 Make a diary entry with today's equivalent date on the Mayan calendar.
1999 @end table
2000
2001 @noindent
2002 Thus including the diary entry
2003
2004 @smallexample
2005 &%%(diary-hebrew-date)
2006 @end smallexample
2007
2008 @noindent
2009 causes every day's diary display to contain the equivalent date on the
2010 Hebrew calendar, if you are using the fancy diary display. (With simple
2011 diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
2012 diary for any date, but does nothing particularly useful.)
2013
2014 There are a number of other available sexp diary entries that are important
2015 to those who follow the Hebrew calendar:
2016
2017 @cindex rosh hodesh
2018 @findex diary-rosh-hodesh
2019 @cindex parasha, weekly
2020 @findex diary-parasha
2021 @cindex candle lighting times
2022 @findex diary-sabbath-candles
2023 @cindex omer count
2024 @findex diary-omer
2025 @cindex yahrzeits
2026 @findex diary-yahrzeit
2027 @table @code
2028 @item %%(diary-rosh-hodesh)
2029 Make a diary entry that tells the occurrence and ritual announcement of each
2030 new Hebrew month.
2031 @item %%(diary-parasha)
2032 Make a Saturday diary entry that tells the weekly synagogue scripture reading.
2033 @item %%(diary-sabbath-candles)
2034 Make a Friday diary entry that tells the @emph{local time} of Sabbath
2035 candle lighting.
2036 @item %%(diary-omer)
2037 Make a diary entry that gives the omer count, when appropriate.
2038 @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
2039 Make a diary entry marking the anniversary of a date of death. The date
2040 is the @emph{Gregorian} (civil) date of death. The diary entry appears
2041 on the proper Hebrew calendar anniversary and on the day before. (In
2042 the European style, the order of the parameters is changed to @var{day},
2043 @var{month}, @var{year}.)
2044 @end table
2045
2046 @node Appt Customizing
2047 @subsubsection Customizing Appointment Reminders
2048
2049 You can specify exactly how Emacs reminds you of an appointment and
2050 how far in advance it begins doing so. Here are the variables that you
2051 can set:
2052
2053 @vindex appt-message-warning-time
2054 @vindex appt-audible
2055 @vindex appt-visible
2056 @vindex appt-display-mode-line
2057 @vindex appt-msg-window
2058 @vindex appt-display-duration
2059 @table @code
2060 @item appt-message-warning-time
2061 The time in minutes before an appointment that the reminder begins. The
2062 default is 10 minutes.
2063 @item appt-audible
2064 If this is @code{t} (the default), Emacs rings the terminal bell for
2065 appointment reminders.
2066 @item appt-visible
2067 If this is @code{t} (the default), Emacs displays the appointment
2068 message in echo area.
2069 @item appt-display-mode-line
2070 If this is @code{t} (the default), Emacs displays the number of minutes
2071 to the appointment on the mode line.
2072 @item appt-msg-window
2073 If this is @code{t} (the default), Emacs displays the appointment
2074 message in another window.
2075 @item appt-display-duration
2076 The number of seconds an appointment message is displayed. The default
2077 is 5 seconds.
2078 @end table