# HG changeset patch # User Richard M. Stallman # Date 904166065 0 # Node ID 81052242dbce1e3ca8c0e1fcb63241bac6832ae0 # Parent f72ce5154071893703fa624ed6e6a4d7c77e4919 (appt-mode-string): New variable. (global-mode-string): Add appt-mode-string to it. (appt-check): Avoid using display-time-string to fetch current time. To display in mode line, use appt-mode-string. diff -r f72ce5154071 -r 81052242dbce lisp/calendar/appt.el --- a/lisp/calendar/appt.el Wed Aug 26 21:12:07 1998 +0000 +++ b/lisp/calendar/appt.el Wed Aug 26 21:14:25 1998 +0000 @@ -44,8 +44,7 @@ ;;; pending appointment based on their diary file. ;;; ;;; -;;; ******* It is necessary to invoke 'display-time' ******** -;;; ******* and 'diary' for this to work properly. ******** +;;; ******* It is necessary to invoke 'diary' for this to work properly. **** ;;; ;;; A message will be displayed in the mode line of the emacs buffer ;;; and (if the user desires) the terminal will beep and display a message @@ -60,14 +59,16 @@ ;;; In order to use, the following should be in your .emacs file in addition to ;;; creating a diary file and invoking calendar: ;;; -;;; Set some options -;;; (setq view-diary-entries-initially t) -;;; (setq appt-issue-message t) +;;; To enable appointment reminders, the following lines are required: +;;; (add-hook 'diary-hook 'appt-make-list) +;;; (let ((diary-display-hook 'ignore)) +;;; (diary)) +;;; You can replace the last two with just (diary) +;;; if you want to display the diary as well. ;;; -;;; The following three lines are required: -;;; (display-time) -;;; (add-hook 'diary-hook 'appt-make-list) -;;; +;;; Before that, you can also set some options if you want +;;; (setq view-diary-entries-initially t) +;;; (setq appt-issue-message t) ;;; ;;; This is an example of what can be in your diary file: ;;; Monday @@ -173,6 +174,12 @@ :type 'boolean :group 'appt) +(defcustom appt-interval 60 + "*Interval in seconds between checking for appointments." + :type 'integer + :group 'appt + :version "20.3") + (defvar appt-time-msg-list nil "The list of appointments for today. Use `appt-add' and `appt-delete' to add and delete appointments from list. @@ -196,6 +203,9 @@ (defvar appt-delete-window-function 'appt-delete-window "Function called to remove appointment window and buffer.") +(defvar appt-mode-string nil + "String to display in the mode line for an appointment.") + (defun appt-check () "Check for an appointment and update the mode line. Note: the time must be the first thing in the line in the diary @@ -212,46 +222,43 @@ The following variables control the action of the notification: -appt-issue-message - If T, the diary buffer is checked for appointments. +`appt-issue-message' + If t, the diary buffer is checked for appointments. -appt-message-warning-time +`appt-message-warning-time' Variable used to determine if appointment message should be displayed. -appt-audible +`appt-audible' Variable used to determine if appointment is audible. Default is t. -appt-visible +`appt-visible' Variable used to determine if appointment message should be - displayed in the mini-buffer. Default is t. + displayed in the mini-buffer. Default is t. -appt-msg-window +`appt-msg-window' Variable used to determine if appointment message - should temporarily appear in another window. Mutually exclusive - to appt-visible. + should temporarily appear in another window. Mutually exclusive + to `appt-visible'. -appt-display-duration +`appt-display-duration' The number of seconds an appointment message is displayed in another window. -appt-display-interval +`appt-display-interval' The number of minutes to wait between checking the appointments list. -appt-disp-window-function - Function called to display appointment window. You can customize +`appt-disp-window-function ' + Function called to display appointment window. You can customize appt.el by setting this variable to a function different from the one provided with this package. -appt-delete-window-function +`appt-delete-window-function ' Function called to remove appointment window and buffer. You can customize appt.el by setting this variable to a function different - from the one provided with this package. - -This function is run from the loadst process for display time. -Therefore, you need to have `(display-time)' in your .emacs file." + from the one provided with this package." (if (or (= appt-display-interval 1) @@ -314,55 +321,39 @@ ;; issue warning if the appointment time is ;; within appt-message-warning time - (if (and (<= min-to-app appt-message-warning-time) - (>= min-to-app 0)) - (progn - (if appt-msg-window - (progn - (string-match - "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" - display-time-string) - - (setq new-time (substring display-time-string - (match-beginning 0) - (match-end 0))) - (funcall - appt-disp-window-function - min-to-app new-time - (car (cdr (car appt-time-msg-list)))) + (when (and (<= min-to-app appt-message-warning-time) + (>= min-to-app 0)) + (if appt-msg-window + (progn + (setq new-time (format-time-string "%a %b %e " + (current-time))) + (funcall + appt-disp-window-function + min-to-app new-time + (car (cdr (car appt-time-msg-list)))) - (run-at-time - (format "%d sec" appt-display-duration) - nil - appt-delete-window-function)) + (run-at-time + (format "%d sec" appt-display-duration) + nil + appt-delete-window-function)) ;;; else - (if appt-visible - (message "%s" - (car (cdr (car appt-time-msg-list))))) + (if appt-visible + (message "%s" + (car (cdr (car appt-time-msg-list))))) - (if appt-audible - (beep 1))) - - (if appt-display-mode-line - (progn - (string-match - "[0-9]?[0-9]:[0-9][0-9]\\(am\\|pm\\)?" - display-time-string) + (if appt-audible + (beep 1))) - (setq new-time (substring display-time-string - (match-beginning 0) - (match-end 0))) - (setq display-time-string - (concat "App't in " - min-to-app " min. " new-time " ")) + (when appt-display-mode-line + (setq appt-mode-string + (concat "App't in " min-to-app " min. ")) + (force-mode-line-update t) + (sit-for 0)) - (force-mode-line-update t) - (sit-for 0))) - - (if (= min-to-app 0) - (setq appt-time-msg-list - (cdr appt-time-msg-list)))))))))))) + (if (= min-to-app 0) + (setq appt-time-msg-list + (cdr appt-time-msg-list))))))))))) ;; Display appointment message in a separate buffer. @@ -392,6 +383,7 @@ (setq mode-line-format (concat "-------------------- Appointment in " min-to-app " minutes. " new-time " %-")) + (erase-buffer) (insert-string appt-msg) (shrink-window-if-larger-than-buffer (get-buffer-window appt-disp-buf t)) (set-buffer-modified-p nil) @@ -612,7 +604,14 @@ (setq conv-time (+ (* hr 60) min)) conv-time)) -(add-hook 'display-time-hook 'appt-check) +(defvar appt-timer nil + "Timer used for diary appointment notifications (`appt-check').") + +(setq appt-timer (run-at-time t appt-interval 'appt-check)) + +(or global-mode-string (setq global-mode-string '(""))) +(or (memq 'appt-mode-string global-mode-string) + (setq global-mode-string + (append global-mode-string '(appt-mode-string)))) ;;; appt.el ends here -