2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @node Calendar, Tips, Display, Top
6 @chapter Customizing the Calendar and Diary
8 There are many customizations that you can use to make the calendar and
9 diary suit your personal tastes.
12 * Calendar Customizing:: Defaults you can set.
13 * Holiday Customizing:: Defining your own holidays.
14 * Date Display Format:: Changing the format.
15 * Time Display Format:: Changing the format.
16 * Daylight Savings:: Changing the default.
17 * Diary Customizing:: Defaults you can set.
18 * Hebrew/Islamic Entries:: How to obtain them.
19 * Fancy Diary Display:: Enhancing the diary display, sorting entries.
20 * Included Diary Files:: Sharing a common diary file.
21 * Sexp Diary Entries:: Fancy things you can do.
22 * Appt Customizing:: Customizing appointment reminders.
25 @node Calendar Customizing
26 @section Customizing the Calendar
27 @vindex view-diary-entries-initially
29 If you set the variable @code{view-diary-entries-initially} to
30 @code{t}, calling up the calendar automatically displays the diary
31 entries for the current date as well. The diary dates appear only if
32 the current date is visible. If you add both of the following lines to
33 your @file{.emacs} file:@refill
36 (setq view-diary-entries-initially t)
41 they display both the calendar and diary windows whenever you start Emacs.
43 @vindex view-calendar-holidays-initially
44 Similarly, if you set the variable
45 @code{view-calendar-holidays-initially} to @code{t}, entering the
46 calendar automatically displays a list of holidays for the current three
47 month period. The holiday list appears in a separate window.@refill
49 @vindex mark-diary-entries-in-calendar
50 You can set the variable @code{mark-diary-entries-in-calendar} to @code{t}
51 in order to place a plus sign (@samp{+}) beside any dates with diary entries.
52 Whenever the calendar window is displayed or redisplayed, the diary entries
53 are automatically marked for holidays.
55 @vindex mark-holidays-in-calendar
56 Similarly, setting the variable @code{mark-holidays-in-calendar} to
57 @code{t} places an asterisk (@samp{*}) after all holiday dates visible
58 in the calendar window.
60 @vindex calendar-load-hook
61 There are many customizations that you can make with the hooks
62 provided. For example, the variable @code{calendar-load-hook}, whose
63 default value is @code{nil}, is a normal hook run when the calendar
64 package is first loaded (before actually starting to display the
67 @vindex initial-calendar-window-hook
68 The variable @code{initial-calendar-window-hook}, whose default value
69 is @code{nil}, is a normal hook run the first time the calendar window
70 is displayed. The function is invoked only when you first enter
71 Calendar mode, not when you redisplay an existing Calendar window. But
72 if you leave the calendar with the @kbd{q} command and reenter it, the
73 hook runs again.@refill
75 @vindex today-visible-calendar-hook
76 The variable @code{today-visible-calendar-hook}, whose default value
77 is @code{nil}, is a normal hook run after the calendar buffer has been
78 prepared with the calendar when the current date is visible in the
79 window. One use of this hook is to replace today's date with asterisks;
80 a function @code{calendar-star-date} is included for this purpose. In
81 your @file{.emacs} file, put:@refill
83 @findex calendar-star-date
85 (setq today-visible-calendar-hook 'calendar-star-date)
89 Another standard hook function adds asterisks around the current date.
92 @findex calendar-mark-today
94 (setq today-visible-calendar-hook 'calendar-mark-today)
97 @vindex today-invisible-calendar-hook
99 A corresponding variable, @code{today-invisible-calendar-hook}, whose
100 default value is @code{nil}, is a normal hook run after the calendar
101 buffer text has been prepared, if the current date is @emph{not} visible
102 in the window.@refill
104 @node Holiday Customizing
105 @section Customizing the Holidays
107 @vindex calendar-holidays
108 @vindex christian-holidays
109 @vindex hebrew-holidays
110 @vindex islamic-holidays
111 Emacs knows about holidays defined by entries on one of several lists.
112 You can customize theses lists of holidays to your own needs, adding
113 holidays or deleting lists of holidays. The lists of holidays that
114 Emacs uses are for general holidays (@code{general-holidays}), local
115 holidays (@code{local-holidays}), Christian holidays
116 (@code{christian-holidays}), Hebrew (Jewish) holidays
117 (@code{hebrew-holidays}), Islamic (Moslem) holidays
118 (@code{islamic-holidays}), and other holidays (@code{other-holidays}).
120 @vindex general-holidays
121 The general holidays are, by default, holidays common throughout the
122 United States. To eliminate these holidays, set @code{general-holidays}
125 @vindex local-holidays
126 There are no default local holidays (but sites may supply some). You
127 can set the variable @code{local-holidays} to any list of holidays, as
130 @vindex all-christian-calendar-holidays
131 @vindex all-hebrew-calendar-holidays
132 @vindex all-islamic-calendar-holidays
133 By default, Emacs does not consider all the holidays of these
134 religions, only those commonly found in secular calendars. For a more
135 extensive collection of religious holidays, you can set any (or all) of
136 the variables @code{all-christian-calendar-holidays},
137 @code{all-hebrew-calendar-holidays}, or
138 @code{all-islamic-calendar-holidays} to @code{t}. If you want to
139 eliminate the religious holidays, set any or all of the corresponding
140 variables @code{christian-holidays}, @code{hebrew-holidays}, and
141 @code{islamic-holidays} to @code{nil}.@refill
143 @vindex other-holidays
144 You can set the variable @code{other-holidays} to any list of
145 holidays. This list, normally empty, is intended for your use.
147 @cindex holiday forms
148 Each of the lists (@code{general-holidays}, @code{local-holidays},
149 @code{christian-holidays}, @code{hebrew-holidays},
150 @code{islamic-holidays}, and @code{other-holidays}) is a list of
151 @dfn{holiday forms}, each holiday form describing a holiday (or
152 sometimes a list of holidays). Holiday forms may have the following
156 @item (holiday-fixed @var{month} @var{day} @var{string})
157 A fixed date on the Gregorian calendar. @var{month} and @var{day} are
158 numbers, @var{string} is the name of the holiday.
160 @item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
161 The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
162 (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
163 from the end of the month. @var{string} is the name of the holiday.
165 @item (holiday-hebrew @var{month} @var{day} @var{string})
166 A fixed date on the Hebrew calendar. @var{month} and @var{day} are
167 numbers, @var{string} is the name of the holiday.
169 @item (holiday-islamic @var{month} @var{day} @var{string})
170 A fixed date on the Islamic calendar. @var{month} and @var{day} are
171 numbers, @var{string} is the name of the holiday.
173 @item (holiday-julian @var{month} @var{day} @var{string})
174 A fixed date on the Julian calendar. @var{month} and @var{day} are
175 numbers, @var{string} is the name of the holiday.
177 @item (holiday-sexp @var{sexp} @var{string})
178 @var{sexp} is a Lisp expression that should use the variable @code{year}
179 to compute the date of a holiday, or @code{nil} if the holiday doesn't
180 happen this year. The value represents the date as a list of the form
181 @code{(@var{month} @var{day} @var{year})}. @var{string} is the name of
184 @item (if @var{boolean} @var{holiday-form} &optional @var{holiday-form})
185 A choice between two holidays based on the value of @var{boolean}.
187 @item (@var{function} &optional @var{args})
188 Dates requiring special computation; @var{args}, if any, are passed in
189 a list to the function @code{calendar-holiday-function-@var{function}}.
192 For example, suppose you want to add Bastille Day, celebrated in
193 France on July 14. You can do this by adding the following line
194 to your @file{.emacs} file:
197 (setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
201 The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
202 fourteenth day of the seventh month (July).
204 Many holidays occur on a specific day of the week, at a specific time
205 of month. Here is a holiday form describing Hurricane Supplication Day,
206 celebrated in the Virgin Islands on the fourth Monday in August:
209 (holiday-float 8 1 4 "Hurricane Supplication Day")
213 Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
214 Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
215 the month (1 specifies the first occurrence, 2 the second occurrence,
216 @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
219 You can specify holidays that occur on fixed days of the Hebrew,
220 Islamic, and Julian calendars too. For example,
224 '((holiday-hebrew 10 2 "Last day of Hanukkah")
225 (holiday-islamic 3 12 "Mohammed's Birthday")
226 (holiday-julian 4 2 "Jefferson's Birthday")))
230 adds the last day of Hanukkah (since the Hebrew months are numbered with
231 1 starting from Nisan), the Islamic feast celebrating Mohammed's
232 birthday (since the Islamic months are numbered from 1 starting with
233 Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
236 To include a holiday conditionally, use either the @samp{if} or the
237 @samp{sexp} form. For example, American presidential elections occur on
238 the first Tuesday after the first Monday in November of years divisible
242 (holiday-sexp (if (= 0 (% year 4))
243 (calendar-gregorian-from-absolute
244 (1+ (calendar-dayname-on-or-before
245 1 (+ 6 (calendar-absolute-from-gregorian
246 (list 11 1 year))))))
247 "US Presidential Election"))
254 (if (= 0 (% displayed-year 4))
256 (extract-calendar-day
257 (calendar-gregorian-from-absolute
258 (1+ (calendar-dayname-on-or-before
259 1 (+ 6 (calendar-absolute-from-gregorian
260 (list 11 1 displayed-year)))))))
261 "US Presidential Election"))
264 Some holidays just don't fit into any of these forms because special
265 calculations are involved in their determination. In such cases you
266 must write a Lisp function to do the calculation. To include
267 eclipses of the sun, for example, add @code{(eclipses)} to
268 @code{other-holidays} and write an Emacs Lisp function
269 @code{eclipses} that returns a (possibly
270 empty) list of the relevant Gregorian dates among the
271 range visible in the calendar window, with descriptive strings, like
275 (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
278 @node Date Display Format
279 @section Date Display Format
280 @vindex calendar-date-display-form
282 You can customize the manner of displaying dates in the diary,
283 in mode lines, and in messages by setting
284 @code{calendar-date-display-form}. This variable is a list of
285 expressions that can involve the variables @code{month}, @code{day}, and
286 @code{year}, all numbers in string form, and @code{monthname} and
287 @code{dayname}, both alphabetic strings. In the American style, the
288 default value of this list is as follows:
291 ((if dayname (concat dayname ", ")) monthname " " day ", " year)
295 while in the European style this value is the default:
298 ((if dayname (concat dayname ", ")) day " " monthname " " year)
301 The ISO standard date representation is this:
304 (year "-" month "-" day)
308 This specifies a typical American format:
311 (month "/" day "/" (substring year -2))
314 @node Time Display Format
315 @section Time Display Format
316 @vindex calendar-time-display-form
318 In the calendar, diary, and related buffers, Emacs displays times of
319 day in the conventional American style with the hours from 1 through 12,
320 minutes, and either @samp{am} or @samp{pm}. If you prefer the
321 ``military'' (European) style of writing times---in which the hours go
322 from 00 to 23---you can alter the variable
323 @code{calendar-time-display-form}. This variable is a list of
324 expressions that can involve the variables @code{12-hours},
325 @code{24-hours}, and @code{minutes}, all numbers in string form, and
326 @code{am-pm} and @code{time-zone}, both alphabetic strings. The default
327 definition of @code{calendar-time-display-form} is as follows:
330 (12-hours ":" minutes am-pm
331 (if time-zone " (") time-zone (if time-zone ")"))
334 Setting @code{calendar-time-display-form} to
337 (24-hours ":" minutes
338 (if time-zone " (") time-zone (if time-zone ")"))
342 gives military-style times like @samp{21:07 (UT)} if time zone names are
343 defined, and times like @samp{21:07} if they are not.
345 @node Daylight Savings
346 @section Daylight Savings Time
347 @cindex daylight savings time
349 Emacs understands the difference between standard time and daylight
350 savings time---the times given for sunrise, sunset, solstices,
351 equinoxes, and the phases of the moon take that into account. The rules
352 for daylight savings time vary from place to place and have also varied
353 historically from year to year. To do the job properly, Emacs needs to
354 know which rules to use.
356 Some operating systems keep track of the rules that apply to the place
357 where you are; on these systems, Emacs gets the information it needs
358 from the system automatically. If some or all of this information is
359 missing, Emacs fills in the gaps with the rules currently used in
360 Cambridge, Massachusetts. If the default choice of rules is not
361 appropriate for your location, you can tell Emacs the rules to use by
362 setting certain variables.
364 @vindex calendar-daylight-savings-starts
365 @vindex calendar-daylight-savings-ends
366 These variables are @code{calendar-daylight-savings-starts} together
367 with @code{calendar-daylight-savings-ends}. Their values should be Lisp
368 expressions that refer to the variable @code{year}, and evaluate to the
369 Gregorian date on which daylight savings time starts or (respectively)
370 ends, in the form of a list @code{(@var{month} @var{day} @var{year})}.
371 The values should be @code{nil} if your area does not use daylight
374 Emacs uses these expressions to determine the starting date of
375 daylight savings time for the holiday list and for correcting times of
376 day in the solar and lunar calculations.
378 The values for Cambridge, Massachusetts are as follows:
382 (calendar-nth-named-day 1 0 4 year)
383 (calendar-nth-named-day -1 0 10 year)
388 i.e., the first 0th day (Sunday) of the fourth month (April) in
389 the year specified by @code{year}, and the last Sunday of the tenth month
390 (October) of that year. If daylight savings time were
391 changed to start on October 1, you would set
392 @code{calendar-daylight-savings-starts} to this:
398 For a more complex example, suppose daylight savings time begins on
399 the first of Nisan on the Hebrew calendar. You would set
400 @code{calendar-daylight-savings-starts} as follows:
403 (calendar-gregorian-from-absolute
404 (calendar-absolute-from-hebrew
405 (list 1 1 (+ year 3760))))
409 because Nisan is the first month in the Hebrew calendar and the Hebrew
410 year differs from the Gregorian year by 3760 at Nisan.
412 If there is no daylight savings time at your location, or if you want
413 all times in standard time, set @code{calendar-daylight-savings-starts}
414 and @code{calendar-daylight-savings-ends} to @code{nil}.
416 @vindex calendar-daylight-time-offset
417 This variable specifies the difference between daylight savings time and
418 standard time, measured in minutes. The value for Cambridge is 60.
420 @vindex calendar-daylight-savings-starts-time
421 @vindex calendar-daylight-savings-ends-time
422 These variables specify is the number of minutes after midnight local time
423 when the transition to and from daylight savings time should occur. For
424 Cambridge, both variables' values are 120.
426 @node Diary Customizing
427 @section Customizing the Diary
429 @vindex holidays-in-diary-buffer
430 Ordinarily, the mode line of the diary buffer window indicates any
431 holidays that fall on the date of the diary entries. The process of
432 checking for holidays can take several seconds, so including holiday
433 information delays the display of the diary buffer noticeably. If you'd
434 prefer to have a faster display of the diary buffer but without the
435 holiday information, set the variable @code{holidays-in-diary-buffer} to
438 @vindex number-of-diary-entries
439 The variable @code{number-of-diary-entries} controls the number of
440 days of diary entries to be displayed at one time. It affects the
441 initial display when @code{view-diary-entries-initially} is @code{t}, as
442 well as the command @kbd{M-x diary}. For example, the default value is
443 1, which says to display only the current day's diary entries. If the
444 value is 2, both the current day's and the next day's entries are
445 displayed. The value can also be a vector of seven elements: if the
446 value is @code{[0 2 2 2 2 4 1]} then no diary entries appear on Sunday,
447 the current date's and the next day's diary entries appear Monday
448 through Thursday, Friday through Monday's entries appear on Friday,
449 while on Saturday only that day's entries appear.
451 @vindex print-diary-entries-hook
452 @findex print-diary-entries
453 The variable @code{print-diary-entries-hook} is a normal hook run
454 after preparation of a temporary buffer containing just the diary
455 entries currently visible in the diary buffer. (The other, irrelevant
456 diary entries are really absent from the temporary buffer; in the diary
457 buffer, they are merely hidden.) The default value of this hook does
458 the printing with the command @code{lpr-buffer}. If you want to use a
459 different command to do the printing, just change the value of this
460 hook. Other uses might include, for example, rearranging the lines into
461 order by day and time.
463 @vindex diary-date-forms
464 You can customize the form of dates in your diary file, if neither the
465 standard American nor European styles suits your needs, by setting the
466 variable @code{diary-date-forms}. This variable is a list of forms of
467 dates recognized in the diary file. Each form is a list of regular
468 expressions (@pxref{Regular Expressions}) and the variables
469 @code{month}, @code{day}, @code{year}, @code{monthname}, and
470 @code{dayname}. The variable @code{monthname} matches the name of the
471 month, capitalized or not, or its three-letter abbreviation, followed by
472 a period or not; it matches @samp{*}. Similarly, @code{dayname} matches
473 the name of the day, capitalized or not, or its three-letter
474 abbreviation, followed by a period or not. The variables @code{month},
475 @code{day}, and @code{year} match those numerical values, preceded by
476 arbitrarily many zeros; they also match @samp{*}. The default value of
477 @code{diary-date-forms} in the American style is
480 ((month "/" day "[^/0-9]")
481 (month "/" day "/" year "[^0-9]")
482 (monthname " *" day "[^,0-9]")
483 (monthname " *" day ", *" year "[^0-9]")
488 Emacs matches of the diary entries with the date forms is done with the
489 standard syntax table from Fundamental mode (@pxref{Syntax Tables}), but
490 with the @samp{*} changed so that it is a word constituent.
492 The forms on the list must be @emph{mutually exclusive} and must not
493 match any portion of the diary entry itself, just the date. If, to be
494 mutually exclusive, the pattern must match a portion of the diary entry
495 itself, the first element of the form @emph{must} be @code{backup}.
496 This causes the date recognizer to back up to the beginning of the
497 current word of the diary entry. Even if you use @code{backup}, the
498 form must absolutely not match more than a portion of the first word of
499 the diary entry. The default value of @code{diary-date-forms} in the
500 European style is this list:
503 ((day "/" month "[^/0-9]")
504 (day "/" month "/" year "[^0-9]")
505 (backup day " *" monthname "\\W+\\<[^*0-9]")
506 (day " *" monthname " *" year "[^0-9]")
511 Notice the use of @code{backup} in the middle form because part of the
512 diary entry must be matched to distinguish this form from the following one.
514 @node Hebrew/Islamic Entries
515 @section Hebrew- and Islamic-Date Diary Entries
517 Your diary file can have entries based on Hebrew or Islamic dates, as
518 well as entries based on our usual Gregorian calendar. However, because
519 the processing of such entries is time-consuming and most people don't
520 need them, you must customize the processing of your diary file to
521 specify that you want such entries recognized. If you want Hebrew-date
522 diary entries, for example, you must include these lines in your
525 @vindex nongregorian-diary-listing-hook
526 @vindex nongregorian-diary-marking-hook
527 @findex list-hebrew-diary-entries
528 @findex mark-hebrew-diary-entries
530 (setq nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
531 (setq nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
535 If you want Islamic-date entries, include these lines in your
538 @findex list-islamic-diary-entries
539 @findex mark-islamic-diary-entries
541 (setq nongregorian-diary-listing-hook 'list-islamic-diary-entries)
542 (setq nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
546 If you want both Hebrew- and Islamic-date entries, include these lines:
549 (setq nongregorian-diary-listing-hook
550 '(list-hebrew-diary-entries list-islamic-diary-entries))
551 (setq nongregorian-diary-marking-hook
552 '(mark-hebrew-diary-entries mark-islamic-diary-entries))
555 Hebrew- and Islamic-date diary entries have the same formats as
556 Gregorian-date diary entries, except that the date must be preceded with
557 an @samp{H} for Hebrew dates and an @samp{I} for Islamic dates.
558 Moreover, because the Hebrew and Islamic month names are not uniquely
559 specified by the first three letters, you may not abbreviate them. For
560 example, a diary entry for the Hebrew date Heshvan 25 could look like
563 HHeshvan 25 Happy Hebrew birthday!
567 and would appear in the diary for any date that corresponds to Heshvan 25
568 on the Hebrew calendar. Similarly, an Islamic-date diary entry might be
571 IDhu al-Qada 25 Happy Islamic birthday!
575 and would appear in the diary for any date that corresponds to Dhu al-Qada 25
576 on the Islamic calendar.
578 As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
579 are nonmarking if they are preceded with an ampersand (@samp{&}).
581 There are commands to help you in making Hebrew- and Islamic-date
582 entries to your diary:
586 Add a diary entry for the Hebrew date corresponding to the selected date
587 (@code{insert-hebrew-diary-entry}).
589 Add a diary entry for the day of the Hebrew month corresponding to the
590 selected date (@code{insert-monthly-hebrew-diary-entry}).
592 Add a diary entry for the day of the Hebrew year corresponding to the
593 selected date (@code{insert-yearly-hebrew-diary-entry}).
595 Add a diary entry for the Islamic date corresponding to the selected date
596 (@code{insert-islamic-diary-entry}).
598 Add a diary entry for the day of the Islamic month corresponding to the
599 selected date (@code{insert-monthly-islamic-diary-entry}).
601 Add a diary entry for the day of the Islamic year corresponding to the
602 selected date (@code{insert-yearly-islamic-diary-entry}).
605 @findex insert-hebrew-diary-entry
606 @findex insert-monthly-hebrew-diary-entry
607 @findex insert-yearly-hebrew-diary-entry
608 @findex insert-islamic-diary-entry
609 @findex insert-monthly-islamic-diary-entry
610 @findex insert-yearly-islamic-diary-entry
611 These commands work exactly like the corresponding commands for ordinary
612 diary entries: Move point to a date in the calendar window and the above
613 commands insert the Hebrew or Islamic date (corresponding to the date
614 indicated by point) at the end of your diary file and you can then type the
615 diary entry. If you want the diary entry to be nonmarking, give a numeric
616 argument to the command.
618 @node Fancy Diary Display
619 @section Fancy Diary Display
620 @vindex diary-display-hook
621 @findex simple-diary-display
623 Diary display works by preparing the diary buffer and then running the
624 hook @code{diary-display-hook}. The default value of this hook hides
625 the irrelevant diary entries and then displays the buffer
626 (@code{simple-diary-display}). However, if you specify the hook as
630 @findex fancy-diary-display
632 (add-hook 'diary-display-hook 'fancy-diary-display)
636 then fancy mode displays diary entries and holidays by copying them into
637 a special buffer that exists only for display. Copying provides an
638 opportunity to change the displayed text to make it prettier---for
639 example, to sort the entries by the dates they apply to.
641 As with simple diary display, you can print a hard copy of the buffer
642 with @code{print-diary-entries}. To print a hard copy of a day-by-day
643 diary for a week by positioning point on Sunday of that week, type
644 @kbd{7 d} and then do @kbd{M-x print-diary-entries}. As usual, the
645 inclusion of the holidays slows down the display slightly; you can speed
646 things up by setting the variable @code{holidays-in-diary-buffer} to
649 @vindex diary-list-include-blanks
650 Ordinarily, the fancy diary buffer does not show days for which there are
651 no diary entries, even if that day is a holiday. If you want such days to be
652 shown in the fancy diary buffer, set the variable
653 @code{diary-list-include-blanks} to @code{t}.@refill
655 @cindex sorting diary entries
656 If you use the fancy diary display, you can use the normal hook
657 @code{list-diary-entries-hook} to sort each day's diary entries by their
658 time of day. Add this line to your @file{.emacs} file:
660 @findex sort-diary-entries
662 (add-hook 'list-diary-entries-hook 'sort-diary-entries)
666 For each day, this sorts diary entries that begin with a recognizable
667 time of day according to their times. Diary entries without times come
668 first within each day.
670 @node Included Diary Files
671 @section Included Diary Files
673 If you use the fancy diary display, you can have diary entries from other
674 files included with your own by an ``include'' mechanism. This facility makes
675 possible the sharing of common diary files among groups of users. Lines in
676 the diary file of this form:
679 #include "@var{filename}"
683 includes the diary entries from the file @var{filename} in the fancy
684 diary buffer (because the ordinary diary buffer is just the buffer
685 associated with your diary file, you cannot use the include mechanism
686 unless you use the fancy diary buffer). The include mechanism is
687 recursive, by the way, so that included files can include other files,
688 and so on; you must be careful not to have a cycle of inclusions, of
689 course. To enable the include facility, add lines as follows to your
692 @vindex list-diary-entries-hook
693 @vindex mark-diary-entries-hook
694 @findex include-other-diary-files
695 @findex mark-included-diary-files
697 (add-hook 'list-diary-entries-hook 'include-other-diary-files)
698 (add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
701 @node Sexp Diary Entries
702 @section Sexp Entries and the Fancy Diary Display
703 @cindex sexp diary entries
705 Sexp diary entries allow you to do more than just have complicated
706 conditions under which a diary entry applies. If you use the fancy
707 diary display, sexp entries can generate the text of the entry depending
708 on the date itself. For example, an anniversary diary entry can insert
709 the number of years since the anniversary date into the text of the
710 diary entry. Thus the @samp{%d} in this dairy entry:
712 @findex diary-anniversary
714 %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
718 gets replaced by the age, so on October 31, 1990 the entry appears in
719 the fancy diary buffer like this:
722 Arthur's birthday (42 years old)
726 If the diary file instead contains this entry:
729 %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
733 the entry in the fancy diary buffer for October 31, 1990 appears like this:
736 Arthur's 42nd birthday
739 Similarly, cyclic diary entries can interpolate the number of repetitions
744 %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
751 Renew medication (5th time)
755 in the fancy diary display on September 8, 1990.
757 The generality of sexp diary entries lets you specify any diary entry
758 that you can describe algorithmically. Suppose you get paid on the 21st
759 of the month if it is a weekday, and to the Friday before if the 21st is
760 on a weekend. The diary entry
763 &%%(let ((dayname (calendar-day-of-week date))
764 (day (car (cdr date))))
765 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
766 (and (memq day '(19 20)) (= dayname 5)))
767 ) Pay check deposited
771 applies to just those dates. This example illustrates how the sexp can
772 depend on the variable @code{date}; this variable is a list (@var{month}
773 @var{day} @var{year}) that gives the Gregorian date for which the diary
774 entries are being found. If the value of the expression is @code{t},
775 the entry applies to that date. If the expression evaluates to
776 @code{nil}, the entry does @emph{not} apply to that date.
778 The following sexp diary entries take advantage of the ability (in the fancy
779 diary display) to concoct diary entries based on the date:
781 @findex diary-sunrise-sunset
782 @findex diary-phases-of-moon
783 @findex diary-day-of-year
784 @findex diary-iso-date
785 @findex diary-julian-date
786 @findex diary-astro-day-number
787 @findex diary-hebrew-date
788 @findex diary-islamic-date
789 @findex diary-french-date
790 @findex diary-mayan-date
792 @item %%(diary-sunrise-sunset)
793 Make a diary entry for the local times of today's sunrise and sunset.
794 @item %%(diary-phases-of-moon)
795 Make a diary entry for the phases (quarters) of the moon.
796 @item %%(diary-day-of-year)
797 Make a diary entry with today's day number in the current year and the number
798 of days remaining in the current year.
799 @item %%(diary-iso-date)
800 Make a diary entry with today's equivalent ISO commercial date.
801 @item %%(diary-julian-date)
802 Make a diary entry with today's equivalent date on the Julian calendar.
803 @item %%(diary-astro-day-number)
804 Make a diary entry with today's equivalent astronomical (Julian) day number.
805 @item %%(diary-hebrew-date)
806 Make a diary entry with today's equivalent date on the Hebrew calendar.
807 @item %%(diary-islamic-date)
808 Make a diary entry with today's equivalent date on the Islamic calendar.
809 @item %%(diary-french-date)
810 Make a diary entry with today's equivalent date on the French Revolutionary
812 @item %%(diary-mayan-date)
813 Make a diary entry with today's equivalent date on the Mayan calendar.
817 Thus including the diary entry
820 &%%(diary-hebrew-date)
824 causes every day's diary display to contain the equivalent date on the
825 Hebrew calendar, if you are using the fancy diary display. (With simple
826 diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
827 diary for any date, but does nothing particularly useful.)
829 There are a number of other available sexp diary entries that are important
830 to those who follow the Hebrew calendar:
833 @findex diary-rosh-hodesh
834 @cindex parasha, weekly
835 @findex diary-parasha
836 @cindex candle lighting times
837 @findex diary-sabbath-candles
841 @findex diary-yahrzeit
843 @item %%(diary-rosh-hodesh)
844 Make a diary entry that tells the occurrence and ritual announcement of each
846 @item %%(diary-parasha)
847 Make a Saturday diary entry that tells the weekly synagogue scripture reading.
848 @item %%(diary-sabbath-candles)
849 Make a Friday diary entry that tells the @emph{local time} of Sabbath
852 Make a diary entry that gives the omer count, when appropriate.
853 @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
854 Make a diary entry marking the anniversary of a date of death. The date
855 is the @emph{Gregorian} (civil) date of death. The diary entry appears
856 on the proper Hebrew calendar anniversary and on the day before. (In
857 the European style, the order of the parameters is changed to @var{day},
858 @var{month}, @var{year}.)
861 @node Appt Customizing
862 @section Customizing Appointment Reminders
864 You can specify exactly how Emacs reminds you of an appointment and
865 how far in advance it begins doing so. Here are the variables that you
868 @vindex appt-message-warning-time
871 @vindex appt-display-mode-line
872 @vindex appt-msg-window
873 @vindex appt-display-duration
875 @item appt-message-warning-time
876 The time in minutes before an appointment that the reminder begins. The
877 default is 10 minutes.
879 If this is @code{t} (the default), Emacs rings the terminal bell for
880 appointment reminders.
882 If this is @code{t} (the default), Emacs displays the appointment
883 message in echo area.
884 @item appt-display-mode-line
885 If this is @code{t} (the default), Emacs displays the number of minutes
886 to the appointment on the mode line.
887 @item appt-msg-window
888 If this is @code{t} (the default), Emacs displays the appointment
889 message in another window.
890 @item appt-display-duration
891 The number of seconds an appointment message is displayed. The default