1 @c This is part of the Emacs manual.
2 @c Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
3 @c See file emacs.texi for copying conditions.
5 @c This file is included either in emacs-xtra.texi (when producing the
6 @c printed version) or in the main Emacs manual (for the on-line version).
8 @c Moved here from the Emacs Lisp Reference Manual, 2005-03-26.
9 @node Advanced Calendar/Diary Usage
10 @section Customizing the Calendar and Diary
12 There are many customizations that you can use to make the calendar and
13 diary suit your personal tastes.
16 * Calendar Customizing:: Defaults you can set.
17 * Holiday Customizing:: Defining your own holidays.
18 * Date Display Format:: Changing the format.
19 * Time Display Format:: Changing the format.
20 * Diary Customizing:: Defaults you can set.
21 * Hebrew/Islamic Entries:: How to obtain them.
22 * Fancy Diary Display:: Enhancing the diary display, sorting entries,
23 using included diary files.
24 * Sexp Diary Entries:: Fancy things you can do.
27 @node Calendar Customizing
28 @subsection Customizing the Calendar
29 @vindex calendar-holiday-marker
30 @vindex diary-entry-marker
31 The variable @code{calendar-holiday-marker} specifies how to mark a
32 date as being a holiday. Its value may be a single-character string
33 to insert next to the date, or a face name to use for displaying the
34 date. Likewise, the variable @code{diary-entry-marker} specifies how
35 to mark a date that has diary entries. The calendar creates faces
36 named @code{holiday-face} and @code{diary-face} for these purposes;
37 those symbols are the default values of these variables.
39 @vindex calendar-load-hook
40 The variable @code{calendar-load-hook} is a normal hook run when the
41 calendar package is first loaded (before actually starting to display
44 @vindex initial-calendar-window-hook
45 Starting the calendar runs the normal hook
46 @code{initial-calendar-window-hook}. Recomputation of the calendar
47 display does not run this hook. But if you leave the calendar with the
48 @kbd{q} command and reenter it, the hook runs again.@refill
50 @vindex today-visible-calendar-hook
51 The variable @code{today-visible-calendar-hook} is a normal hook run
52 after the calendar buffer has been prepared with the calendar when the
53 current date is visible in the window. One use of this hook is to
54 replace today's date with asterisks; to do that, use the hook function
55 @code{calendar-star-date}.
57 @findex calendar-star-date
59 (add-hook 'today-visible-calendar-hook 'calendar-star-date)
63 Another standard hook function marks the current date, either by
64 changing its face or by adding an asterisk. Here's how to use it:
66 @findex calendar-mark-today
68 (add-hook 'today-visible-calendar-hook 'calendar-mark-today)
72 @vindex calendar-today-marker
73 The variable @code{calendar-today-marker} specifies how to mark
74 today's date. Its value should be a single-character string to insert
75 next to the date or a face name to use for displaying the date. A
76 face named @code{calendar-today-face} is provided for this purpose;
77 that symbol is the default for this variable.
79 @vindex today-invisible-calendar-hook
81 A similar normal hook, @code{today-invisible-calendar-hook} is run if
82 the current date is @emph{not} visible in the window.
84 @vindex calendar-move-hook
85 Each of the calendar cursor motion commands runs the hook
86 @code{calendar-move-hook} after it moves the cursor.
88 @node Holiday Customizing
89 @subsection Customizing the Holidays
91 @vindex calendar-holidays
92 @vindex christian-holidays
93 @vindex hebrew-holidays
94 @vindex islamic-holidays
95 Emacs knows about holidays defined by entries on one of several lists.
96 You can customize these lists of holidays to your own needs, adding or
97 deleting holidays. The lists of holidays that Emacs uses are for
98 general holidays (@code{general-holidays}), local holidays
99 (@code{local-holidays}), Christian holidays (@code{christian-holidays}),
100 Hebrew (Jewish) holidays (@code{hebrew-holidays}), Islamic (Muslim)
101 holidays (@code{islamic-holidays}), and other holidays
102 (@code{other-holidays}).
104 @vindex general-holidays
105 The general holidays are, by default, holidays common throughout the
106 United States. To eliminate these holidays, set @code{general-holidays}
109 @vindex local-holidays
110 There are no default local holidays (but sites may supply some). You
111 can set the variable @code{local-holidays} to any list of holidays, as
114 @vindex all-christian-calendar-holidays
115 @vindex all-hebrew-calendar-holidays
116 @vindex all-islamic-calendar-holidays
117 By default, Emacs does not include all the holidays of the religions
118 that it knows, only those commonly found in secular calendars. For a
119 more extensive collection of religious holidays, you can set any (or
120 all) of the variables @code{all-christian-calendar-holidays},
121 @code{all-hebrew-calendar-holidays}, or
122 @code{all-islamic-calendar-holidays} to @code{t}. If you want to
123 eliminate the religious holidays, set any or all of the corresponding
124 variables @code{christian-holidays}, @code{hebrew-holidays}, and
125 @code{islamic-holidays} to @code{nil}.@refill
127 @vindex other-holidays
128 You can set the variable @code{other-holidays} to any list of
129 holidays. This list, normally empty, is intended for individual use.
131 @cindex holiday forms
132 Each of the lists (@code{general-holidays}, @code{local-holidays},
133 @code{christian-holidays}, @code{hebrew-holidays},
134 @code{islamic-holidays}, and @code{other-holidays}) is a list of
135 @dfn{holiday forms}, each holiday form describing a holiday (or
136 sometimes a list of holidays).
138 Here is a table of the possible kinds of holiday form. Day numbers
139 and month numbers count starting from 1, but ``dayname'' numbers
140 count Sunday as 0. The element @var{string} is always the
141 name of the holiday, as a string.
144 @item (holiday-fixed @var{month} @var{day} @var{string})
145 A fixed date on the Gregorian calendar.
147 @item (holiday-float @var{month} @var{dayname} @var{k} @var{string})
148 The @var{k}th @var{dayname} in @var{month} on the Gregorian calendar
149 (@var{dayname}=0 for Sunday, and so on); negative @var{k} means count back
150 from the end of the month.
152 @item (holiday-hebrew @var{month} @var{day} @var{string})
153 A fixed date on the Hebrew calendar.
155 @item (holiday-islamic @var{month} @var{day} @var{string})
156 A fixed date on the Islamic calendar.
158 @item (holiday-julian @var{month} @var{day} @var{string})
159 A fixed date on the Julian calendar.
161 @item (holiday-sexp @var{sexp} @var{string})
162 A date calculated by the Lisp expression @var{sexp}. The expression
163 should use the variable @code{year} to compute and return the date of a
164 holiday, or @code{nil} if the holiday doesn't happen this year. The
165 value of @var{sexp} must represent the date as a list of the form
166 @code{(@var{month} @var{day} @var{year})}.
168 @item (if @var{condition} @var{holiday-form})
169 A holiday that happens only if @var{condition} is true.
171 @item (@var{function} @r{[}@var{args}@r{]})
172 A list of dates calculated by the function @var{function}, called with
173 arguments @var{args}.
176 For example, suppose you want to add Bastille Day, celebrated in
177 France on July 14. You can do this as follows:
180 (setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
184 The holiday form @code{(holiday-fixed 7 14 "Bastille Day")} specifies the
185 fourteenth day of the seventh month (July).
187 Many holidays occur on a specific day of the week, at a specific time
188 of month. Here is a holiday form describing Hurricane Supplication Day,
189 celebrated in the Virgin Islands on the fourth Monday in August:
192 (holiday-float 8 1 4 "Hurricane Supplication Day")
196 Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
197 Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
198 the month (1 specifies the first occurrence, 2 the second occurrence,
199 @minus{}1 the last occurrence, @minus{}2 the second-to-last occurrence, and
202 You can specify holidays that occur on fixed days of the Hebrew,
203 Islamic, and Julian calendars too. For example,
207 '((holiday-hebrew 10 2 "Last day of Hanukkah")
208 (holiday-islamic 3 12 "Mohammed's Birthday")
209 (holiday-julian 4 2 "Jefferson's Birthday")))
213 adds the last day of Hanukkah (since the Hebrew months are numbered with
214 1 starting from Nisan), the Islamic feast celebrating Mohammed's
215 birthday (since the Islamic months are numbered from 1 starting with
216 Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
219 To include a holiday conditionally, use either Emacs Lisp's @code{if} or the
220 @code{holiday-sexp} form. For example, American presidential elections
221 occur on the first Tuesday after the first Monday in November of years
225 (holiday-sexp '(if (= 0 (% year 4))
226 (calendar-gregorian-from-absolute
227 (1+ (calendar-dayname-on-or-before
228 1 (+ 6 (calendar-absolute-from-gregorian
229 (list 11 1 year)))))))
230 "US Presidential Election")
237 (if (= 0 (% displayed-year 4))
239 (extract-calendar-day
240 (calendar-gregorian-from-absolute
241 (1+ (calendar-dayname-on-or-before
242 1 (+ 6 (calendar-absolute-from-gregorian
243 (list 11 1 displayed-year)))))))
244 "US Presidential Election"))
247 Some holidays just don't fit into any of these forms because special
248 calculations are involved in their determination. In such cases you
249 must write a Lisp function to do the calculation. To include eclipses,
250 for example, add @code{(eclipses)} to @code{other-holidays}
251 and write an Emacs Lisp function @code{eclipses} that returns a
252 (possibly empty) list of the relevant Gregorian dates among the range
253 visible in the calendar window, with descriptive strings, like this:
256 (((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
259 @node Date Display Format
260 @subsection Date Display Format
261 @vindex calendar-date-display-form
263 You can customize the manner of displaying dates in the diary, in mode
264 lines, and in messages by setting @code{calendar-date-display-form}.
265 This variable holds a list of expressions that can involve the variables
266 @code{month}, @code{day}, and @code{year}, which are all numbers in
267 string form, and @code{monthname} and @code{dayname}, which are both
268 alphabetic strings. In the American style, the default value of this
272 ((if dayname (concat dayname ", ")) monthname " " day ", " year)
276 while in the European style this value is the default:
279 ((if dayname (concat dayname ", ")) day " " monthname " " year)
283 The ISO standard date representation is this:
286 (year "-" month "-" day)
290 This specifies a typical American format:
293 (month "/" day "/" (substring year -2))
296 @node Time Display Format
297 @subsection Time Display Format
298 @vindex calendar-time-display-form
300 The calendar and diary by default display times of day in the
301 conventional American style with the hours from 1 through 12, minutes,
302 and either @samp{am} or @samp{pm}. If you prefer the European style,
303 also known in the US as military, in which the hours go from 00 to 23,
304 you can alter the variable @code{calendar-time-display-form}. This
305 variable is a list of expressions that can involve the variables
306 @code{12-hours}, @code{24-hours}, and @code{minutes}, which are all
307 numbers in string form, and @code{am-pm} and @code{time-zone}, which are
308 both alphabetic strings. The default value of
309 @code{calendar-time-display-form} is as follows:
312 (12-hours ":" minutes am-pm
313 (if time-zone " (") time-zone (if time-zone ")"))
317 Here is a value that provides European style times:
320 (24-hours ":" minutes
321 (if time-zone " (") time-zone (if time-zone ")"))
324 @node Diary Customizing
325 @subsection Customizing the Diary
327 @vindex holidays-in-diary-buffer
328 Ordinarily, the mode line of the diary buffer window indicates any
329 holidays that fall on the date of the diary entries. The process of
330 checking for holidays can take several seconds, so including holiday
331 information delays the display of the diary buffer noticeably. If you'd
332 prefer to have a faster display of the diary buffer but without the
333 holiday information, set the variable @code{holidays-in-diary-buffer} to
336 @vindex number-of-diary-entries
337 The variable @code{number-of-diary-entries} controls the number of
338 days of diary entries to be displayed at one time. It affects the
339 initial display when @code{view-diary-entries-initially} is @code{t}, as
340 well as the command @kbd{M-x diary}. For example, the default value is
341 1, which says to display only the current day's diary entries. If the
342 value is 2, both the current day's and the next day's entries are
343 displayed. The value can also be a vector of seven elements: for
344 example, if the value is @code{[0 2 2 2 2 4 1]} then no diary entries
345 appear on Sunday, the current date's and the next day's diary entries
346 appear Monday through Thursday, Friday through Monday's entries appear
347 on Friday, while on Saturday only that day's entries appear.
349 @vindex print-diary-entries-hook
350 @findex print-diary-entries
351 The variable @code{print-diary-entries-hook} is a normal hook run
352 after preparation of a temporary buffer containing just the diary
353 entries currently visible in the diary buffer. (The other, irrelevant
354 diary entries are really absent from the temporary buffer; in the diary
355 buffer, they are merely hidden.) The default value of this hook does
356 the printing with the command @code{lpr-buffer}. If you want to use a
357 different command to do the printing, just change the value of this
358 hook. Other uses might include, for example, rearranging the lines into
359 order by day and time.
361 @vindex diary-date-forms
362 You can customize the form of dates in your diary file, if neither the
363 standard American nor European styles suits your needs, by setting the
364 variable @code{diary-date-forms}. This variable is a list of patterns
365 for recognizing a date. Each date pattern is a list whose elements may
366 be regular expressions (@pxref{Regular Expressions,,, elisp, the Emacs
367 Lisp Reference Manual}) or the symbols @code{month}, @code{day},
368 @code{year}, @code{monthname}, and @code{dayname}. All these elements
369 serve as patterns that match certain kinds of text in the diary file.
370 In order for the date pattern, as a whole, to match, all of its elements
371 must match consecutively.
373 A regular expression in a date pattern matches in its usual fashion,
374 using the standard syntax table altered so that @samp{*} is a word
377 The symbols @code{month}, @code{day}, @code{year}, @code{monthname},
378 and @code{dayname} match the month number, day number, year number,
379 month name, and day name of the date being considered. The symbols that
380 match numbers allow leading zeros; those that match names allow
381 three-letter abbreviations and capitalization. All the symbols can
382 match @samp{*}; since @samp{*} in a diary entry means ``any day'', ``any
383 month'', and so on, it should match regardless of the date being
386 The default value of @code{diary-date-forms} in the American style is
390 ((month "/" day "[^/0-9]")
391 (month "/" day "/" year "[^0-9]")
392 (monthname " *" day "[^,0-9]")
393 (monthname " *" day ", *" year "[^0-9]")
397 The date patterns in the list must be @emph{mutually exclusive} and
398 must not match any portion of the diary entry itself, just the date and
399 one character of whitespace. If, to be mutually exclusive, the pattern
400 must match a portion of the diary entry text---beyond the whitespace
401 that ends the date---then the first element of the date pattern
402 @emph{must} be @code{backup}. This causes the date recognizer to back
403 up to the beginning of the current word of the diary entry, after
404 finishing the match. Even if you use @code{backup}, the date pattern
405 must absolutely not match more than a portion of the first word of the
406 diary entry. The default value of @code{diary-date-forms} in the
407 European style is this list:
410 ((day "/" month "[^/0-9]")
411 (day "/" month "/" year "[^0-9]")
412 (backup day " *" monthname "\\W+\\<[^*0-9]")
413 (day " *" monthname " *" year "[^0-9]")
418 Notice the use of @code{backup} in the third pattern, because it needs
419 to match part of a word beyond the date itself to distinguish it from
422 @node Hebrew/Islamic Entries
423 @subsection Hebrew- and Islamic-Date Diary Entries
425 Your diary file can have entries based on Hebrew or Islamic dates, as
426 well as entries based on the world-standard Gregorian calendar.
427 However, because recognition of such entries is time-consuming and most
428 people don't use them, you must explicitly enable their use. If you
429 want the diary to recognize Hebrew-date diary entries, for example,
432 @vindex nongregorian-diary-listing-hook
433 @vindex nongregorian-diary-marking-hook
434 @findex list-hebrew-diary-entries
435 @findex mark-hebrew-diary-entries
437 (add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
438 (add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
442 If you want Islamic-date entries, do this:
444 @findex list-islamic-diary-entries
445 @findex mark-islamic-diary-entries
447 (add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
448 (add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
451 Hebrew- and Islamic-date diary entries have the same formats as
452 Gregorian-date diary entries, except that @samp{H} precedes a Hebrew
453 date and @samp{I} precedes an Islamic date. Moreover, because the
454 Hebrew and Islamic month names are not uniquely specified by the first
455 three letters, you may not abbreviate them. For example, a diary entry
456 for the Hebrew date Heshvan 25 could look like this:
459 HHeshvan 25 Happy Hebrew birthday!
463 and would appear in the diary for any date that corresponds to Heshvan 25
464 on the Hebrew calendar. And here is an Islamic-date diary entry that matches
468 IDhu al-Qada 25 Happy Islamic birthday!
471 As with Gregorian-date diary entries, Hebrew- and Islamic-date entries
472 are nonmarking if they are preceded with an ampersand (@samp{&}).
474 Here is a table of commands used in the calendar to create diary entries
475 that match the selected date and other dates that are similar in the Hebrew
480 Add a diary entry for the Hebrew date corresponding to the selected date
481 (@code{insert-hebrew-diary-entry}).
483 Add a diary entry for the day of the Hebrew month corresponding to the
484 selected date (@code{insert-monthly-hebrew-diary-entry}). This diary
485 entry matches any date that has the same Hebrew day-within-month as the
488 Add a diary entry for the day of the Hebrew year corresponding to the
489 selected date (@code{insert-yearly-hebrew-diary-entry}). This diary
490 entry matches any date which has the same Hebrew month and day-within-month
491 as the selected date.
493 Add a diary entry for the Islamic date corresponding to the selected date
494 (@code{insert-islamic-diary-entry}).
496 Add a diary entry for the day of the Islamic month corresponding to the
497 selected date (@code{insert-monthly-islamic-diary-entry}).
499 Add a diary entry for the day of the Islamic year corresponding to the
500 selected date (@code{insert-yearly-islamic-diary-entry}).
503 @findex insert-hebrew-diary-entry
504 @findex insert-monthly-hebrew-diary-entry
505 @findex insert-yearly-hebrew-diary-entry
506 @findex insert-islamic-diary-entry
507 @findex insert-monthly-islamic-diary-entry
508 @findex insert-yearly-islamic-diary-entry
509 These commands work much like the corresponding commands for ordinary
510 diary entries: they apply to the date that point is on in the calendar
511 window, and what they do is insert just the date portion of a diary entry
512 at the end of your diary file. You must then insert the rest of the
515 @node Fancy Diary Display
516 @subsection Fancy Diary Display
517 @vindex diary-display-hook
518 @findex simple-diary-display
520 Diary display works by preparing the diary buffer and then running the
521 hook @code{diary-display-hook}. The default value of this hook
522 (@code{simple-diary-display}) hides the irrelevant diary entries and
523 then displays the buffer. However, if you specify the hook as follows,
526 @findex fancy-diary-display
528 (add-hook 'diary-display-hook 'fancy-diary-display)
532 this enables fancy diary display. It displays diary entries and
533 holidays by copying them into a special buffer that exists only for the
534 sake of display. Copying to a separate buffer provides an opportunity
535 to change the displayed text to make it prettier---for example, to sort
536 the entries by the dates they apply to.
538 As with simple diary display, you can print a hard copy of the buffer
539 with @code{print-diary-entries}. To print a hard copy of a day-by-day
540 diary for a week, position point on Sunday of that week, type
541 @kbd{7 d}, and then do @kbd{M-x print-diary-entries}. As usual, the
542 inclusion of the holidays slows down the display slightly; you can speed
543 things up by setting the variable @code{holidays-in-diary-buffer} to
546 @vindex diary-list-include-blanks
547 Ordinarily, the fancy diary buffer does not show days for which there are
548 no diary entries, even if that day is a holiday. If you want such days to be
549 shown in the fancy diary buffer, set the variable
550 @code{diary-list-include-blanks} to @code{t}.@refill
552 @cindex sorting diary entries
553 If you use the fancy diary display, you can use the normal hook
554 @code{list-diary-entries-hook} to sort each day's diary entries by their
555 time of day. Here's how:
557 @findex sort-diary-entries
559 (add-hook 'list-diary-entries-hook 'sort-diary-entries t)
563 For each day, this sorts diary entries that begin with a recognizable
564 time of day according to their times. Diary entries without times come
565 first within each day.
567 Fancy diary display also has the ability to process included diary
568 files. This permits a group of people to share a diary file for events
569 that apply to all of them. Lines in the diary file of this form:
572 #include "@var{filename}"
576 includes the diary entries from the file @var{filename} in the fancy
577 diary buffer. The include mechanism is recursive, so that included files
578 can include other files, and so on; you must be careful not to have a
579 cycle of inclusions, of course. Here is how to enable the include
582 @vindex list-diary-entries-hook
583 @vindex mark-diary-entries-hook
584 @findex include-other-diary-files
585 @findex mark-included-diary-files
587 (add-hook 'list-diary-entries-hook 'include-other-diary-files)
588 (add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
591 The include mechanism works only with the fancy diary display, because
592 ordinary diary display shows the entries directly from your diary file.
594 @node Sexp Diary Entries
595 @subsection Sexp Entries and the Fancy Diary Display
596 @cindex sexp diary entries
598 Sexp diary entries allow you to do more than just have complicated
599 conditions under which a diary entry applies. If you use the fancy
600 diary display, sexp entries can generate the text of the entry depending
601 on the date itself. For example, an anniversary diary entry can insert
602 the number of years since the anniversary date into the text of the
603 diary entry. Thus the @samp{%d} in this dairy entry:
605 @findex diary-anniversary
607 %%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
611 gets replaced by the age, so on October 31, 1990 the entry appears in
612 the fancy diary buffer like this:
615 Arthur's birthday (42 years old)
619 If the diary file instead contains this entry:
622 %%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
626 the entry in the fancy diary buffer for October 31, 1990 appears like this:
629 Arthur's 42nd birthday
632 Similarly, cyclic diary entries can interpolate the number of repetitions
637 %%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
644 Renew medication (5th time)
648 in the fancy diary display on September 8, 1990.
650 There is an early reminder diary sexp that includes its entry in the
651 diary not only on the date of occurrence, but also on earlier dates.
652 For example, if you want a reminder a week before your anniversary, you
657 %%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
661 and the fancy diary will show
666 both on December 15 and on December 22.
669 The function @code{diary-date} applies to dates described by a month,
670 day, year combination, each of which can be an integer, a list of
671 integers, or @code{t}. The value @code{t} means all values. For
675 %%(diary-date '(10 11 12) 22 t) Rake leaves
679 causes the fancy diary to show
686 on October 22, November 22, and December 22 of every year.
689 The function @code{diary-float} allows you to describe diary entries
690 that apply to dates like the third Friday of November, or the last
691 Tuesday in April. The parameters are the @var{month}, @var{dayname},
692 and an index @var{n}. The entry appears on the @var{n}th @var{dayname}
693 of @var{month}, where @var{dayname}=0 means Sunday, 1 means Monday, and
694 so on. If @var{n} is negative it counts backward from the end of
695 @var{month}. The value of @var{month} can be a list of months, a single
696 month, or @code{t} to specify all months. You can also use an optional
697 parameter @var{day} to specify the @var{n}th @var{dayname} of
698 @var{month} on or after/before @var{day}; the value of @var{day} defaults
699 to 1 if @var{n} is positive and to the last day of @var{month} if
700 @var{n} is negative. For example,
703 %%(diary-float t 1 -1) Pay rent
707 causes the fancy diary to show
714 on the last Monday of every month.
716 The generality of sexp diary entries lets you specify any diary
717 entry that you can describe algorithmically. A sexp diary entry
718 contains an expression that computes whether the entry applies to any
719 given date. If its value is non-@code{nil}, the entry applies to that
720 date; otherwise, it does not. The expression can use the variable
721 @code{date} to find the date being considered; its value is a list
722 (@var{month} @var{day} @var{year}) that refers to the Gregorian
725 The sexp diary entry applies to a date when the expression's value
726 is non-@code{nil}, but some values have more specific meanings. If
727 the value is a string, that string is a description of the event which
728 occurs on that date. The value can also have the form
729 @code{(@var{mark} . @var{string})}; then @var{mark} specifies how to
730 mark the date in the calendar, and @var{string} is the description of
731 the event. If @var{mark} is a single-character string, that character
732 appears next to the date in the calendar. If @var{mark} is a face
733 name, the date is displayed in that face. If @var{mark} is
734 @code{nil}, that specifies no particular highlighting for the date.
736 Suppose you get paid on the 21st of the month if it is a weekday, and
737 on the Friday before if the 21st is on a weekend. Here is how to write
738 a sexp diary entry that matches those dates:
741 &%%(let ((dayname (calendar-day-of-week date))
742 (day (car (cdr date))))
743 (or (and (= day 21) (memq dayname '(1 2 3 4 5)))
744 (and (memq day '(19 20)) (= dayname 5)))
745 ) Pay check deposited
748 The following sexp diary entries take advantage of the ability (in the fancy
749 diary display) to concoct diary entries whose text varies based on the date:
751 @findex diary-sunrise-sunset
752 @findex diary-phases-of-moon
753 @findex diary-day-of-year
754 @findex diary-iso-date
755 @findex diary-julian-date
756 @findex diary-astro-day-number
757 @findex diary-hebrew-date
758 @findex diary-islamic-date
759 @findex diary-french-date
760 @findex diary-mayan-date
762 @item %%(diary-sunrise-sunset)
763 Make a diary entry for the local times of today's sunrise and sunset.
764 @item %%(diary-phases-of-moon)
765 Make a diary entry for the phases (quarters) of the moon.
766 @item %%(diary-day-of-year)
767 Make a diary entry with today's day number in the current year and the number
768 of days remaining in the current year.
769 @item %%(diary-iso-date)
770 Make a diary entry with today's equivalent ISO commercial date.
771 @item %%(diary-julian-date)
772 Make a diary entry with today's equivalent date on the Julian calendar.
773 @item %%(diary-astro-day-number)
774 Make a diary entry with today's equivalent astronomical (Julian) day number.
775 @item %%(diary-hebrew-date)
776 Make a diary entry with today's equivalent date on the Hebrew calendar.
777 @item %%(diary-islamic-date)
778 Make a diary entry with today's equivalent date on the Islamic calendar.
779 @item %%(diary-french-date)
780 Make a diary entry with today's equivalent date on the French Revolutionary
782 @item %%(diary-mayan-date)
783 Make a diary entry with today's equivalent date on the Mayan calendar.
787 Thus including the diary entry
790 &%%(diary-hebrew-date)
794 causes every day's diary display to contain the equivalent date on the
795 Hebrew calendar, if you are using the fancy diary display. (With simple
796 diary display, the line @samp{&%%(diary-hebrew-date)} appears in the
797 diary for any date, but does nothing particularly useful.)
799 These functions can be used to construct sexp diary entries based on
800 the Hebrew calendar in certain standard ways:
803 @findex diary-rosh-hodesh
804 @cindex parasha, weekly
805 @findex diary-parasha
806 @cindex candle lighting times
807 @findex diary-sabbath-candles
811 @findex diary-yahrzeit
813 @item %%(diary-rosh-hodesh)
814 Make a diary entry that tells the occurrence and ritual announcement of each
816 @item %%(diary-parasha)
817 Make a Saturday diary entry that tells the weekly synagogue scripture reading.
818 @item %%(diary-sabbath-candles)
819 Make a Friday diary entry that tells the @emph{local time} of Sabbath
822 Make a diary entry that gives the omer count, when appropriate.
823 @item %%(diary-yahrzeit @var{month} @var{day} @var{year}) @var{name}
824 Make a diary entry marking the anniversary of a date of death. The date
825 is the @emph{Gregorian} (civil) date of death. The diary entry appears
826 on the proper Hebrew calendar anniversary and on the day before. (In
827 the European style, the order of the parameters is changed to @var{day},
828 @var{month}, @var{year}.)
831 All the functions documented above take an optional argument
832 @var{mark} which specifies how to mark the date in the calendar display.
833 If one of these functions decides that it applies to a certain date,
834 it returns a value that contains @var{mark}.
837 arch-tag: 52cb299f-fd1f-4616-bfe6-91b988669431