Mercurial > emacs
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