changeset 84227:8c094978067d

Move here from ../../man
author Glenn Morris <rgm@gnu.org>
date Thu, 06 Sep 2007 04:44:36 +0000
parents 8ad299ffcbc5
children 8a39803abca7
files doc/emacs/calendar.texi
diffstat 1 files changed, 1687 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/emacs/calendar.texi	Thu Sep 06 04:44:36 2007 +0000
@@ -0,0 +1,1687 @@
+@c This is part of the Emacs manual.
+@c Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 2000, 2001,
+@c   2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+@c See file emacs.texi for copying conditions.
+@node Calendar/Diary, Gnus, Dired, Top
+@chapter The Calendar and the Diary
+@cindex calendar
+@findex calendar
+
+  Emacs provides the functions of a desk calendar, with a diary of
+planned or past events.  It also has facilities for managing your
+appointments, and keeping track of how much time you spend working on
+certain projects.
+
+  To enter the calendar, type @kbd{M-x calendar}; this displays a
+three-month calendar centered on the current month, with point on the
+current date.  With a numeric argument, as in @kbd{C-u M-x calendar}, it
+prompts you for the month and year to be the center of the three-month
+calendar.  The calendar uses its own buffer, whose major mode is
+Calendar mode.
+
+  @kbd{Mouse-2} in the calendar brings up a menu of operations on a
+particular date; @kbd{Mouse-3} brings up a menu of commonly used
+calendar features that are independent of any particular date.  To exit
+the calendar, type @kbd{q}.
+
+@iftex
+  This chapter describes the basic calendar features.
+@inforef{Advanced Calendar/Diary Usage,, emacs-xtra}, for information
+about more specialized features.
+@end iftex
+
+@menu
+* Calendar Motion::     Moving through the calendar; selecting a date.
+* Scroll Calendar::     Bringing earlier or later months onto the screen.
+* Counting Days::       How many days are there between two dates?
+* General Calendar::    Exiting or recomputing the calendar.
+* Writing Calendar Files:: Writing calendars to files of various formats.
+* Holidays::            Displaying dates of holidays.
+* Sunrise/Sunset::      Displaying local times of sunrise and sunset.
+* Lunar Phases::        Displaying phases of the moon.
+* Other Calendars::     Converting dates to other calendar systems.
+* Diary::               Displaying events from your diary.
+* Appointments::	Reminders when it's time to do something.
+* Importing Diary::     Converting diary events to/from other formats.
+* Daylight Saving::     How to specify when daylight saving time is active.
+* Time Intervals::      Keeping track of time intervals.
+@ifnottex
+* Advanced Calendar/Diary Usage:: Advanced Calendar/Diary customization.
+@end ifnottex
+@end menu
+
+@node Calendar Motion
+@section Movement in the Calendar
+
+@cindex moving inside the calendar
+  Calendar mode provides commands to move through the calendar in
+logical units of time such as days, weeks, months, and years.  If you
+move outside the three months originally displayed, the calendar
+display ``scrolls'' automatically through time to make the selected
+date visible.  Moving to a date lets you view its holidays or diary
+entries, or convert it to other calendars; moving by long time periods
+is also useful simply to scroll the calendar.
+
+@menu
+* Calendar Unit Motion::      Moving by days, weeks, months, and years.
+* Move to Beginning or End::  Moving to start/end of weeks, months, and years.
+* Specified Dates::           Moving to the current date or another
+                                specific date.
+@end menu
+
+@node Calendar Unit Motion
+@subsection Motion by Standard Lengths of Time
+
+  The commands for movement in the calendar buffer parallel the
+commands for movement in text.  You can move forward and backward by
+days, weeks, months, and years.
+
+@table @kbd
+@item C-f
+Move point one day forward (@code{calendar-forward-day}).
+@item C-b
+Move point one day backward (@code{calendar-backward-day}).
+@item C-n
+Move point one week forward (@code{calendar-forward-week}).
+@item C-p
+Move point one week backward (@code{calendar-backward-week}).
+@item M-@}
+Move point one month forward (@code{calendar-forward-month}).
+@item M-@{
+Move point one month backward (@code{calendar-backward-month}).
+@item C-x ]
+Move point one year forward (@code{calendar-forward-year}).
+@item C-x [
+Move point one year backward (@code{calendar-backward-year}).
+@end table
+
+@kindex C-f @r{(Calendar mode)}
+@findex calendar-forward-day
+@kindex C-b @r{(Calendar mode)}
+@findex calendar-backward-day
+@kindex C-n @r{(Calendar mode)}
+@findex calendar-forward-week
+@kindex C-p @r{(Calendar mode)}
+@findex calendar-backward-week
+  The day and week commands are natural analogues of the usual Emacs
+commands for moving by characters and by lines.  Just as @kbd{C-n}
+usually moves to the same column in the following line, in Calendar
+mode it moves to the same day in the following week.  And @kbd{C-p}
+moves to the same day in the previous week.
+
+  The arrow keys are equivalent to @kbd{C-f}, @kbd{C-b}, @kbd{C-n} and
+@kbd{C-p}, just as they normally are in other modes.
+
+@kindex M-@} @r{(Calendar mode)}
+@findex calendar-forward-month
+@kindex M-@{ @r{(Calendar mode)}
+@findex calendar-backward-month
+@kindex C-x ] @r{(Calendar mode)}
+@findex calendar-forward-year
+@kindex C-x [ @r{(Calendar mode)}
+@findex calendar-forward-year
+  The commands for motion by months and years work like those for
+weeks, but move a larger distance.  The month commands @kbd{M-@}} and
+@kbd{M-@{} move forward or backward by an entire month.  The year
+commands @kbd{C-x ]} and @w{@kbd{C-x [}} move forward or backward a
+whole year.
+
+  The easiest way to remember these commands is to consider months and
+years analogous to paragraphs and pages of text, respectively.  But
+the commands themselves are not quite analogous.  The ordinary Emacs
+paragraph commands move to the beginning or end of a paragraph,
+whereas these month and year commands move by an entire month or an
+entire year, keeping the same date within the month or year.
+
+  All these commands accept a numeric argument as a repeat count.
+For convenience, the digit keys and the minus sign specify numeric
+arguments in Calendar mode even without the Meta modifier.  For example,
+@kbd{100 C-f} moves point 100 days forward from its present location.
+
+@node Move to Beginning or End
+@subsection Beginning or End of Week, Month or Year
+
+  A week (or month, or year) is not just a quantity of days; we think of
+weeks (months, years) as starting on particular dates.  So Calendar mode
+provides commands to move to the beginning or end of a week, month or
+year:
+
+@table @kbd
+@kindex C-a @r{(Calendar mode)}
+@findex calendar-beginning-of-week
+@item C-a
+Move point to start of week (@code{calendar-beginning-of-week}).
+@kindex C-e @r{(Calendar mode)}
+@findex calendar-end-of-week
+@item C-e
+Move point to end of week (@code{calendar-end-of-week}).
+@kindex M-a @r{(Calendar mode)}
+@findex calendar-beginning-of-month
+@item M-a
+Move point to start of month (@code{calendar-beginning-of-month}).
+@kindex M-e @r{(Calendar mode)}
+@findex calendar-end-of-month
+@item M-e
+Move point to end of month (@code{calendar-end-of-month}).
+@kindex M-< @r{(Calendar mode)}
+@findex calendar-beginning-of-year
+@item M-<
+Move point to start of year (@code{calendar-beginning-of-year}).
+@kindex M-> @r{(Calendar mode)}
+@findex calendar-end-of-year
+@item M->
+Move point to end of year (@code{calendar-end-of-year}).
+@end table
+
+  These commands also take numeric arguments as repeat counts, with the
+repeat count indicating how many weeks, months, or years to move
+backward or forward.
+
+@vindex calendar-week-start-day
+@cindex weeks, which day they start on
+@cindex calendar, first day of week
+  By default, weeks begin on Sunday.  To make them begin on Monday
+instead, set the variable @code{calendar-week-start-day} to 1.
+
+@node Specified Dates
+@subsection Specified Dates
+
+  Calendar mode provides commands for moving to a particular date
+specified in various ways.
+
+@table @kbd
+@item g d
+Move point to specified date (@code{calendar-goto-date}).
+@item g D
+Move point to specified day of year (@code{calendar-goto-day-of-year}).
+@item g w
+Move point to specified week of year (@code{calendar-goto-iso-week}).
+@item o
+Center calendar around specified month (@code{calendar-other-month}).
+@item .
+Move point to today's date (@code{calendar-goto-today}).
+@end table
+
+@kindex g d @r{(Calendar mode)}
+@findex calendar-goto-date
+  @kbd{g d} (@code{calendar-goto-date}) prompts for a year, a month, and a day
+of the month, and then moves to that date.  Because the calendar includes all
+dates from the beginning of the current era, you must type the year in its
+entirety; that is, type @samp{1990}, not @samp{90}.
+
+@kindex g D @r{(Calendar mode)}
+@findex calendar-goto-day-of-year
+@kindex g w @r{(Calendar mode)}
+@findex calendar-goto-iso-week
+  @kbd{g D} (@code{calendar-goto-day-of-year}) prompts for a year and
+day number, and moves to that date.  Negative day numbers count
+backward from the end of the year.  @kbd{g w}
+(@code{calendar-goto-iso-week}) prompts for a year and week number,
+and moves to that week.
+
+@kindex o @r{(Calendar mode)}
+@findex calendar-other-month
+  @kbd{o} (@code{calendar-other-month}) prompts for a month and year,
+then centers the three-month calendar around that month.
+
+@kindex . @r{(Calendar mode)}
+@findex calendar-goto-today
+  You can return to today's date with @kbd{.}@:
+(@code{calendar-goto-today}).
+
+@node Scroll Calendar
+@section Scrolling in the Calendar
+
+@cindex scrolling in the calendar
+  The calendar display scrolls automatically through time when you
+move out of the visible portion.  You can also scroll it manually.
+Imagine that the calendar window contains a long strip of paper with
+the months on it.  Scrolling the calendar means moving the strip
+horizontally, so that new months become visible in the window.
+
+@table @kbd
+@item >
+Scroll calendar one month forward (@code{scroll-calendar-left}).
+@item <
+Scroll calendar one month backward (@code{scroll-calendar-right}).
+@item C-v
+@itemx @key{NEXT}
+Scroll calendar three months forward
+(@code{scroll-calendar-left-three-months}).
+@item M-v
+@itemx @key{PRIOR}
+Scroll calendar three months backward
+(@code{scroll-calendar-right-three-months}).
+@end table
+
+@kindex > @r{(Calendar mode)}
+@findex scroll-calendar-left
+@kindex < @r{(Calendar mode)}
+@findex scroll-calendar-right
+  The most basic calendar scroll commands scroll by one month at a
+time.  This means that there are two months of overlap between the
+display before the command and the display after.  @kbd{>} scrolls the
+calendar contents one month forward in time.  @kbd{<} scrolls the
+contents one month backwards in time.
+
+@kindex C-v @r{(Calendar mode)}
+@findex scroll-calendar-left-three-months
+@kindex M-v @r{(Calendar mode)}
+@findex scroll-calendar-right-three-months
+  The commands @kbd{C-v} and @kbd{M-v} scroll the calendar by an entire
+``screenful''---three months---in analogy with the usual meaning of
+these commands.  @kbd{C-v} makes later dates visible and @kbd{M-v} makes
+earlier dates visible.  These commands take a numeric argument as a
+repeat count; in particular, since @kbd{C-u} multiplies the next command
+by four, typing @kbd{C-u C-v} scrolls the calendar forward by a year and
+typing @kbd{C-u M-v} scrolls the calendar backward by a year.
+
+  The function keys @key{NEXT} and @key{PRIOR} are equivalent to
+@kbd{C-v} and @kbd{M-v}, just as they are in other modes.
+
+@node Counting Days
+@section Counting Days
+
+@table @kbd
+@item M-=
+Display the number of days in the current region
+(@code{calendar-count-days-region}).
+@end table
+
+@kindex M-= @r{(Calendar mode)}
+@findex calendar-count-days-region
+  To determine the number of days in the region, type @kbd{M-=}
+(@code{calendar-count-days-region}).  The numbers of days shown is
+@emph{inclusive}; that is, it includes the days specified by mark and
+point.
+
+@node General Calendar
+@section Miscellaneous Calendar Commands
+
+@table @kbd
+@item p d
+Display day-in-year (@code{calendar-print-day-of-year}).
+@item C-c C-l
+Regenerate the calendar window (@code{redraw-calendar}).
+@item SPC
+Scroll the next window up (@code{scroll-other-window}).
+@item DEL
+Scroll the next window down (@code{scroll-other-window-down}).
+@item q
+Exit from calendar (@code{exit-calendar}).
+@end table
+
+@kindex p d @r{(Calendar mode)}
+@cindex day of year
+@findex calendar-print-day-of-year
+  To display the number of days elapsed since the start of the year, or
+the number of days remaining in the year, type the @kbd{p d} command
+(@code{calendar-print-day-of-year}).  This displays both of those
+numbers in the echo area.  The count of days elapsed includes the
+selected date.  The count of days remaining does not include that
+date.
+
+@kindex C-c C-l @r{(Calendar mode)}
+@findex redraw-calendar
+  If the calendar window text gets corrupted, type @kbd{C-c C-l}
+(@code{redraw-calendar}) to redraw it.  (This can only happen if you use
+non-Calendar-mode editing commands.)
+
+@kindex SPC @r{(Calendar mode)}
+  In Calendar mode, you can use @kbd{SPC} (@code{scroll-other-window})
+and @kbd{DEL} (@code{scroll-other-window-down}) to scroll the other
+window up or down, respectively.  This is handy when you display a list
+of holidays or diary entries in another window.
+
+@kindex q @r{(Calendar mode)}
+@findex exit-calendar
+  To exit from the calendar, type @kbd{q} (@code{exit-calendar}).  This
+buries all buffers related to the calendar, selecting other buffers.
+(If a frame contains a dedicated calendar window, exiting from the
+calendar iconifies that frame.)
+
+@node Writing Calendar Files
+@section Writing Calendar Files
+
+  These packages produce files of various formats containing calendar
+and diary entries, for display purposes.
+
+@cindex calendar and HTML
+  The Calendar HTML commands produce files of HTML code that contain
+calendar and diary entries.  Each file applies to one month, and has a
+name of the format @file{@var{yyyy}-@var{mm}.html}, where @var{yyyy} and
+@var{mm} are the four-digit year and two-digit month, respectively.  The
+variable @code{cal-html-directory} specifies the default output
+directory for the HTML files.
+
+@vindex cal-html-css-default
+  Diary entries enclosed by @code{<} and @code{>} are interpreted as
+HTML tags (for example: this is a diary entry with <font
+color=''red''>some red text</font>).  You can change the overall
+appearance of the displayed HTML pages (for example, the color of
+various page elements, header styles) via a stylesheet @file{cal.css} in
+the directory containing the HTML files (see the value of the variable
+@code{cal-html-css-default} for relevant style settings).
+
+@kindex t @r{(Calendar mode)}
+@table @kbd
+@item H m
+Generate a one-month calendar (@code{cal-html-cursor-month}).
+@item H y
+Generate a calendar file for each month of a year, as well as an index
+page (@code{cal-html-cursor-year}).  By default, this command writes
+files to a @var{yyyy} subdirectory - if this is altered some hyperlinks
+between years will not work.
+@end table
+
+  If the variable @code{cal-html-print-day-number-flag} is
+non-@code{nil}, then the monthly calendars show the day-of-the-year
+number. The variable @code{cal-html-year-index-cols} specifies the
+number of columns in the yearly index page.
+
+@cindex calendar and La@TeX{}
+  The Calendar La@TeX{} commands produce a buffer of La@TeX{} code that
+prints as a calendar.  Depending on the command you use, the printed
+calendar covers the day, week, month or year that point is in.
+
+@kindex t @r{(Calendar mode)}
+@table @kbd
+@item t m
+Generate a one-month calendar (@code{cal-tex-cursor-month}).
+@item t M
+Generate a sideways-printing one-month calendar
+(@code{cal-tex-cursor-month-landscape}).
+@item t d
+Generate a one-day calendar
+(@code{cal-tex-cursor-day}).
+@item t w 1
+Generate a one-page calendar for one week
+(@code{cal-tex-cursor-week}).
+@item t w 2
+Generate a two-page calendar for one week
+(@code{cal-tex-cursor-week2}).
+@item t w 3
+Generate an ISO-style calendar for one week
+(@code{cal-tex-cursor-week-iso}).
+@item t w 4
+Generate a calendar for one Monday-starting week
+(@code{cal-tex-cursor-week-monday}).
+@item t f w
+Generate a Filofax-style two-weeks-at-a-glance calendar
+(@code{cal-tex-cursor-filofax-2week}).
+@item t f W
+Generate a Filofax-style one-week-at-a-glance calendar
+(@code{cal-tex-cursor-filofax-week}).
+@item t y
+Generate a calendar for one year
+(@code{cal-tex-cursor-year}).
+@item t Y
+Generate a sideways-printing calendar for one year
+(@code{cal-tex-cursor-year-landscape}).
+@item t f y
+Generate a Filofax-style calendar for one year
+(@code{cal-tex-cursor-filofax-year}).
+@end table
+
+  Some of these commands print the calendar sideways (in ``landscape
+mode''), so it can be wider than it is long.  Some of them use Filofax
+paper size (3.75in x 6.75in).  All of these commands accept a prefix
+argument which specifies how many days, weeks, months or years to print
+(starting always with the selected one).
+
+  If the variable @code{cal-tex-holidays} is non-@code{nil} (the default),
+then the printed calendars show the holidays in @code{calendar-holidays}.
+If the variable @code{cal-tex-diary} is non-@code{nil} (the default is
+@code{nil}), diary entries are included also (in monthly, filofax, and
+iso-week calendars only).  If the variable @code{cal-tex-rules} is
+non-@code{nil} (the default is @code{nil}), the calendar displays ruled
+pages in styles that have sufficient room.  Consult the documentation of
+the individual cal-tex functions to see which calendars support which
+features.
+
+  You can use the variable @code{cal-tex-preamble-extra} to insert extra
+La@TeX{} commands in the preamble of the generated document if you need
+to.
+
+@node Holidays
+@section Holidays
+@cindex holidays
+
+  The Emacs calendar knows about all major and many minor holidays,
+and can display them.
+
+@table @kbd
+@item h
+Display holidays for the selected date
+(@code{calendar-cursor-holidays}).
+@item Mouse-2 Holidays
+Display any holidays for the date you click on.
+@item x
+Mark holidays in the calendar window (@code{mark-calendar-holidays}).
+@item u
+Unmark calendar window (@code{calendar-unmark}).
+@item a
+List all holidays for the displayed three months in another window
+(@code{list-calendar-holidays}).
+@item M-x holidays
+List all holidays for three months around today's date in another
+window.
+@item M-x list-holidays
+List holidays in another window for a specified range of years.
+@end table
+
+@kindex h @r{(Calendar mode)}
+@findex calendar-cursor-holidays
+@vindex view-calendar-holidays-initially
+  To see if any holidays fall on a given date, position point on that
+date in the calendar window and use the @kbd{h} command.  Alternatively,
+click on that date with @kbd{Mouse-2} and then choose @kbd{Holidays}
+from the menu that appears.  Either way, this displays the holidays for
+that date, in the echo area if they fit there, otherwise in a separate
+window.
+
+@kindex x @r{(Calendar mode)}
+@findex mark-calendar-holidays
+@kindex u @r{(Calendar mode)}
+@findex calendar-unmark
+@vindex mark-holidays-in-calendar
+  To view the distribution of holidays for all the dates shown in the
+calendar, use the @kbd{x} command.  This displays the dates that are
+holidays in a different face (or places a @samp{*} after these dates, if
+display with multiple faces is not available).
+@iftex
+@inforef{Calendar Customizing, calendar-holiday-marker, emacs-xtra}.
+@end iftex
+@ifnottex
+@xref{Calendar Customizing, calendar-holiday-marker}.
+@end ifnottex
+  The command applies both to the currently visible months and to
+other months that subsequently become visible by scrolling.  To turn
+marking off and erase the current marks, type @kbd{u}, which also
+erases any diary marks (@pxref{Diary}).  If the variable
+@code{mark-holidays-in-calendar} is non-@code{nil}, creating or
+updating the calendar marks holidays automatically.
+
+@kindex a @r{(Calendar mode)}
+@findex list-calendar-holidays
+  To get even more detailed information, use the @kbd{a} command, which
+displays a separate buffer containing a list of all holidays in the
+current three-month range.  You can use @key{SPC} and @key{DEL} in the
+calendar window to scroll that list up and down, respectively.
+
+@findex holidays
+  The command @kbd{M-x holidays} displays the list of holidays for the
+current month and the preceding and succeeding months; this works even
+if you don't have a calendar window.  If the variable
+@code{view-calendar-holidays-initially} is non-@code{nil}, creating
+the calendar displays holidays in this way.  If you want the list of
+holidays centered around a different month, use @kbd{C-u M-x
+holidays}, which prompts for the month and year.
+
+  The holidays known to Emacs include United States holidays and the
+major Christian, Jewish, and Islamic holidays; also the solstices and
+equinoxes.
+
+@findex list-holidays
+   The command @kbd{M-x list-holidays} displays the list of holidays for
+a range of years.  This function asks you for the starting and stopping
+years, and allows you to choose all the holidays or one of several
+categories of holidays.  You can use this command even if you don't have
+a calendar window.
+
+  The dates used by Emacs for holidays are based on @emph{current
+practice}, not historical fact.  For example Veteran's Day began in
+1919, but is shown in earlier years.
+
+@node Sunrise/Sunset
+@section Times of Sunrise and Sunset
+@cindex sunrise and sunset
+
+  Special calendar commands can tell you, to within a minute or two, the
+times of sunrise and sunset for any date.
+
+@table @kbd
+@item S
+Display times of sunrise and sunset for the selected date
+(@code{calendar-sunrise-sunset}).
+@item Mouse-2 Sunrise/sunset
+Display times of sunrise and sunset for the date you click on.
+@item M-x sunrise-sunset
+Display times of sunrise and sunset for today's date.
+@item C-u M-x sunrise-sunset
+Display times of sunrise and sunset for a specified date.
+@end table
+
+@kindex S @r{(Calendar mode)}
+@findex calendar-sunrise-sunset
+@findex sunrise-sunset
+  Within the calendar, to display the @emph{local times} of sunrise and
+sunset in the echo area, move point to the date you want, and type
+@kbd{S}.  Alternatively, click @kbd{Mouse-2} on the date, then choose
+@samp{Sunrise/sunset} from the menu that appears.  The command @kbd{M-x
+sunrise-sunset} is available outside the calendar to display this
+information for today's date or a specified date.  To specify a date
+other than today, use @kbd{C-u M-x sunrise-sunset}, which prompts for
+the year, month, and day.
+
+  You can display the times of sunrise and sunset for any location and
+any date with @kbd{C-u C-u M-x sunrise-sunset}.  This asks you for a
+longitude, latitude, number of minutes difference from Coordinated
+Universal Time, and date, and then tells you the times of sunrise and
+sunset for that location on that date.
+
+  Because the times of sunrise and sunset depend on the location on
+earth, you need to tell Emacs your latitude, longitude, and location
+name before using these commands.  Here is an example of what to set:
+
+@vindex calendar-location-name
+@vindex calendar-longitude
+@vindex calendar-latitude
+@example
+(setq calendar-latitude 40.1)
+(setq calendar-longitude -88.2)
+(setq calendar-location-name "Urbana, IL")
+@end example
+
+@noindent
+Use one decimal place in the values of @code{calendar-latitude} and
+@code{calendar-longitude}.
+
+  Your time zone also affects the local time of sunrise and sunset.
+Emacs usually gets time zone information from the operating system, but
+if these values are not what you want (or if the operating system does
+not supply them), you must set them yourself.  Here is an example:
+
+@vindex calendar-time-zone
+@vindex calendar-standard-time-zone-name
+@vindex calendar-daylight-time-zone-name
+@example
+(setq calendar-time-zone -360)
+(setq calendar-standard-time-zone-name "CST")
+(setq calendar-daylight-time-zone-name "CDT")
+@end example
+
+@noindent
+The value of @code{calendar-time-zone} is the number of minutes
+difference between your local standard time and Coordinated Universal
+Time (Greenwich time).  The values of
+@code{calendar-standard-time-zone-name} and
+@code{calendar-daylight-time-zone-name} are the abbreviations used in
+your time zone.  Emacs displays the times of sunrise and sunset
+@emph{corrected for daylight saving time}.  @xref{Daylight Saving},
+for how daylight saving time is determined.
+
+  As a user, you might find it convenient to set the calendar location
+variables for your usual physical location in your @file{.emacs} file.
+And when you install Emacs on a machine, you can create a
+@file{default.el} file which sets them properly for the typical location
+of most users of that machine.  @xref{Init File}.
+
+@node Lunar Phases
+@section Phases of the Moon
+@cindex phases of the moon
+@cindex moon, phases of
+
+  These calendar commands display the dates and times of the phases of
+the moon (new moon, first quarter, full moon, last quarter).  This
+feature is useful for debugging problems that ``depend on the phase of
+the moon.''
+
+@table @kbd
+@item M
+Display the dates and times for all the quarters of the moon for the
+three-month period shown (@code{calendar-phases-of-moon}).
+@item M-x phases-of-moon
+Display dates and times of the quarters of the moon for three months around
+today's date.
+@end table
+
+@kindex M @r{(Calendar mode)}
+@findex calendar-phases-of-moon
+  Within the calendar, use the @kbd{M} command to display a separate
+buffer of the phases of the moon for the current three-month range.  The
+dates and times listed are accurate to within a few minutes.
+
+@findex phases-of-moon
+  Outside the calendar, use the command @kbd{M-x phases-of-moon} to
+display the list of the phases of the moon for the current month and the
+preceding and succeeding months.  For information about a different
+month, use @kbd{C-u M-x phases-of-moon}, which prompts for the month and
+year.
+
+  The dates and times given for the phases of the moon are given in
+local time (corrected for daylight saving, when appropriate); but if
+the variable @code{calendar-time-zone} is void, Coordinated Universal
+Time (the Greenwich time zone) is used.  @xref{Daylight Saving}.
+
+@node Other Calendars
+@section Conversion To and From Other Calendars
+
+@cindex Gregorian calendar
+  The Emacs calendar displayed is @emph{always} the Gregorian calendar,
+sometimes called the ``new style'' calendar, which is used in most of
+the world today.  However, this calendar did not exist before the
+sixteenth century and was not widely used before the eighteenth century;
+it did not fully displace the Julian calendar and gain universal
+acceptance until the early twentieth century.  The Emacs calendar can
+display any month since January, year 1 of the current era, but the
+calendar displayed is the Gregorian, even for a date at which the
+Gregorian calendar did not exist.
+
+  While Emacs cannot display other calendars, it can convert dates to
+and from several other calendars.
+
+@menu
+* Calendar Systems::	   The calendars Emacs understands
+			     (aside from Gregorian).
+* To Other Calendar::	   Converting the selected date to various calendars.
+* From Other Calendar::	   Moving to a date specified in another calendar.
+* Mayan Calendar::	   Moving to a date specified in a Mayan calendar.
+@end menu
+
+@node Calendar Systems
+@subsection Supported Calendar Systems
+
+@cindex ISO commercial calendar
+  The ISO commercial calendar is used largely in Europe.
+
+@cindex Julian calendar
+  The Julian calendar, named after Julius Caesar, was the one used in Europe
+throughout medieval times, and in many countries up until the nineteenth
+century.
+
+@cindex Julian day numbers
+@cindex astronomical day numbers
+  Astronomers use a simple counting of days elapsed since noon, Monday,
+January 1, 4713 B.C. on the Julian calendar.  The number of days elapsed
+is called the @dfn{Julian day number} or the @dfn{Astronomical day number}.
+
+@cindex Hebrew calendar
+  The Hebrew calendar is used by tradition in the Jewish religion.  The
+Emacs calendar program uses the Hebrew calendar to determine the dates
+of Jewish holidays.  Hebrew calendar dates begin and end at sunset.
+
+@cindex Islamic calendar
+  The Islamic calendar is used in many predominantly Islamic countries.
+Emacs uses it to determine the dates of Islamic holidays.  There is no
+universal agreement in the Islamic world about the calendar; Emacs uses
+a widely accepted version, but the precise dates of Islamic holidays
+often depend on proclamation by religious authorities, not on
+calculations.  As a consequence, the actual dates of observance can vary
+slightly from the dates computed by Emacs.  Islamic calendar dates begin
+and end at sunset.
+
+@cindex French Revolutionary calendar
+  The French Revolutionary calendar was created by the Jacobins after the 1789
+revolution, to represent a more secular and nature-based view of the annual
+cycle, and to install a 10-day week in a rationalization measure similar to
+the metric system.  The French government officially abandoned this
+calendar at the end of 1805.
+
+@cindex Mayan calendar
+  The Maya of Central America used three separate, overlapping calendar
+systems, the @emph{long count}, the @emph{tzolkin}, and the @emph{haab}.
+Emacs knows about all three of these calendars.  Experts dispute the
+exact correlation between the Mayan calendar and our calendar; Emacs uses the
+Goodman-Martinez-Thompson correlation in its calculations.
+
+@cindex Coptic calendar
+@cindex Ethiopic calendar
+  The Copts use a calendar based on the ancient Egyptian solar calendar.
+Their calendar consists of twelve 30-day months followed by an extra
+five-day period.  Once every fourth year they add a leap day to this
+extra period to make it six days.  The Ethiopic calendar is identical in
+structure, but has different year numbers and month names.
+
+@cindex Persian calendar
+  The Persians use a solar calendar based on a design of Omar Khayyam.
+Their calendar consists of twelve months of which the first six have 31
+days, the next five have 30 days, and the last has 29 in ordinary years
+and 30 in leap years.  Leap years occur in a complicated pattern every
+four or five years.
+The calendar implemented here is the arithmetical Persian calendar
+championed by Birashk, based on a 2,820-year cycle.  It differs from
+the astronomical Persian calendar, which is based on astronomical
+events.  As of this writing the first future discrepancy is projected
+to occur on March 20, 2025.  It is currently not clear what the
+official calendar of Iran will be that far into the future.
+
+@cindex Chinese calendar
+  The Chinese calendar is a complicated system of lunar months arranged
+into solar years.  The years go in cycles of sixty, each year containing
+either twelve months in an ordinary year or thirteen months in a leap
+year; each month has either 29 or 30 days.  Years, ordinary months, and
+days are named by combining one of ten ``celestial stems'' with one of
+twelve ``terrestrial branches'' for a total of sixty names that are
+repeated in a cycle of sixty.
+
+@node To Other Calendar
+@subsection Converting To Other Calendars
+
+  The following commands describe the selected date (the date at point)
+in various other calendar systems:
+
+@table @kbd
+@item Mouse-2  Other calendars
+Display the date that you click on, expressed in various other calendars.
+@kindex p @r{(Calendar mode)}
+@findex calendar-print-iso-date
+@item p c
+Display ISO commercial calendar equivalent for selected day
+(@code{calendar-print-iso-date}).
+@findex calendar-print-julian-date
+@item p j
+Display Julian date for selected day (@code{calendar-print-julian-date}).
+@findex calendar-print-astro-day-number
+@item p a
+Display astronomical (Julian) day number for selected day
+(@code{calendar-print-astro-day-number}).
+@findex calendar-print-hebrew-date
+@item p h
+Display Hebrew date for selected day (@code{calendar-print-hebrew-date}).
+@findex calendar-print-islamic-date
+@item p i
+Display Islamic date for selected day (@code{calendar-print-islamic-date}).
+@findex calendar-print-french-date
+@item p f
+Display French Revolutionary date for selected day
+(@code{calendar-print-french-date}).
+@findex calendar-print-chinese-date
+@item p C
+Display Chinese date for selected day
+(@code{calendar-print-chinese-date}).
+@findex calendar-print-coptic-date
+@item p k
+Display Coptic date for selected day
+(@code{calendar-print-coptic-date}).
+@findex calendar-print-ethiopic-date
+@item p e
+Display Ethiopic date for selected day
+(@code{calendar-print-ethiopic-date}).
+@findex calendar-print-persian-date
+@item p p
+Display Persian date for selected day
+(@code{calendar-print-persian-date}).
+@findex calendar-print-mayan-date
+@item p m
+Display Mayan date for selected day (@code{calendar-print-mayan-date}).
+@end table
+
+  If you are using X, the easiest way to translate a date into other
+calendars is to click on it with @kbd{Mouse-2}, then choose @kbd{Other
+calendars} from the menu that appears.  This displays the equivalent
+forms of the date in all the calendars Emacs understands, in the form of
+a menu.  (Choosing an alternative from this menu doesn't actually do
+anything---the menu is used only for display.)
+
+  Otherwise, move point to the date you want to convert, then type the
+appropriate command starting with @kbd{p} from the table above.  The
+prefix @kbd{p} is a mnemonic for ``print,'' since Emacs ``prints'' the
+equivalent date in the echo area.
+
+@node From Other Calendar
+@subsection Converting From Other Calendars
+
+  You can use the other supported calendars to specify a date to move
+to.  This section describes the commands for doing this using calendars
+other than Mayan; for the Mayan calendar, see the following section.
+
+@kindex g @var{char} @r{(Calendar mode)}
+@findex calendar-goto-iso-date
+@findex calendar-goto-iso-week
+@findex calendar-goto-julian-date
+@findex calendar-goto-astro-day-number
+@findex calendar-goto-hebrew-date
+@findex calendar-goto-islamic-date
+@findex calendar-goto-french-date
+@findex calendar-goto-chinese-date
+@findex calendar-goto-persian-date
+@findex calendar-goto-coptic-date
+@findex calendar-goto-ethiopic-date
+@table @kbd
+@item g c
+Move to a date specified in the ISO commercial calendar
+(@code{calendar-goto-iso-date}).
+@item g w
+Move to a week specified in the ISO commercial calendar
+(@code{calendar-goto-iso-week}).
+@item g j
+Move to a date specified in the Julian calendar
+(@code{calendar-goto-julian-date}).
+@item g a
+Move to a date specified with an astronomical (Julian) day number
+(@code{calendar-goto-astro-day-number}).
+@item g h
+Move to a date specified in the Hebrew calendar
+(@code{calendar-goto-hebrew-date}).
+@item g i
+Move to a date specified in the Islamic calendar
+(@code{calendar-goto-islamic-date}).
+@item g f
+Move to a date specified in the French Revolutionary calendar
+(@code{calendar-goto-french-date}).
+@item g C
+Move to a date specified in the Chinese calendar
+(@code{calendar-goto-chinese-date}).
+@item g p
+Move to a date specified in the Persian calendar
+(@code{calendar-goto-persian-date}).
+@item g k
+Move to a date specified in the Coptic calendar
+(@code{calendar-goto-coptic-date}).
+@item g e
+Move to a date specified in the Ethiopic calendar
+(@code{calendar-goto-ethiopic-date}).
+@end table
+
+  These commands ask you for a date on the other calendar, move point to
+the Gregorian calendar date equivalent to that date, and display the
+other calendar's date in the echo area.  Emacs uses strict completion
+(@pxref{Completion}) whenever it asks you to type a month name, so you
+don't have to worry about the spelling of Hebrew, Islamic, or French names.
+
+@findex list-yahrzeit-dates
+@cindex yahrzeits
+  One common question concerning the Hebrew calendar is the computation
+of the anniversary of a date of death, called a ``yahrzeit.''  The Emacs
+calendar includes a facility for such calculations.  If you are in the
+calendar, the command @kbd{M-x list-yahrzeit-dates} asks you for a
+range of years and then displays a list of the yahrzeit dates for those
+years for the date given by point.  If you are not in the calendar,
+this command first asks you for the date of death and the range of
+years, and then displays the list of yahrzeit dates.
+
+@node Mayan Calendar
+@subsection Converting from the Mayan Calendar
+
+  Here are the commands to select dates based on the Mayan calendar:
+
+@table @kbd
+@item g m l
+Move to a date specified by the long count calendar
+(@code{calendar-goto-mayan-long-count-date}).
+@item g m n t
+Move to the next occurrence of a place in the
+tzolkin calendar (@code{calendar-next-tzolkin-date}).
+@item g m p t
+Move to the previous occurrence of a place in the
+tzolkin calendar (@code{calendar-previous-tzolkin-date}).
+@item g m n h
+Move to the next occurrence of a place in the
+haab calendar (@code{calendar-next-haab-date}).
+@item g m p h
+Move to the previous occurrence of a place in the
+haab calendar (@code{calendar-previous-haab-date}).
+@item g m n c
+Move to the next occurrence of a place in the
+calendar round (@code{calendar-next-calendar-round-date}).
+@item g m p c
+Move to the previous occurrence of a place in the
+calendar round (@code{calendar-previous-calendar-round-date}).
+@end table
+
+@cindex Mayan long count
+  To understand these commands, you need to understand the Mayan calendars.
+The @dfn{long count} is a counting of days with these units:
+
+@display
+1 kin = 1 day@ @ @ 1 uinal = 20 kin@ @ @ 1 tun = 18 uinal
+1 katun = 20 tun@ @ @ 1 baktun = 20 katun
+@end display
+
+@kindex g m @r{(Calendar mode)}
+@findex calendar-goto-mayan-long-count-date
+@noindent
+Thus, the long count date 12.16.11.16.6 means 12 baktun, 16 katun, 11
+tun, 16 uinal, and 6 kin.  The Emacs calendar can handle Mayan long
+count dates as early as 7.17.18.13.3, but no earlier.  When you use the
+@kbd{g m l} command, type the Mayan long count date with the baktun,
+katun, tun, uinal, and kin separated by periods.
+
+@findex calendar-previous-tzolkin-date
+@findex calendar-next-tzolkin-date
+@cindex Mayan tzolkin calendar
+  The Mayan tzolkin calendar is a cycle of 260 days formed by a pair of
+independent cycles of 13 and 20 days.  Since this cycle repeats
+endlessly, Emacs provides commands to move backward and forward to the
+previous or next point in the cycle.  Type @kbd{g m p t} to go to the
+previous tzolkin date; Emacs asks you for a tzolkin date and moves point
+to the previous occurrence of that date.  Similarly, type @kbd{g m n t}
+to go to the next occurrence of a tzolkin date.
+
+@findex calendar-previous-haab-date
+@findex calendar-next-haab-date
+@cindex Mayan haab calendar
+  The Mayan haab calendar is a cycle of 365 days arranged as 18 months
+of 20 days each, followed a 5-day monthless period.  Like the tzolkin
+cycle, this cycle repeats endlessly, and there are commands to move
+backward and forward to the previous or next point in the cycle.  Type
+@kbd{g m p h} to go to the previous haab date; Emacs asks you for a haab
+date and moves point to the previous occurrence of that date.
+Similarly, type @kbd{g m n h} to go to the next occurrence of a haab
+date.
+
+@c This is omitted because it is too long for smallbook format.
+@c @findex calendar-previous-calendar-round-date
+@findex calendar-next-calendar-round-date
+@cindex Mayan calendar round
+  The Maya also used the combination of the tzolkin date and the haab
+date.  This combination is a cycle of about 52 years called a
+@emph{calendar round}.  If you type @kbd{g m p c}, Emacs asks you for
+both a haab and a tzolkin date and then moves point to the previous
+occurrence of that combination.  Use @kbd{g m n c} to move point to the
+next occurrence of a combination.  These commands signal an error if the
+haab/tzolkin date combination you have typed is impossible.
+
+  Emacs uses strict completion (@pxref{Strict Completion}) whenever it
+asks you to type a Mayan name, so you don't have to worry about
+spelling.
+
+@node Diary
+@section The Diary
+@cindex diary
+
+  The Emacs diary keeps track of appointments or other events on a daily
+basis, in conjunction with the calendar.  To use the diary feature, you
+must first create a @dfn{diary file} containing a list of events and
+their dates.  Then Emacs can automatically pick out and display the
+events for today, for the immediate future, or for any specified
+date.
+
+  The name of the diary file is specified by the variable
+@code{diary-file}; @file{~/diary} is the default.  A sample diary file
+is (note that the file format is essentially the same as that used by
+the external shell utility @samp{calendar}):
+
+@example
+12/22/1988  Twentieth wedding anniversary!!
+&1/1.       Happy New Year!
+10/22       Ruth's birthday.
+* 21, *:    Payday
+Tuesday--weekly meeting with grad students at 10am
+         Supowit, Shen, Bitner, and Kapoor to attend.
+1/13/89     Friday the thirteenth!!
+&thu 4pm    squash game with Lloyd.
+mar 16      Dad's birthday
+April 15, 1989 Income tax due.
+&* 15       time cards due.
+@end example
+
+@noindent
+This example uses extra spaces to align the event descriptions of most
+of the entries.  Such formatting is purely a matter of taste.
+
+  Although you probably will start by creating a diary manually, Emacs
+provides a number of commands to let you view, add, and change diary
+entries.
+
+@menu
+* Displaying the Diary::   Viewing diary entries and associated calendar dates.
+* Format of Diary File::   Entering events in your diary.
+* Date Formats::	   Various ways you can specify dates.
+* Adding to Diary::	   Commands to create diary entries.
+* Special Diary Entries::  Anniversaries, blocks of dates, cyclic entries, etc.
+@end menu
+
+@node Displaying the Diary
+@subsection Displaying the Diary
+
+  Once you have created a diary file, you can use the calendar to view
+it.  You can also view today's events outside of Calendar mode.
+
+@table @kbd
+@item d
+Display all diary entries for the selected date
+(@code{diary-view-entries}).
+@item Mouse-2 Diary
+Display all diary entries for the date you click on.
+@item s
+Display the entire diary file (@code{diary-show-all-entries}).
+@item m
+Mark all visible dates that have diary entries
+(@code{mark-diary-entries}).
+@item u
+Unmark the calendar window (@code{calendar-unmark}).
+@item M-x print-diary-entries
+Print hard copy of the diary display as it appears.
+@item M-x diary
+Display all diary entries for today's date.
+@item M-x diary-mail-entries
+Mail yourself email reminders about upcoming diary entries.
+@end table
+
+@kindex d @r{(Calendar mode)}
+@findex diary-view-entries
+@vindex view-diary-entries-initially
+  Displaying the diary entries with @kbd{d} shows in a separate window
+the diary entries for the selected date in the calendar.  The mode line
+of the new window shows the date of the diary entries and any holidays
+that fall on that date.  If you specify a numeric argument with @kbd{d},
+it shows all the diary entries for that many successive days.  Thus,
+@kbd{2 d} displays all the entries for the selected date and for the
+following day.
+
+  Another way to display the diary entries for a date is to click
+@kbd{Mouse-2} on the date, and then choose @kbd{Diary entries} from
+the menu that appears.  If the variable
+@code{view-diary-entries-initially} is non-@code{nil}, creating the
+calendar lists the diary entries for the current date (provided the
+current date is visible).
+
+@kindex m @r{(Calendar mode)}
+@findex mark-diary-entries
+@vindex mark-diary-entries-in-calendar
+  To get a broader view of which days are mentioned in the diary, use
+the @kbd{m} command.  This displays the dates that have diary entries in
+a different face (or places a @samp{+} after these dates, if display
+with multiple faces is not available).
+@iftex
+@inforef{Calendar Customizing, diary-entry-marker, emacs-xtra}.
+@end iftex
+@ifnottex
+@xref{Calendar Customizing, diary-entry-marker}.
+@end ifnottex
+  The command applies both to the currently visible months and to
+other months that subsequently become visible by scrolling.  To turn
+marking off and erase the current marks, type @kbd{u}, which also
+turns off holiday marks (@pxref{Holidays}).  If the variable
+@code{mark-diary-entries-in-calendar} is non-@code{nil}, creating or
+updating the calendar marks diary dates automatically.
+
+@kindex s @r{(Calendar mode)}
+@findex diary-show-all-entries
+  To see the full diary file, rather than just some of the entries, use
+the @kbd{s} command.
+
+  Display of selected diary entries uses the selective display feature
+to hide entries that don't apply.  The diary buffer as you see it is
+an illusion, so simply printing the buffer does not print what you see
+on your screen.  There is a special command to print hard copy of the
+diary buffer @emph{as it appears}; this command is @kbd{M-x
+print-diary-entries}.  It sends the data directly to the printer.  You
+can customize it like @code{lpr-region} (@pxref{Printing}).
+
+@findex diary
+  The command @kbd{M-x diary} displays the diary entries for the current
+date, independently of the calendar display, and optionally for the next
+few days as well; the variable @code{number-of-diary-entries} specifies
+how many days to include.
+@iftex
+@inforef{Diary Customizing,, emacs-xtra}.
+@end iftex
+@ifnottex
+@xref{Diary Customizing, number-of-diary-entries}.
+@end ifnottex
+
+  If you put @code{(diary)} in your @file{.emacs} file, this
+automatically displays a window with the day's diary entries, when you
+enter Emacs.  The mode line of the displayed window shows the date and
+any holidays that fall on that date.
+
+@findex diary-mail-entries
+@vindex diary-mail-days
+  Many users like to receive notice of events in their diary as email.
+To send such mail to yourself, use the command @kbd{M-x
+diary-mail-entries}.  A prefix argument specifies how many days
+(starting with today) to check; otherwise, the variable
+@code{diary-mail-days} says how many days.
+
+@node Format of Diary File
+@subsection The Diary File
+@cindex diary file
+
+@vindex diary-file
+  Your @dfn{diary file} is a file that records events associated with
+particular dates.  The name of the diary file is specified by the
+variable @code{diary-file}; @file{~/diary} is the default.  The
+@code{calendar} utility program supports a subset of the format allowed
+by the Emacs diary facilities, so you can use that utility to view the
+diary file, with reasonable results aside from the entries it cannot
+understand.
+
+  Each entry in the diary file describes one event and consists of one
+or more lines.  An entry always begins with a date specification at the
+left margin.  The rest of the entry is simply text to describe the
+event.  If the entry has more than one line, then the lines after the
+first must begin with whitespace to indicate they continue a previous
+entry.  Lines that do not begin with valid dates and do not continue a
+preceding entry are ignored.
+
+  You can inhibit the marking of certain diary entries in the calendar
+window; to do this, insert an ampersand (@samp{&}) at the beginning of
+the entry, before the date.  This has no effect on display of the entry
+in the diary window; it affects only marks on dates in the calendar
+window.  Nonmarking entries are especially useful for generic entries
+that would otherwise mark many different dates.
+
+  If the first line of a diary entry consists only of the date or day
+name with no following blanks or punctuation, then the diary window
+display doesn't include that line; only the continuation lines appear.
+For example, this entry:
+
+@example
+02/11/1989
+      Bill B. visits Princeton today
+      2pm Cognitive Studies Committee meeting
+      2:30-5:30 Liz at Lawrenceville
+      4:00pm Dentist appt
+      7:30pm Dinner at George's
+      8:00-10:00pm concert
+@end example
+
+@noindent
+appears in the diary window without the date line at the beginning.
+This style of entry looks neater when you display just a single day's
+entries, but can cause confusion if you ask for more than one day's
+entries.
+
+  You can edit the diary entries as they appear in the window, but it is
+important to remember that the buffer displayed contains the @emph{entire}
+diary file, with portions of it concealed from view.  This means, for
+instance, that the @kbd{C-f} (@code{forward-char}) command can put point
+at what appears to be the end of the line, but what is in reality the
+middle of some concealed line.
+
+  @emph{Be careful when editing the diary entries!}  Inserting
+additional lines or adding/deleting characters in the middle of a
+visible line cannot cause problems, but editing at the end of a line may
+not do what you expect.  Deleting a line may delete other invisible
+entries that follow it.  Before editing the diary, it is best to display
+the entire file with @kbd{s} (@code{diary-show-all-entries}).
+
+@node Date Formats
+@subsection Date Formats
+
+  Here are some sample diary entries, illustrating different ways of
+formatting a date.  The examples all show dates in American order
+(month, day, year), but Calendar mode supports European order (day,
+month, year) as an option.
+
+@example
+4/20/93  Switch-over to new tabulation system
+apr. 25  Start tabulating annual results
+4/30  Results for April are due
+*/25  Monthly cycle finishes
+Friday  Don't leave without backing up files
+@end example
+
+  The first entry appears only once, on April 20, 1993.  The second and
+third appear every year on the specified dates, and the fourth uses a
+wildcard (asterisk) for the month, so it appears on the 25th of every
+month.  The final entry appears every week on Friday.
+
+  You can use just numbers to express a date, as in
+@samp{@var{month}/@var{day}} or @samp{@var{month}/@var{day}/@var{year}}.
+This must be followed by a nondigit.  In the date itself, @var{month}
+and @var{day} are numbers of one or two digits.  The optional @var{year}
+is also a number, and may be abbreviated to the last two digits; that
+is, you can use @samp{11/12/1989} or @samp{11/12/89}.
+
+  Dates can also have the form @samp{@var{monthname} @var{day}} or
+@samp{@var{monthname} @var{day}, @var{year}}, where the month's name can
+be spelled in full or abbreviated (with or without a period).  The
+preferred abbreviations can be controlled using the variables
+@code{calendar-abbrev-length}, @code{calendar-month-abbrev-array}, and
+@code{calendar-day-abbrev-array}.  The default is to use the first three
+letters of a name as its abbreviation.  Case is not significant.
+
+  A date may be @dfn{generic}; that is, partially unspecified.  Then the
+entry applies to all dates that match the specification.  If the date
+does not contain a year, it is generic and applies to any year.
+Alternatively, @var{month}, @var{day}, or @var{year} can be a @samp{*};
+this matches any month, day, or year, respectively.  Thus, a diary entry
+@samp{3/*/*} matches any day in March of any year; so does @samp{march
+*}.
+
+@vindex european-calendar-style
+@findex european-calendar
+@findex american-calendar
+  If you prefer the European style of writing dates---in which the day
+comes before the month---type @kbd{M-x european-calendar} while in the
+calendar, or set the variable @code{european-calendar-style} to @code{t}
+with @kbd{M-x customize}, or @emph{before} using any calendar or diary
+command.  This mode interprets all dates in the diary in the European
+manner, and also uses European style for displaying diary dates.  (Note
+that there is no comma after the @var{monthname} in the European style.)
+To go back to the (default) American style of writing dates, type
+@kbd{M-x american-calendar}.
+
+  You can use the name of a day of the week as a generic date which
+applies to any date falling on that day of the week.  You can abbreviate
+the day of the week to three letters (with or without a period) or spell
+it in full; case is not significant.
+
+@node Adding to Diary
+@subsection Commands to Add to the Diary
+
+  While in the calendar, there are several commands to create diary
+entries:
+
+@table @kbd
+@item i d
+Add a diary entry for the selected date (@code{insert-diary-entry}).
+@item i w
+Add a diary entry for the selected day of the week (@code{insert-weekly-diary-entry}).
+@item i m
+Add a diary entry for the selected day of the month (@code{insert-monthly-diary-entry}).
+@item i y
+Add a diary entry for the selected day of the year (@code{insert-yearly-diary-entry}).
+@end table
+
+@kindex i d @r{(Calendar mode)}
+@findex insert-diary-entry
+  You can make a diary entry for a specific date by selecting that date
+in the calendar window and typing the @kbd{i d} command.  This command
+displays the end of your diary file in another window and inserts the
+date; you can then type the rest of the diary entry.
+
+@kindex i w @r{(Calendar mode)}
+@findex insert-weekly-diary-entry
+@kindex i m @r{(Calendar mode)}
+@findex insert-monthly-diary-entry
+@kindex i y @r{(Calendar mode)}
+@findex insert-yearly-diary-entry
+  If you want to make a diary entry that applies to a specific day of
+the week, select that day of the week (any occurrence will do) and type
+@kbd{i w}.  This inserts the day-of-week as a generic date; you can then
+type the rest of the diary entry.  You can make a monthly diary entry in
+the same fashion: select the day of the month, use the @kbd{i m}
+command, and type the rest of the entry.  Similarly, you can insert a
+yearly diary entry with the @kbd{i y} command.
+
+  All of the above commands make marking diary entries by default.  To
+make a nonmarking diary entry, give a numeric argument to the command.
+For example, @kbd{C-u i w} makes a nonmarking weekly diary entry.
+
+  When you modify the diary file, be sure to save the file before
+exiting Emacs.  Saving the diary file after using any of the above
+insertion commands will automatically update the diary marks in the
+calendar window, if appropriate.  You can use the command
+@code{redraw-calendar} to force an update at any time.
+
+@node Special Diary Entries
+@subsection Special Diary Entries
+
+  In addition to entries based on calendar dates, the diary file can
+contain @dfn{sexp entries} for regular events such as anniversaries.
+These entries are based on Lisp expressions (sexps) that Emacs evaluates
+as it scans the diary file.  Instead of a date, a sexp entry contains
+@samp{%%} followed by a Lisp expression which must begin and end with
+parentheses.  The Lisp expression determines which dates the entry
+applies to.
+
+  Calendar mode provides commands to insert certain commonly used
+sexp entries:
+
+@table @kbd
+@item i a
+Add an anniversary diary entry for the selected date
+(@code{insert-anniversary-diary-entry}).
+@item i b
+Add a block diary entry for the current region
+(@code{insert-block-diary-entry}).
+@item i c
+Add a cyclic diary entry starting at the date
+(@code{insert-cyclic-diary-entry}).
+@end table
+
+@kindex i a @r{(Calendar mode)}
+@findex insert-anniversary-diary-entry
+  If you want to make a diary entry that applies to the anniversary of a
+specific date, move point to that date and use the @kbd{i a} command.
+This displays the end of your diary file in another window and inserts
+the anniversary description; you can then type the rest of the diary
+entry.  The entry looks like this:
+
+@findex diary-anniversary
+@example
+%%(diary-anniversary 10 31 1948) Arthur's birthday
+@end example
+
+@noindent
+This entry applies to October 31 in any year after 1948; @samp{10 31
+1948} specifies the date.  (If you are using the European calendar
+style, the month and day are interchanged.)  The reason this expression
+requires a beginning year is that advanced diary functions can use it to
+calculate the number of elapsed years.
+
+  A @dfn{block} diary entry applies to a specified range of consecutive
+dates.  Here is a block diary entry that applies to all dates from June
+24, 1990 through July 10, 1990:
+
+@findex diary-block
+@example
+%%(diary-block 6 24 1990 7 10 1990) Vacation
+@end example
+
+@noindent
+The @samp{6 24 1990} indicates the starting date and the @samp{7 10 1990}
+indicates the stopping date.  (Again, if you are using the European calendar
+style, the month and day are interchanged.)
+
+@kindex i b @r{(Calendar mode)}
+@findex insert-block-diary-entry
+  To insert a block entry, place point and the mark on the two
+dates that begin and end the range, and type @kbd{i b}.  This command
+displays the end of your diary file in another window and inserts the
+block description; you can then type the diary entry.
+
+@kindex i c @r{(Calendar mode)}
+@findex insert-cyclic-diary-entry
+   @dfn{Cyclic} diary entries repeat after a fixed interval of days.  To
+create one, select the starting date and use the @kbd{i c} command.  The
+command prompts for the length of interval, then inserts the entry,
+which looks like this:
+
+@findex diary-cyclic
+@example
+%%(diary-cyclic 50 3 1 1990) Renew medication
+@end example
+
+@noindent
+This entry applies to March 1, 1990 and every 50th day following;
+@samp{3 1 1990} specifies the starting date.  (If you are using the
+European calendar style, the month and day are interchanged.)
+
+  All three of these commands make marking diary entries.  To insert a
+nonmarking entry, give a numeric argument to the command.  For example,
+@kbd{C-u i a} makes a nonmarking anniversary diary entry.
+
+  Marking sexp diary entries in the calendar is @emph{extremely}
+time-consuming, since every date visible in the calendar window must be
+individually checked.  So it's a good idea to make sexp diary entries
+nonmarking (with @samp{&}) when possible.
+
+  Another sophisticated kind of sexp entry, a @dfn{floating} diary entry,
+specifies a regularly occurring event by offsets specified in days,
+weeks, and months.  It is comparable to a crontab entry interpreted by
+the @code{cron} utility.  Here is a nonmarking, floating diary entry
+that applies to the last Thursday in November:
+
+@findex diary-float
+@example
+&%%(diary-float 11 4 -1) American Thanksgiving
+@end example
+
+@noindent
+The 11 specifies November (the eleventh month), the 4 specifies Thursday
+(the fourth day of the week, where Sunday is numbered zero), and the
+@minus{}1 specifies ``last'' (1 would mean ``first,'' 2 would mean
+``second,'' @minus{}2 would mean ``second-to-last,'' and so on).  The
+month can be a single month or a list of months.  Thus you could change
+the 11 above to @samp{'(1 2 3)} and have the entry apply to the last
+Thursday of January, February, and March.  If the month is @code{t}, the
+entry applies to all months of the year.@refill
+
+  Each of the standard sexp diary entries takes an optional parameter
+specifying the name of a face or a single-character string to use when
+marking the entry in the calendar.  Most generally, sexp diary entries
+can perform arbitrary computations to determine when they apply.
+@iftex
+@inforef{Sexp Diary Entries,, emacs-xtra}.
+@end iftex
+@ifnottex
+@inforef{Sexp Diary Entries}.
+@end ifnottex
+
+@node Appointments
+@section Appointments
+@cindex appointment notification
+
+@vindex appt-display-format
+@vindex appt-audible
+@vindex appt-display-mode-line
+  If you have a diary entry for an appointment, and that diary entry
+begins with a recognizable time of day, Emacs can warn you several
+minutes beforehand that that appointment is pending.  Emacs alerts you
+to the appointment by displaying a message in your chosen format, as
+specified by the variable @code{appt-display-format}.  If the value of
+@code{appt-audible} is non-@code{nil}, the warning includes an audible
+reminder.  In addition, if @code{appt-display-mode-line} is
+non-@code{nil}, Emacs displays the number of minutes to the
+appointment on the mode line.
+
+@vindex appt-display-duration
+@vindex appt-disp-window-function
+@vindex appt-delete-window-function
+  If @code{appt-display-format} has the value @code{window}, then the
+variable @code{appt-display-duration} controls how long the reminder
+window is visible for; and the variables
+@code{appt-disp-window-function} and @code{appt-delete-window-function}
+give the names of functions used to create and destroy the window,
+respectively.
+
+@findex appt-activate
+  To enable appointment notification, use the command @kbd{M-x
+appt-activate}.  With a positive argument, it enables notification;
+with a negative argument, it disables notification; with no argument,
+it toggles.  Enabling notification also sets up an appointment list
+for today from the diary file, giving all diary entries found with
+recognizable times of day, and reminds you just before each of them.
+
+  For example, suppose the diary file contains these lines:
+
+@example
+Monday
+  9:30am Coffee break
+ 12:00pm Lunch
+@end example
+
+@vindex appt-message-warning-time
+@noindent
+Then on Mondays, you will be reminded at around 9:20am about your
+coffee break and at around 11:50am about lunch.  The variable
+@code{appt-message-warning-time} specifies how many minutes in advance
+to warn you; its default value is 12 (12 minutes).
+
+  You can write times in am/pm style (with @samp{12:00am} standing
+for midnight and @samp{12:00pm} standing for noon), or 24-hour
+European/military style.  You need not be consistent; your diary file
+can have a mixture of the two styles.  Times must be at the beginning
+of lines if they are to be recognized.
+
+@vindex appt-display-diary
+  Emacs updates the appointments list from the diary file
+automatically just after midnight.  You can force an update at any
+time by re-enabling appointment notification.  Both these actions also
+display the day's diary buffer, unless you set
+@code{appt-display-diary} to @code{nil}.  The appointments list is
+also updated whenever the diary file is saved.
+
+@findex appt-add
+@findex appt-delete
+@cindex alarm clock
+  You can also use the appointment notification facility like an alarm
+clock.  The command @kbd{M-x appt-add} adds entries to the appointment
+list without affecting your diary file.  You delete entries from the
+appointment list with @kbd{M-x appt-delete}.
+
+@node Importing Diary
+@section Importing and Exporting Diary Entries
+
+  You can transfer diary entries between Emacs diary files and a
+variety of other formats.
+
+@vindex diary-outlook-formats
+  You can import diary entries from Outlook-generated appointment
+messages.  While viewing such a message in Rmail or Gnus, do @kbd{M-x
+diary-from-outlook} to import the entry.  You can make this command
+recognize additional appointment message formats by customizing the
+variable @code{diary-outlook-formats}.
+
+@cindex iCalendar support
+  The icalendar package allows you to transfer data between your Emacs
+diary file and iCalendar files, which are defined in ``RFC
+2445---Internet Calendaring and Scheduling Core Object Specification
+(iCalendar)'' (as well as the earlier vCalendar format).
+
+  Importing works for ``ordinary'' (i.e. non-recurring) events, but
+(at present) may not work correctly (if at all) for recurring events.
+Exporting of diary files into iCalendar files should work correctly
+for most diary entries.  This feature is a work in progress, so the
+commands may evolve in future.
+
+@findex icalendar-import-buffer
+  The command @code{icalendar-import-buffer} extracts
+iCalendar data from the current buffer and adds it to your (default)
+diary file.  This function is also suitable for automatic extraction of
+iCalendar data; for example with the Rmail mail client one could use:
+
+@example
+(add-hook 'rmail-show-message-hook 'icalendar-import-buffer)
+@end example
+
+@findex icalendar-import-file
+  The command @code{icalendar-import-file} imports an iCalendar file
+and adds the results to an Emacs diary file.  For example:
+
+@example
+(icalendar-import-file "/here/is/calendar.ics"
+                       "/there/goes/ical-diary")
+@end example
+
+@noindent
+You can use an @code{#include} directive to add the import file contents
+to the main diary file, if these are different files.
+@iftex
+@inforef{Fancy Diary Display,, emacs-xtra}.
+@end iftex
+@ifnottex
+@xref{Fancy Diary Display}.
+@end ifnottex
+
+
+@findex icalendar-export-file, icalendar-export-region
+  Use @code{icalendar-export-file} to interactively export an entire
+Emacs diary file to iCalendar format.  To export only a part of a diary
+file, mark the relevant area, and call @code{icalendar-export-region}.
+In both cases the result is appended to the target file.
+
+@node Daylight Saving
+@section Daylight Saving Time
+@cindex daylight saving time
+
+  Emacs understands the difference between standard time and daylight
+saving time---the times given for sunrise, sunset, solstices,
+equinoxes, and the phases of the moon take that into account.  The rules
+for daylight saving time vary from place to place and have also varied
+historically from year to year.  To do the job properly, Emacs needs to
+know which rules to use.
+
+@vindex calendar-daylight-savings-starts
+@vindex calendar-daylight-savings-ends
+  Some operating systems keep track of the rules that apply to the place
+where you are; on these systems, Emacs gets the information it needs
+from the system automatically.  If some or all of this information is
+missing, Emacs fills in the gaps with the rules currently used in
+Cambridge, Massachusetts.  If the resulting rules are not what you want,
+you can tell Emacs the rules to use by setting certain variables:
+@code{calendar-daylight-savings-starts} and
+@code{calendar-daylight-savings-ends}.
+
+  These values should be Lisp expressions that refer to the variable
+@code{year}, and evaluate to the Gregorian date on which daylight
+saving time starts or (respectively) ends, in the form of a list
+@code{(@var{month} @var{day} @var{year})}.  The values should be
+@code{nil} if your area does not use daylight saving time.
+
+  Emacs uses these expressions to determine the starting date of
+daylight saving time for the holiday list and for correcting times of
+day in the solar and lunar calculations.
+
+  The values for Cambridge, Massachusetts are as follows:
+
+@example
+(calendar-nth-named-day 2 0 3 year)
+(calendar-nth-named-day 1 0 11 year)
+@end example
+
+@noindent
+That is, the second 0th day (Sunday) of the third month (March) in
+the year specified by @code{year}, and the first Sunday of the eleventh month
+(November) of that year.  If daylight saving time were
+changed to start on October 1, you would set
+@code{calendar-daylight-savings-starts} to this:
+
+@example
+(list 10 1 year)
+@end example
+
+  If there is no daylight saving time at your location, or if you want
+all times in standard time, set @code{calendar-daylight-savings-starts}
+and @code{calendar-daylight-savings-ends} to @code{nil}.
+
+@vindex calendar-daylight-time-offset
+  The variable @code{calendar-daylight-time-offset} specifies the
+difference between daylight saving time and standard time, measured in
+minutes.  The value for Cambridge, Massachusetts is 60.
+
+@c @vindex calendar-daylight-savings-starts-time  too long!
+@vindex calendar-daylight-savings-ends-time
+  Finally, the two variables
+@code{calendar-daylight-savings-starts-time} and
+@code{calendar-daylight-savings-ends-time} specify the number of
+minutes after midnight local time when the transition to and from
+daylight saving time should occur.  For Cambridge, Massachusetts both
+variables' values are 120.
+
+@node Time Intervals
+@section Summing Time Intervals
+@cindex time intervals, summing
+@cindex summing time intervals
+@cindex timeclock
+
+  The timeclock feature adds up time intervals, so you can (for
+instance) keep track of how much time you spend working on particular
+projects.
+
+@findex timeclock-in
+@findex timeclock-out
+@findex timeclock-change
+@findex timeclock-workday-remaining
+@findex timeclock-when-to-leave
+  Use the @kbd{M-x timeclock-in} command when you start working on a
+project, and @kbd{M-x timeclock-out} command when you're done.  Each
+time you do this, it adds one time interval to the record of the
+project.  You can change to working on a different project with @kbd{M-x
+timeclock-change}.
+
+  Once you've collected data from a number of time intervals, you can use
+@kbd{M-x timeclock-workday-remaining} to see how much time is left to
+work today (assuming a typical average of 8 hours a day), and @kbd{M-x
+timeclock-when-to-leave} which will calculate when you're ``done.''
+
+@vindex timeclock-modeline-display
+@findex timeclock-modeline-display
+  If you want Emacs to display the amount of time ``left'' of your
+workday in the mode line, either customize the
+@code{timeclock-modeline-display} variable and set its value to
+@code{t}, or invoke the @kbd{M-x timeclock-modeline-display} command.
+
+@vindex timeclock-ask-before-exiting
+  Terminating the current Emacs session might or might not mean that
+you have stopped working on the project and, by default, Emacs asks
+you.  You can, however, set the value of the variable
+@code{timeclock-ask-before-exiting} to @code{nil} (via @kbd{M-x
+customize}) to avoid the question; then, only an explicit @kbd{M-x
+timeclock-out} or @kbd{M-x timeclock-change} will tell Emacs that the
+current interval is over.
+
+@cindex @file{.timelog} file
+@vindex timeclock-file
+@findex timeclock-reread-log
+  The timeclock functions work by accumulating the data in a file
+called @file{.timelog} in your home directory.  You can specify a
+different name for this file by customizing the variable
+@code{timeclock-file}.  If you edit the timeclock file manually, or if
+you change the value of any of timeclock's customizable variables, you
+should run the command @kbd{M-x timeclock-reread-log} to update the
+data in Emacs from the file.
+
+@ifnottex
+@include cal-xtra.texi
+@end ifnottex
+
+@ignore
+   arch-tag: 4531ef09-9df3-449d-9c52-2b5a4a337f92
+@end ignore