]> code.delx.au - gnu-emacs/blob - man/calendar.texi
*** empty log message ***
[gnu-emacs] / man / calendar.texi
1 @c This is part of the Emacs manual.
2 @c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001,
3 @c 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
4 @c See file emacs.texi for copying conditions.
5 @node Calendar/Diary, Gnus, Dired, Top
6 @chapter The Calendar and the Diary
7 @cindex calendar
8 @findex calendar
9
10 Emacs provides the functions of a desk calendar, with a diary of
11 planned or past events. It also has facilities for managing your
12 appointments, and keeping track of how much time you spend working on
13 certain projects.
14
15 To enter the calendar, type @kbd{M-x calendar}; this displays a
16 three-month calendar centered on the current month, with point on the
17 current date. With a numeric argument, as in @kbd{C-u M-x calendar}, it
18 prompts you for the month and year to be the center of the three-month
19 calendar. The calendar uses its own buffer, whose major mode is
20 Calendar mode.
21
22 @kbd{Mouse-2} in the calendar brings up a menu of operations on a
23 particular date; @kbd{Mouse-3} brings up a menu of commonly used
24 calendar features that are independent of any particular date. To exit
25 the calendar, type @kbd{q}.
26
27 This chapter describes the basic calendar features.
28 @inforef{Advanced Calendar/Diary Usage,, emacs-xtra}, for information
29 about more specialized features.
30
31 @menu
32 * Calendar Motion:: Moving through the calendar; selecting a date.
33 * Scroll Calendar:: Bringing earlier or later months onto the screen.
34 * Counting Days:: How many days are there between two dates?
35 * General Calendar:: Exiting or recomputing the calendar.
36 * LaTeX Calendar:: Print a calendar using LaTeX.
37 * Holidays:: Displaying dates of holidays.
38 * Sunrise/Sunset:: Displaying local times of sunrise and sunset.
39 * Lunar Phases:: Displaying phases of the moon.
40 * Other Calendars:: Converting dates to other calendar systems.
41 * Diary:: Displaying events from your diary.
42 * Appointments:: Reminders when it's time to do something.
43 * Importing Diary:: Converting diary events to/from other formats.
44 * Daylight Savings:: How to specify when daylight savings time is active.
45 * Time Intervals:: Keeping track of time intervals.
46 @end menu
47
48 @node Calendar Motion
49 @section Movement in the Calendar
50
51 @cindex moving inside the calendar
52 Calendar mode provides commands to move through the calendar in
53 logical units of time such as days, weeks, months, and years. If you
54 move outside the three months originally displayed, the calendar
55 display ``scrolls'' automatically through time to make the selected
56 date visible. Moving to a date lets you view its holidays or diary
57 entries, or convert it to other calendars; moving by long time periods
58 is also useful simply to scroll the calendar.
59
60 @menu
61 * Calendar Unit Motion:: Moving by days, weeks, months, and years.
62 * Move to Beginning or End:: Moving to start/end of weeks, months, and years.
63 * Specified Dates:: Moving to the current date or another
64 specific date.
65 @end menu
66
67 @node Calendar Unit Motion
68 @subsection Motion by Standard Lengths of Time
69
70 The commands for movement in the calendar buffer parallel the
71 commands for movement in text. You can move forward and backward by
72 days, weeks, months, and years.
73
74 @table @kbd
75 @item C-f
76 Move point one day forward (@code{calendar-forward-day}).
77 @item C-b
78 Move point one day backward (@code{calendar-backward-day}).
79 @item C-n
80 Move point one week forward (@code{calendar-forward-week}).
81 @item C-p
82 Move point one week backward (@code{calendar-backward-week}).
83 @item M-@}
84 Move point one month forward (@code{calendar-forward-month}).
85 @item M-@{
86 Move point one month backward (@code{calendar-backward-month}).
87 @item C-x ]
88 Move point one year forward (@code{calendar-forward-year}).
89 @item C-x [
90 Move point one year backward (@code{calendar-backward-year}).
91 @end table
92
93 @kindex C-f @r{(Calendar mode)}
94 @findex calendar-forward-day
95 @kindex C-b @r{(Calendar mode)}
96 @findex calendar-backward-day
97 @kindex C-n @r{(Calendar mode)}
98 @findex calendar-forward-week
99 @kindex C-p @r{(Calendar mode)}
100 @findex calendar-backward-week
101 The day and week commands are natural analogues of the usual Emacs
102 commands for moving by characters and by lines. Just as @kbd{C-n}
103 usually moves to the same column in the following line, in Calendar
104 mode it moves to the same day in the following week. And @kbd{C-p}
105 moves to the same day in the previous week.
106
107 The arrow keys are equivalent to @kbd{C-f}, @kbd{C-b}, @kbd{C-n} and
108 @kbd{C-p}, just as they normally are in other modes.
109
110 @kindex M-@} @r{(Calendar mode)}
111 @findex calendar-forward-month
112 @kindex M-@{ @r{(Calendar mode)}
113 @findex calendar-backward-month
114 @kindex C-x ] @r{(Calendar mode)}
115 @findex calendar-forward-year
116 @kindex C-x [ @r{(Calendar mode)}
117 @findex calendar-forward-year
118 The commands for motion by months and years work like those for
119 weeks, but move a larger distance. The month commands @kbd{M-@}} and
120 @kbd{M-@{} move forward or backward by an entire month. The year
121 commands @kbd{C-x ]} and @w{@kbd{C-x [}} move forward or backward a
122 whole year.
123
124 The easiest way to remember these commands is to consider months and
125 years analogous to paragraphs and pages of text, respectively. But
126 the commands themselves are not quite analogous. The ordinary Emacs
127 paragraph commands move to the beginning or end of a paragraph,
128 whereas these month and year commands move by an entire month or an
129 entire year, keeping the same date within the month or year.
130
131 All these commands accept a numeric argument as a repeat count.
132 For convenience, the digit keys and the minus sign specify numeric
133 arguments in Calendar mode even without the Meta modifier. For example,
134 @kbd{100 C-f} moves point 100 days forward from its present location.
135
136 @node Move to Beginning or End
137 @subsection Beginning or End of Week, Month or Year
138
139 A week (or month, or year) is not just a quantity of days; we think of
140 weeks (months, years) as starting on particular dates. So Calendar mode
141 provides commands to move to the beginning or end of a week, month or
142 year:
143
144 @table @kbd
145 @kindex C-a @r{(Calendar mode)}
146 @findex calendar-beginning-of-week
147 @item C-a
148 Move point to start of week (@code{calendar-beginning-of-week}).
149 @kindex C-e @r{(Calendar mode)}
150 @findex calendar-end-of-week
151 @item C-e
152 Move point to end of week (@code{calendar-end-of-week}).
153 @kindex M-a @r{(Calendar mode)}
154 @findex calendar-beginning-of-month
155 @item M-a
156 Move point to start of month (@code{calendar-beginning-of-month}).
157 @kindex M-e @r{(Calendar mode)}
158 @findex calendar-end-of-month
159 @item M-e
160 Move point to end of month (@code{calendar-end-of-month}).
161 @kindex M-< @r{(Calendar mode)}
162 @findex calendar-beginning-of-year
163 @item M-<
164 Move point to start of year (@code{calendar-beginning-of-year}).
165 @kindex M-> @r{(Calendar mode)}
166 @findex calendar-end-of-year
167 @item M->
168 Move point to end of year (@code{calendar-end-of-year}).
169 @end table
170
171 These commands also take numeric arguments as repeat counts, with the
172 repeat count indicating how many weeks, months, or years to move
173 backward or forward.
174
175 @vindex calendar-week-start-day
176 @cindex weeks, which day they start on
177 @cindex calendar, first day of week
178 By default, weeks begin on Sunday. To make them begin on Monday
179 instead, set the variable @code{calendar-week-start-day} to 1.
180
181 @node Specified Dates
182 @subsection Specified Dates
183
184 Calendar mode provides commands for moving to a particular date
185 specified in various ways.
186
187 @table @kbd
188 @item g d
189 Move point to specified date (@code{calendar-goto-date}).
190 @item g D
191 Move point to specified day of year (@code{calendar-goto-day-of-year}).
192 @item g w
193 Move point to specified week of year (@code{calendar-goto-iso-week}).
194 @item o
195 Center calendar around specified month (@code{calendar-other-month}).
196 @item .
197 Move point to today's date (@code{calendar-goto-today}).
198 @end table
199
200 @kindex g d @r{(Calendar mode)}
201 @findex calendar-goto-date
202 @kbd{g d} (@code{calendar-goto-date}) prompts for a year, a month, and a day
203 of the month, and then moves to that date. Because the calendar includes all
204 dates from the beginning of the current era, you must type the year in its
205 entirety; that is, type @samp{1990}, not @samp{90}.
206
207 @kindex g D @r{(Calendar mode)}
208 @findex calendar-goto-day-of-year
209 @kindex g w @r{(Calendar mode)}
210 @findex calendar-goto-iso-week
211 @kbd{g D} (@code{calendar-goto-day-of-year}) prompts for a year and
212 day number, and moves to that date. Negative day numbers count
213 backward from the end of the year. @kbd{g w}
214 (@code{calendar-goto-iso-week}) prompts for a year and week number,
215 and moves to that week.
216
217 @kindex o @r{(Calendar mode)}
218 @findex calendar-other-month
219 @kbd{o} (@code{calendar-other-month}) prompts for a month and year,
220 then centers the three-month calendar around that month.
221
222 @kindex . @r{(Calendar mode)}
223 @findex calendar-goto-today
224 You can return to today's date with @kbd{.}@:
225 (@code{calendar-goto-today}).
226
227 @node Scroll Calendar
228 @section Scrolling in the Calendar
229
230 @cindex scrolling in the calendar
231 The calendar display scrolls automatically through time when you
232 move out of the visible portion. You can also scroll it manually.
233 Imagine that the calendar window contains a long strip of paper with
234 the months on it. Scrolling the calendar means moving the strip
235 horizontally, so that new months become visible in the window.
236
237 @table @kbd
238 @item <
239 Scroll calendar one month forward (@code{scroll-calendar-left}).
240 @item >
241 Scroll calendar one month backward (@code{scroll-calendar-right}).
242 @item C-v
243 @itemx @key{NEXT}
244 Scroll calendar three months forward
245 (@code{scroll-calendar-left-three-months}).
246 @item M-v
247 @itemx @key{PRIOR}
248 Scroll calendar three months backward
249 (@code{scroll-calendar-right-three-months}).
250 @end table
251
252 @kindex < @r{(Calendar mode)}
253 @findex scroll-calendar-left
254 @kindex > @r{(Calendar mode)}
255 @findex scroll-calendar-right
256 The most basic calendar scroll commands scroll by one month at a
257 time. This means that there are two months of overlap between the
258 display before the command and the display after. @kbd{<} scrolls
259 the calendar contents one month to the left; that is, it moves the
260 display forward in time. @kbd{>} scrolls the contents to the
261 right, which moves backwards in time.
262
263 @kindex C-v @r{(Calendar mode)}
264 @findex scroll-calendar-left-three-months
265 @kindex M-v @r{(Calendar mode)}
266 @findex scroll-calendar-right-three-months
267 The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire
268 ``screenful''---three months---in analogy with the usual meaning of
269 these commands. @kbd{C-v} makes later dates visible and @kbd{M-v} makes
270 earlier dates visible. These commands take a numeric argument as a
271 repeat count; in particular, since @kbd{C-u} multiplies the next command
272 by four, typing @kbd{C-u C-v} scrolls the calendar forward by a year and
273 typing @kbd{C-u M-v} scrolls the calendar backward by a year.
274
275 The function keys @key{NEXT} and @key{PRIOR} are equivalent to
276 @kbd{C-v} and @kbd{M-v}, just as they are in other modes.
277
278 @node Counting Days
279 @section Counting Days
280
281 @table @kbd
282 @item M-=
283 Display the number of days in the current region
284 (@code{calendar-count-days-region}).
285 @end table
286
287 @kindex M-= @r{(Calendar mode)}
288 @findex calendar-count-days-region
289 To determine the number of days in the region, type @kbd{M-=}
290 (@code{calendar-count-days-region}). The numbers of days shown is
291 @emph{inclusive}; that is, it includes the days specified by mark and
292 point.
293
294 @node General Calendar
295 @section Miscellaneous Calendar Commands
296
297 @table @kbd
298 @item p d
299 Display day-in-year (@code{calendar-print-day-of-year}).
300 @item C-c C-l
301 Regenerate the calendar window (@code{redraw-calendar}).
302 @item SPC
303 Scroll the next window up (@code{scroll-other-window}).
304 @item DEL
305 Scroll the next window down (@code{scroll-other-window-down}).
306 @item q
307 Exit from calendar (@code{exit-calendar}).
308 @end table
309
310 @kindex p d @r{(Calendar mode)}
311 @cindex day of year
312 @findex calendar-print-day-of-year
313 To display the number of days elapsed since the start of the year, or
314 the number of days remaining in the year, type the @kbd{p d} command
315 (@code{calendar-print-day-of-year}). This displays both of those
316 numbers in the echo area. The count of days elapsed includes the
317 selected date. The count of days remaining does not include that
318 date.
319
320 @kindex C-c C-l @r{(Calendar mode)}
321 @findex redraw-calendar
322 If the calendar window text gets corrupted, type @kbd{C-c C-l}
323 (@code{redraw-calendar}) to redraw it. (This can only happen if you use
324 non-Calendar-mode editing commands.)
325
326 @kindex SPC @r{(Calendar mode)}
327 In Calendar mode, you can use @kbd{SPC} (@code{scroll-other-window})
328 and @kbd{DEL} (@code{scroll-other-window-down}) to scroll the other
329 window up or down, respectively. This is handy when you display a list
330 of holidays or diary entries in another window.
331
332 @kindex q @r{(Calendar mode)}
333 @findex exit-calendar
334 To exit from the calendar, type @kbd{q} (@code{exit-calendar}). This
335 buries all buffers related to the calendar, selecting other buffers.
336 (If a frame contains a dedicated calendar window, exiting from the
337 calendar iconifies that frame.)
338
339 @node LaTeX Calendar
340 @section LaTeX Calendar
341 @cindex calendar and La@TeX{}
342
343 The Calendar La@TeX{} commands produce a buffer of La@TeX{} code that
344 prints as a calendar. Depending on the command you use, the printed
345 calendar covers the day, week, month or year that point is in.
346
347 @kindex t @r{(Calendar mode)}
348 @table @kbd
349 @item t m
350 Generate a one-month calendar (@code{cal-tex-cursor-month}).
351 @item t M
352 Generate a sideways-printing one-month calendar
353 (@code{cal-tex-cursor-month-landscape}).
354 @item t d
355 Generate a one-day calendar
356 (@code{cal-tex-cursor-day}).
357 @item t w 1
358 Generate a one-page calendar for one week
359 (@code{cal-tex-cursor-week}).
360 @item t w 2
361 Generate a two-page calendar for one week
362 (@code{cal-tex-cursor-week2}).
363 @item t w 3
364 Generate an ISO-style calendar for one week
365 (@code{cal-tex-cursor-week-iso}).
366 @item t w 4
367 Generate a calendar for one Monday-starting week
368 (@code{cal-tex-cursor-week-monday}).
369 @item t f w
370 Generate a Filofax-style two-weeks-at-a-glance calendar
371 (@code{cal-tex-cursor-filofax-2week}).
372 @item t f W
373 Generate a Filofax-style one-week-at-a-glance calendar
374 (@code{cal-tex-cursor-filofax-week}).
375 @item t y
376 Generate a calendar for one year
377 (@code{cal-tex-cursor-year}).
378 @item t Y
379 Generate a sideways-printing calendar for one year
380 (@code{cal-tex-cursor-year-landscape}).
381 @item t f y
382 Generate a Filofax-style calendar for one year
383 (@code{cal-tex-cursor-filofax-year}).
384 @end table
385
386 Some of these commands print the calendar sideways (in ``landscape
387 mode''), so it can be wider than it is long. Some of them use Filofax
388 paper size (3.75in x 6.75in). All of these commands accept a prefix
389 argument which specifies how many days, weeks, months or years to print
390 (starting always with the selected one).
391
392 If the variable @code{cal-tex-holidays} is non-@code{nil} (the default),
393 then the printed calendars show the holidays in @code{calendar-holidays}.
394 If the variable @code{cal-tex-diary} is non-@code{nil} (the default is
395 @code{nil}), diary entries are included also (in weekly and monthly
396 calendars only). If the variable @code{cal-tex-rules} is non-@code{nil}
397 (the default is @code{nil}), the calendar displays ruled pages
398 in styles that have sufficient room.
399
400 @node Holidays
401 @section Holidays
402 @cindex holidays
403
404 The Emacs calendar knows about all major and many minor holidays,
405 and can display them.
406
407 @table @kbd
408 @item h
409 Display holidays for the selected date
410 (@code{calendar-cursor-holidays}).
411 @item Mouse-2 Holidays
412 Display any holidays for the date you click on.
413 @item x
414 Mark holidays in the calendar window (@code{mark-calendar-holidays}).
415 @item u
416 Unmark calendar window (@code{calendar-unmark}).
417 @item a
418 List all holidays for the displayed three months in another window
419 (@code{list-calendar-holidays}).
420 @item M-x holidays
421 List all holidays for three months around today's date in another
422 window.
423 @item M-x list-holidays
424 List holidays in another window for a specified range of years.
425 @end table
426
427 @kindex h @r{(Calendar mode)}
428 @findex calendar-cursor-holidays
429 @vindex view-calendar-holidays-initially
430 To see if any holidays fall on a given date, position point on that
431 date in the calendar window and use the @kbd{h} command. Alternatively,
432 click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays}
433 from the menu that appears. Either way, this displays the holidays for
434 that date, in the echo area if they fit there, otherwise in a separate
435 window.
436
437 @kindex x @r{(Calendar mode)}
438 @findex mark-calendar-holidays
439 @kindex u @r{(Calendar mode)}
440 @findex calendar-unmark
441 @vindex mark-holidays-in-calendar
442 To view the distribution of holidays for all the dates shown in the
443 calendar, use the @kbd{x} command. This displays the dates that are
444 holidays in a different face (or places a @samp{*} after these dates, if
445 display with multiple faces is not available). @inforef{Calendar
446 Customizing, calendar-holiday-marker, emacs-xtra}. The command applies
447 both to the currently visible months and to other months that
448 subsequently become visible by scrolling. To turn marking off and erase
449 the current marks, type @kbd{u}, which also erases any diary marks
450 (@pxref{Diary}). If the variable @code{mark-holidays-in-calendar} is
451 non-@code{nil}, creating or updating the calendar marks holidays
452 automatically.
453
454 @kindex a @r{(Calendar mode)}
455 @findex list-calendar-holidays
456 To get even more detailed information, use the @kbd{a} command, which
457 displays a separate buffer containing a list of all holidays in the
458 current three-month range. You can use @key{SPC} and @key{DEL} in the
459 calendar window to scroll that list up and down, respectively.
460
461 @findex holidays
462 The command @kbd{M-x holidays} displays the list of holidays for the
463 current month and the preceding and succeeding months; this works even
464 if you don't have a calendar window. If the variable
465 @code{view-calendar-holidays-initially} is non-@code{nil}, creating
466 the calendar displays holidays in this way. If you want the list of
467 holidays centered around a different month, use @kbd{C-u M-x
468 holidays}, which prompts for the month and year.
469
470 The holidays known to Emacs include United States holidays and the
471 major Christian, Jewish, and Islamic holidays; also the solstices and
472 equinoxes.
473
474 @findex list-holidays
475 The command @kbd{M-x list-holidays} displays the list of holidays for
476 a range of years. This function asks you for the starting and stopping
477 years, and allows you to choose all the holidays or one of several
478 categories of holidays. You can use this command even if you don't have
479 a calendar window.
480
481 The dates used by Emacs for holidays are based on @emph{current
482 practice}, not historical fact. Historically, for instance, the start
483 of daylight savings time and even its existence have varied from year to
484 year, but present United States law mandates that daylight savings time
485 begins on the first Sunday in April. When the daylight savings rules
486 are set up for the United States, Emacs always uses the present
487 definition, even though it is wrong for some prior years.
488
489 @node Sunrise/Sunset
490 @section Times of Sunrise and Sunset
491 @cindex sunrise and sunset
492
493 Special calendar commands can tell you, to within a minute or two, the
494 times of sunrise and sunset for any date.
495
496 @table @kbd
497 @item S
498 Display times of sunrise and sunset for the selected date
499 (@code{calendar-sunrise-sunset}).
500 @item Mouse-2 Sunrise/sunset
501 Display times of sunrise and sunset for the date you click on.
502 @item M-x sunrise-sunset
503 Display times of sunrise and sunset for today's date.
504 @item C-u M-x sunrise-sunset
505 Display times of sunrise and sunset for a specified date.
506 @end table
507
508 @kindex S @r{(Calendar mode)}
509 @findex calendar-sunrise-sunset
510 @findex sunrise-sunset
511 Within the calendar, to display the @emph{local times} of sunrise and
512 sunset in the echo area, move point to the date you want, and type
513 @kbd{S}. Alternatively, click @kbd{Mouse-2} on the date, then choose
514 @samp{Sunrise/sunset} from the menu that appears. The command @kbd{M-x
515 sunrise-sunset} is available outside the calendar to display this
516 information for today's date or a specified date. To specify a date
517 other than today, use @kbd{C-u M-x sunrise-sunset}, which prompts for
518 the year, month, and day.
519
520 You can display the times of sunrise and sunset for any location and
521 any date with @kbd{C-u C-u M-x sunrise-sunset}. This asks you for a
522 longitude, latitude, number of minutes difference from Coordinated
523 Universal Time, and date, and then tells you the times of sunrise and
524 sunset for that location on that date.
525
526 Because the times of sunrise and sunset depend on the location on
527 earth, you need to tell Emacs your latitude, longitude, and location
528 name before using these commands. Here is an example of what to set:
529
530 @vindex calendar-location-name
531 @vindex calendar-longitude
532 @vindex calendar-latitude
533 @example
534 (setq calendar-latitude 40.1)
535 (setq calendar-longitude -88.2)
536 (setq calendar-location-name "Urbana, IL")
537 @end example
538
539 @noindent
540 Use one decimal place in the values of @code{calendar-latitude} and
541 @code{calendar-longitude}.
542
543 Your time zone also affects the local time of sunrise and sunset.
544 Emacs usually gets time zone information from the operating system, but
545 if these values are not what you want (or if the operating system does
546 not supply them), you must set them yourself. Here is an example:
547
548 @vindex calendar-time-zone
549 @vindex calendar-standard-time-zone-name
550 @vindex calendar-daylight-time-zone-name
551 @example
552 (setq calendar-time-zone -360)
553 (setq calendar-standard-time-zone-name "CST")
554 (setq calendar-daylight-time-zone-name "CDT")
555 @end example
556
557 @noindent
558 The value of @code{calendar-time-zone} is the number of minutes
559 difference between your local standard time and Coordinated Universal
560 Time (Greenwich time). The values of
561 @code{calendar-standard-time-zone-name} and
562 @code{calendar-daylight-time-zone-name} are the abbreviations used in
563 your time zone. Emacs displays the times of sunrise and sunset
564 @emph{corrected for daylight savings time}. @xref{Daylight Savings},
565 for how daylight savings time is determined.
566
567 As a user, you might find it convenient to set the calendar location
568 variables for your usual physical location in your @file{.emacs} file.
569 And when you install Emacs on a machine, you can create a
570 @file{default.el} file which sets them properly for the typical location
571 of most users of that machine. @xref{Init File}.
572
573 @node Lunar Phases
574 @section Phases of the Moon
575 @cindex phases of the moon
576 @cindex moon, phases of
577
578 These calendar commands display the dates and times of the phases of
579 the moon (new moon, first quarter, full moon, last quarter). This
580 feature is useful for debugging problems that ``depend on the phase of
581 the moon.''
582
583 @table @kbd
584 @item M
585 Display the dates and times for all the quarters of the moon for the
586 three-month period shown (@code{calendar-phases-of-moon}).
587 @item M-x phases-of-moon
588 Display dates and times of the quarters of the moon for three months around
589 today's date.
590 @end table
591
592 @kindex M @r{(Calendar mode)}
593 @findex calendar-phases-of-moon
594 Within the calendar, use the @kbd{M} command to display a separate
595 buffer of the phases of the moon for the current three-month range. The
596 dates and times listed are accurate to within a few minutes.
597
598 @findex phases-of-moon
599 Outside the calendar, use the command @kbd{M-x phases-of-moon} to
600 display the list of the phases of the moon for the current month and the
601 preceding and succeeding months. For information about a different
602 month, use @kbd{C-u M-x phases-of-moon}, which prompts for the month and
603 year.
604
605 The dates and times given for the phases of the moon are given in
606 local time (corrected for daylight savings, when appropriate); but if
607 the variable @code{calendar-time-zone} is void, Coordinated Universal
608 Time (the Greenwich time zone) is used. @xref{Daylight Savings}.
609
610 @node Other Calendars
611 @section Conversion To and From Other Calendars
612
613 @cindex Gregorian calendar
614 The Emacs calendar displayed is @emph{always} the Gregorian calendar,
615 sometimes called the ``new style'' calendar, which is used in most of
616 the world today. However, this calendar did not exist before the
617 sixteenth century and was not widely used before the eighteenth century;
618 it did not fully displace the Julian calendar and gain universal
619 acceptance until the early twentieth century. The Emacs calendar can
620 display any month since January, year 1 of the current era, but the
621 calendar displayed is the Gregorian, even for a date at which the
622 Gregorian calendar did not exist.
623
624 While Emacs cannot display other calendars, it can convert dates to
625 and from several other calendars.
626
627 @menu
628 * Calendar Systems:: The calendars Emacs understands
629 (aside from Gregorian).
630 * To Other Calendar:: Converting the selected date to various calendars.
631 * From Other Calendar:: Moving to a date specified in another calendar.
632 * Mayan Calendar:: Moving to a date specified in a Mayan calendar.
633 @end menu
634
635 @node Calendar Systems
636 @subsection Supported Calendar Systems
637
638 @cindex ISO commercial calendar
639 The ISO commercial calendar is used largely in Europe.
640
641 @cindex Julian calendar
642 The Julian calendar, named after Julius Caesar, was the one used in Europe
643 throughout medieval times, and in many countries up until the nineteenth
644 century.
645
646 @cindex Julian day numbers
647 @cindex astronomical day numbers
648 Astronomers use a simple counting of days elapsed since noon, Monday,
649 January 1, 4713 B.C. on the Julian calendar. The number of days elapsed
650 is called the @dfn{Julian day number} or the @dfn{Astronomical day number}.
651
652 @cindex Hebrew calendar
653 The Hebrew calendar is used by tradition in the Jewish religion. The
654 Emacs calendar program uses the Hebrew calendar to determine the dates
655 of Jewish holidays. Hebrew calendar dates begin and end at sunset.
656
657 @cindex Islamic calendar
658 The Islamic calendar is used in many predominantly Islamic countries.
659 Emacs uses it to determine the dates of Islamic holidays. There is no
660 universal agreement in the Islamic world about the calendar; Emacs uses
661 a widely accepted version, but the precise dates of Islamic holidays
662 often depend on proclamation by religious authorities, not on
663 calculations. As a consequence, the actual dates of observance can vary
664 slightly from the dates computed by Emacs. Islamic calendar dates begin
665 and end at sunset.
666
667 @cindex French Revolutionary calendar
668 The French Revolutionary calendar was created by the Jacobins after the 1789
669 revolution, to represent a more secular and nature-based view of the annual
670 cycle, and to install a 10-day week in a rationalization measure similar to
671 the metric system. The French government officially abandoned this
672 calendar at the end of 1805.
673
674 @cindex Mayan calendar
675 The Maya of Central America used three separate, overlapping calendar
676 systems, the @emph{long count}, the @emph{tzolkin}, and the @emph{haab}.
677 Emacs knows about all three of these calendars. Experts dispute the
678 exact correlation between the Mayan calendar and our calendar; Emacs uses the
679 Goodman-Martinez-Thompson correlation in its calculations.
680
681 @cindex Coptic calendar
682 @cindex Ethiopic calendar
683 The Copts use a calendar based on the ancient Egyptian solar calendar.
684 Their calendar consists of twelve 30-day months followed by an extra
685 five-day period. Once every fourth year they add a leap day to this
686 extra period to make it six days. The Ethiopic calendar is identical in
687 structure, but has different year numbers and month names.
688
689 @cindex Persian calendar
690 The Persians use a solar calendar based on a design of Omar Khayyam.
691 Their calendar consists of twelve months of which the first six have 31
692 days, the next five have 30 days, and the last has 29 in ordinary years
693 and 30 in leap years. Leap years occur in a complicated pattern every
694 four or five years.
695 The calendar implemented here is the arithmetical Persian calendar
696 championed by Birashk, based on a 2,820-year cycle. It differs from
697 the astronomical Persian calendar, which is based on astronomical
698 events. As of this writing the first future discrepancy is projected
699 to occur on March 20, 2025. It is currently not clear what the
700 official calendar of Iran will be that far into the future.
701
702 @cindex Chinese calendar
703 The Chinese calendar is a complicated system of lunar months arranged
704 into solar years. The years go in cycles of sixty, each year containing
705 either twelve months in an ordinary year or thirteen months in a leap
706 year; each month has either 29 or 30 days. Years, ordinary months, and
707 days are named by combining one of ten ``celestial stems'' with one of
708 twelve ``terrestrial branches'' for a total of sixty names that are
709 repeated in a cycle of sixty.
710
711 @node To Other Calendar
712 @subsection Converting To Other Calendars
713
714 The following commands describe the selected date (the date at point)
715 in various other calendar systems:
716
717 @table @kbd
718 @item Mouse-2 Other calendars
719 Display the date that you click on, expressed in various other calendars.
720 @kindex p @r{(Calendar mode)}
721 @findex calendar-print-iso-date
722 @item p c
723 Display ISO commercial calendar equivalent for selected day
724 (@code{calendar-print-iso-date}).
725 @findex calendar-print-julian-date
726 @item p j
727 Display Julian date for selected day (@code{calendar-print-julian-date}).
728 @findex calendar-print-astro-day-number
729 @item p a
730 Display astronomical (Julian) day number for selected day
731 (@code{calendar-print-astro-day-number}).
732 @findex calendar-print-hebrew-date
733 @item p h
734 Display Hebrew date for selected day (@code{calendar-print-hebrew-date}).
735 @findex calendar-print-islamic-date
736 @item p i
737 Display Islamic date for selected day (@code{calendar-print-islamic-date}).
738 @findex calendar-print-french-date
739 @item p f
740 Display French Revolutionary date for selected day
741 (@code{calendar-print-french-date}).
742 @findex calendar-print-chinese-date
743 @item p C
744 Display Chinese date for selected day
745 (@code{calendar-print-chinese-date}).
746 @findex calendar-print-coptic-date
747 @item p k
748 Display Coptic date for selected day
749 (@code{calendar-print-coptic-date}).
750 @findex calendar-print-ethiopic-date
751 @item p e
752 Display Ethiopic date for selected day
753 (@code{calendar-print-ethiopic-date}).
754 @findex calendar-print-persian-date
755 @item p p
756 Display Persian date for selected day
757 (@code{calendar-print-persian-date}).
758 @findex calendar-print-mayan-date
759 @item p m
760 Display Mayan date for selected day (@code{calendar-print-mayan-date}).
761 @end table
762
763 If you are using X, the easiest way to translate a date into other
764 calendars is to click on it with @kbd{Mouse-2}, then choose @kbd{Other
765 calendars} from the menu that appears. This displays the equivalent
766 forms of the date in all the calendars Emacs understands, in the form of
767 a menu. (Choosing an alternative from this menu doesn't actually do
768 anything---the menu is used only for display.)
769
770 Otherwise, move point to the date you want to convert, then type the
771 appropriate command starting with @kbd{p} from the table above. The
772 prefix @kbd{p} is a mnemonic for ``print,'' since Emacs ``prints'' the
773 equivalent date in the echo area.
774
775 @node From Other Calendar
776 @subsection Converting From Other Calendars
777
778 You can use the other supported calendars to specify a date to move
779 to. This section describes the commands for doing this using calendars
780 other than Mayan; for the Mayan calendar, see the following section.
781
782 @kindex g @var{char} @r{(Calendar mode)}
783 @findex calendar-goto-iso-date
784 @findex calendar-goto-iso-week
785 @findex calendar-goto-julian-date
786 @findex calendar-goto-astro-day-number
787 @findex calendar-goto-hebrew-date
788 @findex calendar-goto-islamic-date
789 @findex calendar-goto-french-date
790 @findex calendar-goto-chinese-date
791 @findex calendar-goto-persian-date
792 @findex calendar-goto-coptic-date
793 @findex calendar-goto-ethiopic-date
794 @table @kbd
795 @item g c
796 Move to a date specified in the ISO commercial calendar
797 (@code{calendar-goto-iso-date}).
798 @item g w
799 Move to a week specified in the ISO commercial calendar
800 (@code{calendar-goto-iso-week}).
801 @item g j
802 Move to a date specified in the Julian calendar
803 (@code{calendar-goto-julian-date}).
804 @item g a
805 Move to a date specified with an astronomical (Julian) day number
806 (@code{calendar-goto-astro-day-number}).
807 @item g h
808 Move to a date specified in the Hebrew calendar
809 (@code{calendar-goto-hebrew-date}).
810 @item g i
811 Move to a date specified in the Islamic calendar
812 (@code{calendar-goto-islamic-date}).
813 @item g f
814 Move to a date specified in the French Revolutionary calendar
815 (@code{calendar-goto-french-date}).
816 @item g C
817 Move to a date specified in the Chinese calendar
818 (@code{calendar-goto-chinese-date}).
819 @item g p
820 Move to a date specified in the Persian calendar
821 (@code{calendar-goto-persian-date}).
822 @item g k
823 Move to a date specified in the Coptic calendar
824 (@code{calendar-goto-coptic-date}).
825 @item g e
826 Move to a date specified in the Ethiopic calendar
827 (@code{calendar-goto-ethiopic-date}).
828 @end table
829
830 These commands ask you for a date on the other calendar, move point to
831 the Gregorian calendar date equivalent to that date, and display the
832 other calendar's date in the echo area. Emacs uses strict completion
833 (@pxref{Completion}) whenever it asks you to type a month name, so you
834 don't have to worry about the spelling of Hebrew, Islamic, or French names.
835
836 @findex list-yahrzeit-dates
837 @cindex yahrzeits
838 One common question concerning the Hebrew calendar is the computation
839 of the anniversary of a date of death, called a ``yahrzeit.'' The Emacs
840 calendar includes a facility for such calculations. If you are in the
841 calendar, the command @kbd{M-x list-yahrzeit-dates} asks you for a
842 range of years and then displays a list of the yahrzeit dates for those
843 years for the date given by point. If you are not in the calendar,
844 this command first asks you for the date of death and the range of
845 years, and then displays the list of yahrzeit dates.
846
847 @node Mayan Calendar
848 @subsection Converting from the Mayan Calendar
849
850 Here are the commands to select dates based on the Mayan calendar:
851
852 @table @kbd
853 @item g m l
854 Move to a date specified by the long count calendar
855 (@code{calendar-goto-mayan-long-count-date}).
856 @item g m n t
857 Move to the next occurrence of a place in the
858 tzolkin calendar (@code{calendar-next-tzolkin-date}).
859 @item g m p t
860 Move to the previous occurrence of a place in the
861 tzolkin calendar (@code{calendar-previous-tzolkin-date}).
862 @item g m n h
863 Move to the next occurrence of a place in the
864 haab calendar (@code{calendar-next-haab-date}).
865 @item g m p h
866 Move to the previous occurrence of a place in the
867 haab calendar (@code{calendar-previous-haab-date}).
868 @item g m n c
869 Move to the next occurrence of a place in the
870 calendar round (@code{calendar-next-calendar-round-date}).
871 @item g m p c
872 Move to the previous occurrence of a place in the
873 calendar round (@code{calendar-previous-calendar-round-date}).
874 @end table
875
876 @cindex Mayan long count
877 To understand these commands, you need to understand the Mayan calendars.
878 The @dfn{long count} is a counting of days with these units:
879
880 @display
881 1 kin = 1 day@ @ @ 1 uinal = 20 kin@ @ @ 1 tun = 18 uinal
882 1 katun = 20 tun@ @ @ 1 baktun = 20 katun
883 @end display
884
885 @kindex g m @r{(Calendar mode)}
886 @findex calendar-goto-mayan-long-count-date
887 @noindent
888 Thus, the long count date 12.16.11.16.6 means 12 baktun, 16 katun, 11
889 tun, 16 uinal, and 6 kin. The Emacs calendar can handle Mayan long
890 count dates as early as 7.17.18.13.3, but no earlier. When you use the
891 @kbd{g m l} command, type the Mayan long count date with the baktun,
892 katun, tun, uinal, and kin separated by periods.
893
894 @findex calendar-previous-tzolkin-date
895 @findex calendar-next-tzolkin-date
896 @cindex Mayan tzolkin calendar
897 The Mayan tzolkin calendar is a cycle of 260 days formed by a pair of
898 independent cycles of 13 and 20 days. Since this cycle repeats
899 endlessly, Emacs provides commands to move backward and forward to the
900 previous or next point in the cycle. Type @kbd{g m p t} to go to the
901 previous tzolkin date; Emacs asks you for a tzolkin date and moves point
902 to the previous occurrence of that date. Similarly, type @kbd{g m n t}
903 to go to the next occurrence of a tzolkin date.
904
905 @findex calendar-previous-haab-date
906 @findex calendar-next-haab-date
907 @cindex Mayan haab calendar
908 The Mayan haab calendar is a cycle of 365 days arranged as 18 months
909 of 20 days each, followed a 5-day monthless period. Like the tzolkin
910 cycle, this cycle repeats endlessly, and there are commands to move
911 backward and forward to the previous or next point in the cycle. Type
912 @kbd{g m p h} to go to the previous haab date; Emacs asks you for a haab
913 date and moves point to the previous occurrence of that date.
914 Similarly, type @kbd{g m n h} to go to the next occurrence of a haab
915 date.
916
917 @c This is omitted because it is too long for smallbook format.
918 @c @findex calendar-previous-calendar-round-date
919 @findex calendar-next-calendar-round-date
920 @cindex Mayan calendar round
921 The Maya also used the combination of the tzolkin date and the haab
922 date. This combination is a cycle of about 52 years called a
923 @emph{calendar round}. If you type @kbd{g m p c}, Emacs asks you for
924 both a haab and a tzolkin date and then moves point to the previous
925 occurrence of that combination. Use @kbd{g m n c} to move point to the
926 next occurrence of a combination. These commands signal an error if the
927 haab/tzolkin date combination you have typed is impossible.
928
929 Emacs uses strict completion (@pxref{Strict Completion}) whenever it
930 asks you to type a Mayan name, so you don't have to worry about
931 spelling.
932
933 @node Diary
934 @section The Diary
935 @cindex diary
936
937 The Emacs diary keeps track of appointments or other events on a daily
938 basis, in conjunction with the calendar. To use the diary feature, you
939 must first create a @dfn{diary file} containing a list of events and
940 their dates. Then Emacs can automatically pick out and display the
941 events for today, for the immediate future, or for any specified
942 date.
943
944 The name of the diary file is specified by the variable
945 @code{diary-file}; @file{~/diary} is the default. A sample diary file
946 is (note that the file format is essentially the same as that used by
947 the external shell utility @samp{calendar}):
948
949 @example
950 12/22/1988 Twentieth wedding anniversary!!
951 &1/1. Happy New Year!
952 10/22 Ruth's birthday.
953 * 21, *: Payday
954 Tuesday--weekly meeting with grad students at 10am
955 Supowit, Shen, Bitner, and Kapoor to attend.
956 1/13/89 Friday the thirteenth!!
957 &thu 4pm squash game with Lloyd.
958 mar 16 Dad's birthday
959 April 15, 1989 Income tax due.
960 &* 15 time cards due.
961 @end example
962
963 @noindent
964 This example uses extra spaces to align the event descriptions of most
965 of the entries. Such formatting is purely a matter of taste.
966
967 Although you probably will start by creating a diary manually, Emacs
968 provides a number of commands to let you view, add, and change diary
969 entries.
970
971 @menu
972 * Displaying the Diary:: Viewing diary entries and associated calendar dates.
973 * Format of Diary File:: Entering events in your diary.
974 * Date Formats:: Various ways you can specify dates.
975 * Adding to Diary:: Commands to create diary entries.
976 * Special Diary Entries:: Anniversaries, blocks of dates, cyclic entries, etc.
977 @end menu
978
979 @node Displaying the Diary
980 @subsection Displaying the Diary
981
982 Once you have created a diary file, you can use the calendar to view
983 it. You can also view today's events outside of Calendar mode.
984
985 @table @kbd
986 @item d
987 Display all diary entries for the selected date
988 (@code{view-diary-entries}).
989 @item Mouse-2 Diary
990 Display all diary entries for the date you click on.
991 @item s
992 Display the entire diary file (@code{show-all-diary-entries}).
993 @item m
994 Mark all visible dates that have diary entries
995 (@code{mark-diary-entries}).
996 @item u
997 Unmark the calendar window (@code{calendar-unmark}).
998 @item M-x print-diary-entries
999 Print hard copy of the diary display as it appears.
1000 @item M-x diary
1001 Display all diary entries for today's date.
1002 @item M-x diary-mail-entries
1003 Mail yourself email reminders about upcoming diary entries.
1004 @end table
1005
1006 @kindex d @r{(Calendar mode)}
1007 @findex view-diary-entries
1008 @vindex view-diary-entries-initially
1009 Displaying the diary entries with @kbd{d} shows in a separate window
1010 the diary entries for the selected date in the calendar. The mode line
1011 of the new window shows the date of the diary entries and any holidays
1012 that fall on that date. If you specify a numeric argument with @kbd{d},
1013 it shows all the diary entries for that many successive days. Thus,
1014 @kbd{2 d} displays all the entries for the selected date and for the
1015 following day.
1016
1017 Another way to display the diary entries for a date is to click
1018 @kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from
1019 the menu that appears. If the variable
1020 @code{view-diary-entries-initially} is non-@code{nil}, creating the
1021 calendar lists the diary entries for the current date (provided the
1022 current date is visible).
1023
1024 @kindex m @r{(Calendar mode)}
1025 @findex mark-diary-entries
1026 @vindex mark-diary-entries-in-calendar
1027 To get a broader view of which days are mentioned in the diary, use
1028 the @kbd{m} command. This displays the dates that have diary entries in
1029 a different face (or places a @samp{+} after these dates, if display
1030 with multiple faces is not available). @inforef{Calendar Customizing,
1031 diary-entry-marker, emacs-xtra}. The command applies both to the
1032 currently visible months and to other months that subsequently become
1033 visible by scrolling. To turn marking off and erase the current marks,
1034 type @kbd{u}, which also turns off holiday marks (@pxref{Holidays}).
1035 If the variable @code{mark-diary-entries-in-calendar} is
1036 non-@code{nil}, creating or updating the calendar marks diary dates
1037 automatically.
1038
1039 @kindex s @r{(Calendar mode)}
1040 @findex show-all-diary-entries
1041 To see the full diary file, rather than just some of the entries, use
1042 the @kbd{s} command.
1043
1044 Display of selected diary entries uses the selective display feature
1045 to hide entries that don't apply. The diary buffer as you see it is
1046 an illusion, so simply printing the buffer does not print what you see
1047 on your screen. There is a special command to print hard copy of the
1048 diary buffer @emph{as it appears}; this command is @kbd{M-x
1049 print-diary-entries}. It sends the data directly to the printer. You
1050 can customize it like @code{lpr-region} (@pxref{Printing}).
1051
1052 @findex diary
1053 The command @kbd{M-x diary} displays the diary entries for the current
1054 date, independently of the calendar display, and optionally for the next
1055 few days as well; the variable @code{number-of-diary-entries} specifies
1056 how many days to include. @inforef{Diary Customizing,, emacs-xtra}.
1057
1058 If you put @code{(diary)} in your @file{.emacs} file, this
1059 automatically displays a window with the day's diary entries, when you
1060 enter Emacs. The mode line of the displayed window shows the date and
1061 any holidays that fall on that date.
1062
1063 @findex diary-mail-entries
1064 @vindex diary-mail-days
1065 Many users like to receive notice of events in their diary as email.
1066 To send such mail to yourself, use the command @kbd{M-x
1067 diary-mail-entries}. A prefix argument specifies how many days
1068 (starting with today) to check; otherwise, the variable
1069 @code{diary-mail-days} says how many days.
1070
1071 @node Format of Diary File
1072 @subsection The Diary File
1073 @cindex diary file
1074
1075 @vindex diary-file
1076 Your @dfn{diary file} is a file that records events associated with
1077 particular dates. The name of the diary file is specified by the
1078 variable @code{diary-file}; @file{~/diary} is the default. The
1079 @code{calendar} utility program supports a subset of the format allowed
1080 by the Emacs diary facilities, so you can use that utility to view the
1081 diary file, with reasonable results aside from the entries it cannot
1082 understand.
1083
1084 Each entry in the diary file describes one event and consists of one
1085 or more lines. An entry always begins with a date specification at the
1086 left margin. The rest of the entry is simply text to describe the
1087 event. If the entry has more than one line, then the lines after the
1088 first must begin with whitespace to indicate they continue a previous
1089 entry. Lines that do not begin with valid dates and do not continue a
1090 preceding entry are ignored.
1091
1092 You can inhibit the marking of certain diary entries in the calendar
1093 window; to do this, insert an ampersand (@samp{&}) at the beginning of
1094 the entry, before the date. This has no effect on display of the entry
1095 in the diary window; it affects only marks on dates in the calendar
1096 window. Nonmarking entries are especially useful for generic entries
1097 that would otherwise mark many different dates.
1098
1099 If the first line of a diary entry consists only of the date or day
1100 name with no following blanks or punctuation, then the diary window
1101 display doesn't include that line; only the continuation lines appear.
1102 For example, this entry:
1103
1104 @example
1105 02/11/1989
1106 Bill B. visits Princeton today
1107 2pm Cognitive Studies Committee meeting
1108 2:30-5:30 Liz at Lawrenceville
1109 4:00pm Dentist appt
1110 7:30pm Dinner at George's
1111 8:00-10:00pm concert
1112 @end example
1113
1114 @noindent
1115 appears in the diary window without the date line at the beginning.
1116 This style of entry looks neater when you display just a single day's
1117 entries, but can cause confusion if you ask for more than one day's
1118 entries.
1119
1120 You can edit the diary entries as they appear in the window, but it is
1121 important to remember that the buffer displayed contains the @emph{entire}
1122 diary file, with portions of it concealed from view. This means, for
1123 instance, that the @kbd{C-f} (@code{forward-char}) command can put point
1124 at what appears to be the end of the line, but what is in reality the
1125 middle of some concealed line.
1126
1127 @emph{Be careful when editing the diary entries!} Inserting
1128 additional lines or adding/deleting characters in the middle of a
1129 visible line cannot cause problems, but editing at the end of a line may
1130 not do what you expect. Deleting a line may delete other invisible
1131 entries that follow it. Before editing the diary, it is best to display
1132 the entire file with @kbd{s} (@code{show-all-diary-entries}).
1133
1134 @node Date Formats
1135 @subsection Date Formats
1136
1137 Here are some sample diary entries, illustrating different ways of
1138 formatting a date. The examples all show dates in American order
1139 (month, day, year), but Calendar mode supports European order (day,
1140 month, year) as an option.
1141
1142 @example
1143 4/20/93 Switch-over to new tabulation system
1144 apr. 25 Start tabulating annual results
1145 4/30 Results for April are due
1146 */25 Monthly cycle finishes
1147 Friday Don't leave without backing up files
1148 @end example
1149
1150 The first entry appears only once, on April 20, 1993. The second and
1151 third appear every year on the specified dates, and the fourth uses a
1152 wildcard (asterisk) for the month, so it appears on the 25th of every
1153 month. The final entry appears every week on Friday.
1154
1155 You can use just numbers to express a date, as in
1156 @samp{@var{month}/@var{day}} or @samp{@var{month}/@var{day}/@var{year}}.
1157 This must be followed by a nondigit. In the date itself, @var{month}
1158 and @var{day} are numbers of one or two digits. The optional @var{year}
1159 is also a number, and may be abbreviated to the last two digits; that
1160 is, you can use @samp{11/12/1989} or @samp{11/12/89}.
1161
1162 Dates can also have the form @samp{@var{monthname} @var{day}} or
1163 @samp{@var{monthname} @var{day}, @var{year}}, where the month's name can
1164 be spelled in full or abbreviated (with or without a period). The
1165 preferred abbreviations can be controlled using the variables
1166 @code{calendar-abbrev-length}, @code{calendar-month-abbrev-array}, and
1167 @code{calendar-day-abbrev-array}. The default is to use the first three
1168 letters of a name as its abbreviation. Case is not significant.
1169
1170 A date may be @dfn{generic}; that is, partially unspecified. Then the
1171 entry applies to all dates that match the specification. If the date
1172 does not contain a year, it is generic and applies to any year.
1173 Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*};
1174 this matches any month, day, or year, respectively. Thus, a diary entry
1175 @samp{3/*/*} matches any day in March of any year; so does @samp{march
1176 *}.
1177
1178 @vindex european-calendar-style
1179 @findex european-calendar
1180 @findex american-calendar
1181 If you prefer the European style of writing dates---in which the day
1182 comes before the month---type @kbd{M-x european-calendar} while in the
1183 calendar, or set the variable @code{european-calendar-style} to @code{t}
1184 @emph{before} using any calendar or diary command. This mode interprets
1185 all dates in the diary in the European manner, and also uses European
1186 style for displaying diary dates. (Note that there is no comma after
1187 the @var{monthname} in the European style.) To go back to the (default)
1188 American style of writing dates, type @kbd{M-x american-calendar}.
1189
1190 You can use the name of a day of the week as a generic date which
1191 applies to any date falling on that day of the week. You can abbreviate
1192 the day of the week to three letters (with or without a period) or spell
1193 it in full; case is not significant.
1194
1195 @node Adding to Diary
1196 @subsection Commands to Add to the Diary
1197
1198 While in the calendar, there are several commands to create diary
1199 entries:
1200
1201 @table @kbd
1202 @item i d
1203 Add a diary entry for the selected date (@code{insert-diary-entry}).
1204 @item i w
1205 Add a diary entry for the selected day of the week (@code{insert-weekly-diary-entry}).
1206 @item i m
1207 Add a diary entry for the selected day of the month (@code{insert-monthly-diary-entry}).
1208 @item i y
1209 Add a diary entry for the selected day of the year (@code{insert-yearly-diary-entry}).
1210 @end table
1211
1212 @kindex i d @r{(Calendar mode)}
1213 @findex insert-diary-entry
1214 You can make a diary entry for a specific date by selecting that date
1215 in the calendar window and typing the @kbd{i d} command. This command
1216 displays the end of your diary file in another window and inserts the
1217 date; you can then type the rest of the diary entry.
1218
1219 @kindex i w @r{(Calendar mode)}
1220 @findex insert-weekly-diary-entry
1221 @kindex i m @r{(Calendar mode)}
1222 @findex insert-monthly-diary-entry
1223 @kindex i y @r{(Calendar mode)}
1224 @findex insert-yearly-diary-entry
1225 If you want to make a diary entry that applies to a specific day of
1226 the week, select that day of the week (any occurrence will do) and type
1227 @kbd{i w}. This inserts the day-of-week as a generic date; you can then
1228 type the rest of the diary entry. You can make a monthly diary entry in
1229 the same fashion: select the day of the month, use the @kbd{i m}
1230 command, and type the rest of the entry. Similarly, you can insert a
1231 yearly diary entry with the @kbd{i y} command.
1232
1233 All of the above commands make marking diary entries by default. To
1234 make a nonmarking diary entry, give a numeric argument to the command.
1235 For example, @kbd{C-u i w} makes a nonmarking weekly diary entry.
1236
1237 When you modify the diary file, be sure to save the file before
1238 exiting Emacs. Saving the diary file after using any of the above
1239 insertion commands will automatically update the diary marks in the
1240 calendar window, if appropriate. You can use the command
1241 @code{redraw-calendar} to force an update at any time.
1242
1243 @node Special Diary Entries
1244 @subsection Special Diary Entries
1245
1246 In addition to entries based on calendar dates, the diary file can
1247 contain @dfn{sexp entries} for regular events such as anniversaries.
1248 These entries are based on Lisp expressions (sexps) that Emacs evaluates
1249 as it scans the diary file. Instead of a date, a sexp entry contains
1250 @samp{%%} followed by a Lisp expression which must begin and end with
1251 parentheses. The Lisp expression determines which dates the entry
1252 applies to.
1253
1254 Calendar mode provides commands to insert certain commonly used
1255 sexp entries:
1256
1257 @table @kbd
1258 @item i a
1259 Add an anniversary diary entry for the selected date
1260 (@code{insert-anniversary-diary-entry}).
1261 @item i b
1262 Add a block diary entry for the current region
1263 (@code{insert-block-diary-entry}).
1264 @item i c
1265 Add a cyclic diary entry starting at the date
1266 (@code{insert-cyclic-diary-entry}).
1267 @end table
1268
1269 @kindex i a @r{(Calendar mode)}
1270 @findex insert-anniversary-diary-entry
1271 If you want to make a diary entry that applies to the anniversary of a
1272 specific date, move point to that date and use the @kbd{i a} command.
1273 This displays the end of your diary file in another window and inserts
1274 the anniversary description; you can then type the rest of the diary
1275 entry. The entry looks like this:
1276
1277 @findex diary-anniversary
1278 @example
1279 %%(diary-anniversary 10 31 1948) Arthur's birthday
1280 @end example
1281
1282 @noindent
1283 This entry applies to October 31 in any year after 1948; @samp{10 31
1284 1948} specifies the date. (If you are using the European calendar
1285 style, the month and day are interchanged.) The reason this expression
1286 requires a beginning year is that advanced diary functions can use it to
1287 calculate the number of elapsed years.
1288
1289 A @dfn{block} diary entry applies to a specified range of consecutive
1290 dates. Here is a block diary entry that applies to all dates from June
1291 24, 1990 through July 10, 1990:
1292
1293 @findex diary-block
1294 @example
1295 %%(diary-block 6 24 1990 7 10 1990) Vacation
1296 @end example
1297
1298 @noindent
1299 The @samp{6 24 1990} indicates the starting date and the @samp{7 10 1990}
1300 indicates the stopping date. (Again, if you are using the European calendar
1301 style, the month and day are interchanged.)
1302
1303 @kindex i b @r{(Calendar mode)}
1304 @findex insert-block-diary-entry
1305 To insert a block entry, place point and the mark on the two
1306 dates that begin and end the range, and type @kbd{i b}. This command
1307 displays the end of your diary file in another window and inserts the
1308 block description; you can then type the diary entry.
1309
1310 @kindex i c @r{(Calendar mode)}
1311 @findex insert-cyclic-diary-entry
1312 @dfn{Cyclic} diary entries repeat after a fixed interval of days. To
1313 create one, select the starting date and use the @kbd{i c} command. The
1314 command prompts for the length of interval, then inserts the entry,
1315 which looks like this:
1316
1317 @findex diary-cyclic
1318 @example
1319 %%(diary-cyclic 50 3 1 1990) Renew medication
1320 @end example
1321
1322 @noindent
1323 This entry applies to March 1, 1990 and every 50th day following;
1324 @samp{3 1 1990} specifies the starting date. (If you are using the
1325 European calendar style, the month and day are interchanged.)
1326
1327 All three of these commands make marking diary entries. To insert a
1328 nonmarking entry, give a numeric argument to the command. For example,
1329 @kbd{C-u i a} makes a nonmarking anniversary diary entry.
1330
1331 Marking sexp diary entries in the calendar is @emph{extremely}
1332 time-consuming, since every date visible in the calendar window must be
1333 individually checked. So it's a good idea to make sexp diary entries
1334 nonmarking (with @samp{&}) when possible.
1335
1336 Another sophisticated kind of sexp entry, a @dfn{floating} diary entry,
1337 specifies a regularly occurring event by offsets specified in days,
1338 weeks, and months. It is comparable to a crontab entry interpreted by
1339 the @code{cron} utility. Here is a nonmarking, floating diary entry
1340 that applies to the last Thursday in November:
1341
1342 @findex diary-float
1343 @example
1344 &%%(diary-float 11 4 -1) American Thanksgiving
1345 @end example
1346
1347 @noindent
1348 The 11 specifies November (the eleventh month), the 4 specifies Thursday
1349 (the fourth day of the week, where Sunday is numbered zero), and the
1350 @minus{}1 specifies ``last'' (1 would mean ``first,'' 2 would mean
1351 ``second,'' @minus{}2 would mean ``second-to-last,'' and so on). The
1352 month can be a single month or a list of months. Thus you could change
1353 the 11 above to @samp{'(1 2 3)} and have the entry apply to the last
1354 Thursday of January, February, and March. If the month is @code{t}, the
1355 entry applies to all months of the year.@refill
1356
1357 Each of the standard sexp diary entries takes an optional parameter
1358 specifying the name of a face or a single-character string to use when
1359 marking the entry in the calendar. Most generally, sexp diary entries
1360 can perform arbitrary computations to determine when they apply.
1361 @inforef{Sexp Diary Entries,, emacs-xtra}.
1362
1363 @node Appointments
1364 @section Appointments
1365 @cindex appointment notification
1366
1367 @vindex appt-display-format
1368 @vindex appt-audible
1369 @vindex appt-display-mode-line
1370 If you have a diary entry for an appointment, and that diary entry
1371 begins with a recognizable time of day, Emacs can warn you several
1372 minutes beforehand that that appointment is pending. Emacs alerts you
1373 to the appointment by displaying a message in your chosen format, as
1374 specified by the variable @code{appt-display-format}. If the value of
1375 @code{appt-audible} is non-@code{nil}, the warning includes an audible
1376 reminder. In addition, if @code{appt-display-mode-line} is
1377 non-@code{nil}, Emacs displays the number of minutes to the
1378 appointment on the mode line.
1379
1380 @vindex appt-display-duration
1381 @vindex appt-disp-window-function
1382 @vindex appt-delete-window-function
1383 If @code{appt-display-format} has the value @code{window}, then the
1384 variable @code{appt-display-duration} controls how long the reminder
1385 window is visible for; and the variables
1386 @code{appt-disp-window-function} and @code{appt-delete-window-function}
1387 give the names of functions used to create and destroy the window,
1388 respectively.
1389
1390 @findex appt-activate
1391 To enable appointment notification, use the command @kbd{M-x
1392 appt-activate}. With a positive argument, it enables notification;
1393 with a negative argument, it disables notification; with no argument,
1394 it toggles. Enabling notification also sets up an appointment list
1395 for today from the diary file, giving all diary entries found with
1396 recognizable times of day, and reminds you just before each of them.
1397
1398 For example, suppose the diary file contains these lines:
1399
1400 @example
1401 Monday
1402 9:30am Coffee break
1403 12:00pm Lunch
1404 @end example
1405
1406 @vindex appt-message-warning-time
1407 @noindent
1408 Then on Mondays, you will be reminded at around 9:20am about your
1409 coffee break and at around 11:50am about lunch. The variable
1410 @code{appt-message-warning-time} specifies how many minutes in advance
1411 to warn you; its default value is 12 (12 minutes).
1412
1413 You can write times in am/pm style (with @samp{12:00am} standing
1414 for midnight and @samp{12:00pm} standing for noon), or 24-hour
1415 European/military style. You need not be consistent; your diary file
1416 can have a mixture of the two styles. Times must be at the beginning
1417 of lines if they are to be recognized.
1418
1419 @vindex appt-display-diary
1420 Emacs updates the appointments list from the diary file
1421 automatically just after midnight. You can force an update at any
1422 time by re-enabling appointment notification. Both these actions also
1423 display the day's diary buffer, unless you set
1424 @code{appt-display-diary} to @code{nil}. The appointments list is
1425 also updated whenever the diary file is saved.
1426
1427 @findex appt-add
1428 @findex appt-delete
1429 @cindex alarm clock
1430 You can also use the appointment notification facility like an alarm
1431 clock. The command @kbd{M-x appt-add} adds entries to the appointment
1432 list without affecting your diary file. You delete entries from the
1433 appointment list with @kbd{M-x appt-delete}.
1434
1435 @node Importing Diary
1436 @section Importing and Exporting Diary Entries
1437
1438 You can transfer diary entries between Emacs diary files and a
1439 variety of other formats.
1440
1441 @vindex diary-outlook-formats
1442 You can import diary entries from Outlook-generated appointment
1443 messages. While viewing such a message in Rmail or Gnus, do @kbd{M-x
1444 diary-from-outlook} to import the entry. You can make this command
1445 recognize additional appointment message formats by customizing the
1446 variable @code{diary-outlook-formats}.
1447
1448 @cindex iCalendar support
1449 The icalendar package allows you to transfer data between your Emacs
1450 diary file and iCalendar files, which are defined in ``RFC
1451 2445---Internet Calendaring and Scheduling Core Object Specification
1452 (iCalendar)'' (as well as the earlier vCalendar format).
1453
1454 Importing works for ``ordinary'' (i.e. non-recurring) events, but
1455 (at present) may not work correctly (if at all) for recurring events.
1456 Exporting of diary files into iCalendar files should work correctly
1457 for most diary entries. This feature is a work in progress, so the
1458 commands may evolve in future.
1459
1460 @findex icalendar-import-buffer
1461 The command @code{icalendar-import-buffer} extracts
1462 iCalendar data from the current buffer and adds it to your (default)
1463 diary file. This function is also suitable for automatic extraction of
1464 iCalendar data; for example with the Rmail mail client one could use:
1465
1466 @example
1467 (add-hook 'rmail-show-message-hook 'icalendar-import-buffer)
1468 @end example
1469
1470 @findex icalendar-import-file
1471 The command @code{icalendar-import-file} imports an iCalendar file
1472 and adds the results to an Emacs diary file. For example:
1473
1474 @example
1475 (icalendar-import-file "/here/is/calendar.ics" "/there/goes/ical-diary")
1476 @end example
1477
1478 @noindent
1479 You can use an @code{#include} directive to add the import file contents
1480 to the main diary file, if these are different files. @inforef{Fancy Diary
1481 Display,, emacs-xtra}.
1482
1483 @findex icalendar-export-file, icalendar-export-region
1484 Use @code{icalendar-export-file} to interactively export an entire
1485 Emacs diary file to iCalendar format. To export only a part of a diary
1486 file, mark the relevant area, and call @code{icalendar-export-region}.
1487 In both cases the result is appended to the target file.
1488
1489 @node Daylight Savings
1490 @section Daylight Savings Time
1491 @cindex daylight savings time
1492
1493 Emacs understands the difference between standard time and daylight
1494 savings time---the times given for sunrise, sunset, solstices,
1495 equinoxes, and the phases of the moon take that into account. The rules
1496 for daylight savings time vary from place to place and have also varied
1497 historically from year to year. To do the job properly, Emacs needs to
1498 know which rules to use.
1499
1500 @vindex calendar-daylight-savings-starts
1501 @vindex calendar-daylight-savings-ends
1502 Some operating systems keep track of the rules that apply to the place
1503 where you are; on these systems, Emacs gets the information it needs
1504 from the system automatically. If some or all of this information is
1505 missing, Emacs fills in the gaps with the rules currently used in
1506 Cambridge, Massachusetts. If the resulting rules are not what you want,
1507 you can tell Emacs the rules to use by setting certain variables:
1508 @code{calendar-daylight-savings-starts} and
1509 @code{calendar-daylight-savings-ends}.
1510
1511 These values should be Lisp expressions that refer to the variable
1512 @code{year}, and evaluate to the Gregorian date on which daylight
1513 savings time starts or (respectively) ends, in the form of a list
1514 @code{(@var{month} @var{day} @var{year})}. The values should be
1515 @code{nil} if your area does not use daylight savings time.
1516
1517 Emacs uses these expressions to determine the starting date of
1518 daylight savings time for the holiday list and for correcting times of
1519 day in the solar and lunar calculations.
1520
1521 The values for Cambridge, Massachusetts are as follows:
1522
1523 @example
1524 (calendar-nth-named-day 1 0 4 year)
1525 (calendar-nth-named-day -1 0 10 year)
1526 @end example
1527
1528 @noindent
1529 That is, the first 0th day (Sunday) of the fourth month (April) in
1530 the year specified by @code{year}, and the last Sunday of the tenth month
1531 (October) of that year. If daylight savings time were
1532 changed to start on October 1, you would set
1533 @code{calendar-daylight-savings-starts} to this:
1534
1535 @example
1536 (list 10 1 year)
1537 @end example
1538
1539 If there is no daylight savings time at your location, or if you want
1540 all times in standard time, set @code{calendar-daylight-savings-starts}
1541 and @code{calendar-daylight-savings-ends} to @code{nil}.
1542
1543 @vindex calendar-daylight-time-offset
1544 The variable @code{calendar-daylight-time-offset} specifies the
1545 difference between daylight savings time and standard time, measured in
1546 minutes. The value for Cambridge, Massachusetts is 60.
1547
1548 @c @vindex calendar-daylight-savings-starts-time too long!
1549 @vindex calendar-daylight-savings-ends-time
1550 The two variables @code{calendar-daylight-savings-starts-time} and
1551 @code{calendar-daylight-savings-ends-time} specify the number of minutes
1552 after midnight local time when the transition to and from daylight
1553 savings time should occur. For Cambridge, Massachusetts both variables'
1554 values are 120.
1555
1556 @node Time Intervals
1557 @section Summing Time Intervals
1558 @cindex time intervals, summing
1559 @cindex summing time intervals
1560 @cindex timeclock
1561
1562 The timeclock feature adds up time intervals, so you can (for
1563 instance) keep track of how much time you spend working on particular
1564 projects.
1565
1566 @findex timeclock-in
1567 @findex timeclock-out
1568 @findex timeclock-change
1569 @findex timeclock-workday-remaining
1570 @findex timeclock-when-to-leave
1571 Use the @kbd{M-x timeclock-in} command when you start working on a
1572 project, and @kbd{M-x timeclock-out} command when you're done. Each
1573 time you do this, it adds one time interval to the record of the
1574 project. You can change to working on a different project with @kbd{M-x
1575 timeclock-change}.
1576
1577 Once you've collected data from a number of time intervals, you can use
1578 @kbd{M-x timeclock-workday-remaining} to see how much time is left to
1579 work today (assuming a typical average of 8 hours a day), and @kbd{M-x
1580 timeclock-when-to-leave} which will calculate when you're ``done.''
1581
1582 @vindex timeclock-modeline-display
1583 @findex timeclock-modeline-display
1584 If you want Emacs to display the amount of time ``left'' of your
1585 workday in the mode line, either customize the
1586 @code{timeclock-modeline-display} variable and set its value to
1587 @code{t}, or invoke the @kbd{M-x timeclock-modeline-display} command.
1588
1589 @vindex timeclock-ask-before-exiting
1590 Terminating the current Emacs session might or might not mean that
1591 you have stopped working on the project and, by default, Emacs asks
1592 you. You can, however, set the value of the variable
1593 @code{timeclock-ask-before-exiting} to @code{nil} (via @kbd{M-x
1594 customize}) to avoid the question; then, only an explicit @kbd{M-x
1595 timeclock-out} or @kbd{M-x timeclock-change} will tell Emacs that the
1596 current interval is over.
1597
1598 @cindex @file{.timelog} file
1599 @vindex timeclock-file
1600 @findex timeclock-reread-log
1601 The timeclock functions work by accumulating the data in a file
1602 called @file{.timelog} in your home directory. You can specify a
1603 different name for this file by customizing the variable
1604 @code{timeclock-file}. If you edit the timeclock file manually, or if
1605 you change the value of any of timeclock's customizable variables, you
1606 should run the command @kbd{M-x timeclock-reread-log} to update the
1607 data in Emacs from the file.
1608
1609 @ignore
1610 arch-tag: 4531ef09-9df3-449d-9c52-2b5a4a337f92
1611 @end ignore