1 @node Calendar/Diary, Sorting, Reading Mail, Top
2 @section Calendar Mode and the Diary
6 Emacs provides the functions of a desk calendar, with a diary of
7 planned or past events. To enter the calendar, type @kbd{M-x calendar};
8 this displays a three-month calendar centered on the current month, with
9 point on the current date. With a numeric argument, as in @kbd{C-u M-x
10 calendar}, it prompts you for the month and year to be the center of the
11 three-month calendar. The calendar uses its own buffer, whose major
12 mode is Calendar mode.
14 @kbd{Button2} in the calendar brings up a menu of operations on a
15 particular date; @kbd{Buttons3} brings up a menu of commonly used
16 calendar features that are independent of any particular date. To exit
17 the calendar, type @kbd{q}. @xref{Calendar, Customizing the Calendar
18 and Diary,, lispref, The XEmacs Lisp Reference Manual}, for customization
19 information about the calendar and diary.
22 * Calendar Motion:: Moving through the calendar; selecting a date.
23 * Scroll Calendar:: Bringing earlier or later months onto the screen.
24 * Mark and Region:: Remembering dates, the mark ring.
25 * General Calendar:: Exiting or recomputing the calendar.
26 * LaTeX Calendar:: Print a calendar using LaTeX.
27 * Holidays:: Displaying dates of holidays.
28 * Sunrise/Sunset:: Displaying local times of sunrise and sunset.
29 * Lunar Phases:: Displaying phases of the moon.
30 * Other Calendars:: Converting dates to other calendar systems.
31 * Diary:: Displaying events from your diary.
32 * Calendar Customization:: Altering the behavior of the features above.
35 @node Calendar Motion, Scroll Calendar, Calendar/Diary, Calendar/Diary
36 @subsection Movement in the Calendar
38 @cindex moving inside the calendar
39 Calendar mode lets you move through the calendar in logical units of
40 time such as days, weeks, months, and years. If you move outside the
41 three months originally displayed, the calendar display ``scrolls''
42 automatically through time to make the selected date visible. Moving to
43 a date lets you view its holidays or diary entries, or convert it to other
44 calendars; moving longer time periods is also useful simply to scroll the
48 * Calendar Unit Motion:: Moving by days, weeks, months, and years.
49 * Move to Beginning or End:: Moving to start/end of weeks, months, and years.
50 * Specified Dates:: Moving to the current date or another
54 @node Calendar Unit Motion, Move to Beginning or End, Calendar Motion, Calendar Motion
55 @subsubsection Motion by Integral Days, Weeks, Months, Years
57 The commands for movement in the calendar buffer parallel the
58 commands for movement in text. You can move forward and backward by
59 days, weeks, months, and years.
63 Move point one day forward (@code{calendar-forward-day}).
65 Move point one day backward (@code{calendar-backward-day}).
67 Move point one week forward (@code{calendar-forward-week}).
69 Move point one week backward (@code{calendar-backward-week}).
71 Move point one month forward (@code{calendar-forward-month}).
73 Move point one month backward (@code{calendar-backward-month}).
75 Move point one year forward (@code{calendar-forward-year}).
77 Move point one year backward (@code{calendar-backward-year}).
80 @kindex C-f @r{(Calendar mode)}
81 @findex calendar-forward-day
82 @kindex C-b @r{(Calendar mode)}
83 @findex calendar-backward-day
84 @kindex C-n @r{(Calendar mode)}
85 @findex calendar-forward-week
86 @kindex C-p @r{(Calendar mode)}
87 @findex calendar-backward-week
88 The day and week commands are natural analogues of the usual Emacs
89 commands for moving by characters and by lines. Just as @kbd{C-n}
90 usually moves to the same column in the following line, in Calendar
91 mode it moves to the same day in the following week. And @kbd{C-p}
92 moves to the same day in the previous week.
94 The arrow keys are equivalent to @kbd{C-f}, @kbd{C-b}, @kbd{C-n} and
95 @kbd{C-p}, just as they normally are in other modes.
97 @kindex M-@} @r{(Calendar mode)}
98 @findex calendar-forward-month
99 @kindex M-@{ @r{(Calendar mode)}
100 @findex calendar-backward-month
101 @kindex C-x ] @r{(Calendar mode)}
102 @findex calendar-forward-year
103 @kindex C-x [ @r{(Calendar mode)}
104 @findex calendar-forward-year
105 The commands for motion by months and years work like those for
106 weeks, but move a larger distance. The month commands @kbd{M-@}} and
107 @kbd{M-@{} move forward or backward by an entire month's time. The
108 year commands @kbd{C-x ]} and @w{@kbd{C-x [}} move forward or backward a
111 The easiest way to remember these commands is to consider months and
112 years analogous to paragraphs and pages of text, respectively. But the
113 commands themselves are not quite analogous. The ordinary Emacs paragraph
114 commands move to the beginning or end of a paragraph, whereas these month
115 and year commands move by an entire month or an entire year, which usually
116 involves skipping across the end of a month or year.
118 All these commands accept a numeric argument as a repeat count.
119 For convenience, the digit keys and the minus sign specify numeric
120 arguments in Calendar mode even without the Meta modifier. For example,
121 @kbd{100 C-f} moves point 100 days forward from its present location.
123 @node Move to Beginning or End, Specified Dates, Calendar Unit Motion, Calendar Motion
124 @subsubsection Beginning or End of Week, Month or Year
126 A week (or month, or year) is not just a quantity of days; we think of
127 weeks (months, years) as starting on particular dates. So Calendar mode
128 provides commands to move to the beginning or end of a week, month or
132 @kindex C-a @r{(Calendar mode)}
133 @findex calendar-beginning-of-week
135 Move point to start of week (@code{calendar-beginning-of-week}).
136 @kindex C-e @r{(Calendar mode)}
137 @findex calendar-end-of-week
139 Move point to end of week (@code{calendar-end-of-week}).
140 @kindex M-a @r{(Calendar mode)}
141 @findex calendar-beginning-of-month
143 Move point to start of month (@code{calendar-beginning-of-month}).
144 @kindex M-e @r{(Calendar mode)}
145 @findex calendar-end-of-month
147 Move point to end of month (@code{calendar-end-of-month}).
148 @kindex M-< @r{(Calendar mode)}
149 @findex calendar-beginning-of-year
151 Move point to start of year (@code{calendar-beginning-of-year}).
152 @kindex M-> @r{(Calendar mode)}
153 @findex calendar-end-of-year
155 Move point to end of year (@code{calendar-end-of-year}).
158 These commands also take numeric arguments as repeat counts, with the
159 repeat count indicating how many weeks, months, or years to move
162 @vindex calendar-week-start-day
163 @cindex weeks, which day they start on
164 @cindex calendar, first day of week
165 By default, weeks begin on Sunday. To make them begin on Monday
166 instead, set the variable @code{calendar-week-start-day} to 1.
168 @node Specified Dates,,Move to Beginning or End, Calendar Motion
169 @subsubsection Particular Dates
171 Calendar mode provides commands for moving to a particular date
172 specified in various ways.
176 Move point to specified date (@code{calendar-goto-date}).
178 Center calendar around specified month (@code{calendar-other-month}).
180 Move point to today's date (@code{calendar-goto-today}).
183 @kindex g d @r{(Calendar mode)}
184 @findex calendar-goto-date
185 @kbd{g d} (@code{calendar-goto-date}) prompts for a year, a month, and a day
186 of the month, and then moves to that date. Because the calendar includes all
187 dates from the beginning of the current era, you must type the year in its
188 entirety; that is, type @samp{1990}, not @samp{90}.
190 @kindex o @r{(Calendar mode)}
191 @findex calendar-other-month
192 @kbd{o} (@code{calendar-other-month}) prompts for a month and year,
193 then centers the three-month calendar around that month.
195 @kindex . @r{(Calendar mode)}
196 @findex calendar-goto-today
197 You can return to today's date with @kbd{.}@:
198 (@code{calendar-goto-today}).
200 @node Scroll Calendar, Mark and Region, Calendar Motion, Calendar/Diary
201 @subsection Scrolling the Calendar through Time
203 @cindex scrolling in the calendar
204 The calendar display scrolls automatically through time when you move out
205 of the visible portion. You can also scroll it manually. Imagine that the
206 calendar window contains a long strip of paper with the months on it.
207 Scrolling it means moving the strip so that new months become visible in
212 Scroll calendar one month forward (@code{scroll-calendar-left}).
214 Scroll calendar one month backward (@code{scroll-calendar-right}).
217 Scroll calendar three months forward
218 (@code{scroll-calendar-left-three-months}).
221 Scroll calendar three months backward
222 (@code{scroll-calendar-right-three-months}).
225 @kindex C-x < @r{(Calendar mode)}
226 @findex scroll-calendar-left
227 @kindex C-x > @r{(Calendar mode)}
228 @findex scroll-calendar-right
229 The most basic calendar scroll commands scroll by one month at a
230 time. This means that there are two months of overlap between the
231 display before the command and the display after. @kbd{C-x <} scrolls
232 the calendar contents one month to the left; that is, it moves the
233 display forward in time. @kbd{C-x >} scrolls the contents to the
234 right, which moves backwards in time.
236 @kindex C-v @r{(Calendar mode)}
237 @findex scroll-calendar-left-three-months
238 @kindex M-v @r{(Calendar mode)}
239 @findex scroll-calendar-right-three-months
240 The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire
241 ``screenful''---three months---in analogy with the usual meaning of
242 these commands. @kbd{C-v} makes later dates visible and @kbd{M-v} makes
243 earlier dates visible. These commands take a numeric argument as a
244 repeat count; in particular, since @kbd{C-u} multiplies the next command
245 by four, typing @kbd{C-u C-v} scrolls the calendar forward by a year and
246 typing @kbd{C-u M-v} scrolls the calendar backward by a year.
248 The function keys @key{NEXT} and @key{PRIOR} are equivalent to
249 @kbd{C-v} and @kbd{M-v}, just as they are in other modes.
252 @node Mark and Region, General Calendar, Scroll Calendar, Calendar/Diary
253 @subsection The Mark and the Region
255 The concept of the mark applies to the calendar just as to any other
256 buffer, but it marks a @emph{date}, not a @emph{position} in the buffer.
257 The region consists of the days between the mark and point (including
258 the starting and stopping dates).
262 Set the mark to today's date (@code{calendar-set-mark}).
266 Interchange mark and point (@code{calendar-exchange-point-and-mark}).
268 Display the number of days in the current region
269 (@code{calendar-count-days-region}).
272 @kindex C-@@ @r{(Calendar mode)}
273 @kindex C-SPC @r{(Calendar mode)}
274 @findex calendar-set-mark
275 @kindex C-x C-x @r{(Calendar mode)}
276 @findex calendar-exchange-point-and-mark
277 You set the mark in the calendar, as in any other buffer, by using @kbd{C-@@}
278 or @kbd{C-SPC} (@code{calendar-set-mark}). You return to the marked date
279 with the command @kbd{C-x C-x} (@code{calendar-exchange-point-and-mark})
280 which puts the mark where point was and point where mark was. The calendar
281 is scrolled as necessary, if the marked date was not visible on the
282 screen. This does not change the extent of the region.
284 @kindex M-= @r{(Calendar mode)}
285 @findex calendar-count-days-region
286 To determine the number of days in the region, type @kbd{M-=}
287 (@code{calendar-count-days-region}). The numbers of days printed is
288 @emph{inclusive}; that is, it includes the days specified by mark and
292 The main use of the mark in the calendar is to remember dates that you may
293 want to go back to. To make this feature more useful, the mark ring
294 (@pxref{Mark Ring}) operates exactly as in other buffers: Emacs remembers
295 16 previous locations of the mark. To return to a marked date, type @kbd{C-u
296 C-SPC} (or @kbd{C-u C-@@}); this is the command @code{calendar-set-mark} given
297 a numeric argument. It moves point to where the mark was, restores the mark
298 from the ring of former marks, and stores the previous point at the end of
299 the mark ring. So, repeated use of this command moves point through all
300 the old marks on the ring, one by one.
302 @node General Calendar, LaTeX Calendar, Mark and Region, Calendar/Diary
303 @subsection Miscellaneous Calendar Commands
307 Display day-in-year (@code{calendar-print-day-of-year}).
309 Briefly describe calendar commands (@code{describe-calendar-mode}).
311 Regenerate the calendar window (@code{redraw-calendar}).
313 Scroll the next window (@code{scroll-other-window}).
315 Exit from calendar (@code{exit-calendar}).
318 @kindex p d @r{(Calendar mode)}
320 @findex calendar-print-day-of-year
321 If you want to know how many days have elapsed since the start of
322 the year, or the number of days remaining in the year, type the @kbd{p d}
323 command (@code{calendar-print-day-of-year}). This displays both
324 of those numbers in the echo area.
326 @kindex ? @r{(Calendar mode)}
327 @findex describe-calendar-mode
328 To display a brief description of the calendar commands, type @kbd{?}
329 (@code{describe-calendar-mode}). For a fuller description, type @kbd{C-h m}.
331 @kindex SPC @r{(Calendar mode)}
332 @findex scroll-other-window
333 You can use @kbd{SPC} (@code{scroll-other-window}) to scroll the other
334 window. This is handy when you display a list of holidays or diary entries
337 @kindex C-c C-l @r{(Calendar mode)}
338 @findex redraw-calendar
339 If the calendar window text gets corrupted, type @kbd{C-c C-l}
340 (@code{redraw-calendar}) to redraw it. (This can only happen if you use
341 non-Calendar-mode editing commands.)
343 @kindex SPC @r{(Calendar mode)}
344 In Calendar mode, you can use @kbd{SPC} (@code{scroll-other-window})
345 to scroll the other window. This is handy when you display a list of
346 holidays or diary entries in another window.
348 @kindex q @r{(Calendar mode)}
349 @findex exit-calendar
350 To exit from the calendar, type @kbd{q} (@code{exit-calendar}). This
351 buries all buffers related to the calendar, selecting other buffers.
352 (If a frame contains a dedicated calendar window, exiting from the
353 calendar iconifies that frame.)
355 @node LaTeX Calendar, Holidays, General Calendar, Calendar/Diary
356 @section LaTeX Calendar
357 @cindex calendar and La@TeX{}
359 The Calendar La@TeX{} commands produce a buffer of La@TeX{} code that
360 prints as a calendar. Depending on the command you use, the printed
361 calendar covers the day, week, month or year that point is in.
363 @kindex t @r{(Calendar mode)}
366 Generate a one-month calendar (@code{cal-tex-cursor-month}).
368 Generate a sideways-printing one-month calendar
369 (@code{cal-tex-cursor-month-landscape}).
371 Generate a one-day calendar
372 (@code{cal-tex-cursor-day}).
374 Generate a one-page calendar for one week
375 (@code{cal-tex-cursor-week}).
377 Generate a two-page calendar for one week
378 (@code{cal-tex-cursor-week2}).
380 Generate an ISO-style calendar for one week
381 (@code{cal-tex-cursor-week-iso}).
383 Generate a calendar for one Monday-starting week
384 (@code{cal-tex-cursor-week-monday}).
386 Generate a Filofax-style two-weeks-at-a-glance calendar
387 (@code{cal-tex-cursor-filofax-2week}).
389 Generate a Filofax-style one-week-at-a-glance calendar
390 (@code{cal-tex-cursor-filofax-week}).
392 Generate a calendar for one year
393 (@code{cal-tex-cursor-year}).
395 Generate a sideways-printing calendar for one year
396 (@code{cal-tex-cursor-year-landscape}).
398 Generate a Filofax-style calendar for one year
399 (@code{cal-tex-cursor-filofax-year}).
402 Some of these commands print the calendar sideways (in ``landscape
403 mode''), so it can be wider than it is long. Some of them use Filofax
404 paper size (3.75in x 6.75in). All of these commands accept a prefix
405 argument which specifies how many days, weeks, months or years to print
406 (starting always with the selected one).
408 If the variable @code{cal-tex-holidays} is non-@code{nil} (the
409 default), then the printed calendars show the holidays in
410 @code{calendar-holidays}. If the variable @code{cal-tex-diary} is
411 non-@code{nil} (the default is @code{nil}), diary entries are included
412 also (in weekly and monthly calendars only).
414 @node Holidays, Sunrise/Sunset, LaTeX Calendar, Calendar/Diary
418 The Emacs calendar knows about all major and many minor holidays,
419 and can display them.
423 Display holidays for the selected date
424 (@code{calendar-cursor-holidays}).
425 @item Button2 Holidays
426 Display any holidays for the date you click on.
428 Mark holidays in the calendar window (@code{mark-calendar-holidays}).
430 Unmark calendar window (@code{calendar-unmark}).
432 List all holidays for the displayed three months in another window
433 (@code{list-calendar-holidays}).
435 List all holidays for three months around today's date in another
437 @item M-x list-holidays
438 List holidays in another window for a specified range of years.
441 @kindex h @r{(Calendar mode)}
442 @findex calendar-cursor-holidays
443 To see if any holidays fall on a given date, position point on that
444 date in the calendar window and use the @kbd{h} command. Alternatively,
445 click on that date with @kbd{Button2} and then choose @kbd{Holidays}
446 from the menu that appears. Either way, this displays the holidays for
447 that date, in the echo area if they fit there, otherwise in a separate
450 @kindex x @r{(Calendar mode)}
451 @findex mark-calendar-holidays
452 @kindex u @r{(Calendar mode)}
453 @findex calendar-unmark
454 To view the distribution of holidays for all the dates shown in the
455 calendar, use the @kbd{x} command. This displays the dates that are
456 holidays in a different face (or places a @samp{*} after these dates, if
457 display with multiple faces is not available). The command applies both
458 to the currently visible months and to other months that subsequently
459 become visible by scrolling. To turn marking off and erase the current
460 marks, type @kbd{u}, which also erases any diary marks (@pxref{Diary}).
462 @kindex a @r{(Calendar mode)}
463 @findex list-calendar-holidays
464 To get even more detailed information, use the @kbd{a} command, which
465 displays a separate buffer containing a list of all holidays in the
466 current three-month range. You can use @key{SPC} in the calendar window
470 The command @kbd{M-x holidays} displays the list of holidays for the
471 current month and the preceding and succeeding months; this works even
472 if you don't have a calendar window. If you want the list of holidays
473 centered around a different month, use @kbd{C-u M-x holidays}, which
474 prompts for the month and year.
476 The holidays known to Emacs include United States holidays and the
477 major Christian, Jewish, and Islamic holidays; also the solstices and
480 @findex list-holidays
481 The command @kbd{M-x list-holidays} displays the list of holidays for
482 a range of years. This function asks you for the starting and stopping
483 years, and allows you to choose all the holidays or one of several
484 categories of holidays. You can use this command even if you don't have
487 The dates used by Emacs for holidays are based on @emph{current
488 practice}, not historical fact. Historically, for instance, the start
489 of daylight savings time and even its existence have varied from year to
490 year, but present United States law mandates that daylight savings time
491 begins on the first Sunday in April. When the daylight savings rules
492 are set up for the United States, Emacs always uses the present
493 definition, even though it is wrong for some prior years.
495 @node Sunrise/Sunset, Lunar Phases, Holidays, Calendar/Diary
496 @subsection Times of Sunrise and Sunset
497 @cindex sunrise and sunset
499 Special calendar commands can tell you, to within a minute or two, the
500 times of sunrise and sunset for any date.
504 Display times of sunrise and sunset for the selected date
505 (@code{calendar-sunrise-sunset}).
506 @item Button2 Sunrise/Sunset
507 Display times of sunrise and sunset for the date you click on.
508 @item M-x sunrise-sunset
509 Display times of sunrise and sunset for today's date.
510 @item C-u M-x sunrise-sunset
511 Display times of sunrise and sunset for a specified date.
514 @kindex S @r{(Calendar mode)}
515 @findex calendar-sunrise-sunset
516 @findex sunrise-sunset
517 Within the calendar, to display the @emph{local times} of sunrise and
518 sunset in the echo area, move point to the date you want, and type
519 @kbd{S}. Alternatively, click @kbd{Button2} on the date, then choose
520 @kbd{Sunrise/Sunset} from the menu that appears. The command @kbd{M-x
521 sunrise-sunset} is available outside the calendar to display this
522 information for today's date or a specified date. To specify a date
523 other than today, use @kbd{C-u M-x sunrise-sunset}, which prompts for
524 the year, month, and day.
526 You can display the times of sunrise and sunset for any location and
527 any date with @kbd{C-u C-u M-x sunrise-sunset}. This asks you for a
528 longitude, latitude, number of minutes difference from Coordinated
529 Universal Time, and date, and then tells you the times of sunrise and
530 sunset for that location on that date.
532 Because the times of sunrise and sunset depend on the location on
533 earth, you need to tell Emacs your latitude, longitude, and location
534 name before using these commands. Here is an example of what to set:
536 @vindex calendar-location-name
537 @vindex calendar-longitude
538 @vindex calendar-latitude
540 (setq calendar-latitude 40.1)
541 (setq calendar-longitude -88.2)
542 (setq calendar-location-name "Urbana, IL")
546 Use one decimal place in the values of @code{calendar-latitude} and
547 @code{calendar-longitude}.
549 Your time zone also affects the local time of sunrise and sunset.
550 Emacs usually gets time zone information from the operating system, but
551 if these values are not what you want (or if the operating system does
552 not supply them), you must set them yourself. Here is an example:
554 @vindex calendar-time-zone
555 @vindex calendar-standard-time-zone-name
556 @vindex calendar-daylight-time-zone-name
558 (setq calendar-time-zone -360)
559 (setq calendar-standard-time-zone-name "CST")
560 (setq calendar-daylight-time-zone-name "CDT")
564 The value of @code{calendar-time-zone} is the number of minutes
565 difference between your local standard time and Coordinated Universal
566 Time (Greenwich time). The values of
567 @code{calendar-standard-time-zone-name} and
568 @code{calendar-daylight-time-zone-name} are the abbreviations used in
569 your time zone. Emacs displays the times of sunrise and sunset
570 @emph{corrected for daylight savings time}. @xref{Daylight Savings},
571 for how daylight savings time is determined.
573 As a user, you might find it convenient to set the calendar location
574 variables for your usual physical location in your init file. And when
575 you install Emacs on a machine, you can create a @file{default.el} file
576 which sets them properly for the typical location of most users of that
577 machine. @xref{Init File}.
579 @node Lunar Phases, Other Calendars, Sunrise/Sunset, Calendar/Diary
580 @subsection Phases of the Moon
581 @cindex phases of the moon
582 @cindex moon, phases of
584 These calendar commands display the dates and times of the phases of
585 the moon (new moon, first quarter, full moon, last quarter). This
586 feature is useful for debugging problems that ``depend on the phase of
591 Display the dates and times for all the quarters of the moon for the
592 three-month period shown (@code{calendar-phases-of-moon}).
593 @item M-x phases-of-moon
594 Display dates and times of the quarters of the moon for three months around
598 @kindex M @r{(Calendar mode)}
599 @findex calendar-phases-of-moon
600 Within the calendar, use the @kbd{M} command to display a separate
601 buffer of the phases of the moon for the current three-month range. The
602 dates and times listed are accurate to within a few minutes.
604 @findex phases-of-moon
605 Outside the calendar, use the command @kbd{M-x phases-of-moon} to
606 display the list of the phases of the moon for the current month and the
607 preceding and succeeding months. For information about a different
608 month, use @kbd{C-u M-x phases-of-moon}, which prompts for the month and
611 The dates and times given for the phases of the moon are given in
612 local time (corrected for daylight savings, when appropriate); but if
613 the variable @code{calendar-time-zone} is void, Coordinated Universal
614 Time (the Greenwich time zone) is used. @xref{Daylight Savings}.
616 @node Other Calendars, Calendar Systems, Lunar Phases, Calendar/Diary
617 @subsection Conversion To and From Other Calendars
619 @cindex Gregorian calendar
620 The Emacs calendar displayed is @emph{always} the Gregorian calendar,
621 sometimes called the ``new style'' calendar, which is used in most of
622 the world today. However, this calendar did not exist before the
623 sixteenth century and was not widely used before the eighteenth century;
624 it did not fully displace the Julian calendar and gain universal
625 acceptance until the early twentieth century. The Emacs calendar can
626 display any month since January, year 1 of the current era, but the
627 calendar displayed is the Gregorian, even for a date at which the
628 Gregorian calendar did not exist.
630 While Emacs cannot display other calendars, it can convert dates to
631 and from several other calendars.
634 * Calendar Systems:: The calendars Emacs understands
635 (aside from Gregorian).
636 * To Other Calendar:: Converting the selected date to various calendars.
637 * From Other Calendar:: Moving to a date specified in another calendar.
638 * Mayan Calendar:: Moving to a date specified in a Mayan calendar.
641 If you are interested in these calendars, you can convert dates one at a
642 time. Put point on the desired date of the Gregorian calendar and press the
643 appropriate keys. The @kbd{p} is a mnemonic for ``print'' since Emacs
644 ``prints' the equivalent date in the echo area.
645 @node Calendar Systems, To Other Calendar, Other Calendars, Other Calendars
646 @section Supported Calendar Systems
648 @cindex ISO commercial calendar
649 The ISO commercial calendar is used largely in Europe.
651 @cindex Julian calendar
652 The Julian calendar, named after Julius Caesar, was the one used in Europe
653 throughout medieval times, and in many countries up until the nineteenth
656 @cindex Julian day numbers
657 @cindex astronomical day numbers
658 Astronomers use a simple counting of days elapsed since noon, Monday,
659 January 1, 4713 B.C. on the Julian calendar. The number of days elapsed
660 is called the @emph{Julian day number} or the @emph{Astronomical day number}.
662 @cindex Hebrew calendar
663 The Hebrew calendar is used by tradition in the Jewish religion. The
664 Emacs calendar program uses the Hebrew calendar to determine the dates
665 of Jewish holidays. Hebrew calendar dates begin and end at sunset.
667 @cindex Islamic calendar
668 The Islamic calendar is used in many predominantly Islamic countries.
669 Emacs uses it to determine the dates of Islamic holidays. There is no
670 universal agreement in the Islamic world about the calendar; Emacs uses
671 a widely accepted version, but the precise dates of Islamic holidays
672 often depend on proclamation by religious authorities, not on
673 calculations. As a consequence, the actual dates of observance can vary
674 slightly from the dates computed by Emacs. Islamic calendar dates begin
677 @cindex French Revolutionary calendar
678 The French Revolutionary calendar was created by the Jacobins after the 1789
679 revolution, to represent a more secular and nature-based view of the annual
680 cycle, and to install a 10-day week in a rationalization measure similar to
681 the metric system. The French government officially abandoned this
682 calendar at the end of 1805.
684 @cindex Mayan calendar
685 The Maya of Central America used three separate, overlapping calendar
686 systems, the @emph{long count}, the @emph{tzolkin}, and the @emph{haab}.
687 Emacs knows about all three of these calendars. Experts dispute the
688 exact correlation between the Mayan calendar and our calendar; Emacs uses the
689 Goodman-Martinez-Thompson correlation in its calculations.
691 @cindex Coptic calendar
692 @cindex Ethiopic calendar
693 The Copts use a calendar based on the ancient Egyptian solar calendar.
694 Their calendar consists of twelve 30-day months followed by an extra
695 five-day period. Once every fourth year they add a leap day to this
696 extra period to make it six days. The Ethiopic calendar is identical in
697 structure, but has different year numbers and month names.
699 @cindex Persian calendar
700 The Persians use a solar calendar based on a design of Omar Khayyam.
701 Their calendar consists of twelve months of which the first six have 31
702 days, the next five have 30 days, and the last has 29 in ordinary years
703 and 30 in leap years. Leap years occur in a complicated pattern every
706 @cindex Chinese calendar
707 The Chinese calendar is a complicated system of lunar months arranged
708 into solar years. The years go in cycles of sixty, each year containing
709 either twelve months in an ordinary year or thirteen months in a leap
710 year; each month has either 29 or 30 days. Years, ordinary months, and
711 days are named by combining one of ten ``celestial stems'' with one of
712 twelve ``terrestrial branches'' for a total of sixty names that are
713 repeated in a cycle of sixty.
715 @node To Other Calendar, From Other Calendar, Calendar Systems, Other Calendars
716 @section Converting To Other Calendars
718 The following commands describe the selected date (the date at point)
719 in various other calendar systems:
722 @item Button2 Other Calendars
723 Display the date that you click on, expressed in various other calendars.
724 @kindex p @r{(Calendar mode)}
725 @findex calendar-print-iso-date
727 Display ISO commercial calendar equivalent for selected day
728 (@code{calendar-print-iso-date}).
729 @findex calendar-print-julian-date
731 Display Julian date for selected day (@code{calendar-print-julian-date}).
732 @findex calendar-print-astro-day-number
734 Display astronomical (Julian) day number for selected day
735 (@code{calendar-print-astro-day-number}).
736 @findex calendar-print-hebrew-date
738 Display Hebrew date for selected day (@code{calendar-print-hebrew-date}).
739 @findex calendar-print-islamic-date
741 Display Islamic date for selected day (@code{calendar-print-islamic-date}).
742 @findex calendar-print-french-date
744 Display French Revolutionary date for selected day
745 (@code{calendar-print-french-date}).
746 @findex calendar-print-chinese-date
748 Display Chinese date for selected day
749 (@code{calendar-print-chinese-date}).
750 @findex calendar-print-coptic-date
752 Display Coptic date for selected day
753 (@code{calendar-print-coptic-date}).
754 @findex calendar-print-ethiopic-date
756 Display Ethiopic date for selected day
757 (@code{calendar-print-ethiopic-date}).
758 @findex calendar-print-persian-date
760 Display Persian date for selected day
761 (@code{calendar-print-persian-date}).
762 @findex calendar-print-mayan-date
764 Display Mayan date for selected day (@code{calendar-print-mayan-date}).
767 If you are using X, the easiest way to translate a date into other
768 calendars is to click on it with @kbd{Button2}, then choose @kbd{Other
769 Calendars} from the menu that appears. This displays the equivalent
770 forms of the date in all the calendars Emacs understands, in the form of
771 a menu. (Choosing an alternative from this menu doesn't actually do
772 anything---the menu is used only for display.)
774 Put point on the desired date of the Gregorian calendar, then type the
775 appropriate keys. The @kbd{p} is a mnemonic for ``print'' since Emacs
776 ``prints'' the equivalent date in the echo area.
778 @node From Other Calendar, Mayan Calendar, To Other Calendar, Other Calendars
779 @section Converting From Other Calendars
781 You can use the other supported calendars to specify a date to move
782 to. This section describes the commands for doing this using calendars
783 other than Mayan; for the Mayan calendar, see the following section.
785 @kindex g @var{char} @r{(Calendar mode)}
786 @findex calendar-goto-iso-date
787 @findex calendar-goto-julian-date
788 @findex calendar-goto-astro-day-number
789 @findex calendar-goto-hebrew-date
790 @findex calendar-goto-islamic-date
791 @findex calendar-goto-french-date
792 @findex calendar-goto-chinese-date
793 @findex calendar-goto-persian-date
794 @findex calendar-goto-coptic-date
795 @findex calendar-goto-ethiopic-date
798 Move to a date specified in the ISO commercial calendar
799 (@code{calendar-goto-iso-date}).
801 Move to a date specified in the Julian calendar
802 (@code{calendar-goto-julian-date}).
804 Move to a date specified in astronomical (Julian) day number
805 (@code{calendar-goto-astro-day-number}).
807 Move to a date specified in the Hebrew calendar
808 (@code{calendar-goto-hebrew-date}).
810 Move to a date specified in the Islamic calendar
811 (@code{calendar-goto-islamic-date}).
813 Move to a date specified in the French Revolutionary calendar
814 (@code{calendar-goto-french-date}).
816 Move to a date specified in the Chinese calendar
817 (@code{calendar-goto-chinese-date}).
819 Move to a date specified in the Persian calendar
820 (@code{calendar-goto-persian-date}).
822 Move to a date specified in the Coptic calendar
823 (@code{calendar-goto-coptic-date}).
825 Move to a date specified in the Ethiopic calendar
826 (@code{calendar-goto-ethiopic-date}).
829 These commands ask you for a date on the other calendar, move point to
830 the Gregorian calendar date equivalent to that date, and display the
831 other calendar's date in the echo area. Emacs uses strict completion
832 (@pxref{Completion}) whenever it asks you to type a month name, so you
833 don't have to worry about the spelling of Hebrew, Islamic, or French names.
835 @findex list-yahrzeit-dates
837 One common question concerning the Hebrew calendar is the computation
838 of the anniversary of a date of death, called a ``yahrzeit.'' The Emacs
839 calendar includes a facility for such calculations. If you are in the
840 calendar, the command @kbd{M-x list-yahrzeit-dates} asks you for a
841 range of years and then displays a list of the yahrzeit dates for those
842 years for the date given by point. If you are not in the calendar,
843 this command first asks you for the date of death and the range of
844 years, and then displays the list of yahrzeit dates.
846 @node Mayan Calendar, Diary ,From Other Calendar ,Other Calendars
847 @subsection Converting from the Mayan Calendar
849 Here are the commands to select dates based on the Mayan calendar:
853 Move to a date specified by the long count calendar
854 (@code{calendar-goto-mayan-long-count-date}).
856 Move to the next occurrence of a place in the
857 tzolkin calendar (@code{calendar-next-tzolkin-date}).
859 Move to the previous occurrence of a place in the
860 tzolkin calendar (@code{calendar-previous-tzolkin-date}).
862 Move to the next occurrence of a place in the
863 haab calendar (@code{calendar-next-haab-date}).
865 Move to the previous occurrence of a place in the
866 haab calendar (@code{calendar-previous-haab-date}).
868 Move to the next occurrence of a place in the
869 calendar round (@code{calendar-next-calendar-round-date}).
871 Move to the previous occurrence of a place in the
872 calendar round (@code{calendar-previous-calendar-round-date}).
875 @cindex Mayan long count
876 To understand these commands, you need to understand the Mayan calendars.
877 The @dfn{long count} is a counting of days with these units:
880 1 kin = 1 day@ @ @ 1 uinal = 20 kin@ @ @ 1 tun = 18 uinal
881 1 katun = 20 tun@ @ @ 1 baktun = 20 katun
884 @kindex g m l @r{(Calendar mode)}
885 @findex calendar-goto-mayan-long-count-date
887 Thus, the long count date 12.16.11.16.6 means 12 baktun, 16 katun, 11
888 tun, 16 uinal, and 6 kin. The Emacs calendar can handle Mayan long
889 count dates as early as 7.17.18.13.1, but no earlier. When you use the
890 @kbd{g m l} command, type the Mayan long count date with the baktun,
891 katun, tun, uinal, and kin separated by periods.
893 @findex calendar-previous-tzolkin-date
894 @findex calendar-next-tzolkin-date
895 @cindex Mayan tzolkin calendar
896 The Mayan tzolkin calendar is a cycle of 260 days formed by a pair of
897 independent cycles of 13 and 20 days. Since this cycle repeats
898 endlessly, Emacs provides commands to move backward and forward to the
899 previous or next point in the cycle. Type @kbd{g m p t} to go to the
900 previous tzolkin date; Emacs asks you for a tzolkin date and moves point
901 to the previous occurrence of that date. Similarly, type @kbd{g m n t}
902 to go to the next occurrence of a tzolkin date.
904 @findex calendar-previous-haab-date
905 @findex calendar-next-haab-date
906 @cindex Mayan haab calendar
907 The Mayan haab calendar is a cycle of 365 days arranged as 18 months
908 of 20 days each, followed a 5-day monthless period. Like the tzolkin
909 cycle, this cycle repeats endlessly, and there are commands to move
910 backward and forward to the previous or next point in the cycle. Type
911 @kbd{g m p h} to go to the previous haab date; Emacs asks you for a haab
912 date and moves point to the previous occurrence of that date.
913 Similarly, type @kbd{g m n h} to go to the next occurrence of a haab
916 @c This is omitted because it is too long for smallbook format.
917 @c @findex calendar-previous-calendar-round-date
918 @findex calendar-next-calendar-round-date
919 @cindex Mayan calendar round
920 The Maya also used the combination of the tzolkin date and the haab
921 date. This combination is a cycle of about 52 years called a
922 @emph{calendar round}. If you type @kbd{g m p c}, Emacs asks you for
923 both a haab and a tzolkin date and then moves point to the previous
924 occurrence of that combination. Use @kbd{g m n c} to move point to the
925 next occurrence of a combination. These commands signal an error if the
926 haab/tzolkin date combination you have typed is impossible.
928 Emacs uses strict completion (@pxref{Completion}) whenever it
929 asks you to type a Mayan name, so you don't have to worry about
932 @node Diary, Calendar Customization, Mayan Calendar, Calendar/Diary
933 @subsection The Diary
936 The Emacs diary keeps track of appointments or other events on a daily
937 basis, in conjunction with the calendar. To use the diary feature, you
938 must first create a @dfn{diary file} containing a list of events and
939 their dates. Then Emacs can automatically pick out and display the
940 events for today, for the immediate future, or for any specified
943 By default, Emacs uses @file{~/diary} as the diary file. This is the
944 same file that the @code{calendar} utility uses. A sample
945 @file{~/diary} file is:
948 12/22/1988 Twentieth wedding anniversary!!
949 &1/1. Happy New Year!
950 10/22 Ruth's birthday.
952 Tuesday--weekly meeting with grad students at 10am
953 Supowit, Shen, Bitner, and Kapoor to attend.
954 1/13/89 Friday the thirteenth!!
955 &thu 4pm squash game with Lloyd.
956 mar 16 Dad's birthday
957 April 15, 1989 Income tax due.
958 &* 15 time cards due.
962 This example uses extra spaces to align the event descriptions of most
963 of the entries. Such formatting is purely a matter of taste.
965 Although you probably will start by creating a diary manually, Emacs
966 provides a number of commands to let you view, add, and change diary
967 entries. You can also share diary entries with other users
968 (@pxref{Included Diary Files}).
971 * Diary Commands:: Viewing diary entries and associated calendar dates.
972 * Format of Diary File:: Entering events in your diary.
973 * Date Formats:: Various ways you can specify dates.
974 * Adding to Diary:: Commands to create diary entries.
975 * Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc.
978 @node Diary Commands, Format of Diary File, Diary, Diary
979 @subsection Commands Displaying Diary Entries
981 Once you have created a @file{~/diary} file, you can use the calendar
982 to view it. You can also view today's events outside of Calendar mode.
986 Display all diary entries for the selected date
987 (@code{view-diary-entries}).
989 Display all diary entries for the date you click on.
991 Display the entire diary file (@code{show-all-diary-entries}).
993 Mark all visible dates that have diary entries
994 (@code{mark-diary-entries}).
996 Unmark the calendar window (@code{calendar-unmark}).
997 @item M-x print-diary-entries
998 Print hard copy of the diary display as it appears.
1000 Display all diary entries for today's date.
1001 @item M-x diary-mail-entries
1002 Mail yourself email reminders about upcoming diary entries.
1005 @kindex d @r{(Calendar mode)}
1006 @findex view-diary-entries
1007 Displaying the diary entries with @kbd{d} shows in a separate window
1008 the diary entries for the selected date in the calendar. The mode line
1009 of the new window shows the date of the diary entries and any holidays
1010 that fall on that date. If you specify a numeric argument with @kbd{d},
1011 it shows all the diary entries for that many successive days. Thus,
1012 @kbd{2 d} displays all the entries for the selected date and for the
1015 Another way to display the diary entries for a date is to click
1016 @kbd{Button2} on the date, and then choose @kbd{Diary} from the menu
1019 @kindex m @r{(Calendar mode)}
1020 @findex mark-diary-entries
1021 @kindex u @r{(Calendar mode)}
1022 @findex calendar-unmark
1023 To get a broader view of which days are mentioned in the diary, use
1024 the @kbd{m} command. This displays the dates that have diary entries
1025 in a different face (or places a @samp{+} after these dates, if
1026 display with multiple faces is not available). The command applies both
1027 to the currently visible months and to other months that subsequently
1028 become visible by scrolling. To turn marking off and erase the current
1029 marks, type @kbd{u}, which also turns off holiday marks
1032 @kindex s @r{(Calendar mode)}
1033 @findex show-all-diary-entries
1034 To see the full diary file, rather than just some of the entries, use
1035 the @kbd{s} command.
1037 Display of selected diary entries uses the selective display feature
1038 to hide entries that don't apply.
1040 @findex print-diary-entries
1041 The diary buffer as you see it is an illusion, so simply printing the
1042 buffer does not print what you see on your screen. There is a special
1043 command to print hard copy of the diary buffer @emph{as it appears};
1044 this command is @kbd{M-x print-diary-entries}. It sends the data
1045 directly to the printer. You can customize it like @code{lpr-region}
1049 The command @kbd{M-x diary} displays the diary entries for the current
1050 date, independently of the calendar display, and optionally for the next
1051 few days as well; the variable @code{number-of-diary-entries} specifies
1052 how many days to include (@pxref{Customization}).
1054 If you put @code{(diary)} in your init file, this
1055 automatically displays a window with the day's diary entries, when you
1056 enter Emacs. @xref{Init File}. The mode line of the displayed window
1057 shows the date and any holidays that fall on that date.
1059 @findex diary-mail-entries
1060 @vindex diary-mail-days
1061 Many users like to receive notice of events in their diary as email.
1062 To send such mail to yourself, use the command @kbd{M-x
1063 diary-mail-entries}. A prefix argument specifies how many days
1064 (starting with today) to check; otherwise, the variable
1065 @code{diary-mail-days} says how many days.
1067 @node Format of Diary File, Date Formats, Diary Commands, Diary
1068 @subsection The Diary File
1072 Your @dfn{diary file} is a file that records events associated with
1073 particular dates. The name of the diary file is specified by the
1074 variable @code{diary-file}; @file{~/diary} is the default. The
1075 @code{calendar} utility program supports a subset of the format allowed
1076 by the Emacs diary facilities, so you can use that utility to view the
1077 diary file, with reasonable results aside from the entries it cannot
1080 Each entry in the diary file describes one event and consists of one
1081 or more lines. An entry always begins with a date specification at the
1082 left margin. The rest of the entry is simply text to describe the
1083 event. If the entry has more than one line, then the lines after the
1084 first must begin with whitespace to indicate they continue a previous
1085 entry. Lines that do not begin with valid dates and do not continue a
1086 preceding entry are ignored.
1088 You can inhibit the marking of certain diary entries in the calendar
1089 window; to do this, insert an ampersand (@samp{&}) at the beginning of
1090 the entry, before the date. This has no effect on display of the entry
1091 in the diary window; it affects only marks on dates in the calendar
1092 window. Nonmarking entries are especially useful for generic entries
1093 that would otherwise mark many different dates.
1095 If the first line of a diary entry consists only of the date or day
1096 name with no following blanks or punctuation, then the diary window
1097 display doesn't include that line; only the continuation lines appear.
1098 For example, this entry:
1102 Bill B. visits Princeton today
1103 2pm Cognitive Studies Committee meeting
1104 2:30-5:30 Liz at Lawrenceville
1106 7:30pm Dinner at George's
1107 8:00-10:00pm concert
1111 appears in the diary window without the date line at the beginning.
1112 This style of entry looks neater when you display just a single day's
1113 entries, but can cause confusion if you ask for more than one day's
1116 You can edit the diary entries as they appear in the window, but it is
1117 important to remember that the buffer displayed contains the @emph{entire}
1118 diary file, with portions of it concealed from view. This means, for
1119 instance, that the @kbd{C-f} (@code{forward-char}) command can put point
1120 at what appears to be the end of the line, but what is in reality the
1121 middle of some concealed line.
1123 @emph{Be careful when editing the diary entries!} Inserting
1124 additional lines or adding/deleting characters in the middle of a
1125 visible line cannot cause problems, but editing at the end of a line may
1126 not do what you expect. Deleting a line may delete other invisible
1127 entries that follow it. Before editing the diary, it is best to display
1128 the entire file with @kbd{s} (@code{show-all-diary-entries}).
1130 @node Date Formats,Adding to Diary ,Format of Diary File, Diary
1131 @subsection Date Formats
1133 Here are some sample diary entries, illustrating different ways of
1134 formatting a date. The examples all show dates in American order
1135 (month, day, year), but Calendar mode supports European order (day,
1136 month, year) as an option.
1139 4/20/93 Switch-over to new tabulation system
1140 apr. 25 Start tabulating annual results
1141 4/30 Results for April are due
1142 */25 Monthly cycle finishes
1143 Friday Don't leave without backing up files
1146 The first entry appears only once, on April 20, 1993. The second and
1147 third appear every year on the specified dates, and the fourth uses a
1148 wildcard (asterisk) for the month, so it appears on the 25th of every
1149 month. The final entry appears every week on Friday.
1151 You can use just numbers to express a date, as in
1152 @samp{@var{month}/@var{day}} or @samp{@var{month}/@var{day}/@var{year}}.
1153 This must be followed by a nondigit. In the date itself, @var{month}
1154 and @var{day} are numbers of one or two digits. The optional @var{year}
1155 is also a number, and may be abbreviated to the last two digits; that
1156 is, you can use @samp{11/12/1989} or @samp{11/12/89}.
1158 Dates can also have the form @samp{@var{monthname} @var{day}} or
1159 @samp{@var{monthname} @var{day}, @var{year}}, where the month's name can
1160 be spelled in full or abbreviated to three characters (with or without a
1161 period). Case is not significant.
1163 A date may be @dfn{generic}; that is, partially unspecified. Then the
1164 entry applies to all dates that match the specification. If the date
1165 does not contain a year, it is generic and applies to any year.
1166 Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*};
1167 this matches any month, day, or year, respectively. Thus, a diary entry
1168 @samp{3/*/*} matches any day in March of any year; so does @samp{march
1171 @vindex european-calendar-style
1172 @findex european-calendar
1173 @findex american-calendar
1174 If you prefer the European style of writing dates---in which the day
1175 comes before the month---type @kbd{M-x european-calendar} while in the
1176 calendar, or set the variable @code{european-calendar-style} to @code{t}
1177 @emph{before} using any calendar or diary command. This mode interprets
1178 all dates in the diary in the European manner, and also uses European
1179 style for displaying diary dates. (Note that there is no comma after
1180 the @var{monthname} in the European style.) To go back to the (default)
1181 American style of writing dates, type @kbd{M-x american-calendar}.
1183 You can use the name of a day of the week as a generic date which
1184 applies to any date falling on that day of the week. You can abbreviate
1185 the day of the week to three letters (with or without a period) or spell
1186 it in full; case is not significant.
1188 @node Adding to Diary, Special Diary Entries, Date Formats, Diary
1189 @subsection Commands to Add to the Diary
1191 While in the calendar, there are several commands to create diary
1196 Add a diary entry for the selected date (@code{insert-diary-entry}).
1198 Add a diary entry for the selected day of the week (@code{insert-weekly-diary-entry}).
1200 Add a diary entry for the selected day of the month (@code{insert-monthly-diary-entry}).
1202 Add a diary entry for the selected day of the year (@code{insert-yearly-diary-entry}).
1205 @kindex i d @r{(Calendar mode)}
1206 @findex insert-diary-entry
1207 You can make a diary entry for a specific date by selecting that date
1208 in the calendar window and typing the @kbd{i d} command. This command
1209 displays the end of your diary file in another window and inserts the
1210 date; you can then type the rest of the diary entry.
1212 @kindex i w @r{(Calendar mode)}
1213 @findex insert-weekly-diary-entry
1214 @kindex i m @r{(Calendar mode)}
1215 @findex insert-monthly-diary-entry
1216 @kindex i y @r{(Calendar mode)}
1217 @findex insert-yearly-diary-entry
1218 If you want to make a diary entry that applies to a specific day of
1219 the week, select that day of the week (any occurrence will do) and type
1220 @kbd{i w}. This inserts the day-of-week as a generic date; you can then
1221 type the rest of the diary entry. You can make a monthly diary entry in
1222 the same fashion. Select the day of the month, use the @kbd{i m}
1223 command, and type rest of the entry. Similarly, you can insert a yearly
1224 diary entry with the @kbd{i y} command.
1226 All of the above commands make marking diary entries by default. To
1227 make a nonmarking diary entry, give a numeric argument to the command.
1228 For example, @kbd{C-u i w} makes a nonmarking weekly diary entry.
1230 When you modify the diary file, be sure to save the file before
1233 @node Special Diary Entries,, Adding to Diary, Diary
1234 @subsection Special Diary Entries
1236 In addition to entries based on calendar dates, the diary file can
1237 contain @dfn{sexp entries} for regular events such as anniversaries.
1238 These entries are based on Lisp expressions (sexps) that Emacs evaluates
1239 as it scans the diary file. Instead of a date, a sexp entry contains
1240 @samp{%%} followed by a Lisp expression which must begin and end with
1241 parentheses. The Lisp expression determines which dates the entry
1244 Calendar mode provides commands to insert certain commonly used
1249 Add an anniversary diary entry for the selected date
1250 (@code{insert-anniversary-diary-entry}).
1252 Add a block diary entry for the current region
1253 (@code{insert-block-diary-entry}).
1255 Add a cyclic diary entry starting at the date
1256 (@code{insert-cyclic-diary-entry}).
1259 @kindex i a @r{(Calendar mode)}
1260 @findex insert-anniversary-diary-entry
1261 If you want to make a diary entry that applies to the anniversary of a
1262 specific date, move point to that date and use the @kbd{i a} command.
1263 This displays the end of your diary file in another window and inserts
1264 the anniversary description; you can then type the rest of the diary
1265 entry. The entry looks like this:
1267 @findex diary-anniversary
1268 The effect of @kbd{i a} is to add a @code{diary-anniversary} sexp to your
1269 diary file. You can also add one manually, for instance:
1272 %%(diary-anniversary 10 31 1948) Arthur's birthday
1276 This entry applies to October 31 in any year after 1948; @samp{10 31
1277 1948} specifies the date. (If you are using the European calendar
1278 style, the month and day are interchanged.) The reason this expression
1279 requires a beginning year is that advanced diary functions can use it to
1280 calculate the number of elapsed years.
1282 A @dfn{block} diary entry applies to a specified range of consecutive
1283 dates. Here is a block diary entry that applies to all dates from June
1284 24, 1990 through July 10, 1990:
1288 %%(diary-block 6 24 1990 7 10 1990) Vacation
1292 The @samp{6 24 1990} indicates the starting date and the @samp{7 10 1990}
1293 indicates the stopping date. (Again, if you are using the European calendar
1294 style, the month and day are interchanged.)
1296 @kindex i b @r{(Calendar mode)}
1297 @findex insert-block-diary-entry
1298 To insert a block entry, place point and the mark on the two
1299 dates that begin and end the range, and type @kbd{i b}. This command
1300 displays the end of your diary file in another window and inserts the
1301 block description; you can then type the diary entry.
1303 @kindex i c @r{(Calendar mode)}
1304 @findex insert-cyclic-diary-entry
1305 @dfn{Cyclic} diary entries repeat after a fixed interval of days. To
1306 create one, select the starting date and use the @kbd{i c} command. The
1307 command prompts for the length of interval, then inserts the entry,
1308 which looks like this:
1310 @findex diary-cyclic
1312 %%(diary-cyclic 50 3 1 1990) Renew medication
1316 This entry applies to March 1, 1990 and every 50th day following;
1317 @samp{3 1 1990} specifies the starting date. (If you are using the
1318 European calendar style, the month and day are interchanged.)
1320 All three of these commands make marking diary entries. To insert a
1321 nonmarking entry, give a numeric argument to the command. For example,
1322 @kbd{C-u i a} makes a nonmarking anniversary diary entry.
1324 Marking sexp diary entries in the calendar is @emph{extremely}
1325 time-consuming, since every date visible in the calendar window must be
1326 individually checked. So it's a good idea to make sexp diary entries
1327 nonmarking (with @samp{&}) when possible.
1329 Another sophisticated kind of sexp entry, a @dfn{floating} diary entry,
1330 specifies a regularly occurring event by offsets specified in days,
1331 weeks, and months. It is comparable to a crontab entry interpreted by
1332 the @code{cron} utility. Here is a nonmarking, floating diary entry
1333 that applies to the last Thursday in November:
1337 &%%(diary-float 11 4 -1) American Thanksgiving
1341 The 11 specifies November (the eleventh month), the 4 specifies Thursday
1342 (the fourth day of the week, where Sunday is numbered zero), and the
1343 @minus{}1 specifies ``last'' (1 would mean ``first'', 2 would mean
1344 ``second'', @minus{}2 would mean ``second-to-last'', and so on). The
1345 month can be a single month or a list of months. Thus you could change
1346 the 11 above to @samp{'(1 2 3)} and have the entry apply to the last
1347 Thursday of January, February, and March. If the month is @code{t}, the
1348 entry applies to all months of the year.@refill
1350 The sexp feature of the diary allows you to specify diary entries
1351 based on any Emacs Lisp expression. You can use the library of built-in
1352 functions or you can write your own functions. The built-in functions
1353 include the ones shown in this section, plus a few others (@pxref{Sexp
1356 The generality of sexps lets you specify any diary entry that you can
1357 describe algorithmically. Suppose you get paid on the 21st of the month
1358 if it is a weekday, and to the Friday before if the 21st is on a
1359 weekend. The diary entry
1362 &%%(let ((dayname (calendar-day-of-week date))
1363 (day (car (cdr date))))
1364 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
1365 (and (memq day '(19 20)) (= dayname 5)))
1366 ) Pay check deposited
1370 to just those dates. This example illustrates how the sexp can depend
1371 on the variable @code{date}; this variable is a list (@var{month}
1372 @var{day} @var{year}) that gives the Gregorian date for which the diary
1373 entries are being found. If the value of the sexp is @code{t}, the
1374 entry applies to that date. If the sexp evaluates to @code{nil}, the
1375 entry does @emph{not} apply to that date.
1378 @node Calendar Customization,,Diary, Calendar/Diary
1379 @subsection Customizing the Calendar and Diary
1381 There are many customizations that you can use to make the calendar and
1382 diary suit your personal tastes.
1385 * Calendar Customizing:: Defaults you can set.
1386 * Holiday Customizing:: Defining your own holidays.
1387 * Date Display Format:: Changing the format.
1388 * Time Display Format:: Changing the format.
1389 * Daylight Savings:: Changing the default.
1390 * Diary Customizing:: Defaults you can set.
1391 * Hebrew/Islamic Entries:: How to obtain them.
1392 * Fancy Diary Display:: Enhancing the diary display, sorting entries.
1393 * Included Diary Files:: Sharing a common diary file.
1394 * Sexp Diary Entries:: Fancy things you can do.
1395 * Appt Customizing:: Customizing appointment reminders.
1398 @node Calendar Customizing
1399 @subsubsection Customizing the Calendar
1400 @vindex view-diary-entries-initially
1402 If you set the variable @code{view-diary-entries-initially} to
1403 @code{t}, calling up the calendar automatically displays the diary
1404 entries for the current date as well. The diary dates appear only if
1405 the current date is visible. If you add both of the following lines to
1406 your init file:@refill
1409 (setq view-diary-entries-initially t)
1414 this displays both the calendar and diary windows whenever you start
1415 Emacs. @xref{Init File}.
1417 @vindex view-calendar-holidays-initially
1418 Similarly, if you set the variable
1419 @code{view-calendar-holidays-initially} to @code{t}, entering the
1420 calendar automatically displays a list of holidays for the current
1421 three-month period. The holiday list appears in a separate
1424 @vindex mark-diary-entries-in-calendar
1425 You can set the variable @code{mark-diary-entries-in-calendar} to
1426 @code{t} in order to mark any dates with diary entries. This takes
1427 effect whenever the calendar window contents are recomputed. There are
1428 two ways of marking these dates: by changing the face (@pxref{Faces}),
1429 if the display supports that, or by placing a plus sign (@samp{+})
1430 beside the date otherwise.
1432 @vindex mark-holidays-in-calendar
1433 Similarly, setting the variable @code{mark-holidays-in-calendar} to
1434 @code{t} marks holiday dates, either with a change of face or with an
1435 asterisk (@samp{*}).
1437 @vindex calendar-holiday-marker
1438 @vindex diary-entry-marker
1439 The variable @code{calendar-holiday-marker} specifies how to mark a
1440 date as being a holiday. Its value may be a character to insert next to
1441 the date, or a face name to use for displaying the date. Likewise, the
1442 variable @code{diary-entry-marker} specifies how to mark a date that has
1443 diary entries. The calendar creates faces named @code{holiday-face} and
1444 @code{diary-face} for these purposes; those symbols are the default
1445 values of these variables, when Emacs supports multiple faces on your
1448 @vindex calendar-load-hook
1449 The variable @code{calendar-load-hook} is a normal hook run when the
1450 calendar package is first loaded (before actually starting to display
1453 @vindex initial-calendar-window-hook
1454 Starting the calendar runs the normal hook
1455 @code{initial-calendar-window-hook}. Recomputation of the calendar
1456 display does not run this hook. But if you leave the calendar with the
1457 @kbd{q} command and reenter it, the hook runs again.@refill
1459 @vindex today-visible-calendar-hook
1460 The variable @code{today-visible-calendar-hook} is a normal hook run
1461 after the calendar buffer has been prepared with the calendar when the
1462 current date is visible in the window. One use of this hook is to
1463 replace today's date with asterisks; to do that, use the hook function
1464 @code{calendar-star-date}.
1466 @findex calendar-star-date
1468 (add-hook 'today-visible-calendar-hook 'calendar-star-date)
1472 Another standard hook function marks the current date, either by
1473 changing its face or by adding an asterisk. Here's how to use it:
1475 @findex calendar-mark-today
1477 (add-hook 'today-visible-calendar-hook 'calendar-mark-today)
1481 @vindex calendar-today-marker
1482 The variable @code{calendar-today-marker} specifies how to mark today's
1483 date. Its value should be a character to insert next to the date or a
1484 face name to use for displaying the date. A face named
1485 @code{calendar-today-face} is provided for this purpose; that symbol is
1486 the default for this variable when Emacs supports multiple faces on your
1489 @vindex today-invisible-calendar-hook
1491 A similar normal hook, @code{today-invisible-calendar-hook} is run if
1492 the current date is @emph{not} visible in the window.
1494 @node Holiday Customizing
1495 @subsubsection Customizing the Holidays
1497 @vindex calendar-holidays
1498 @vindex christian-holidays
1499 @vindex hebrew-holidays
1500 @vindex islamic-holidays
1501 Emacs knows about holidays defined by entries on one of several lists.
1502 You can customize these lists of holidays to your own needs, adding or
1503 deleting holidays. The lists of holidays that Emacs uses are for
1504 general holidays (@code{general-holidays}), local holidays
1505 (@code{local-holidays}), Christian holidays (@code{christian-holidays}),
1506 Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Moslem)
1507 holidays (@code{islamic-holidays}), and other holidays
1508 (@code{other-holidays}).
1510 @vindex general-holidays
1511 The general holidays are, by default, holidays common throughout the
1512 United States. To eliminate these holidays, set @code{general-holidays}
1515 @vindex local-holidays
1516 There are no default local holidays (but sites may supply some). You
1517 can set the variable @code{local-holidays} to any list of holidays, as
1520 @vindex all-christian-calendar-holidays
1521 @vindex all-hebrew-calendar-holidays
1522 @vindex all-islamic-calendar-holidays
1523 By default, Emacs does not include all the holidays of the religions
1524 that it knows, only those commonly found in secular calendars. For a
1525 more extensive collection of religious holidays, you can set any (or
1526 all) of the variables @code{all-christian-calendar-holidays},
1527 @code{all-hebrew-calendar-holidays}, or
1528 @code{all-islamic-calendar-holidays} to @code{t}. If you want to
1529 eliminate the religious holidays, set any or all of the corresponding
1530 variables @code{christian-holidays}, @code{hebrew-holidays}, and
1531 @code{islamic-holidays} to @code{nil}.@refill
1533 @vindex other-holidays
1534 You can set the variable @code{other-holidays} to any list of
1535 holidays. This list, normally empty, is intended for individual use.
1537 @cindex holiday forms
1538 Each of the lists (@code{general-holidays}, @code{local-holidays},
1539 @code{christian-holidays}, @code{hebrew-holidays},
1540 @code{islamic-holidays}, and @code{other-holidays}) is a list of
1541 @dfn{holiday forms}, each holiday form describing a holiday (or
1542 sometimes a list of holidays).
1544 Here is a table of the possible kinds of holiday form. Day numbers
1545 and month numbers count starting from 1, but ``dayname'' numbers
1546 count Sunday as 0. The element @var{string} is always the
1547 name of the holiday, as a string.
1550 @item (holiday-fixed @var{month} @var{day} @var{string})
1551 A fixed date on the Gregorian calendar. @var{month} and @var{day} are
1552 numbers, @var{string} is the name of the holiday.
1554 @item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
1555 The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
1556 (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
1557 from the end of the month. @var{string} is the name of the holiday.
1559 @item (holiday-hebrew @var{month} @var{day} @var{string})
1560 A fixed date on the Hebrew calendar. @var{month} and @var{day} are
1561 numbers, @var{string} is the name of the holiday.
1563 @item (holiday-islamic @var{month} @var{day} @var{string})
1564 A fixed date on the Islamic calendar. @var{month} and @var{day} are
1565 numbers, @var{string} is the name of the holiday.
1567 @item (holiday-julian @var{month} @var{day} @var{string})
1568 A fixed date on the Julian calendar. @var{month} and @var{day} are
1569 numbers, @var{string} is the name of the holiday.
1571 @item (holiday-sexp @var{sexp} @var{string})
1572 A date calculated by the Lisp expression @var{sexp}. The expression
1573 should use the variable @code{year} to compute and return the date of a
1574 holiday, or @code{nil} if the holiday doesn't happen this year. The
1575 value of @var{sexp} must represent the date as a list of the form
1576 @code{(@var{month} @var{day} @var{year})}. @var{string} is the name of
1579 @item (if @var{condition} @var{holiday-form} &optional @var{holiday-form})
1580 A holiday that happens only if @var{condition} is true.
1582 @item (@var{function} @r{[}@var{args}@r{]})
1583 A list of dates calculated by the function @var{function}, called with
1584 arguments @var{args}.
1587 For example, suppose you want to add Bastille Day, celebrated in
1588 France on July 14. You can do this by adding the following line
1592 (setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
1598 The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
1599 fourteenth day of the seventh month (July).
1601 Many holidays occur on a specific day of the week, at a specific time
1602 of month. Here is a holiday form describing Hurricane Supplication Day,
1603 celebrated in the Virgin Islands on the fourth Monday in August:
1606 (holiday-float 8 1 4 "Hurricane Supplication Day")
1610 Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
1611 Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
1612 the month (1 specifies the first occurrence, 2 the second occurrence,
1613 @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
1616 You can specify holidays that occur on fixed days of the Hebrew,
1617 Islamic, and Julian calendars too. For example,
1620 (setq other-holidays
1621 '((holiday-hebrew 10 2 "Last day of Hanukkah")
1622 (holiday-islamic 3 12 "Mohammed's Birthday")
1623 (holiday-julian 4 2 "Jefferson's Birthday")))
1627 adds the last day of Hanukkah (since the Hebrew months are numbered with
1628 1 starting from Nisan), the Islamic feast celebrating Mohammed's
1629 birthday (since the Islamic months are numbered from 1 starting with
1630 Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
1633 To include a holiday conditionally, use either Emacs Lisp's @code{if} or the
1634 @code{holiday-sexp} form. For example, American presidential elections
1635 occur on the first Tuesday after the first Monday in November of years
1639 (holiday-sexp (if (= 0 (% year 4))
1640 (calendar-gregorian-from-absolute
1641 (1+ (calendar-dayname-on-or-before
1642 1 (+ 6 (calendar-absolute-from-gregorian
1643 (list 11 1 year))))))
1644 "US Presidential Election"))
1651 (if (= 0 (% displayed-year 4))
1653 (extract-calendar-day
1654 (calendar-gregorian-from-absolute
1655 (1+ (calendar-dayname-on-or-before
1656 1 (+ 6 (calendar-absolute-from-gregorian
1657 (list 11 1 displayed-year)))))))
1658 "US Presidential Election"))
1661 Some holidays just don't fit into any of these forms because special
1662 calculations are involved in their determination. In such cases you
1663 must write a Lisp function to do the calculation. To include eclipses,
1664 for example, add @code{(eclipses)} to @code{other-holidays}
1665 and write an Emacs Lisp function @code{eclipses} that returns a
1666 (possibly empty) list of the relevant Gregorian dates among the range
1667 visible in the calendar window, with descriptive strings, like this:
1670 (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
1673 @node Date Display Format
1674 @subsubsection Date Display Format
1675 @vindex calendar-date-display-form
1677 You can customize the manner of displaying dates in the diary, in mode
1678 lines, and in messages by setting @code{calendar-date-display-form}.
1679 This variable holds a list of expressions that can involve the variables
1680 @code{month}, @code{day}, and @code{year}, which are all numbers in
1681 string form, and @code{monthname} and @code{dayname}, which are both
1682 alphabetic strings. In the American style, the default value of this
1686 ((if dayname (concat dayname ", ")) monthname " " day ", " year)
1690 while in the European style this value is the default:
1693 ((if dayname (concat dayname ", ")) day " " monthname " " year)
1697 The ISO standard date representation is this:
1700 (year "-" month "-" day)
1704 This specifies a typical American format:
1707 (month "/" day "/" (substring year -2))
1710 @node Time Display Format
1711 @subsubsection Time Display Format
1712 @vindex calendar-time-display-form
1714 The calendar and diary by default display times of day in the
1715 conventional American style with the hours from 1 through 12, minutes,
1716 and either @samp{am} or @samp{pm}. If you prefer the European style,
1717 also known in the US as military, in which the hours go from 00 to 23,
1718 you can alter the variable @code{calendar-time-display-form}. This
1719 variable is a list of expressions that can involve the variables
1720 @code{12-hours}, @code{24-hours}, and @code{minutes}, which are all
1721 numbers in string form, and @code{am-pm} and @code{time-zone}, which are
1722 both alphabetic strings. The default value of
1723 @code{calendar-time-display-form} is as follows:
1726 (12-hours ":" minutes am-pm
1727 (if time-zone " (") time-zone (if time-zone ")"))
1731 Here is a value that provides European style times:
1734 (24-hours ":" minutes
1735 (if time-zone " (") time-zone (if time-zone ")"))
1739 gives military-style times like @samp{21:07 (UT)} if time zone names are
1740 defined, and times like @samp{21:07} if they are not.
1742 @node Daylight Savings
1743 @subsubsection Daylight Savings Time
1744 @cindex daylight savings time
1746 Emacs understands the difference between standard time and daylight
1747 savings time---the times given for sunrise, sunset, solstices,
1748 equinoxes, and the phases of the moon take that into account. The rules
1749 for daylight savings time vary from place to place and have also varied
1750 historically from year to year. To do the job properly, Emacs needs to
1751 know which rules to use.
1753 Some operating systems keep track of the rules that apply to the place
1754 where you are; on these systems, Emacs gets the information it needs
1755 from the system automatically. If some or all of this information is
1756 missing, Emacs fills in the gaps with the rules currently used in
1757 Cambridge, Massachusetts. If the resulting rules are not what you want,
1758 you can tell Emacs the rules to use by setting certain variables.
1760 @vindex calendar-daylight-savings-starts
1761 @vindex calendar-daylight-savings-ends
1762 If the default choice of rules is not appropriate for your location,
1763 you can tell Emacs the rules to use by setting the variables
1764 @code{calendar-daylight-savings-starts} and
1765 @code{calendar-daylight-savings-ends}. Their values should be Lisp
1766 expressions that refer to the variable @code{year}, and evaluate to the
1767 Gregorian date on which daylight savings time starts or (respectively)
1768 ends, in the form of a list @code{(@var{month} @var{day} @var{year})}.
1769 The values should be @code{nil} if your area does not use daylight
1772 Emacs uses these expressions to determine the starting date of
1773 daylight savings time for the holiday list and for correcting times of
1774 day in the solar and lunar calculations.
1776 The values for Cambridge, Massachusetts are as follows:
1780 (calendar-nth-named-day 1 0 4 year)
1781 (calendar-nth-named-day -1 0 10 year)
1786 That is, the first 0th day (Sunday) of the fourth month (April) in
1787 the year specified by @code{year}, and the last Sunday of the tenth month
1788 (October) of that year. If daylight savings time were
1789 changed to start on October 1, you would set
1790 @code{calendar-daylight-savings-starts} to this:
1796 For a more complex example, suppose daylight savings time begins on
1797 the first of Nisan on the Hebrew calendar. You should set
1798 @code{calendar-daylight-savings-starts} to this value:
1801 (calendar-gregorian-from-absolute
1802 (calendar-absolute-from-hebrew
1803 (list 1 1 (+ year 3760))))
1807 because Nisan is the first month in the Hebrew calendar and the Hebrew
1808 year differs from the Gregorian year by 3760 at Nisan.
1810 If there is no daylight savings time at your location, or if you want
1811 all times in standard time, set @code{calendar-daylight-savings-starts}
1812 and @code{calendar-daylight-savings-ends} to @code{nil}.
1814 @vindex calendar-daylight-time-offset
1815 The variable @code{calendar-daylight-time-offset} specifies the
1816 difference between daylight savings time and standard time, measured in
1817 minutes. The value for Cambridge, Massachusetts is 60.
1819 @c @vindex calendar-daylight-savings-starts-time too long!
1820 @vindex calendar-daylight-savings-ends-time
1821 The two variables @code{calendar-daylight-savings-starts-time} and
1822 @code{calendar-daylight-savings-ends-time} specify the number of minutes
1823 after midnight local time when the transition to and from daylight
1824 savings time should occur. For Cambridge, Massachusetts both variables'
1827 @node Diary Customizing
1828 @subsubsection Customizing the Diary
1830 @vindex holidays-in-diary-buffer
1831 Ordinarily, the mode line of the diary buffer window indicates any
1832 holidays that fall on the date of the diary entries. The process of
1833 checking for holidays can take several seconds, so including holiday
1834 information delays the display of the diary buffer noticeably. If you'd
1835 prefer to have a faster display of the diary buffer but without the
1836 holiday information, set the variable @code{holidays-in-diary-buffer} to
1839 @vindex number-of-diary-entries
1840 The variable @code{number-of-diary-entries} controls the number of
1841 days of diary entries to be displayed at one time. It affects the
1842 initial display when @code{view-diary-entries-initially} is @code{t}, as
1843 well as the command @kbd{M-x diary}. For example, the default value is
1844 1, which says to display only the current day's diary entries. If the
1845 value is 2, both the current day's and the next day's entries are
1846 displayed. The value can also be a vector of seven elements: for
1847 example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries
1848 appear on Sunday, the current date's and the next day's diary entries
1849 appear Monday through Thursday, Friday through Monday's entries appear
1850 on Friday, while on Saturday only that day's entries appear.
1852 @vindex print-diary-entries-hook
1853 @findex print-diary-entries
1854 The variable @code{print-diary-entries-hook} is a normal hook run
1855 after preparation of a temporary buffer containing just the diary
1856 entries currently visible in the diary buffer. (The other, irrelevant
1857 diary entries are really absent from the temporary buffer; in the diary
1858 buffer, they are merely hidden.) The default value of this hook does
1859 the printing with the command @code{lpr-buffer}. If you want to use a
1860 different command to do the printing, just change the value of this
1861 hook. Other uses might include, for example, rearranging the lines into
1862 order by day and time.
1864 @vindex diary-date-forms
1865 You can customize the form of dates in your diary file, if neither the
1866 standard American nor European styles suits your needs, by setting the
1867 variable @code{diary-date-forms}. This variable is a list of patterns
1868 for recognizing a date. Each date pattern is a list whose elements may
1869 be regular expressions (@pxref{Regexps}) or the symbols
1870 @code{month}, @code{day}, @code{year}, @code{monthname}, and
1871 @code{dayname}. All these elements serve as patterns that match certain
1872 kinds of text in the diary file. In order for the date pattern, as a
1873 whole, to match, all of its elements must match consecutively.
1875 A regular expression in a date pattern matches in its usual fashion,
1876 using the standard syntax table altered so that @samp{*} is a word
1879 The symbols @code{month}, @code{day}, @code{year}, @code{monthname},
1880 and @code{dayname} match the month number, day number, year number,
1881 month name, and day name of the date being considered. The symbols that
1882 match numbers allow leading zeros; those that match names allow
1883 three-letter abbreviations and capitalization. All the symbols can
1884 match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any
1885 month'', and so on, it should match regardless of the date being
1888 The default value of @code{diary-date-forms} in the American style is
1892 ((month "/" day "[^/0-9]")
1893 (month "/" day "/" year "[^0-9]")
1894 (monthname " *" day "[^,0-9]")
1895 (monthname " *" day ", *" year "[^0-9]")
1900 Emacs matches of the diary entries with the date forms is done with the
1901 standard syntax table from Fundamental mode
1902 (@pxref{Syntax Tables,,,lispref,XEmacs Lisp Reference Manual}),
1903 but with the @samp{*} changed so that it is a word constituent.@refill
1905 The date patterns in the list must be @emph{mutually exclusive} and
1906 must not match any portion of the diary entry itself, just the date and
1907 one character of whitespace. If, to be mutually exclusive, the pattern
1908 must match a portion of the diary entry text---beyond the whitespace
1909 that ends the date---then the first element of the date pattern
1910 @emph{must} be @code{backup}. This causes the date recognizer to back
1911 up to the beginning of the current word of the diary entry, after
1912 finishing the match. Even if you use @code{backup}, the date pattern
1913 must absolutely not match more than a portion of the first word of the
1914 diary entry. The default value of @code{diary-date-forms} in the
1915 European style is this list:
1918 ((day "/" month "[^/0-9]")
1919 (day "/" month "/" year "[^0-9]")
1920 (backup day " *" monthname "\\W+\\<[^*0-9]")
1921 (day " *" monthname " *" year "[^0-9]")
1926 Notice the use of @code{backup} in the third pattern, because it needs
1927 to match part of a word beyond the date itself to distinguish it from
1930 @node Hebrew/Islamic Entries
1931 @subsubsection Hebrew- and Islamic-Date Diary Entries
1933 Your diary file can have entries based on Hebrew or Islamic dates, as
1934 well as entries based on the world-standard Gregorian calendar.
1935 However, because recognition of such entries is time-consuming and most
1936 people don't use them, you must explicitly enable their use. If you
1937 want the diary to recognize Hebrew-date diary entries, for example,
1940 @vindex nongregorian-diary-listing-hook
1941 @vindex nongregorian-diary-marking-hook
1942 @findex list-hebrew-diary-entries
1943 @findex mark-hebrew-diary-entries
1945 (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
1946 (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
1950 If you want Islamic-date entries, do this:
1952 @findex list-islamic-diary-entries
1953 @findex mark-islamic-diary-entries
1955 (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
1956 (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
1959 Hebrew- and Islamic-date diary entries have the same formats as
1960 Gregorian-date diary entries, except that @samp{H} precedes a Hebrew
1961 date and @samp{I} precedes an Islamic date. Moreover, because the
1962 Hebrew and Islamic month names are not uniquely specified by the first
1963 three letters, you may not abbreviate them. For example, a diary entry
1964 for the Hebrew date Heshvan 25 could look like this:
1967 HHeshvan 25 Happy Hebrew birthday!
1971 and would appear in the diary for any date that corresponds to Heshvan 25
1972 on the Hebrew calendar. And here is Islamic-date diary entry that matches
1976 IDhu al-Qada 25 Happy Islamic birthday!
1980 and would appear in the diary for any date that corresponds to Dhu al-Qada 25
1981 on the Islamic calendar.
1983 As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
1984 are nonmarking if they are preceded with an ampersand (@samp{&}).
1986 Here is a table of commands used in the calendar to create diary entries
1987 that match the selected date and other dates that are similar in the Hebrew
1988 or Islamic calendar:
1992 Add a diary entry for the Hebrew date corresponding to the selected date
1993 (@code{insert-hebrew-diary-entry}).
1995 Add a diary entry for the day of the Hebrew month corresponding to the
1996 selected date (@code{insert-monthly-hebrew-diary-entry}). This diary
1997 entry matches any date that has the same Hebrew day-within-month as the
2000 Add a diary entry for the day of the Hebrew year corresponding to the
2001 selected date (@code{insert-yearly-hebrew-diary-entry}). This diary
2002 entry matches any date which has the same Hebrew month and day-within-month
2003 as the selected date.
2005 Add a diary entry for the Islamic date corresponding to the selected date
2006 (@code{insert-islamic-diary-entry}).
2008 Add a diary entry for the day of the Islamic month corresponding to the
2009 selected date (@code{insert-monthly-islamic-diary-entry}).
2011 Add a diary entry for the day of the Islamic year corresponding to the
2012 selected date (@code{insert-yearly-islamic-diary-entry}).
2015 @findex insert-hebrew-diary-entry
2016 @findex insert-monthly-hebrew-diary-entry
2017 @findex insert-yearly-hebrew-diary-entry
2018 @findex insert-islamic-diary-entry
2019 @findex insert-monthly-islamic-diary-entry
2020 @findex insert-yearly-islamic-diary-entry
2021 These commands work much like the corresponding commands for ordinary
2022 diary entries: they apply to the date that point is on in the calendar
2023 window, and what they do is insert just the date portion of a diary entry
2024 at the end of your diary file. You must then insert the rest of the
2027 @node Fancy Diary Display
2028 @subsubsection Fancy Diary Display
2029 @vindex diary-display-hook
2030 @findex simple-diary-display
2032 Diary display works by preparing the diary buffer and then running the
2033 hook @code{diary-display-hook}. The default value of this hook
2034 (@code{simple-diary-display}) hides the irrelevant diary entries and
2035 then displays the buffer. However, if you specify the hook as follows,
2037 @cindex diary buffer
2038 @findex fancy-diary-display
2040 (add-hook 'diary-display-hook 'fancy-diary-display)
2044 this enables fancy diary display. It displays diary entries and
2045 holidays by copying them into a special buffer that exists only for the
2046 sake of display. Copying to a separate buffer provides an opportunity
2047 to change the displayed text to make it prettier---for example, to sort
2048 the entries by the dates they apply to.
2050 As with simple diary display, you can print a hard copy of the buffer
2051 with @code{print-diary-entries}. To print a hard copy of a day-by-day
2052 diary for a week by positioning point on Sunday of that week, type
2053 @kbd{7 d} and then do @kbd{M-x print-diary-entries}. As usual, the
2054 inclusion of the holidays slows down the display slightly; you can speed
2055 things up by setting the variable @code{holidays-in-diary-buffer} to
2058 @vindex diary-list-include-blanks
2059 Ordinarily, the fancy diary buffer does not show days for which there are
2060 no diary entries, even if that day is a holiday. If you want such days to be
2061 shown in the fancy diary buffer, set the variable
2062 @code{diary-list-include-blanks} to @code{t}.@refill
2064 @cindex sorting diary entries
2065 If you use the fancy diary display, you can use the normal hook
2066 @code{list-diary-entries-hook} to sort each day's diary entries by their
2067 time of day. Add this line to your init file:
2069 @findex sort-diary-entries
2071 (add-hook 'list-diary-entries-hook 'sort-diary-entries t)
2077 For each day, this sorts diary entries that begin with a recognizable
2078 time of day according to their times. Diary entries without times come
2079 first within each day.
2081 @node Included Diary Files
2082 @subsubsection Included Diary Files
2084 Fancy diary display also has the ability to process included diary
2085 files. This permits a group of people to share a diary file for events
2086 that apply to all of them. Lines in the diary file of this form:
2089 #include "@var{filename}"
2093 includes the diary entries from the file @var{filename} in the fancy
2094 diary buffer. The include mechanism is recursive, so that included files
2095 can include other files, and so on; you must be careful not to have a
2096 cycle of inclusions, of course. Here is how to enable the include
2099 @vindex list-diary-entries-hook
2100 @vindex mark-diary-entries-hook
2101 @findex include-other-diary-files
2102 @findex mark-included-diary-files
2104 (add-hook 'list-diary-entries-hook 'include-other-diary-files)
2105 (add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
2108 The include mechanism works only with the fancy diary display, because
2109 ordinary diary display shows the entries directly from your diary file.
2111 @node Sexp Diary Entries
2112 @subsubsection Sexp Entries and the Fancy Diary Display
2113 @cindex sexp diary entries
2115 Sexp diary entries allow you to do more than just have complicated
2116 conditions under which a diary entry applies. If you use the fancy
2117 diary display, sexp entries can generate the text of the entry depending
2118 on the date itself. For example, an anniversary diary entry can insert
2119 the number of years since the anniversary date into the text of the
2120 diary entry. Thus the @samp{%d} in this dairy entry:
2122 @findex diary-anniversary
2124 %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
2128 gets replaced by the age, so on October 31, 1990 the entry appears in
2129 the fancy diary buffer like this:
2132 Arthur's birthday (42 years old)
2136 If the diary file instead contains this entry:
2139 %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
2143 the entry in the fancy diary buffer for October 31, 1990 appears like this:
2146 Arthur's 42nd birthday
2149 Similarly, cyclic diary entries can interpolate the number of repetitions
2152 @findex diary-cyclic
2154 %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
2161 Renew medication (5th time)
2165 in the fancy diary display on September 8, 1990.
2167 The generality of sexp diary entries lets you specify any diary entry
2168 that you can describe algorithmically. A sexp diary entry contains an
2169 expression that computes whether the entry applies to any given date.
2170 If its value is non-@code{nil}, the entry applies to that date;
2171 otherwise, it does not. The expression can use the variable @code{date}
2172 to find the date being considered; its value is a list (@var{month}
2173 @var{day} @var{year}) that refers to the Gregorian calendar.
2175 Suppose you get paid on the 21st of the month if it is a weekday, and
2176 on the Friday before if the 21st is on a weekend. Here is how to write
2177 a sexp diary entry that matches those dates:
2180 &%%(let ((dayname (calendar-day-of-week date))
2181 (day (car (cdr date))))
2182 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
2183 (and (memq day '(19 20)) (= dayname 5)))
2184 ) Pay check deposited
2188 applies to just those dates. This example illustrates how the sexp can
2189 depend on the variable @code{date}; this variable is a list (@var{month}
2190 @var{day} @var{year}) that gives the Gregorian date for which the diary
2191 entries are being found. If the value of the expression is @code{t},
2192 the entry applies to that date. If the expression evaluates to
2193 @code{nil}, the entry does @emph{not} apply to that date.
2195 The following sexp diary entries take advantage of the ability (in the fancy
2196 diary display) to concoct diary entries whose text varies based on the date:
2198 @findex diary-sunrise-sunset
2199 @findex diary-phases-of-moon
2200 @findex diary-day-of-year
2201 @findex diary-iso-date
2202 @findex diary-julian-date
2203 @findex diary-astro-day-number
2204 @findex diary-hebrew-date
2205 @findex diary-islamic-date
2206 @findex diary-french-date
2207 @findex diary-mayan-date
2209 @item %%(diary-sunrise-sunset)
2210 Make a diary entry for the local times of today's sunrise and sunset.
2211 @item %%(diary-phases-of-moon)
2212 Make a diary entry for the phases (quarters) of the moon.
2213 @item %%(diary-day-of-year)
2214 Make a diary entry with today's day number in the current year and the number
2215 of days remaining in the current year.
2216 @item %%(diary-iso-date)
2217 Make a diary entry with today's equivalent ISO commercial date.
2218 @item %%(diary-julian-date)
2219 Make a diary entry with today's equivalent date on the Julian calendar.
2220 @item %%(diary-astro-day-number)
2221 Make a diary entry with today's equivalent astronomical (Julian) day number.
2222 @item %%(diary-hebrew-date)
2223 Make a diary entry with today's equivalent date on the Hebrew calendar.
2224 @item %%(diary-islamic-date)
2225 Make a diary entry with today's equivalent date on the Islamic calendar.
2226 @item %%(diary-french-date)
2227 Make a diary entry with today's equivalent date on the French Revolutionary
2229 @item %%(diary-mayan-date)
2230 Make a diary entry with today's equivalent date on the Mayan calendar.
2234 Thus including the diary entry
2237 &%%(diary-hebrew-date)
2241 causes every day's diary display to contain the equivalent date on the
2242 Hebrew calendar, if you are using the fancy diary display. (With simple
2243 diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
2244 diary for any date, but does nothing particularly useful.)
2246 These functions can be used to construct sexp diary entries based on
2247 the Hebrew calendar in certain standard ways:
2250 @findex diary-rosh-hodesh
2251 @cindex parasha, weekly
2252 @findex diary-parasha
2253 @cindex candle lighting times
2254 @findex diary-sabbath-candles
2258 @findex diary-yahrzeit
2260 @item %%(diary-rosh-hodesh)
2261 Make a diary entry that tells the occurrence and ritual announcement of each
2263 @item %%(diary-parasha)
2264 Make a Saturday diary entry that tells the weekly synagogue scripture reading.
2265 @item %%(diary-sabbath-candles)
2266 Make a Friday diary entry that tells the @emph{local time} of Sabbath
2268 @item %%(diary-omer)
2269 Make a diary entry that gives the omer count, when appropriate.
2270 @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
2271 Make a diary entry marking the anniversary of a date of death. The date
2272 is the @emph{Gregorian} (civil) date of death. The diary entry appears
2273 on the proper Hebrew calendar anniversary and on the day before. (In
2274 the European style, the order of the parameters is changed to @var{day},
2275 @var{month}, @var{year}.)
2278 @node Appt Customizing
2279 @subsubsection Customizing Appointment Reminders
2281 You can specify exactly how Emacs reminds you of an appointment, and
2282 how far in advance it begins doing so, by setting these variables:
2284 @vindex appt-message-warning-time
2285 @vindex appt-audible
2286 @vindex appt-visible
2287 @vindex appt-display-mode-line
2288 @vindex appt-msg-window
2289 @vindex appt-display-duration
2291 @item appt-message-warning-time
2292 The time in minutes before an appointment that the reminder begins. The
2293 default is 10 minutes.
2295 If this is @code{t} (the default), Emacs rings the terminal bell for
2296 appointment reminders.
2298 If this is @code{t} (the default), Emacs displays the appointment
2299 message in echo area.
2300 @item appt-display-mode-line
2301 If this is @code{t} (the default), Emacs displays the number of minutes
2302 to the appointment on the mode line.
2303 @item appt-msg-window
2304 If this is @code{t} (the default), Emacs displays the appointment
2305 message in another window.
2306 @item appt-display-duration
2307 The number of seconds an appointment message is displayed. The default