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