Freeware (IRIX) » Info Pages
find in page
elisp : Calendar
table of contents
Introduction
Coding Conventions
Lisp Data Types
Numbers
Strings and Characters
Lists
Sequences Arrays Vectors
Hash Tables
Symbols
Evaluation
Control Structures
Variables
Functions
Macros
Customization
Loading
Byte Compilation
Advising Functions
Debugging
Read and Print
Minibuffers
Command Loop
Keymaps
Modes
Documentation
Files
Backups and Auto-Saving
Buffers
Windows
Frames
Positions
Markers
Text
Non-ASCII Characters
Searching and Matching
Syntax Tables
Abbrevs
Processes
Display
Calendar
System Interface
Antinews
GNU Free Documentation License
GPL
Tips
GNU Emacs Internals
Standard Errors
Standard Buffer-Local Variables
Standard Keymaps
Standard Hooks
Index
New Symbols
Caveats
Lisp History
Conventions
Acknowledgements
Some Terms
nil and t
Evaluation Notation
Printing Notation
Error Messages
Buffer Text Notation
Format of Descriptions
Coding Conventions
Compilation Tips
Documentation Tips
Comment Tips
Library Headers
A Sample Function Description
A Sample Variable Description
Printed Representation
Comments
Programming Types
Editing Types
Type Predicates
Equality Predicates
Integer Type
Floating Point Type
Character Type
Sequence Type
Cons Cell Type
Array Type
String Type
Vector Type
Symbol Type
Function Type
Macro Type
Primitive Function Type
Byte-Code Type
Autoload Type
Dotted Pair Notation
Association List Type
Buffer Type
Window Type
Window Configuration Type
Marker Type
Process Type
Stream Type
Keymap Type
Overlay Type
Integer Basics
Float Basics
Predicates on Numbers
Comparison of Numbers
Arithmetic Operations
Bitwise Operations
Numeric Conversions
Math Functions
Random Numbers
String Basics
Predicates for Strings
Creating Strings
Text Comparison
String Conversion
Formatting Strings
Case Conversion
Cons Cells
Lists as Boxes
List-related Predicates
List Elements
Building Lists
Modifying Lists
Sets And Lists
Association Lists
Setcar
Setcdr
Rearrangement
Sequence Functions
Arrays
Array Functions
Vectors
Symbol Components
Definitions
Creating Symbols
Property Lists
Intro Eval
Eval
Forms
Quoting
Self-Evaluating Forms
Symbol Forms
Classifying Lists
Function Forms
Macro Forms
Special Forms
Autoloading
Sequencing
Conditionals
Combining Conditions
Iteration
Nonlocal Exits
Catch and Throw
Examples of Catch
Errors
Cleanups
Signaling Errors
Processing of Errors
Handling Errors
Error Symbols
Global Variables
Constant Variables
Local Variables
Void Variables
Defining Variables
Accessing Variables
Setting Variables
Variable Scoping
Buffer-Local Variables
Scope
Extent
Impl of Scope
Using Scoping
Intro to Buffer-Local
Creating Buffer-Local
Default Value
What Is a Function
Lambda Expressions
Function Names
Defining Functions
Calling Functions
Mapping Functions
Anonymous Functions
Function Cells
Related Topics
Lambda Components
Simple Lambda
Argument List
Function Documentation
Simple Macro
Expansion
Compiling Macros
Defining Macros
Backquote
Problems with Macros
How Programs Do Loading
Autoload
Named Features
Repeated Loading
Compilation Functions
Disassembly
Simple Advice
Defining Advice
Computed Advice
Activation of Advice
Enabling Advice
Preactivation
Argument Access in Advice
Subr Arguments
Combined Definition
Debugger
Syntax Errors
Compilation Errors
Edebug
Error Debugging
Function Debugging
Explicit Debug
Using Debugger
Debugger Commands
Invoking the Debugger
Internals of Debugger
Excess Open
Excess Close
Streams Intro
Input Streams
Input Functions
Output Streams
Output Functions
Intro to Minibuffers
Text from Minibuffer
Object from Minibuffer
Completion
Yes-or-No Queries
Minibuffer Misc
Basic Completion
Minibuffer Completion
Completion Commands
High-Level Completion
Reading File Names
Programmed Completion
Command Overview
Defining Commands
Interactive Call
Command Loop Info
Input Events
Reading Input
Waiting
Quitting
Prefix Command Arguments
Recursive Editing
Disabling Commands
Command History
Keyboard Macros
Using Interactive
Interactive Codes
Interactive Examples
Keymap Terminology
Format of Keymaps
Creating Keymaps
Inheritance and Keymaps
Prefix Keys
Menu Keymaps
Active Keymaps
Key Lookup
Functions for Key Lookup
Changing Key Bindings
Key Binding Commands
Scanning Keymaps
Major Modes
Minor Modes
Mode Line Format
Hooks
Major Mode Conventions
Example Major Modes
Auto Major Mode
Mode Help
Minor Mode Conventions
Keymaps and Minor Modes
Mode Line Data
Mode Line Variables
%-Constructs
Documentation Basics
Accessing Documentation
Keys in Documentation
Describing Characters
Help Functions
Visiting Files
Saving Buffers
Reading from Files
Writing to Files
File Locks
Information about Files
Contents of Directories
Changing Files
File Names
Visiting Functions
Subroutines of Visiting
Testing Accessibility
Kinds of Files
File Attributes
File Name Components
Directory Names
Relative File Names
File Name Expansion
Unique File Names
File Name Completion
Backup Files
Auto-Saving
Reverting
Making Backups
Rename or Copy
Numbered Backups
Backup Names
Buffer Basics
Buffer Names
Buffer File Name
Buffer Modification
Modification Time
Read Only Buffers
The Buffer List
Creating Buffers
Killing Buffers
Current Buffer
Basic Windows
Splitting Windows
Deleting Windows
Selecting Windows
Cyclic Window Ordering
Buffers and Windows
Displaying Buffers
Window Point
Window Start
Vertical Scrolling
Horizontal Scrolling
Size of Window
Resizing Windows
Window Configurations
Creating Frames
Multiple Displays
Frame Parameters
Frame Titles
Deleting Frames
Finding All Frames
Frames and Windows
Minibuffers and Frames
Input Focus
Visibility of Frames
Raising and Lowering
Frame Configurations
Mouse Tracking
Mouse Position
Pop-Up Menus
Dialog Boxes
Pointer Shapes
Window System Selections
Color Names
Resources
Display Feature Testing
Point
Motion
Excursions
Narrowing
Character Motion
Word Motion
Buffer End Motion
Text Lines
Screen Lines
List Motion
Skipping Characters
Overview of Markers
Predicates on Markers
Creating Markers
Information from Markers
Moving Markers
The Mark
The Region
Near Point
Buffer Contents
Insertion
Commands for Insertion
Deletion
User-Level Deletion
The Kill Ring
Undo
Auto Filling
Filling
Margins
Sorting
Indentation
Columns
Case Changes
Text Properties
Substitution
Transposition
Registers
Change Hooks
Kill Ring Concepts
Kill Functions
Yank Commands
Low-Level Kill Ring
Internals of Kill Ring
Primitive Indent
Mode-Specific Indent
Region Indent
Relative Indent
Indent Tabs
Motion by Indent
Examining Properties
Changing Properties
Property Search
Special Properties
Format Properties
Sticky Properties
Saving Properties
Lazy Properties
Clickable Text
Fields
Not Intervals
Text Representations
Converting Representations
Selecting a Representation
Character Codes
Character Sets
Chars and Bytes
Splitting Characters
Scanning Charsets
Translation of Characters
Coding Systems
Input Methods
Locales
String Search
Regular Expressions
Regexp Search
Match Data
Saving Match Data
Standard Regexps
Searching and Case
Syntax of Regexps
Regexp Example
Syntax Descriptors
Syntax Table Functions
Parsing Expressions
Standard Syntax Tables
Syntax Table Internals
Syntax Class Table
Syntax Flags
Abbrev Mode
Abbrev Tables
Defining Abbrevs
Abbrev Files
Abbrev Expansion
Standard Abbrev Tables
Subprocess Creation
Synchronous Processes
Asynchronous Processes
Deleting Processes
Process Information
Input to Processes
Signals to Processes
Output from Processes
Sentinels
Network
Process Buffers
Filter Functions
Accepting Output
Starting Up
Getting Out
System Environment
Terminal Input
Terminal Output
Flow Control
Batch Mode
Startup Summary
Init File
Terminal-Specific
Command-Line Arguments
Killing Emacs
Suspending Emacs
Refresh Screen
Truncation
The Echo Area
Selective Display
Overlay Arrow
Temporary Displays
Waiting
Blinking
Usual Display
Beeping
Window Systems
Building Emacs
Pure Storage
Garbage Collection
Object Internals
Writing Emacs Primitives
Buffer Internals
Window Internals
Process Internals
Customizing the Calendar and Diary
**********************************
There are many customizations that you can use to make the calendar
and diary suit your personal tastes.
* Menu:
* Calendar Customizing:: Defaults you can set.
* Holiday Customizing:: Defining your own holidays.
* Date Display Format:: Changing the format.
* Time Display Format:: Changing the format.
* Daylight Savings:: Changing the default.
* Diary Customizing:: Defaults you can set.
* Hebrew/Islamic Entries:: How to obtain them.
* Fancy Diary Display:: Enhancing the diary display, sorting entries,
using included diary files.
* Sexp Diary Entries:: Fancy things you can do.
* Appt Customizing:: Customizing appointment reminders.
back to top
Customizing the Calendar
========================
If you set the variable `view-diary-entries-initially' to `t',
calling up the calendar automatically displays the diary entries for
the current date as well. The diary dates appear only if the current
date is visible. If you add both of the following lines to your init
file:
(setq view-diary-entries-initially t)
(calendar)
this displays both the calendar and diary windows whenever you start
Emacs.
Similarly, if you set the variable
`view-calendar-holidays-initially' to `t', entering the calendar
automatically displays a list of holidays for the current three-month
period. The holiday list appears in a separate window.
You can set the variable `mark-diary-entries-in-calendar' to `t' in
order to mark any dates with diary entries. This takes effect whenever
the calendar window contents are recomputed. There are two ways of
marking these dates: by changing the face (*note Faces::), or by
placing a plus sign (`+') beside the date.
Similarly, setting the variable `mark-holidays-in-calendar' to `t'
marks holiday dates, either with a change of face or with an asterisk
(`*').
The variable `calendar-holiday-marker' specifies how to mark a date
as being a holiday. Its value may be a character to insert next to the
date, or a face name to use for displaying the date. Likewise, the
variable `diary-entry-marker' specifies how to mark a date that has
diary entries. The calendar creates faces named `holiday-face' and
`diary-face' for these purposes; those symbols are the default values
of these variables.
The variable `calendar-load-hook' is a normal hook run when the
calendar package is first loaded (before actually starting to display
the calendar).
Starting the calendar runs the normal hook
`initial-calendar-window-hook'. Recomputation of the calendar display
does not run this hook. But if you leave the calendar with the `q'
command and reenter it, the hook runs again.
The variable `today-visible-calendar-hook' is a normal hook run
after the calendar buffer has been prepared with the calendar when the
current date is visible in the window. One use of this hook is to
replace today's date with asterisks; to do that, use the hook function
`calendar-star-date'.
(add-hook 'today-visible-calendar-hook 'calendar-star-date)
Another standard hook function marks the current date, either by
changing its face or by adding an asterisk. Here's how to use it:
(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
The variable `calendar-today-marker' specifies how to mark today's
date. Its value should be a character to insert next to the date or a
face name to use for displaying the date. A face named
`calendar-today-face' is provided for this purpose; that symbol is the
default for this variable.
A similar normal hook, `today-invisible-calendar-hook' is run if the
current date is _not_ visible in the window.
Starting in Emacs 21, each of the calendar cursor motion commands
runs the hook `calendar-move-hook' after it moves the cursor.
back to top
Customizing the Holidays
========================
Emacs knows about holidays defined by entries on one of several
lists. You can customize these lists of holidays to your own needs,
adding or deleting holidays. The lists of holidays that Emacs uses are
for general holidays (`general-holidays'), local holidays
(`local-holidays'), Christian holidays (`christian-holidays'), Hebrew
(Jewish) holidays (`hebrew-holidays'), Islamic (Moslem) holidays
(`islamic-holidays'), and other holidays (`other-holidays').
The general holidays are, by default, holidays common throughout the
United States. To eliminate these holidays, set `general-holidays' to
`nil'.
There are no default local holidays (but sites may supply some). You
can set the variable `local-holidays' to any list of holidays, as
described below.
By default, Emacs does not include all the holidays of the religions
that it knows, only those commonly found in secular calendars. For a
more extensive collection of religious holidays, you can set any (or
all) of the variables `all-christian-calendar-holidays',
`all-hebrew-calendar-holidays', or `all-islamic-calendar-holidays' to
`t'. If you want to eliminate the religious holidays, set any or all
of the corresponding variables `christian-holidays', `hebrew-holidays',
and `islamic-holidays' to `nil'.
You can set the variable `other-holidays' to any list of holidays.
This list, normally empty, is intended for individual use.
Each of the lists (`general-holidays', `local-holidays',
`christian-holidays', `hebrew-holidays', `islamic-holidays', and
`other-holidays') is a list of "holiday forms", each holiday form
describing a holiday (or sometimes a list of holidays).
Here is a table of the possible kinds of holiday form. Day numbers
and month numbers count starting from 1, but "dayname" numbers count
Sunday as 0. The element STRING is always the name of the holiday, as
a string.
`(holiday-fixed MONTH DAY STRING)'
A fixed date on the Gregorian calendar.
`(holiday-float MONTH DAYNAME K STRING)'
The Kth DAYNAME in MONTH on the Gregorian calendar (DAYNAME=0 for
Sunday, and so on); negative K means count back from the end of
the month.
`(holiday-hebrew MONTH DAY STRING)'
A fixed date on the Hebrew calendar.
`(holiday-islamic MONTH DAY STRING)'
A fixed date on the Islamic calendar.
`(holiday-julian MONTH DAY STRING)'
A fixed date on the Julian calendar.
`(holiday-sexp SEXP STRING)'
A date calculated by the Lisp expression SEXP. The expression
should use the variable `year' to compute and return the date of a
holiday, or `nil' if the holiday doesn't happen this year. The
value of SEXP must represent the date as a list of the form
`(MONTH DAY YEAR)'.
`(if CONDITION HOLIDAY-FORM)'
A holiday that happens only if CONDITION is true.
`(FUNCTION [ARGS])'
A list of dates calculated by the function FUNCTION, called with
arguments ARGS.
For example, suppose you want to add Bastille Day, celebrated in
France on July 14. You can do this as follows:
(setq other-holidays '((holiday-fixed 7 14 "Bastille Day")))
The holiday form `(holiday-fixed 7 14 "Bastille Day")' specifies the
fourteenth day of the seventh month (July).
Many holidays occur on a specific day of the week, at a specific time
of month. Here is a holiday form describing Hurricane Supplication Day,
celebrated in the Virgin Islands on the fourth Monday in August:
(holiday-float 8 1 4 "Hurricane Supplication Day")
Here the 8 specifies August, the 1 specifies Monday (Sunday is 0,
Tuesday is 2, and so on), and the 4 specifies the fourth occurrence in
the month (1 specifies the first occurrence, 2 the second occurrence,
-1 the last occurrence, -2 the second-to-last occurrence, and so on).
You can specify holidays that occur on fixed days of the Hebrew,
Islamic, and Julian calendars too. For example,
(setq other-holidays
'((holiday-hebrew 10 2 "Last day of Hanukkah")
(holiday-islamic 3 12 "Mohammed's Birthday")
(holiday-julian 4 2 "Jefferson's Birthday")))
adds the last day of Hanukkah (since the Hebrew months are numbered with
1 starting from Nisan), the Islamic feast celebrating Mohammed's
birthday (since the Islamic months are numbered from 1 starting with
Muharram), and Thomas Jefferson's birthday, which is 2 April 1743 on the
Julian calendar.
To include a holiday conditionally, use either Emacs Lisp's `if' or
the `holiday-sexp' form. For example, American presidential elections
occur on the first Tuesday after the first Monday in November of years
divisible by 4:
(holiday-sexp (if (= 0 (% year 4))
(calendar-gregorian-from-absolute
(1+ (calendar-dayname-on-or-before
1 (+ 6 (calendar-absolute-from-gregorian
(list 11 1 year))))))
"US Presidential Election"))
or
(if (= 0 (% displayed-year 4))
(fixed 11
(extract-calendar-day
(calendar-gregorian-from-absolute
(1+ (calendar-dayname-on-or-before
1 (+ 6 (calendar-absolute-from-gregorian
(list 11 1 displayed-year)))))))
"US Presidential Election"))
Some holidays just don't fit into any of these forms because special
calculations are involved in their determination. In such cases you
must write a Lisp function to do the calculation. To include eclipses,
for example, add `(eclipses)' to `other-holidays' and write an Emacs
Lisp function `eclipses' that returns a (possibly empty) list of the
relevant Gregorian dates among the range visible in the calendar
window, with descriptive strings, like this:
(((6 27 1991) "Lunar Eclipse") ((7 11 1991) "Solar Eclipse") ... )
back to top
Date Display Format
===================
You can customize the manner of displaying dates in the diary, in
mode lines, and in messages by setting `calendar-date-display-form'.
This variable holds a list of expressions that can involve the variables
`month', `day', and `year', which are all numbers in string form, and
`monthname' and `dayname', which are both alphabetic strings. In the
American style, the default value of this list is as follows:
((if dayname (concat dayname ", ")) monthname " " day ", " year)
while in the European style this value is the default:
((if dayname (concat dayname ", ")) day " " monthname " " year)
The ISO standard date representation is this:
(year "-" month "-" day)
This specifies a typical American format:
(month "/" day "/" (substring year -2))
back to top
Time Display Format
===================
The calendar and diary by default display times of day in the
conventional American style with the hours from 1 through 12, minutes,
and either `am' or `pm'. If you prefer the European style, also known
in the US as military, in which the hours go from 00 to 23, you can
alter the variable `calendar-time-display-form'. This variable is a
list of expressions that can involve the variables `12-hours',
`24-hours', and `minutes', which are all numbers in string form, and
`am-pm' and `time-zone', which are both alphabetic strings. The
default value of `calendar-time-display-form' is as follows:
(12-hours ":" minutes am-pm
(if time-zone " (") time-zone (if time-zone ")"))
Here is a value that provides European style times:
(24-hours ":" minutes
(if time-zone " (") time-zone (if time-zone ")"))
back to top
Daylight Savings Time
=====================
Emacs understands the difference between standard time and daylight
savings time--the times given for sunrise, sunset, solstices,
equinoxes, and the phases of the moon take that into account. The rules
for daylight savings 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.
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, which is the center of
GNU's world.
If the default choice of rules is not appropriate for your location,
you can tell Emacs the rules to use by setting the variables
`calendar-daylight-savings-starts' and
`calendar-daylight-savings-ends'. Their values should be Lisp
expressions that refer to the variable `year', and evaluate to the
Gregorian date on which daylight savings time starts or (respectively)
ends, in the form of a list `(MONTH DAY YEAR)'. The values should be
`nil' if your area does not use daylight savings time.
Emacs uses these expressions to determine the start and end dates of
daylight savings time as holidays and for correcting times of day in the
solar and lunar calculations.
The values for Cambridge, Massachusetts are as follows:
(calendar-nth-named-day 1 0 4 year)
(calendar-nth-named-day -1 0 10 year)
i.e., the first 0th day (Sunday) of the fourth month (April) in the
year specified by `year', and the last Sunday of the tenth month
(October) of that year. If daylight savings time were changed to start
on October 1, you would set `calendar-daylight-savings-starts' to this:
(list 10 1 year)
For a more complex example, suppose daylight savings time begins on
the first of Nisan on the Hebrew calendar. You should set
`calendar-daylight-savings-starts' to this value:
(calendar-gregorian-from-absolute
(calendar-absolute-from-hebrew
(list 1 1 (+ year 3760))))
because Nisan is the first month in the Hebrew calendar and the Hebrew
year differs from the Gregorian year by 3760 at Nisan.
If there is no daylight savings time at your location, or if you want
all times in standard time, set `calendar-daylight-savings-starts' and
`calendar-daylight-savings-ends' to `nil'.
The variable `calendar-daylight-time-offset' specifies the
difference between daylight savings time and standard time, measured in
minutes. The value for Cambridge is 60.
The variable `calendar-daylight-savings-starts-time' and the
variable `calendar-daylight-savings-ends-time' specify the number of
minutes after midnight local time when the transition to and from
daylight savings time should occur. For Cambridge, both variables'
values are 120.
back to top
Customizing the Diary
=====================
Ordinarily, the mode line of the diary buffer window indicates any
holidays that fall on the date of the diary entries. The process of
checking for holidays can take several seconds, so including holiday
information delays the display of the diary buffer noticeably. If you'd
prefer to have a faster display of the diary buffer but without the
holiday information, set the variable `holidays-in-diary-buffer' to
`nil'.
The variable `number-of-diary-entries' controls the number of days
of diary entries to be displayed at one time. It affects the initial
display when `view-diary-entries-initially' is `t', as well as the
command `M-x diary'. For example, the default value is 1, which says
to display only the current day's diary entries. If the value is 2,
both the current day's and the next day's entries are displayed. The
value can also be a vector of seven elements: for example, if the value
is `[0 2 2 2 2 4 1]' then no diary entries appear on Sunday, the
current date's and the next day's diary entries appear Monday through
Thursday, Friday through Monday's entries appear on Friday, while on
Saturday only that day's entries appear.
The variable `print-diary-entries-hook' is a normal hook run after
preparation of a temporary buffer containing just the diary entries
currently visible in the diary buffer. (The other, irrelevant diary
entries are really absent from the temporary buffer; in the diary
buffer, they are merely hidden.) The default value of this hook does
the printing with the command `lpr-buffer'. If you want to use a
different command to do the printing, just change the value of this
hook. Other uses might include, for example, rearranging the lines into
order by day and time.
You can customize the form of dates in your diary file, if neither
the standard American nor European styles suits your needs, by setting
the variable `diary-date-forms'. This variable is a list of patterns
for recognizing a date. Each date pattern is a list whose elements may
be regular expressions (*note Regular Expressions::) or the symbols
`month', `day', `year', `monthname', and `dayname'. All these elements
serve as patterns that match certain kinds of text in the diary file.
In order for the date pattern, as a whole, to match, all of its
elements must match consecutively.
A regular expression in a date pattern matches in its usual fashion,
using the standard syntax table altered so that `*' is a word
constituent.
The symbols `month', `day', `year', `monthname', and `dayname' match
the month number, day number, year number, month name, and day name of
the date being considered. The symbols that match numbers allow
leading zeros; those that match names allow three-letter abbreviations
and capitalization. All the symbols can match `*'; since `*' in a
diary entry means "any day", "any month", and so on, it should match
regardless of the date being considered.
The default value of `diary-date-forms' in the American style is
this:
((month "/" day "[^/0-9]")
(month "/" day "/" year "[^0-9]")
(monthname " *" day "[^,0-9]")
(monthname " *" day ", *" year "[^0-9]")
(dayname "\\W"))
The date patterns in the list must be _mutually exclusive_ and must
not match any portion of the diary entry itself, just the date and one
character of whitespace. If, to be mutually exclusive, the pattern
must match a portion of the diary entry text--beyond the whitespace
that ends the date--then the first element of the date pattern _must_
be `backup'. This causes the date recognizer to back up to the
beginning of the current word of the diary entry, after finishing the
match. Even if you use `backup', the date pattern must absolutely not
match more than a portion of the first word of the diary entry. The
default value of `diary-date-forms' in the European style is this list:
((day "/" month "[^/0-9]")
(day "/" month "/" year "[^0-9]")
(backup day " *" monthname "\\W+\\<[^*0-9]")
(day " *" monthname " *" year "[^0-9]")
(dayname "\\W"))
Notice the use of `backup' in the third pattern, because it needs to
match part of a word beyond the date itself to distinguish it from the
fourth pattern.
back to top
Hebrew- and Islamic-Date Diary Entries
======================================
Your diary file can have entries based on Hebrew or Islamic dates, as
well as entries based on the world-standard Gregorian calendar.
However, because recognition of such entries is time-consuming and most
people don't use them, you must explicitly enable their use. If you
want the diary to recognize Hebrew-date diary entries, for example, you
must do this:
(add-hook 'nongregorian-diary-listing-hook 'list-hebrew-diary-entries)
(add-hook 'nongregorian-diary-marking-hook 'mark-hebrew-diary-entries)
If you want Islamic-date entries, do this:
(add-hook 'nongregorian-diary-listing-hook 'list-islamic-diary-entries)
(add-hook 'nongregorian-diary-marking-hook 'mark-islamic-diary-entries)
Hebrew- and Islamic-date diary entries have the same formats as
Gregorian-date diary entries, except that `H' precedes a Hebrew date
and `I' precedes an Islamic date. Moreover, because the Hebrew and
Islamic month names are not uniquely specified by the first three
letters, you may not abbreviate them. For example, a diary entry for
the Hebrew date Heshvan 25 could look like this:
HHeshvan 25 Happy Hebrew birthday!
and would appear in the diary for any date that corresponds to Heshvan
25 on the Hebrew calendar. And here is an Islamic-date diary entry
that matches Dhu al-Qada 25:
IDhu al-Qada 25 Happy Islamic birthday!
As with Gregorian-date diary entries, Hebrew- and Islamic-date
entries are nonmarking if they are preceded with an ampersand (`&').
Here is a table of commands used in the calendar to create diary
entries that match the selected date and other dates that are similar
in the Hebrew or Islamic calendar:
`i h d'
Add a diary entry for the Hebrew date corresponding to the
selected date (`insert-hebrew-diary-entry').
`i h m'
Add a diary entry for the day of the Hebrew month corresponding to
the selected date (`insert-monthly-hebrew-diary-entry'). This
diary entry matches any date that has the same Hebrew
day-within-month as the selected date.
`i h y'
Add a diary entry for the day of the Hebrew year corresponding to
the selected date (`insert-yearly-hebrew-diary-entry'). This diary
entry matches any date which has the same Hebrew month and
day-within-month as the selected date.
`i i d'
Add a diary entry for the Islamic date corresponding to the
selected date (`insert-islamic-diary-entry').
`i i m'
Add a diary entry for the day of the Islamic month corresponding
to the selected date (`insert-monthly-islamic-diary-entry').
`i i y'
Add a diary entry for the day of the Islamic year corresponding to
the selected date (`insert-yearly-islamic-diary-entry').
These commands work much like the corresponding commands for ordinary
diary entries: they apply to the date that point is on in the calendar
window, and what they do is insert just the date portion of a diary
entry at the end of your diary file. You must then insert the rest of
the diary entry.
back to top
Fancy Diary Display
===================
Diary display works by preparing the diary buffer and then running
the hook `diary-display-hook'. The default value of this hook
(`simple-diary-display') hides the irrelevant diary entries and then
displays the buffer. However, if you specify the hook as follows,
(add-hook 'diary-display-hook 'fancy-diary-display)
this enables fancy diary display. It displays diary entries and
holidays by copying them into a special buffer that exists only for the
sake of display. Copying to a separate buffer provides an opportunity
to change the displayed text to make it prettier--for example, to sort
the entries by the dates they apply to.
As with simple diary display, you can print a hard copy of the buffer
with `print-diary-entries'. To print a hard copy of a day-by-day diary
for a week, position point on Sunday of that week, type `7 d', and then
do `M-x print-diary-entries'. As usual, the inclusion of the holidays
slows down the display slightly; you can speed things up by setting the
variable `holidays-in-diary-buffer' to `nil'.
Ordinarily, the fancy diary buffer does not show days for which
there are no diary entries, even if that day is a holiday. If you want
such days to be shown in the fancy diary buffer, set the variable
`diary-list-include-blanks' to `t'.
If you use the fancy diary display, you can use the normal hook
`list-diary-entries-hook' to sort each day's diary entries by their
time of day. Here's how:
(add-hook 'list-diary-entries-hook 'sort-diary-entries t)
For each day, this sorts diary entries that begin with a recognizable
time of day according to their times. Diary entries without times come
first within each day.
Fancy diary display also has the ability to process included diary
files. This permits a group of people to share a diary file for events
that apply to all of them. Lines in the diary file of this form:
#include "FILENAME"
includes the diary entries from the file FILENAME in the fancy diary
buffer. The include mechanism is recursive, so that included files can
include other files, and so on; you must be careful not to have a cycle
of inclusions, of course. Here is how to enable the include facility:
(add-hook 'list-diary-entries-hook 'include-other-diary-files)
(add-hook 'mark-diary-entries-hook 'mark-included-diary-files)
The include mechanism works only with the fancy diary display,
because ordinary diary display shows the entries directly from your
diary file.
back to top
Sexp Entries and the Fancy Diary Display
========================================
Sexp diary entries allow you to do more than just have complicated
conditions under which a diary entry applies. If you use the fancy
diary display, sexp entries can generate the text of the entry depending
on the date itself. For example, an anniversary diary entry can insert
the number of years since the anniversary date into the text of the
diary entry. Thus the `%d' in this dairy entry:
%%(diary-anniversary 10 31 1948) Arthur's birthday (%d years old)
gets replaced by the age, so on October 31, 1990 the entry appears in
the fancy diary buffer like this:
Arthur's birthday (42 years old)
If the diary file instead contains this entry:
%%(diary-anniversary 10 31 1948) Arthur's %d%s birthday
the entry in the fancy diary buffer for October 31, 1990 appears like
this:
Arthur's 42nd birthday
Similarly, cyclic diary entries can interpolate the number of
repetitions that have occurred:
%%(diary-cyclic 50 1 1 1990) Renew medication (%d%s time)
looks like this:
Renew medication (5th time)
in the fancy diary display on September 8, 1990.
There is an early reminder diary sexp that includes its entry in the
diary not only on the date of occurrence, but also on earlier dates.
For example, if you want a reminder a week before your anniversary, you
can use
%%(diary-remind '(diary-anniversary 12 22 1968) 7) Ed's anniversary
and the fancy diary will show
Ed's anniversary
both on December 15 and on December 22.
The function `diary-date' applies to dates described by a month,
day, year combination, each of which can be an integer, a list of
integers, or `t'. The value `t' means all values. For example,
%%(diary-date '(10 11 12) 22 t) Rake leaves
causes the fancy diary to show
Rake leaves
on October 22, November 22, and December 22 of every year.
The function `diary-float' allows you to describe diary entries that
apply to dates like the third Friday of November, or the last Tuesday
in April. The parameters are the MONTH, DAYNAME, and an index N. The
entry appears on the Nth DAYNAME of MONTH, where DAYNAME=0 means
Sunday, 1 means Monday, and so on. If N is negative it counts backward
from the end of MONTH. The value of MONTH can be a list of months, a
single month, or `t' to specify all months. You can also use an
optional parameter DAY to specify the Nth DAYNAME of MONTH on or
after/before DAY; the value of DAY defaults to 1 if N is positive and
to the last day of MONTH if N is negative. For example,
%%(diary-float t 1 -1) Pay rent
causes the fancy diary to show
Pay rent
on the last Monday of every month.
The generality of sexp diary entries lets you specify any diary entry
that you can describe algorithmically. A sexp diary entry contains an
expression that computes whether the entry applies to any given date.
If its value is non-`nil', the entry applies to that date; otherwise,
it does not. The expression can use the variable `date' to find the
date being considered; its value is a list (MONTH DAY YEAR) that refers
to the Gregorian calendar.
Suppose you get paid on the 21st of the month if it is a weekday, and
on the Friday before if the 21st is on a weekend. Here is how to write
a sexp diary entry that matches those dates:
&%%(let ((dayname (calendar-day-of-week date))
(day (car (cdr date))))
(or (and (= day 21) (memq dayname '(1 2 3 4 5)))
(and (memq day '(19 20)) (= dayname 5)))
) Pay check deposited
The following sexp diary entries take advantage of the ability (in
the fancy diary display) to concoct diary entries whose text varies
based on the date:
`%%(diary-sunrise-sunset)'
Make a diary entry for the local times of today's sunrise and
sunset.
`%%(diary-phases-of-moon)'
Make a diary entry for the phases (quarters) of the moon.
`%%(diary-day-of-year)'
Make a diary entry with today's day number in the current year and
the number of days remaining in the current year.
`%%(diary-iso-date)'
Make a diary entry with today's equivalent ISO commercial date.
`%%(diary-julian-date)'
Make a diary entry with today's equivalent date on the Julian
calendar.
`%%(diary-astro-day-number)'
Make a diary entry with today's equivalent astronomical (Julian)
day number.
`%%(diary-hebrew-date)'
Make a diary entry with today's equivalent date on the Hebrew
calendar.
`%%(diary-islamic-date)'
Make a diary entry with today's equivalent date on the Islamic
calendar.
`%%(diary-french-date)'
Make a diary entry with today's equivalent date on the French
Revolutionary calendar.
`%%(diary-mayan-date)'
Make a diary entry with today's equivalent date on the Mayan
calendar.
Thus including the diary entry
&%%(diary-hebrew-date)
causes every day's diary display to contain the equivalent date on the
Hebrew calendar, if you are using the fancy diary display. (With simple
diary display, the line `&%%(diary-hebrew-date)' appears in the diary
for any date, but does nothing particularly useful.)
These functions can be used to construct sexp diary entries based on
the Hebrew calendar in certain standard ways:
`%%(diary-rosh-hodesh)'
Make a diary entry that tells the occurrence and ritual
announcement of each new Hebrew month.
`%%(diary-parasha)'
Make a Saturday diary entry that tells the weekly synagogue
scripture reading.
`%%(diary-sabbath-candles)'
Make a Friday diary entry that tells the _local time_ of Sabbath
candle lighting.
`%%(diary-omer)'
Make a diary entry that gives the omer count, when appropriate.
`%%(diary-yahrzeit MONTH DAY YEAR) NAME'
Make a diary entry marking the anniversary of a date of death.
The date is the _Gregorian_ (civil) date of death. The diary
entry appears on the proper Hebrew calendar anniversary and on the
day before. (In the European style, the order of the parameters
is changed to DAY, MONTH, YEAR.)
back to top
Customizing Appointment Reminders
=================================
You can specify exactly how Emacs reminds you of an appointment, and
how far in advance it begins doing so, by setting these variables:
`appt-message-warning-time'
The time in minutes before an appointment that the reminder
begins. The default is 10 minutes.
`appt-audible'
If this is non-`nil', Emacs rings the terminal bell for
appointment reminders. The default is `t'.
`appt-visible'
If this is non-`nil', Emacs displays the appointment message in
the echo area. The default is `t'.
`appt-display-mode-line'
If this is non-`nil', Emacs displays the number of minutes to the
appointment on the mode line. The default is `t'.
`appt-msg-window'
If this is non-`nil', Emacs displays the appointment message in
another window. The default is `t'.
`appt-disp-window-function'
This variable holds a function to use to create the other window
for the appointment message.
`appt-delete-window-function'
This variable holds a function to use to get rid of the appointment
message window, when its time is up.
`appt-display-duration'
The number of seconds to display an appointment message. The
default is 5 seconds.
back to top
elisp : Calendar
table of contents
Introduction
Coding Conventions
Lisp Data Types
Numbers
Strings and Characters
Lists
Sequences Arrays Vectors
Hash Tables
Symbols
Evaluation
Control Structures
Variables
Functions
Macros
Customization
Loading
Byte Compilation
Advising Functions
Debugging
Read and Print
Minibuffers
Command Loop
Keymaps
Modes
Documentation
Files
Backups and Auto-Saving
Buffers
Windows
Frames
Positions
Markers
Text
Non-ASCII Characters
Searching and Matching
Syntax Tables
Abbrevs
Processes
Display
Calendar
System Interface
Antinews
GNU Free Documentation License
GPL
Tips
GNU Emacs Internals
Standard Errors
Standard Buffer-Local Variables
Standard Keymaps
Standard Hooks
Index
New Symbols
Caveats
Lisp History
Conventions
Acknowledgements
Some Terms
nil and t
Evaluation Notation
Printing Notation
Error Messages
Buffer Text Notation
Format of Descriptions
Coding Conventions
Compilation Tips
Documentation Tips
Comment Tips
Library Headers
A Sample Function Description
A Sample Variable Description
Printed Representation
Comments
Programming Types
Editing Types
Type Predicates
Equality Predicates
Integer Type
Floating Point Type
Character Type
Sequence Type
Cons Cell Type
Array Type
String Type
Vector Type
Symbol Type
Function Type
Macro Type
Primitive Function Type
Byte-Code Type
Autoload Type
Dotted Pair Notation
Association List Type
Buffer Type
Window Type
Window Configuration Type
Marker Type
Process Type
Stream Type
Keymap Type
Overlay Type
Integer Basics
Float Basics
Predicates on Numbers
Comparison of Numbers
Arithmetic Operations
Bitwise Operations
Numeric Conversions
Math Functions
Random Numbers
String Basics
Predicates for Strings
Creating Strings
Text Comparison
String Conversion
Formatting Strings
Case Conversion
Cons Cells
Lists as Boxes
List-related Predicates
List Elements
Building Lists
Modifying Lists
Sets And Lists
Association Lists
Setcar
Setcdr
Rearrangement
Sequence Functions
Arrays
Array Functions
Vectors
Symbol Components
Definitions
Creating Symbols
Property Lists
Intro Eval
Eval
Forms
Quoting
Self-Evaluating Forms
Symbol Forms
Classifying Lists
Function Forms
Macro Forms
Special Forms
Autoloading
Sequencing
Conditionals
Combining Conditions
Iteration
Nonlocal Exits
Catch and Throw
Examples of Catch
Errors
Cleanups
Signaling Errors
Processing of Errors
Handling Errors
Error Symbols
Global Variables
Constant Variables
Local Variables
Void Variables
Defining Variables
Accessing Variables
Setting Variables
Variable Scoping
Buffer-Local Variables
Scope
Extent
Impl of Scope
Using Scoping
Intro to Buffer-Local
Creating Buffer-Local
Default Value
What Is a Function
Lambda Expressions
Function Names
Defining Functions
Calling Functions
Mapping Functions
Anonymous Functions
Function Cells
Related Topics
Lambda Components
Simple Lambda
Argument List
Function Documentation
Simple Macro
Expansion
Compiling Macros
Defining Macros
Backquote
Problems with Macros
How Programs Do Loading
Autoload
Named Features
Repeated Loading
Compilation Functions
Disassembly
Simple Advice
Defining Advice
Computed Advice
Activation of Advice
Enabling Advice
Preactivation
Argument Access in Advice
Subr Arguments
Combined Definition
Debugger
Syntax Errors
Compilation Errors
Edebug
Error Debugging
Function Debugging
Explicit Debug
Using Debugger
Debugger Commands
Invoking the Debugger
Internals of Debugger
Excess Open
Excess Close
Streams Intro
Input Streams
Input Functions
Output Streams
Output Functions
Intro to Minibuffers
Text from Minibuffer
Object from Minibuffer
Completion
Yes-or-No Queries
Minibuffer Misc
Basic Completion
Minibuffer Completion
Completion Commands
High-Level Completion
Reading File Names
Programmed Completion
Command Overview
Defining Commands
Interactive Call
Command Loop Info
Input Events
Reading Input
Waiting
Quitting
Prefix Command Arguments
Recursive Editing
Disabling Commands
Command History
Keyboard Macros
Using Interactive
Interactive Codes
Interactive Examples
Keymap Terminology
Format of Keymaps
Creating Keymaps
Inheritance and Keymaps
Prefix Keys
Menu Keymaps
Active Keymaps
Key Lookup
Functions for Key Lookup
Changing Key Bindings
Key Binding Commands
Scanning Keymaps
Major Modes
Minor Modes
Mode Line Format
Hooks
Major Mode Conventions
Example Major Modes
Auto Major Mode
Mode Help
Minor Mode Conventions
Keymaps and Minor Modes
Mode Line Data
Mode Line Variables
%-Constructs
Documentation Basics
Accessing Documentation
Keys in Documentation
Describing Characters
Help Functions
Visiting Files
Saving Buffers
Reading from Files
Writing to Files
File Locks
Information about Files
Contents of Directories
Changing Files
File Names
Visiting Functions
Subroutines of Visiting
Testing Accessibility
Kinds of Files
File Attributes
File Name Components
Directory Names
Relative File Names
File Name Expansion
Unique File Names
File Name Completion
Backup Files
Auto-Saving
Reverting
Making Backups
Rename or Copy
Numbered Backups
Backup Names
Buffer Basics
Buffer Names
Buffer File Name
Buffer Modification
Modification Time
Read Only Buffers
The Buffer List
Creating Buffers
Killing Buffers
Current Buffer
Basic Windows
Splitting Windows
Deleting Windows
Selecting Windows
Cyclic Window Ordering
Buffers and Windows
Displaying Buffers
Window Point
Window Start
Vertical Scrolling
Horizontal Scrolling
Size of Window
Resizing Windows
Window Configurations
Creating Frames
Multiple Displays
Frame Parameters
Frame Titles
Deleting Frames
Finding All Frames
Frames and Windows
Minibuffers and Frames
Input Focus
Visibility of Frames
Raising and Lowering
Frame Configurations
Mouse Tracking
Mouse Position
Pop-Up Menus
Dialog Boxes
Pointer Shapes
Window System Selections
Color Names
Resources
Display Feature Testing
Point
Motion
Excursions
Narrowing
Character Motion
Word Motion
Buffer End Motion
Text Lines
Screen Lines
List Motion
Skipping Characters
Overview of Markers
Predicates on Markers
Creating Markers
Information from Markers
Moving Markers
The Mark
The Region
Near Point
Buffer Contents
Insertion
Commands for Insertion
Deletion
User-Level Deletion
The Kill Ring
Undo
Auto Filling
Filling
Margins
Sorting
Indentation
Columns
Case Changes
Text Properties
Substitution
Transposition
Registers
Change Hooks
Kill Ring Concepts
Kill Functions
Yank Commands
Low-Level Kill Ring
Internals of Kill Ring
Primitive Indent
Mode-Specific Indent
Region Indent
Relative Indent
Indent Tabs
Motion by Indent
Examining Properties
Changing Properties
Property Search
Special Properties
Format Properties
Sticky Properties
Saving Properties
Lazy Properties
Clickable Text
Fields
Not Intervals
Text Representations
Converting Representations
Selecting a Representation
Character Codes
Character Sets
Chars and Bytes
Splitting Characters
Scanning Charsets
Translation of Characters
Coding Systems
Input Methods
Locales
String Search
Regular Expressions
Regexp Search
Match Data
Saving Match Data
Standard Regexps
Searching and Case
Syntax of Regexps
Regexp Example
Syntax Descriptors
Syntax Table Functions
Parsing Expressions
Standard Syntax Tables
Syntax Table Internals
Syntax Class Table
Syntax Flags
Abbrev Mode
Abbrev Tables
Defining Abbrevs
Abbrev Files
Abbrev Expansion
Standard Abbrev Tables
Subprocess Creation
Synchronous Processes
Asynchronous Processes
Deleting Processes
Process Information
Input to Processes
Signals to Processes
Output from Processes
Sentinels
Network
Process Buffers
Filter Functions
Accepting Output
Starting Up
Getting Out
System Environment
Terminal Input
Terminal Output
Flow Control
Batch Mode
Startup Summary
Init File
Terminal-Specific
Command-Line Arguments
Killing Emacs
Suspending Emacs
Refresh Screen
Truncation
The Echo Area
Selective Display
Overlay Arrow
Temporary Displays
Waiting
Blinking
Usual Display
Beeping
Window Systems
Building Emacs
Pure Storage
Garbage Collection
Object Internals
Writing Emacs Primitives
Buffer Internals
Window Internals
Process Internals
home/search |
what's new |
help