SGI Techpubs Library

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