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