annotate lisp/calendar/diary-lib.el @ 22363:d00f146c3e9d

#include sys/file.h (sys_access): Provide our own implementation which recognizes D_OK. (is_exec): New function. (stat): Use it. (init_environment): Set TMPDIR to an existing directory. Abort if none of the usual places is available. (sys_rename): On Windows 95, choose a temp name that includes the original file's base name and use an explicit loop rather than calling mktemp. Only attempt to unlink the newname if the rename fails, rather than second-guessing whether the old and new names refer to the same file.
author Karl Heuer <kwzh@gnu.org>
date Fri, 05 Jun 1998 16:08:32 +0000
parents a74e1cee89bf
children 6fdc14d2b071
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13650
a9e81464a9ea Renamed from diary.el.
Richard M. Stallman <rms@gnu.org>
parents: 13075
diff changeset
1 ;;; diary-lib.el --- diary functions.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
2
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13877
diff changeset
3 ;; Copyright (C) 1989, 1990, 1992, 1993, 1994, 1995 Free Software
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13877
diff changeset
4 ;; Foundation, Inc.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
5
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
6 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
7 ;; Keywords: calendar
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
8
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
10
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
14 ;; any later version.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
15
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
19 ;; GNU General Public License for more details.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
20
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13877
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13877
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13877
diff changeset
24 ;; Boston, MA 02111-1307, USA.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
25
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
26 ;;; Commentary:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
27
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
28 ;; This collection of functions implements the diary features as described
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
29 ;; in calendar.el.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
30
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
31 ;; Comments, corrections, and improvements should be sent to
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
32 ;; Edward M. Reingold Department of Computer Science
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
33 ;; (217) 333-6733 University of Illinois at Urbana-Champaign
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
34 ;; reingold@cs.uiuc.edu 1304 West Springfield Avenue
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
35 ;; Urbana, Illinois 61801
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
36
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
37 ;;; Code:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
38
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
39 (require 'calendar)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
40
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
41 ;;;###autoload
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
42 (defun diary (&optional arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
43 "Generate the diary window for ARG days starting with the current date.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
44 If no argument is provided, the number of days of diary entries is governed
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
45 by the variable `number-of-diary-entries'. This function is suitable for
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
46 execution in a `.emacs' file."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
47 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
48 (let ((d-file (substitute-in-file-name diary-file))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
49 (date (calendar-current-date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
50 (if (and d-file (file-exists-p d-file))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
51 (if (file-readable-p d-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
52 (list-diary-entries
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
53 date
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
54 (cond
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
55 (arg (prefix-numeric-value arg))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
56 ((vectorp number-of-diary-entries)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
57 (aref number-of-diary-entries (calendar-day-of-week date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
58 (t number-of-diary-entries)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
59 (error "Your diary file is not readable!"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
60 (error "You don't have a diary file!"))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
61
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
62 (defun view-diary-entries (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
63 "Prepare and display a buffer with diary entries.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
64 Searches the file named in `diary-file' for entries that
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
65 match ARG days starting with the date indicated by the cursor position
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
66 in the displayed three-month calendar."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
67 (interactive "p")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
68 (let ((d-file (substitute-in-file-name diary-file)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
69 (if (and d-file (file-exists-p d-file))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
70 (if (file-readable-p d-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
71 (list-diary-entries (calendar-cursor-to-date t) arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
72 (error "Diary file is not readable!"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
73 (error "You don't have a diary file!"))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
74
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
75 (defun view-other-diary-entries (arg diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
76 "Prepare and display buffer of diary entries from an alternative diary file.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
77 Prompts for a file name and searches that file for entries that match ARG
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
78 days starting with the date indicated by the cursor position in the displayed
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
79 three-month calendar."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
80 (interactive
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
81 (list (cond ((null current-prefix-arg) 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
82 ((listp current-prefix-arg) (car current-prefix-arg))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
83 (t current-prefix-arg))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
84 (setq diary-file (read-file-name "Enter diary file name: "
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
85 default-directory nil t))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
86 (view-diary-entries arg))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
87
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
88 (autoload 'check-calendar-holidays "holidays"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
89 "Check the list of holidays for any that occur on DATE.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
90 The value returned is a list of strings of relevant holiday descriptions.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
91 The holidays are those in the list `calendar-holidays'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
92 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
93
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
94 (autoload 'calendar-holiday-list "holidays"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
95 "Form the list of holidays that occur on dates in the calendar window.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
96 The holidays are those in the list `calendar-holidays'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
97 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
98
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
99 (autoload 'diary-french-date "cal-french"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
100 "French calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
101 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
102
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
103 (autoload 'diary-mayan-date "cal-mayan"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
104 "Mayan calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
105 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
106
13688
88f14fa8e205 Autoload diary-iso-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13687
diff changeset
107 (autoload 'diary-iso-date "cal-iso"
88f14fa8e205 Autoload diary-iso-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13687
diff changeset
108 "ISO calendar equivalent of date diary entry."
88f14fa8e205 Autoload diary-iso-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13687
diff changeset
109 t)
88f14fa8e205 Autoload diary-iso-date.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13687
diff changeset
110
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
111 (autoload 'diary-julian-date "cal-julian"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
112 "Julian calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
113 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
114
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
115 (autoload 'diary-astro-day-number "cal-julian"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
116 "Astronomical (Julian) day number diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
117 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
118
14687
0d4ff7e4d6a3 Use the new file names in autoloads.
Karl Heuer <kwzh@gnu.org>
parents: 14308
diff changeset
119 (autoload 'diary-chinese-date "cal-china"
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
120 "Chinese calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
121 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
122
14687
0d4ff7e4d6a3 Use the new file names in autoloads.
Karl Heuer <kwzh@gnu.org>
parents: 14308
diff changeset
123 (autoload 'diary-islamic-date "cal-islam"
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
124 "Islamic calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
125 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
126
14687
0d4ff7e4d6a3 Use the new file names in autoloads.
Karl Heuer <kwzh@gnu.org>
parents: 14308
diff changeset
127 (autoload 'list-islamic-diary-entries "cal-islam"
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
128 "Add any Islamic date entries from the diary file to `diary-entries-list'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
129 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
130
14687
0d4ff7e4d6a3 Use the new file names in autoloads.
Karl Heuer <kwzh@gnu.org>
parents: 14308
diff changeset
131 (autoload 'mark-islamic-diary-entries "cal-islam"
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
132 "Mark days in the calendar window that have Islamic date diary entries."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
133 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
134
14687
0d4ff7e4d6a3 Use the new file names in autoloads.
Karl Heuer <kwzh@gnu.org>
parents: 14308
diff changeset
135 (autoload 'mark-islamic-calendar-date-pattern "cal-islam"
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
136 "Mark dates in calendar window that conform to Islamic date MONTH/DAY/YEAR."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
137 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
138
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
139 (autoload 'diary-hebrew-date "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
140 "Hebrew calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
141 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
142
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
143 (autoload 'diary-omer "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
144 "Omer count diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
145 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
146
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
147 (autoload 'diary-yahrzeit "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
148 "Yahrzeit diary entry--entry applies if date is yahrzeit or the day before."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
149 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
150
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
151 (autoload 'diary-parasha "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
152 "Parasha diary entry--entry applies if date is a Saturday."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
153 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
154
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
155 (autoload 'diary-rosh-hodesh "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
156 "Rosh Hodesh diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
157 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
158
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
159 (autoload 'list-hebrew-diary-entries "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
160 "Add any Hebrew date entries from the diary file to `diary-entries-list'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
161 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
162
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
163 (autoload 'mark-hebrew-diary-entries "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
164 "Mark days in the calendar window that have Hebrew date diary entries."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
165 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
166
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
167 (autoload 'mark-hebrew-calendar-date-pattern "cal-hebrew"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
168 "Mark dates in calendar window that conform to Hebrew date MONTH/DAY/YEAR."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
169 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
170
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
171 (autoload 'diary-coptic-date "cal-coptic"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
172 "Coptic calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
173 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
174
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
175 (autoload 'diary-ethiopic-date "cal-coptic"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
176 "Ethiopic calendar equivalent of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
177 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
178
15258
ab5975df6164 Change autoload references from cal-persian to cal-persia.
Karl Heuer <kwzh@gnu.org>
parents: 14954
diff changeset
179 (autoload 'diary-persian-date "cal-persia"
14954
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
180 "Persian calendar equivalent of date diary entry."
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
181 t)
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
182
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
183 (autoload 'diary-phases-of-moon "lunar" "Moon phases diary entry." t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
184
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
185 (autoload 'diary-sunrise-sunset "solar"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
186 "Local time of sunrise and sunset as a diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
187 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
188
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
189 (autoload 'diary-sabbath-candles "solar"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
190 "Local time of candle lighting diary entry--applies if date is a Friday.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
191 No diary entry if there is no sunset on that date."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
192 t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
193
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
194 (defvar diary-syntax-table (copy-syntax-table (standard-syntax-table))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
195 "The syntax table used when parsing dates in the diary file.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
196 It is the standard syntax table used in Fundamental mode, but with the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
197 syntax of `*' changed to be a word constituent.")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
198
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
199 (modify-syntax-entry ?* "w" diary-syntax-table)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
200
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
201 (defun list-diary-entries (date number)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
202 "Create and display a buffer containing the relevant lines in diary-file.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
203 The arguments are DATE and NUMBER; the entries selected are those
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
204 for NUMBER days starting with date DATE. The other entries are hidden
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
205 using selective display.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
206
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
207 Returns a list of all relevant diary entries found, if any, in order by date.
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
208 The list entries have the form ((month day year) string specifier) where
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
209 \(month day year) is the date of the entry, string is the entry text, and
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
210 specifier is the applicability. If the variable `diary-list-include-blanks'
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
211 is t, this list includes a dummy diary entry consisting of the empty string)
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
212 for a date with no diary entries.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
213
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
214 After the list is prepared, the hooks `nongregorian-diary-listing-hook',
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
215 `list-diary-entries-hook', `diary-display-hook', and `diary-hook' are run.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
216 These hooks have the following distinct roles:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
217
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
218 `nongregorian-diary-listing-hook' can cull dates from the diary
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
219 and each included file. Usually used for Hebrew or Islamic
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
220 diary entries in files. Applied to *each* file.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
221
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
222 `list-diary-entries-hook' adds or manipulates diary entries from
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
223 external sources. Used, for example, to include diary entries
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
224 from other files or to sort the diary entries. Invoked *once* only,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
225 before the display hook is run.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
226
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
227 `diary-display-hook' does the actual display of information. If this is
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
228 nil, simple-diary-display will be used. Use add-hook to set this to
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
229 fancy-diary-display, if desired. If you want no diary display, use
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
230 add-hook to set this to ignore.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
231
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
232 `diary-hook' is run last. This can be used for an appointment
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
233 notification function."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
234
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
235 (if (< 0 number)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
236 (let* ((original-date date);; save for possible use in the hooks
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
237 (old-diary-syntax-table)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
238 (diary-entries-list)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
239 (date-string (calendar-date-string date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
240 (d-file (substitute-in-file-name diary-file)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
241 (message "Preparing diary...")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
242 (save-excursion
13877
44149f0bf44a Replaced all uses of get-file-buffer with find-buffer-visiting.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13688
diff changeset
243 (let ((diary-buffer (find-buffer-visiting d-file)))
16545
ff25eb6a7d11 (list-diary-entries): Reread the diary file if it has changed.
Richard M. Stallman <rms@gnu.org>
parents: 15258
diff changeset
244 (if (not diary-buffer)
ff25eb6a7d11 (list-diary-entries): Reread the diary file if it has changed.
Richard M. Stallman <rms@gnu.org>
parents: 15258
diff changeset
245 (set-buffer (find-file-noselect d-file t))
ff25eb6a7d11 (list-diary-entries): Reread the diary file if it has changed.
Richard M. Stallman <rms@gnu.org>
parents: 15258
diff changeset
246 (set-buffer diary-buffer)
ff25eb6a7d11 (list-diary-entries): Reread the diary file if it has changed.
Richard M. Stallman <rms@gnu.org>
parents: 15258
diff changeset
247 (or (verify-visited-file-modtime diary-buffer)
ff25eb6a7d11 (list-diary-entries): Reread the diary file if it has changed.
Richard M. Stallman <rms@gnu.org>
parents: 15258
diff changeset
248 (revert-buffer t t))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
249 (setq selective-display t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
250 (setq selective-display-ellipses nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
251 (setq old-diary-syntax-table (syntax-table))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
252 (set-syntax-table diary-syntax-table)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
253 (unwind-protect
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
254 (let ((buffer-read-only nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
255 (diary-modified (buffer-modified-p))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
256 (mark (regexp-quote diary-nonmarking-symbol)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
257 (goto-char (1- (point-max)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
258 (if (not (looking-at "\^M\\|\n"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
259 (progn
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
260 (forward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
261 (insert-string "\^M")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
262 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
263 (if (not (looking-at "\^M\\|\n"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
264 (insert-string "\^M"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
265 (subst-char-in-region (point-min) (point-max) ?\n ?\^M t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
266 (calendar-for-loop i from 1 to number do
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
267 (let ((d diary-date-forms)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
268 (month (extract-calendar-month date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
269 (day (extract-calendar-day date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
270 (year (extract-calendar-year date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
271 (entry-found (list-sexp-diary-entries date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
272 (while d
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
273 (let*
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
274 ((date-form (if (equal (car (car d)) 'backup)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
275 (cdr (car d))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
276 (car d)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
277 (backup (equal (car (car d)) 'backup))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
278 (dayname
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
279 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
280 (calendar-day-name date) "\\|"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
281 (substring (calendar-day-name date) 0 3) ".?"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
282 (monthname
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
283 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
284 "\\*\\|"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
285 (calendar-month-name month) "\\|"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
286 (substring (calendar-month-name month) 0 3) ".?"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
287 (month (concat "\\*\\|0*" (int-to-string month)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
288 (day (concat "\\*\\|0*" (int-to-string day)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
289 (year
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
290 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
291 "\\*\\|0*" (int-to-string year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
292 (if abbreviated-calendar-year
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
293 (concat "\\|" (int-to-string (% year 100)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
294 "")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
295 (regexp
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
296 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
297 "\\(\\`\\|\^M\\|\n\\)" mark "?\\("
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
298 (mapconcat 'eval date-form "\\)\\(")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
299 "\\)"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
300 (case-fold-search t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
301 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
302 (while (re-search-forward regexp nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
303 (if backup (re-search-backward "\\<" nil t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
304 (if (and (or (char-equal (preceding-char) ?\^M)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
305 (char-equal (preceding-char) ?\n))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
306 (not (looking-at " \\|\^I")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
307 ;; Diary entry that consists only of date.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
308 (backward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
309 ;; Found a nonempty diary entry--make it visible and
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
310 ;; add it to the list.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
311 (setq entry-found t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
312 (let ((entry-start (point))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
313 (date-start))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
314 (re-search-backward "\^M\\|\n\\|\\`")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
315 (setq date-start (point))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
316 (re-search-forward "\^M\\|\n" nil t 2)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
317 (while (looking-at " \\|\^I")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
318 (re-search-forward "\^M\\|\n" nil t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
319 (backward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
320 (subst-char-in-region date-start
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
321 (point) ?\^M ?\n t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
322 (add-to-diary-list
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
323 date
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
324 (buffer-substring-no-properties
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
325 entry-start (point))
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
326 (buffer-substring-no-properties
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
327 (1+ date-start) (1- entry-start)))))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
328 (setq d (cdr d)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
329 (or entry-found
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
330 (not diary-list-include-blanks)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
331 (setq diary-entries-list
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
332 (append diary-entries-list
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
333 (list (list date "" "")))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
334 (setq date
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
335 (calendar-gregorian-from-absolute
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
336 (1+ (calendar-absolute-from-gregorian date))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
337 (setq entry-found nil)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
338 (set-buffer-modified-p diary-modified))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
339 (set-syntax-table old-diary-syntax-table))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
340 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
341 (run-hooks 'nongregorian-diary-listing-hook
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
342 'list-diary-entries-hook)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
343 (if diary-display-hook
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
344 (run-hooks 'diary-display-hook)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
345 (simple-diary-display))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
346 (run-hooks 'diary-hook)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
347 diary-entries-list))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
348
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
349 (defun include-other-diary-files ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
350 "Include the diary entries from other diary files with those of diary-file.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
351 This function is suitable for use in `list-diary-entries-hook';
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
352 it enables you to use shared diary files together with your own.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
353 The files included are specified in the diaryfile by lines of this form:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
354 #include \"filename\"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
355 This is recursive; that is, #include directives in diary files thus included
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
356 are obeyed. You can change the `#include' to some other string by
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
357 changing the variable `diary-include-string'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
358 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
359 (while (re-search-forward
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
360 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
361 "\\(\\`\\|\^M\\|\n\\)"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
362 (regexp-quote diary-include-string)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
363 " \"\\([^\"]*\\)\"")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
364 nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
365 (let ((diary-file (substitute-in-file-name
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
366 (buffer-substring-no-properties
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
367 (match-beginning 2) (match-end 2))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
368 (diary-list-include-blanks nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
369 (list-diary-entries-hook 'include-other-diary-files)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
370 (diary-display-hook 'ignore)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
371 (diary-hook nil))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
372 (if (file-exists-p diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
373 (if (file-readable-p diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
374 (unwind-protect
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
375 (setq diary-entries-list
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
376 (append diary-entries-list
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
377 (list-diary-entries original-date number)))
13877
44149f0bf44a Replaced all uses of get-file-buffer with find-buffer-visiting.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13688
diff changeset
378 (kill-buffer (find-buffer-visiting diary-file)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
379 (beep)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
380 (message "Can't read included diary file %s" diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
381 (sleep-for 2))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
382 (beep)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
383 (message "Can't find included diary file %s" diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
384 (sleep-for 2))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
385 (goto-char (point-min)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
386
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
387 (defun simple-diary-display ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
388 "Display the diary buffer if there are any relevant entries or holidays."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
389 (let* ((holiday-list (if holidays-in-diary-buffer
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
390 (check-calendar-holidays original-date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
391 (msg (format "No diary entries for %s %s"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
392 (concat date-string (if holiday-list ":" ""))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
393 (mapconcat 'identity holiday-list "; "))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
394 (if (or (not diary-entries-list)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
395 (and (not (cdr diary-entries-list))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
396 (string-equal (car (cdr (car diary-entries-list))) "")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
397 (if (<= (length msg) (frame-width))
14308
0ce52b2f2bb5 (simple-diary-display, fancy-diary-display): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
398 (message "%s" msg)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
399 (set-buffer (get-buffer-create holiday-buffer))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
400 (setq buffer-read-only nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
401 (calendar-set-mode-line date-string)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
402 (erase-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
403 (insert (mapconcat 'identity holiday-list "\n"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
404 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
405 (set-buffer-modified-p nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
406 (setq buffer-read-only t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
407 (display-buffer holiday-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
408 (message "No diary entries for %s" date-string))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
409 (calendar-set-mode-line
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
410 (concat "Diary for " date-string
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
411 (if holiday-list ": " "")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
412 (mapconcat 'identity holiday-list "; ")))
13877
44149f0bf44a Replaced all uses of get-file-buffer with find-buffer-visiting.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13688
diff changeset
413 (display-buffer (find-buffer-visiting d-file))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
414 (message "Preparing diary...done"))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
415
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
416 (defun fancy-diary-display ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
417 "Prepare a diary buffer with relevant entries in a fancy, noneditable form.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
418 This function is provided for optional use as the `diary-display-hook'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
419 (save-excursion;; Turn off selective-display in the diary file's buffer.
13877
44149f0bf44a Replaced all uses of get-file-buffer with find-buffer-visiting.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13688
diff changeset
420 (set-buffer (find-buffer-visiting (substitute-in-file-name diary-file)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
421 (let ((diary-modified (buffer-modified-p)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
422 (subst-char-in-region (point-min) (point-max) ?\^M ?\n t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
423 (setq selective-display nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
424 (kill-local-variable 'mode-line-format)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
425 (set-buffer-modified-p diary-modified)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
426 (if (or (not diary-entries-list)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
427 (and (not (cdr diary-entries-list))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
428 (string-equal (car (cdr (car diary-entries-list))) "")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
429 (let* ((holiday-list (if holidays-in-diary-buffer
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
430 (check-calendar-holidays original-date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
431 (msg (format "No diary entries for %s %s"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
432 (concat date-string (if holiday-list ":" ""))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
433 (mapconcat 'identity holiday-list "; "))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
434 (if (<= (length msg) (frame-width))
14308
0ce52b2f2bb5 (simple-diary-display, fancy-diary-display): Pass proper format string to message.
Karl Heuer <kwzh@gnu.org>
parents: 14169
diff changeset
435 (message "%s" msg)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
436 (set-buffer (get-buffer-create holiday-buffer))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
437 (setq buffer-read-only nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
438 (calendar-set-mode-line date-string)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
439 (erase-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
440 (insert (mapconcat 'identity holiday-list "\n"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
441 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
442 (set-buffer-modified-p nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
443 (setq buffer-read-only t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
444 (display-buffer holiday-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
445 (message "No diary entries for %s" date-string)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
446 (save-excursion;; Prepare the fancy diary buffer.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
447 (set-buffer (make-fancy-diary-buffer))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
448 (setq buffer-read-only nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
449 (let ((entry-list diary-entries-list)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
450 (holiday-list)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
451 (holiday-list-last-month 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
452 (holiday-list-last-year 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
453 (date (list 0 0 0)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
454 (while entry-list
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
455 (if (not (calendar-date-equal date (car (car entry-list))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
456 (progn
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
457 (setq date (car (car entry-list)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
458 (and holidays-in-diary-buffer
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
459 (calendar-date-compare
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
460 (list (list holiday-list-last-month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
461 (calendar-last-day-of-month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
462 holiday-list-last-month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
463 holiday-list-last-year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
464 holiday-list-last-year))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
465 (list date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
466 ;; We need to get the holidays for the next 3 months.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
467 (setq holiday-list-last-month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
468 (extract-calendar-month date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
469 (setq holiday-list-last-year
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
470 (extract-calendar-year date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
471 (increment-calendar-month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
472 holiday-list-last-month holiday-list-last-year 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
473 (setq holiday-list
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
474 (let ((displayed-month holiday-list-last-month)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
475 (displayed-year holiday-list-last-year))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
476 (calendar-holiday-list)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
477 (increment-calendar-month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
478 holiday-list-last-month holiday-list-last-year 1))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
479 (let* ((date-string (calendar-date-string date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
480 (date-holiday-list
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
481 (let ((h holiday-list)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
482 (d))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
483 ;; Make a list of all holidays for date.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
484 (while h
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
485 (if (calendar-date-equal date (car (car h)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
486 (setq d (append d (cdr (car h)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
487 (setq h (cdr h)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
488 d)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
489 (insert (if (= (point) (point-min)) "" ?\n) date-string)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
490 (if date-holiday-list (insert ": "))
14954
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
491 (let* ((l (current-column))
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
492 (longest 0))
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
493 (insert (mapconcat '(lambda (x)
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
494 (if (< longest (length x))
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
495 (setq longest (length x)))
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
496 x)
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
497 date-holiday-list
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
498 (concat "\n" (make-string l ? ))))
a9102c34a5b6 Fix length of separator string.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 14687
diff changeset
499 (insert ?\n (make-string (+ l longest) ?=) ?\n)))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
500 (if (< 0 (length (car (cdr (car entry-list)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
501 (insert (car (cdr (car entry-list))) ?\n))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
502 (setq entry-list (cdr entry-list))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
503 (set-buffer-modified-p nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
504 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
505 (setq buffer-read-only t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
506 (display-buffer fancy-diary-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
507 (message "Preparing diary...done"))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
508
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
509 (defun make-fancy-diary-buffer ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
510 "Create and return the initial fancy diary buffer."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
511 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
512 (set-buffer (get-buffer-create fancy-diary-buffer))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
513 (setq buffer-read-only nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
514 (make-local-variable 'mode-line-format)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
515 (calendar-set-mode-line "Diary Entries")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
516 (erase-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
517 (set-buffer-modified-p nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
518 (setq buffer-read-only t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
519 (get-buffer fancy-diary-buffer)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
520
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
521 (defun print-diary-entries ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
522 "Print a hard copy of the diary display.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
523
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
524 If the simple diary display is being used, prepare a temp buffer with the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
525 visible lines of the diary buffer, add a heading line composed from the mode
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
526 line, print the temp buffer, and destroy it.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
527
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
528 If the fancy diary display is being used, just print the buffer.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
529
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
530 The hooks given by the variable `print-diary-entries-hook' are called to do
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
531 the actual printing."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
532 (interactive)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
533 (if (bufferp (get-buffer fancy-diary-buffer))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
534 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
535 (set-buffer (get-buffer fancy-diary-buffer))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
536 (run-hooks 'print-diary-entries-hook))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
537 (let ((diary-buffer
13877
44149f0bf44a Replaced all uses of get-file-buffer with find-buffer-visiting.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13688
diff changeset
538 (find-buffer-visiting (substitute-in-file-name diary-file))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
539 (if diary-buffer
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
540 (let ((temp-buffer (get-buffer-create "*Printable Diary Entries*"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
541 (heading))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
542 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
543 (set-buffer diary-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
544 (setq heading
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
545 (if (not (stringp mode-line-format))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
546 "All Diary Entries"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
547 (string-match "^-*\\([^-].*[^-]\\)-*$" mode-line-format)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
548 (substring mode-line-format
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
549 (match-beginning 1) (match-end 1))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
550 (copy-to-buffer temp-buffer (point-min) (point-max))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
551 (set-buffer temp-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
552 (while (re-search-forward "\^M.*$" nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
553 (replace-match ""))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
554 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
555 (insert heading "\n"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
556 (make-string (length heading) ?=) "\n")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
557 (run-hooks 'print-diary-entries-hook)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
558 (kill-buffer temp-buffer)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
559 (error "You don't have a diary buffer!")))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
560
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
561 (defun show-all-diary-entries ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
562 "Show all of the diary entries in the diary file.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
563 This function gets rid of the selective display of the diary file so that
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
564 all entries, not just some, are visible. If there is no diary buffer, one
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
565 is created."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
566 (interactive)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
567 (let ((d-file (substitute-in-file-name diary-file)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
568 (if (and d-file (file-exists-p d-file))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
569 (if (file-readable-p d-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
570 (save-excursion
13877
44149f0bf44a Replaced all uses of get-file-buffer with find-buffer-visiting.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13688
diff changeset
571 (let ((diary-buffer (find-buffer-visiting d-file)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
572 (set-buffer (if diary-buffer
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
573 diary-buffer
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
574 (find-file-noselect d-file t)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
575 (let ((buffer-read-only nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
576 (diary-modified (buffer-modified-p)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
577 (subst-char-in-region (point-min) (point-max) ?\^M ?\n t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
578 (setq selective-display nil)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
579 (make-local-variable 'mode-line-format)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
580 (setq mode-line-format default-mode-line-format)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
581 (display-buffer (current-buffer))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
582 (set-buffer-modified-p diary-modified))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
583 (error "Your diary file is not readable!"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
584 (error "You don't have a diary file!"))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
585
20345
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
586
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
587
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
588 (defcustom diary-mail-addr
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
589 (if (boundp 'user-mail-address) user-mail-address nil)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
590 "*Email address that `diary-mail-entries' will send email to."
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
591 :group 'diary
21668
621dd51298ec *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20354
diff changeset
592 :type 'string
621dd51298ec *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20354
diff changeset
593 :version "20.3")
20345
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
594
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
595 (defcustom diary-mail-days 7
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
596 "*Number of days for `diary-mail-entries' to check."
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
597 :group 'diary
21668
621dd51298ec *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20354
diff changeset
598 :type 'integer
621dd51298ec *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 20354
diff changeset
599 :version "20.3")
20345
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
600
21957
a74e1cee89bf (diary-mail-entries): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 21893
diff changeset
601 ;;;###autoload
20345
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
602 (defun diary-mail-entries (&optional ndays)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
603 "Send a mail message showing diary entries for next NDAYS days.
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
604 If no prefix argument is given, NDAYS is set to `diary-mail-days'.
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
605
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
606 You can call `diary-mail-entries' every night using an at/cron job.
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
607 For example, this script will run the program at 2am daily. Since
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
608 `emacs -batch' does not load your `.emacs' file, you must ensure that
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
609 all relevant variables are set, as done here.
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
610
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
611 #!/bin/sh
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
612 # diary-rem.sh -- repeatedly run the Emacs diary-reminder
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
613 emacs -batch \\
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
614 -eval \"(setq diary-mail-days 3 \\
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
615 european-calendar-style t \\
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
616 diary-mail-addr \\\"user@host.name\\\" )\" \\
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
617 -l diary-lib -f diary-mail-entries
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
618 at -f diary-rem.sh 0200 tomorrow
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
619
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
620 You may have to tweak the syntax of the `at' command to suit your
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
621 system. Alternatively, you can specify a cron entry:
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
622 0 1 * * * diary-rem.sh
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
623 to run it every morning at 1am."
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
624 (interactive "p")
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
625 (let ((text nil)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
626 ;; Use the fancy-diary-display as it doesn't hide rest of
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
627 ;; diary file with ^M characters. It also looks nicer.
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
628 (diary-display-hook 'fancy-diary-display))
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
629 (if (not current-prefix-arg)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
630 (setq ndays diary-mail-days))
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
631 (calendar)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
632 (view-diary-entries ndays)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
633 (set-buffer "*Fancy Diary Entries*")
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
634 (setq text (buffer-substring (point-min) (point-max)))
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
635
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
636 ;; Now send text as a mail message.
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
637 (mail)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
638 (mail-to)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
639 (insert diary-mail-addr)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
640 (mail-subject)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
641 (insert "Diary entries generated ")
21893
d3cd4d2e83ea Write year in subject line using four digits, not two.
Stephen Eglen <stephen@gnu.org>
parents: 21669
diff changeset
642 (insert (format-time-string "%a %d %b %Y" (current-time)))
20345
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
643 (mail-text)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
644 (insert text)
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
645 (mail-send-and-exit nil)))
69818ee01344 (diary-mail-addr, diary-mail-days): New variables.
Richard M. Stallman <rms@gnu.org>
parents: 20269
diff changeset
646
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
647 (defun diary-name-pattern (string-array &optional fullname)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
648 "Convert an STRING-ARRAY, an array of strings to a pattern.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
649 The pattern will match any of the strings, either entirely or abbreviated
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
650 to three characters. An abbreviated form will match with or without a period;
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
651 If the optional FULLNAME is t, abbreviations will not match, just the full
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
652 name."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
653 (let ((pattern ""))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
654 (calendar-for-loop i from 0 to (1- (length string-array)) do
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
655 (setq pattern
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
656 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
657 pattern
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
658 (if (string-equal pattern "") "" "\\|")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
659 (aref string-array i)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
660 (if fullname
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
661 ""
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
662 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
663 "\\|"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
664 (substring (aref string-array i) 0 3) ".?")))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
665 pattern))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
666
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
667 (defvar marking-diary-entries nil
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
668 "True during the marking of diary entries, nil otherwise.")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
669
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
670 (defvar marking-diary-entry nil
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
671 "True during the marking of diary entries, if current entry is marking.")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
672
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
673 (defun mark-diary-entries ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
674 "Mark days in the calendar window that have diary entries.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
675 Each entry in the diary file visible in the calendar window is marked.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
676 After the entries are marked, the hooks `nongregorian-diary-marking-hook' and
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
677 `mark-diary-entries-hook' are run."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
678 (interactive)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
679 (setq mark-diary-entries-in-calendar t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
680 (let ((d-file (substitute-in-file-name diary-file))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
681 (marking-diary-entries t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
682 (if (and d-file (file-exists-p d-file))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
683 (if (file-readable-p d-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
684 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
685 (message "Marking diary entries...")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
686 (set-buffer (find-file-noselect d-file t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
687 (let ((d diary-date-forms)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
688 (old-diary-syntax-table))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
689 (setq old-diary-syntax-table (syntax-table))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
690 (set-syntax-table diary-syntax-table)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
691 (while d
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
692 (let*
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
693 ((date-form (if (equal (car (car d)) 'backup)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
694 (cdr (car d))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
695 (car d)));; ignore 'backup directive
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
696 (dayname (diary-name-pattern calendar-day-name-array))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
697 (monthname
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
698 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
699 (diary-name-pattern calendar-month-name-array)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
700 "\\|\\*"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
701 (month "[0-9]+\\|\\*")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
702 (day "[0-9]+\\|\\*")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
703 (year "[0-9]+\\|\\*")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
704 (l (length date-form))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
705 (d-name-pos (- l (length (memq 'dayname date-form))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
706 (d-name-pos (if (/= l d-name-pos) (+ 2 d-name-pos)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
707 (m-name-pos (- l (length (memq 'monthname date-form))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
708 (m-name-pos (if (/= l m-name-pos) (+ 2 m-name-pos)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
709 (d-pos (- l (length (memq 'day date-form))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
710 (d-pos (if (/= l d-pos) (+ 2 d-pos)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
711 (m-pos (- l (length (memq 'month date-form))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
712 (m-pos (if (/= l m-pos) (+ 2 m-pos)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
713 (y-pos (- l (length (memq 'year date-form))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
714 (y-pos (if (/= l y-pos) (+ 2 y-pos)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
715 (regexp
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
716 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
717 "\\(\\`\\|\^M\\|\n\\)\\("
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
718 (mapconcat 'eval date-form "\\)\\(")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
719 "\\)"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
720 (case-fold-search t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
721 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
722 (while (re-search-forward regexp nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
723 (let* ((dd-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
724 (if d-name-pos
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
725 (buffer-substring-no-properties
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
726 (match-beginning d-name-pos)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
727 (match-end d-name-pos))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
728 (mm-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
729 (if m-name-pos
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
730 (buffer-substring-no-properties
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
731 (match-beginning m-name-pos)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
732 (match-end m-name-pos))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
733 (mm (string-to-int
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
734 (if m-pos
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
735 (buffer-substring-no-properties
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
736 (match-beginning m-pos)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
737 (match-end m-pos))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
738 "")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
739 (dd (string-to-int
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
740 (if d-pos
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
741 (buffer-substring-no-properties
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
742 (match-beginning d-pos)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
743 (match-end d-pos))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
744 "")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
745 (y-str (if y-pos
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
746 (buffer-substring-no-properties
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
747 (match-beginning y-pos)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
748 (match-end y-pos))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
749 (yy (if (not y-str)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
750 0
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
751 (if (and (= (length y-str) 2)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
752 abbreviated-calendar-year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
753 (let* ((current-y
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
754 (extract-calendar-year
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
755 (calendar-current-date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
756 (y (+ (string-to-int y-str)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
757 (* 100
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
758 (/ current-y 100)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
759 (if (> (- y current-y) 50)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
760 (- y 100)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
761 (if (> (- current-y y) 50)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
762 (+ y 100)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
763 y)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
764 (string-to-int y-str)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
765 (if dd-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
766 (mark-calendar-days-named
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
767 (cdr (assoc (capitalize (substring dd-name 0 3))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
768 (calendar-make-alist
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
769 calendar-day-name-array
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
770 0
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
771 '(lambda (x) (substring x 0 3))))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
772 (if mm-name
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
773 (if (string-equal mm-name "*")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
774 (setq mm 0)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
775 (setq mm
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
776 (cdr (assoc
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
777 (capitalize
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
778 (substring mm-name 0 3))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
779 (calendar-make-alist
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
780 calendar-month-name-array
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
781 1
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
782 '(lambda (x) (substring x 0 3)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
783 )))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
784 (mark-calendar-date-pattern mm dd yy))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
785 (setq d (cdr d))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
786 (mark-sexp-diary-entries)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
787 (run-hooks 'nongregorian-diary-marking-hook
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
788 'mark-diary-entries-hook)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
789 (set-syntax-table old-diary-syntax-table)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
790 (message "Marking diary entries...done")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
791 (error "Your diary file is not readable!"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
792 (error "You don't have a diary file!"))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
793
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
794 (defun mark-sexp-diary-entries ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
795 "Mark days in the calendar window that have sexp diary entries.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
796 Each entry in the diary file (or included files) visible in the calendar window
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
797 is marked. See the documentation for the function `list-sexp-diary-entries'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
798 (let* ((sexp-mark (regexp-quote sexp-diary-entry-symbol))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
799 (s-entry (concat "\\(\\`\\|\^M\\|\n\\)\\("
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
800 (regexp-quote sexp-mark) "(\\)\\|\\("
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
801 (regexp-quote diary-nonmarking-symbol)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
802 (regexp-quote sexp-mark) "(diary-remind\\)"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
803 (m)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
804 (y)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
805 (first-date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
806 (last-date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
807 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
808 (set-buffer calendar-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
809 (setq m displayed-month)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
810 (setq y displayed-year))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
811 (increment-calendar-month m y -1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
812 (setq first-date
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
813 (calendar-absolute-from-gregorian (list m 1 y)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
814 (increment-calendar-month m y 2)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
815 (setq last-date
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
816 (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
817 (list m (calendar-last-day-of-month m y) y)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
818 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
819 (while (re-search-forward s-entry nil t)
13075
8a67628f4574 (mark-sexp-diary-entries): Add \ for C-M-f's sake.
Richard M. Stallman <rms@gnu.org>
parents: 13053
diff changeset
820 (if (char-equal (preceding-char) ?\()
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
821 (setq marking-diary-entry t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
822 (setq marking-diary-entry nil))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
823 (re-search-backward "(")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
824 (let ((sexp-start (point))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
825 (sexp)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
826 (entry)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
827 (entry-start)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
828 (line-start))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
829 (forward-sexp)
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
830 (setq sexp (buffer-substring-no-properties sexp-start (point)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
831 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
832 (re-search-backward "\^M\\|\n\\|\\`")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
833 (setq line-start (point)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
834 (forward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
835 (if (and (or (char-equal (preceding-char) ?\^M)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
836 (char-equal (preceding-char) ?\n))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
837 (not (looking-at " \\|\^I")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
838 (progn;; Diary entry consists only of the sexp
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
839 (backward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
840 (setq entry ""))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
841 (setq entry-start (point))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
842 (re-search-forward "\^M\\|\n" nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
843 (while (looking-at " \\|\^I")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
844 (re-search-forward "\^M\\|\n" nil t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
845 (backward-char 1)
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
846 (setq entry (buffer-substring-no-properties entry-start (point)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
847 (while (string-match "[\^M]" entry)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
848 (aset entry (match-beginning 0) ?\n )))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
849 (calendar-for-loop date from first-date to last-date do
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
850 (if (diary-sexp-entry sexp entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
851 (calendar-gregorian-from-absolute date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
852 (mark-visible-calendar-date
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
853 (calendar-gregorian-from-absolute date))))))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
854
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
855 (defun mark-included-diary-files ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
856 "Mark the diary entries from other diary files with those of the diary file.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
857 This function is suitable for use as the `mark-diary-entries-hook'; it enables
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
858 you to use shared diary files together with your own. The files included are
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
859 specified in the diary-file by lines of this form:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
860 #include \"filename\"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
861 This is recursive; that is, #include directives in diary files thus included
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
862 are obeyed. You can change the `#include' to some other string by
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
863 changing the variable `diary-include-string'."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
864 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
865 (while (re-search-forward
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
866 (concat
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
867 "\\(\\`\\|\^M\\|\n\\)"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
868 (regexp-quote diary-include-string)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
869 " \"\\([^\"]*\\)\"")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
870 nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
871 (let ((diary-file (substitute-in-file-name
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
872 (buffer-substring-no-properties
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
873 (match-beginning 2) (match-end 2))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
874 (mark-diary-entries-hook 'mark-included-diary-files))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
875 (if (file-exists-p diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
876 (if (file-readable-p diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
877 (progn
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
878 (mark-diary-entries)
13877
44149f0bf44a Replaced all uses of get-file-buffer with find-buffer-visiting.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13688
diff changeset
879 (kill-buffer (find-buffer-visiting diary-file)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
880 (beep)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
881 (message "Can't read included diary file %s" diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
882 (sleep-for 2))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
883 (beep)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
884 (message "Can't find included diary file %s" diary-file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
885 (sleep-for 2))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
886 (goto-char (point-min)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
887
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
888 (defun mark-calendar-days-named (dayname)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
889 "Mark all dates in the calendar window that are day DAYNAME of the week.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
890 0 means all Sundays, 1 means all Mondays, and so on."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
891 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
892 (set-buffer calendar-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
893 (let ((prev-month displayed-month)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
894 (prev-year displayed-year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
895 (succ-month displayed-month)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
896 (succ-year displayed-year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
897 (last-day)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
898 (day))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
899 (increment-calendar-month succ-month succ-year 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
900 (increment-calendar-month prev-month prev-year -1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
901 (setq day (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
902 (calendar-nth-named-day 1 dayname prev-month prev-year)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
903 (setq last-day (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
904 (calendar-nth-named-day -1 dayname succ-month succ-year)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
905 (while (<= day last-day)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
906 (mark-visible-calendar-date (calendar-gregorian-from-absolute day))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
907 (setq day (+ day 7))))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
908
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
909 (defun mark-calendar-date-pattern (month day year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
910 "Mark all dates in the calendar window that conform to MONTH/DAY/YEAR.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
911 A value of 0 in any position is a wildcard."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
912 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
913 (set-buffer calendar-buffer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
914 (let ((m displayed-month)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
915 (y displayed-year))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
916 (increment-calendar-month m y -1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
917 (calendar-for-loop i from 0 to 2 do
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
918 (mark-calendar-month m y month day year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
919 (increment-calendar-month m y 1)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
920
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
921 (defun mark-calendar-month (month year p-month p-day p-year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
922 "Mark dates in the MONTH/YEAR that conform to pattern P-MONTH/P_DAY/P-YEAR.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
923 A value of 0 in any position of the pattern is a wildcard."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
924 (if (or (and (= month p-month)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
925 (or (= p-year 0) (= year p-year)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
926 (and (= p-month 0)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
927 (or (= p-year 0) (= year p-year))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
928 (if (= p-day 0)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
929 (calendar-for-loop
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
930 i from 1 to (calendar-last-day-of-month month year) do
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
931 (mark-visible-calendar-date (list month i year)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
932 (mark-visible-calendar-date (list month p-day year)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
933
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
934 (defun sort-diary-entries ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
935 "Sort the list of diary entries by time of day."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
936 (setq diary-entries-list (sort diary-entries-list 'diary-entry-compare)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
937
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
938 (defun diary-entry-compare (e1 e2)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
939 "Returns t if E1 is earlier than E2."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
940 (or (calendar-date-compare e1 e2)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
941 (and (calendar-date-equal (car e1) (car e2))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
942 (< (diary-entry-time (car (cdr e1)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
943 (diary-entry-time (car (cdr e2)))))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
944
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
945 (defcustom diary-unknown-time
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
946 -9999
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
947 "*Value returned by diary-entry-time when no time is found.
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
948 The default value -9999 causes entries with no recognizable time to be placed
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
949 before those with times; 9999 would place entries with no recognizable time
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
950 after those with times."
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
951 :type 'integer
21669
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21668
diff changeset
952 :group 'diary
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21668
diff changeset
953 :version "20.3")
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
954
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
955 (defun diary-entry-time (s)
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
956 "Time at the beginning of the string S in a military-style integer. For
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
957 example, returns 1325 for 1:25pm. Returns `diary-unknown-time' (default value
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
958 -9999) if no time is recognized. The recognized forms are XXXX, X:XX, or
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
959 XX:XX (military time), and XXam, XXAM, XXpm, XXPM, XX:XXam, XX:XXAM XX:XXpm,
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
960 or XX:XXPM."
19324
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
961 (let ((case-fold-search nil))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
962 (cond ((string-match;; Military time
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
963 "^[ \t]*\\([0-9]?[0-9]\\):?\\([0-9][0-9]\\)\\(\\>\\|[^ap]\\)" s)
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
964 (+ (* 100 (string-to-int
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
965 (substring s (match-beginning 1) (match-end 1))))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
966 (string-to-int (substring s (match-beginning 2) (match-end 2)))))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
967 ((string-match;; Hour only XXam or XXpm
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
968 "^[ \t]*\\([0-9]?[0-9]\\)\\([ap]\\)m\\>" s)
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
969 (+ (* 100 (% (string-to-int
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
970 (substring s (match-beginning 1) (match-end 1)))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
971 12))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
972 (if (equal ?a (downcase (aref s (match-beginning 2))))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
973 0 1200)))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
974 ((string-match;; Hour and minute XX:XXam or XX:XXpm
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
975 "^[ \t]*\\([0-9]?[0-9]\\):\\([0-9][0-9]\\)\\([ap]\\)m\\>" s)
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
976 (+ (* 100 (% (string-to-int
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
977 (substring s (match-beginning 1) (match-end 1)))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
978 12))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
979 (string-to-int (substring s (match-beginning 2) (match-end 2)))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
980 (if (equal ?a (downcase (aref s (match-beginning 3))))
02a8fe146fa6 (diary-entry-time): Bind case-fold-search to nil.
Richard M. Stallman <rms@gnu.org>
parents: 18922
diff changeset
981 0 1200)))
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
982 (t diary-unknown-time))));; Unrecognizable
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
983
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
984 (defun list-sexp-diary-entries (date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
985 "Add sexp entries for DATE from the diary file to `diary-entries-list'.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
986 Also, Make them visible in the diary file. Returns t if any entries were
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
987 found.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
988
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
989 Sexp diary entries must be prefaced by a `sexp-diary-entry-symbol' (normally
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
990 `%%'). The form of a sexp diary entry is
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
991
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
992 %%(SEXP) ENTRY
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
993
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
994 Both ENTRY and DATE are globally available when the SEXP is evaluated. If the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
995 SEXP yields the value nil, the diary entry does not apply. If it yields a
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
996 non-nil value, ENTRY will be taken to apply to DATE; if the non-nil value is a
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
997 string, that string will be the diary entry in the fancy diary display.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
998
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
999 For example, the following diary entry will apply to the 21st of the month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1000 if it is a weekday and the Friday before if the 21st is on a weekend:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1001
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1002 &%%(let ((dayname (calendar-day-of-week date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1003 (day (extract-calendar-day date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1004 (or
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1005 (and (= day 21) (memq dayname '(1 2 3 4 5)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1006 (and (memq day '(19 20)) (= dayname 5)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1007 ) UIUC pay checks deposited
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1008
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1009 A number of built-in functions are available for this type of diary entry:
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1010
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1011 %%(diary-date MONTH DAY YEAR) text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1012 Entry applies if date is MONTH, DAY, YEAR if
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1013 `european-calendar-style' is nil, and DAY, MONTH, YEAR if
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1014 `european-calendar-style' is t. DAY, MONTH, and YEAR
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1015 can be lists of integers, the constant t, or an integer.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1016 The constant t means all values.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1017
17892
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1018 %%(diary-float MONTH DAYNAME N &optional DAY) text
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1019 Entry will appear on the Nth DAYNAME of MONTH.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1020 (DAYNAME=0 means Sunday, 1 means Monday, and so on;
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1021 if N is negative it counts backward from the end of
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1022 the month. MONTH can be a list of months, a single
17892
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1023 month, or t to specify all months. Optional DAY means
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1024 Nth DAYNAME of MONTH on or after/before DAY. DAY defaults
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1025 to 1 if N>0 and the last day of the month if N<0.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1026
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1027 %%(diary-block M1 D1 Y1 M2 D2 Y2) text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1028 Entry will appear on dates between M1/D1/Y1 and M2/D2/Y2,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1029 inclusive. (If `european-calendar-style' is t, the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1030 order of the parameters should be changed to D1, M1, Y1,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1031 D2, M2, Y2.)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1032
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1033 %%(diary-anniversary MONTH DAY YEAR) text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1034 Entry will appear on anniversary dates of MONTH DAY, YEAR.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1035 (If `european-calendar-style' is t, the order of the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1036 parameters should be changed to DAY, MONTH, YEAR.) Text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1037 can contain %d or %d%s; %d will be replaced by the number
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1038 of years since the MONTH DAY, YEAR and %s will be replaced
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1039 by the ordinal ending of that number (that is, `st', `nd',
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1040 `rd' or `th', as appropriate. The anniversary of February
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1041 29 is considered to be March 1 in a non-leap year.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1042
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1043 %%(diary-cyclic N MONTH DAY YEAR) text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1044 Entry will appear every N days, starting MONTH DAY, YEAR.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1045 (If `european-calendar-style' is t, the order of the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1046 parameters should be changed to N, DAY, MONTH, YEAR.) Text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1047 can contain %d or %d%s; %d will be replaced by the number
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1048 of repetitions since the MONTH DAY, YEAR and %s will
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1049 be replaced by the ordinal ending of that number (that is,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1050 `st', `nd', `rd' or `th', as appropriate.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1051
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1052 %%(diary-remind SEXP DAYS &optional MARKING) text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1053 Entry is a reminder for diary sexp SEXP. DAYS is either a
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1054 single number or a list of numbers indicating the number(s)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1055 of days before the event that the warning(s) should occur.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1056 If the current date is (one of) DAYS before the event
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1057 indicated by EXPR, then a suitable message (as specified
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1058 by `diary-remind-message') appears. In addition to the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1059 reminders beforehand, the diary entry also appears on
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1060 the date itself. If optional MARKING is non-nil then the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1061 *reminders* are marked on the calendar. Marking of
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1062 reminders is independent of whether the entry *itself* is
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1063 a marking or nonmarking one.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1064
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1065 %%(diary-day-of-year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1066 Diary entries giving the day of the year and the number of
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1067 days remaining in the year will be made every day. Note
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1068 that since there is no text, it makes sense only if the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1069 fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1070
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1071 %%(diary-iso-date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1072 Diary entries giving the corresponding ISO commercial date
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1073 will be made every day. Note that since there is no text,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1074 it makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1075
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1076 %%(diary-french-date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1077 Diary entries giving the corresponding French Revolutionary
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1078 date will be made every day. Note that since there is no
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1079 text, it makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1080
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1081 %%(diary-islamic-date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1082 Diary entries giving the corresponding Islamic date will be
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1083 made every day. Note that since there is no text, it
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1084 makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1085
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1086 %%(diary-hebrew-date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1087 Diary entries giving the corresponding Hebrew date will be
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1088 made every day. Note that since there is no text, it
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1089 makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1090
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1091 %%(diary-astro-day-number) Diary entries giving the corresponding
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1092 astronomical (Julian) day number will be made every day.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1093 Note that since there is no text, it makes sense only if the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1094 fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1095
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1096 %%(diary-julian-date) Diary entries giving the corresponding
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1097 Julian date will be made every day. Note that since
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1098 there is no text, it makes sense only if the fancy diary
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1099 display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1100
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1101 %%(diary-sunrise-sunset)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1102 Diary entries giving the local times of sunrise and sunset
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1103 will be made every day. Note that since there is no text,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1104 it makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1105 Floating point required.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1106
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1107 %%(diary-phases-of-moon)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1108 Diary entries giving the times of the phases of the moon
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1109 will be when appropriate. Note that since there is no text,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1110 it makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1111 Floating point required.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1112
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1113 %%(diary-yahrzeit MONTH DAY YEAR) text
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1114 Text is assumed to be the name of the person; the date is
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1115 the date of death on the *civil* calendar. The diary entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1116 will appear on the proper Hebrew-date anniversary and on the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1117 day before. (If `european-calendar-style' is t, the order
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1118 of the parameters should be changed to DAY, MONTH, YEAR.)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1119
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1120 %%(diary-rosh-hodesh)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1121 Diary entries will be made on the dates of Rosh Hodesh on
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1122 the Hebrew calendar. Note that since there is no text, it
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1123 makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1124
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1125 %%(diary-parasha)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1126 Diary entries giving the weekly parasha will be made on
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1127 every Saturday. Note that since there is no text, it
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1128 makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1129
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1130 %%(diary-omer)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1131 Diary entries giving the omer count will be made every day
13670
15c441f6d41a (list-sexp-diary-entries): Doc fix.
Paul Eggert <eggert@twinsun.com>
parents: 13650
diff changeset
1132 from Passover to Shavuot. Note that since there is no text,
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1133 it makes sense only if the fancy diary display is used.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1134
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1135 Marking these entries is *extremely* time consuming, so these entries are
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1136 best if they are nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1137 (let* ((mark (regexp-quote diary-nonmarking-symbol))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1138 (sexp-mark (regexp-quote sexp-diary-entry-symbol))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1139 (s-entry (concat "\\(\\`\\|\^M\\|\n\\)" mark "?" sexp-mark "("))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1140 (entry-found))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1141 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1142 (while (re-search-forward s-entry nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1143 (backward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1144 (let ((sexp-start (point))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1145 (sexp)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1146 (entry)
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
1147 (specifier)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1148 (entry-start)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1149 (line-start))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1150 (forward-sexp)
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
1151 (setq sexp (buffer-substring-no-properties sexp-start (point)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1152 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1153 (re-search-backward "\^M\\|\n\\|\\`")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1154 (setq line-start (point)))
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
1155 (setq specifier
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
1156 (buffer-substring-no-properties (1+ line-start) (point)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1157 (forward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1158 (if (and (or (char-equal (preceding-char) ?\^M)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1159 (char-equal (preceding-char) ?\n))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1160 (not (looking-at " \\|\^I")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1161 (progn;; Diary entry consists only of the sexp
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1162 (backward-char 1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1163 (setq entry ""))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1164 (setq entry-start (point))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1165 (re-search-forward "\^M\\|\n" nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1166 (while (looking-at " \\|\^I")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1167 (re-search-forward "\^M\\|\n" nil t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1168 (backward-char 1)
13687
9a985bcde00e Chnaged all occurrences of buffer-substring to buffer-substring-no-properties.
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents: 13670
diff changeset
1169 (setq entry (buffer-substring-no-properties entry-start (point)))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1170 (while (string-match "[\^M]" entry)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1171 (aset entry (match-beginning 0) ?\n )))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1172 (let ((diary-entry (diary-sexp-entry sexp entry date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1173 (if diary-entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1174 (subst-char-in-region line-start (point) ?\^M ?\n t))
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
1175 (add-to-diary-list date diary-entry specifier)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1176 (setq entry-found (or entry-found diary-entry)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1177 entry-found))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1178
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1179 (defun diary-sexp-entry (sexp entry date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1180 "Process a SEXP diary ENTRY for DATE."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1181 (let ((result (if calendar-debug-sexp
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1182 (let ((stack-trace-on-error t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1183 (eval (car (read-from-string sexp))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1184 (condition-case nil
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1185 (eval (car (read-from-string sexp)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1186 (error
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1187 (beep)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1188 (message "Bad sexp at line %d in %s: %s"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1189 (save-excursion
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1190 (save-restriction
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1191 (narrow-to-region 1 (point))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1192 (goto-char (point-min))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1193 (let ((lines 1))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1194 (while (re-search-forward "\n\\|\^M" nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1195 (setq lines (1+ lines)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1196 lines)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1197 diary-file sexp)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1198 (sleep-for 2))))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1199 (if (stringp result)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1200 result
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1201 (if result
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1202 entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1203 nil))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1204
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1205 (defun diary-date (month day year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1206 "Specific date(s) diary entry.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1207 Entry applies if date is MONTH, DAY, YEAR if `european-calendar-style' is nil,
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1208 and DAY, MONTH, YEAR if `european-calendar-style' is t. DAY, MONTH, and YEAR
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1209 can be lists of integers, the constant t, or an integer. The constant t means
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1210 all values."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1211 (let* ((dd (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1212 month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1213 day))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1214 (mm (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1215 day
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1216 month))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1217 (m (extract-calendar-month date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1218 (y (extract-calendar-year date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1219 (d (extract-calendar-day date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1220 (if (and
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1221 (or (and (listp dd) (memq d dd))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1222 (equal d dd)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1223 (eq dd t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1224 (or (and (listp mm) (memq m mm))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1225 (equal m mm)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1226 (eq mm t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1227 (or (and (listp year) (memq y year))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1228 (equal y year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1229 (eq year t)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1230 entry)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1231
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1232 (defun diary-block (m1 d1 y1 m2 d2 y2)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1233 "Block diary entry.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1234 Entry applies if date is between two dates. Order of the parameters is
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1235 M1, D1, Y1, M2, D2, Y2 `european-calendar-style' is nil, and
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1236 D1, M1, Y1, D2, M2, Y2 if `european-calendar-style' is t."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1237 (let ((date1 (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1238 (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1239 (list d1 m1 y1)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1240 (list m1 d1 y1))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1241 (date2 (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1242 (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1243 (list d2 m2 y2)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1244 (list m2 d2 y2))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1245 (d (calendar-absolute-from-gregorian date)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1246 (if (and (<= date1 d) (<= d date2))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1247 entry)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1248
17892
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1249 (defun diary-float (month dayname n &optional day)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1250 "Floating diary entry--entry applies if date is the nth dayname of month.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1251 Parameters are MONTH, DAYNAME, N. MONTH can be a list of months, the constant
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1252 t, or an integer. The constant t means all months. If N is negative, count
17892
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1253 backward from the end of the month.
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1254
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1255 An optional parameter DAY means the Nth DAYNAME on or after/before MONTH DAY."
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1256 ;; This is messy because the diary entry may apply, but the date on which it
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1257 ;; is based can be in a different month/year. For example, asking for the
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1258 ;; first Monday after December 30. For large values of |n| the problem is
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1259 ;; more grotesque.
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1260 (and (= dayname (calendar-day-of-week date))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1261 (let* ((m (extract-calendar-month date))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1262 (d (extract-calendar-day date))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1263 (y (extract-calendar-year date))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1264 (limit; last (n>0) or first (n<0) possible base date for entry
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1265 (calendar-nth-named-absday (- n) dayname m y d))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1266 (last-abs (if (> n 0) limit (+ limit 6)))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1267 (first-abs (if (> n 0) (- limit 6) limit))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1268 (last (calendar-gregorian-from-absolute last-abs))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1269 (first (calendar-gregorian-from-absolute first-abs))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1270 ; m1, d1 is first possible base date
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1271 (m1 (extract-calendar-month first))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1272 (d1 (extract-calendar-day first))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1273 (y1 (extract-calendar-year first))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1274 ; m2, d2 is last possible base date
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1275 (m2 (extract-calendar-month last))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1276 (d2 (extract-calendar-day last))
b3514551f08d (diary-float): Rewritten to fix bug when base date
Richard M. Stallman <rms@gnu.org>
parents: 17626
diff changeset
1277 (y2 (extract-calendar-year last)))
18590
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1278 (if (or (and (= m1 m2) ; only possible base dates in one month
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1279 (or (and (listp month) (memq m1 month))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1280 (eq month t)
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1281 (= m1 month))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1282 (let ((d (or day (if (> n 0)
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1283 1
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1284 (calendar-last-day-of-month m1 y1)))))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1285 (and (<= d1 d) (<= d d2))))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1286 ;; only possible base dates straddle two months
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1287 (and (< m1 m2)
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1288 (or
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1289 ;; m1, d1 works is a base date
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1290 (and
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1291 (or (and (listp month) (memq m1 month))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1292 (eq month t)
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1293 (= m1 month))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1294 (<= d1 (or day (if (> n 0)
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1295 1
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1296 (calendar-last-day-of-month m1 y1)))))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1297 ;; m2, d2 works is a base date
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1298 (and (or (and (listp month) (memq m2 month))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1299 (eq month t)
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1300 (= m2 month))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1301 (<= (or day (if (> n 0)
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1302 1
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1303 (calendar-last-day-of-month m2 y2)))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1304 d2)))))
7d2a26d2371d (diary-float): Fix errors in previous change.
Richard M. Stallman <rms@gnu.org>
parents: 17892
diff changeset
1305 entry))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1306
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1307 (defun diary-anniversary (month day year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1308 "Anniversary diary entry.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1309 Entry applies if date is the anniversary of MONTH, DAY, YEAR if
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1310 `european-calendar-style' is nil, and DAY, MONTH, YEAR if
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1311 `european-calendar-style' is t. Diary entry can contain `%d' or `%d%s'; the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1312 %d will be replaced by the number of years since the MONTH DAY, YEAR and the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1313 %s will be replaced by the ordinal ending of that number (that is, `st', `nd',
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1314 `rd' or `th', as appropriate. The anniversary of February 29 is considered
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1315 to be March 1 in non-leap years."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1316 (let* ((d (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1317 month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1318 day))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1319 (m (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1320 day
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1321 month))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1322 (y (extract-calendar-year date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1323 (diff (- y year)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1324 (if (and (= m 2) (= d 29) (not (calendar-leap-year-p y)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1325 (setq m 3
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1326 d 1))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1327 (if (and (> diff 0) (calendar-date-equal (list m d y) date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1328 (format entry diff (diary-ordinal-suffix diff)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1329
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1330 (defun diary-cyclic (n month day year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1331 "Cycle diary entry--entry applies every N days starting at MONTH, DAY, YEAR.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1332 If `european-calendar-style' is t, parameters are N, DAY, MONTH, YEAR.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1333 ENTRY can contain `%d' or `%d%s'; the %d will be replaced by the number of
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1334 years since the MONTH DAY, YEAR and the %s will be replaced by the ordinal
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1335 ending of that number (that is, `st', `nd', `rd' or `th', as appropriate."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1336 (let* ((d (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1337 month
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1338 day))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1339 (m (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1340 day
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1341 month))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1342 (diff (- (calendar-absolute-from-gregorian date)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1343 (calendar-absolute-from-gregorian
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1344 (list m d year))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1345 (cycle (/ diff n)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1346 (if (and (>= diff 0) (zerop (% diff n)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1347 (format entry cycle (diary-ordinal-suffix cycle)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1348
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1349 (defun diary-ordinal-suffix (n)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1350 "Ordinal suffix for N. (That is, `st', `nd', `rd', or `th', as appropriate.)"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1351 (if (or (memq (% n 100) '(11 12 13))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1352 (< 3 (% n 10)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1353 "th"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1354 (aref ["th" "st" "nd" "rd"] (% n 10))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1355
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1356 (defun diary-day-of-year ()
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1357 "Day of year and number of days remaining in the year of date diary entry."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1358 (calendar-day-of-year-string date))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1359
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16545
diff changeset
1360 (defcustom diary-remind-message
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1361 '("Reminder: Only "
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1362 (if (= 0 (% days 7))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1363 (concat (int-to-string (/ days 7)) (if (= 7 days) " week" " weeks"))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1364 (concat (int-to-string days) (if (= 1 days) " day" " days")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1365 " until "
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1366 diary-entry)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1367 "*Pseudo-pattern giving form of reminder messages in the fancy diary
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1368 display.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1369
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1370 Used by the function `diary-remind', a pseudo-pattern is a list of
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1371 expressions that can involve the keywords `days' (a number), `date' (a list of
17626
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16545
diff changeset
1372 month, day, year), and `diary-entry' (a string)."
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16545
diff changeset
1373 :type 'sexp
68cce262538d Use defcustom.
Richard M. Stallman <rms@gnu.org>
parents: 16545
diff changeset
1374 :group 'diary)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1375
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1376 (defun diary-remind (sexp days &optional marking)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1377 "Provide a reminder of a diary entry.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1378 SEXP is a diary-sexp. DAYS is either a single number or a list of numbers
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1379 indicating the number(s) of days before the event that the warning(s) should
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1380 occur on. If the current date is (one of) DAYS before the event indicated by
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1381 SEXP, then a suitable message (as specified by `diary-remind-message' is
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1382 returned.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1383
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1384 In addition to the reminders beforehand, the diary entry also appears on
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1385 the date itself.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1386
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1387 If optional parameter MARKING is non-nil then the reminders are marked on the
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1388 calendar. Marking of reminders is independent of whether the entry itself is
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1389 a marking or nonmarking one."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1390 (let ((diary-entry))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1391 (if (or (not marking-diary-entries) marking)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1392 (cond
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1393 ((integerp days)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1394 (let ((date (calendar-gregorian-from-absolute
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1395 (+ (calendar-absolute-from-gregorian date) days))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1396 (if (setq diary-entry (eval sexp))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1397 (setq diary-entry (mapconcat 'eval diary-remind-message "")))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1398 ((and (listp days) days)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1399 (setq diary-entry (diary-remind sexp (car days) marking))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1400 (if (not diary-entry)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1401 (setq diary-entry (diary-remind sexp (cdr days) marking))))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1402 (or diary-entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1403 (and (or (not marking-diary-entries) marking-diary-entry)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1404 (eval sexp)))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1405
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
1406 (defun add-to-diary-list (date string specifier)
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
1407 "Add the entry (DATE STRING SPECIFIER) to `diary-entries-list'.
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1408 Do nothing if DATE or STRING is nil."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1409 (and date string
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1410 (setq diary-entries-list
20269
ca337d0a1553 (list-diary-entries, list-sexp-diary-entries, add-to-diary-list):
Karl Heuer <kwzh@gnu.org>
parents: 19324
diff changeset
1411 (append diary-entries-list (list (list date string specifier))))))
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1412
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1413 (defun make-diary-entry (string &optional nonmarking file)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1414 "Insert a diary entry STRING which may be NONMARKING in FILE.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1415 If omitted, NONMARKING defaults to nil and FILE defaults to diary-file."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1416 (find-file-other-window
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1417 (substitute-in-file-name (if file file diary-file)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1418 (goto-char (point-max))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1419 (insert
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1420 (if (bolp) "" "\n")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1421 (if nonmarking diary-nonmarking-symbol "")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1422 string " "))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1423
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1424 (defun insert-diary-entry (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1425 "Insert a diary entry for the date indicated by point.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1426 Prefix arg will make the entry nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1427 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1428 (make-diary-entry (calendar-date-string (calendar-cursor-to-date t) t t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1429 arg))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1430
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1431 (defun insert-weekly-diary-entry (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1432 "Insert a weekly diary entry for the day of the week indicated by point.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1433 Prefix arg will make the entry nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1434 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1435 (make-diary-entry (calendar-day-name (calendar-cursor-to-date t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1436 arg))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1437
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1438 (defun insert-monthly-diary-entry (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1439 "Insert a monthly diary entry for the day of the month indicated by point.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1440 Prefix arg will make the entry nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1441 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1442 (let* ((calendar-date-display-form
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1443 (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1444 '(day " * ")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1445 '("* " day))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1446 (make-diary-entry (calendar-date-string (calendar-cursor-to-date t) t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1447 arg)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1448
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1449 (defun insert-yearly-diary-entry (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1450 "Insert an annual diary entry for the day of the year indicated by point.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1451 Prefix arg will make the entry nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1452 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1453 (let* ((calendar-date-display-form
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1454 (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1455 '(day " " monthname)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1456 '(monthname " " day))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1457 (make-diary-entry (calendar-date-string (calendar-cursor-to-date t) t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1458 arg)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1459
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1460 (defun insert-anniversary-diary-entry (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1461 "Insert an anniversary diary entry for the date given by point.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1462 Prefix arg will make the entry nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1463 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1464 (let* ((calendar-date-display-form
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1465 (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1466 '(day " " month " " year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1467 '(month " " day " " year))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1468 (make-diary-entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1469 (format "%s(diary-anniversary %s)"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1470 sexp-diary-entry-symbol
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1471 (calendar-date-string (calendar-cursor-to-date t) nil t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1472 arg)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1473
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1474 (defun insert-block-diary-entry (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1475 "Insert a block diary entry for the days between the point and marked date.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1476 Prefix arg will make the entry nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1477 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1478 (let* ((calendar-date-display-form
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1479 (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1480 '(day " " month " " year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1481 '(month " " day " " year)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1482 (cursor (calendar-cursor-to-date t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1483 (mark (or (car calendar-mark-ring)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1484 (error "No mark set in this buffer")))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1485 (start)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1486 (end))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1487 (if (< (calendar-absolute-from-gregorian mark)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1488 (calendar-absolute-from-gregorian cursor))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1489 (setq start mark
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1490 end cursor)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1491 (setq start cursor
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1492 end mark))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1493 (make-diary-entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1494 (format "%s(diary-block %s %s)"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1495 sexp-diary-entry-symbol
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1496 (calendar-date-string start nil t)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1497 (calendar-date-string end nil t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1498 arg)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1499
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1500 (defun insert-cyclic-diary-entry (arg)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1501 "Insert a cyclic diary entry starting at the date given by point.
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1502 Prefix arg will make the entry nonmarking."
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1503 (interactive "P")
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1504 (let* ((calendar-date-display-form
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1505 (if european-calendar-style
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1506 '(day " " month " " year)
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1507 '(month " " day " " year))))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1508 (make-diary-entry
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1509 (format "%s(diary-cyclic %d %s)"
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1510 sexp-diary-entry-symbol
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1511 (calendar-read "Repeat every how many days: "
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1512 '(lambda (x) (> x 0)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1513 (calendar-date-string (calendar-cursor-to-date t) nil t))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1514 arg)))
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1515
13650
a9e81464a9ea Renamed from diary.el.
Richard M. Stallman <rms@gnu.org>
parents: 13075
diff changeset
1516 (provide 'diary-lib)
13053
621d48117fde Initial revision
Edward M. Reingold <reingold@emr.cs.iit.edu>
parents:
diff changeset
1517
13650
a9e81464a9ea Renamed from diary.el.
Richard M. Stallman <rms@gnu.org>
parents: 13075
diff changeset
1518 ;;; diary-lib.el ends here