changeset 20345:69818ee01344

(diary-mail-addr, diary-mail-days): New variables. (diary-mail-entries): New function.
author Richard M. Stallman <rms@gnu.org>
date Tue, 25 Nov 1997 04:00:20 +0000
parents 229f31952731
children 97e5f74f6bc1
files lisp/calendar/diary-lib.el
diffstat 1 files changed, 58 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calendar/diary-lib.el	Tue Nov 25 03:40:58 1997 +0000
+++ b/lisp/calendar/diary-lib.el	Tue Nov 25 04:00:20 1997 +0000
@@ -583,6 +583,64 @@
           (error "Your diary file is not readable!"))
       (error "You don't have a diary file!"))))
 
+
+
+(defcustom diary-mail-addr 
+  (if (boundp 'user-mail-address) user-mail-address nil)
+  "*Email address that `diary-mail-entries' will send email to."
+  :group 'diary
+  :type 'string)
+
+(defcustom diary-mail-days 7
+  "*Number of days for `diary-mail-entries' to check."
+  :group 'diary
+  :type integer)
+
+(defun diary-mail-entries (&optional ndays)
+  "Send a mail message showing diary entries for next NDAYS days.
+If no prefix argument is given, NDAYS is set to `diary-mail-days'.
+
+You can call `diary-mail-entries' every night using an at/cron job.
+For example, this script will run the program at 2am daily.  Since
+`emacs -batch' does not load your `.emacs' file, you must ensure that
+all relevant variables are set, as done here.
+
+#!/bin/sh
+# diary-rem.sh -- repeatedly run the Emacs diary-reminder
+emacs -batch \\
+-eval \"(setq diary-mail-days 3 \\
+             european-calendar-style t \\
+             diary-mail-addr \\\"user@host.name\\\" )\" \\
+-l diary-lib -f diary-mail-entries 
+at -f diary-rem.sh 0200 tomorrow
+
+You may have to tweak the syntax of the `at' command to suit your
+system.  Alternatively, you can specify a cron entry:
+0 1 * * * diary-rem.sh
+to run it every morning at 1am."
+  (interactive "p")
+  (let ((text nil)
+	;; Use the fancy-diary-display as it doesn't hide rest of
+	;; diary file with ^M characters.  It also looks nicer.
+	(diary-display-hook 'fancy-diary-display))	
+    (if (not current-prefix-arg)
+	(setq ndays diary-mail-days))
+    (calendar)
+    (view-diary-entries ndays)
+    (set-buffer "*Fancy Diary Entries*")
+    (setq text (buffer-substring (point-min) (point-max)))
+
+    ;; Now send text as a mail message.
+    (mail)
+    (mail-to)
+    (insert diary-mail-addr)
+    (mail-subject)
+    (insert "Diary entries generated ")
+    (insert (format-time-string "%a %d %b %y" (current-time)))
+    (mail-text)
+    (insert text)
+    (mail-send-and-exit nil)))
+
 (defun diary-name-pattern (string-array &optional fullname)
   "Convert an STRING-ARRAY, an array of strings to a pattern.
 The pattern will match any of the strings, either entirely or abbreviated