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