Mercurial > emacs
comparison lisp/calendar/appt.el @ 110657:6ae0b64986ea
Remove some obsolete appt.el code.
* lisp/calendar/appt.el (appt-issue-message, appt-visible, appt-msg-window):
Remove options, obsolete since 22.1.
(appt-display-format, appt-display-message): Remove
backwards-compatibility code.
(appt-check): No longer check appt-issue-message.
(appt-make-list): No longer autoload it. Doc fix. No longer
activate the package.
author | Glenn Morris <rgm@gnu.org> |
---|---|
date | Wed, 29 Sep 2010 19:15:17 -0700 |
parents | 1b24798e2816 |
children | 34826102748f |
comparison
equal
deleted
inserted
replaced
110656:c237dcab72bf | 110657:6ae0b64986ea |
---|---|
81 (defgroup appt nil | 81 (defgroup appt nil |
82 "Appointment notification." | 82 "Appointment notification." |
83 :prefix "appt-" | 83 :prefix "appt-" |
84 :group 'calendar) | 84 :group 'calendar) |
85 | 85 |
86 (defcustom appt-issue-message t | |
87 "Non-nil means check for appointments in the diary buffer. | |
88 To be detected, the diary entry must have the format described in the | |
89 documentation of the function `appt-check'." | |
90 :type 'boolean | |
91 :group 'appt) | |
92 | |
93 (make-obsolete-variable 'appt-issue-message | |
94 "use the function `appt-activate', and the \ | |
95 variable `appt-display-format' instead." "22.1") | |
96 | |
97 (defcustom appt-message-warning-time 12 | 86 (defcustom appt-message-warning-time 12 |
98 "Time in minutes before an appointment that the warning begins." | 87 "Time in minutes before an appointment that the warning begins." |
99 :type 'integer | 88 :type 'integer |
100 :group 'appt) | 89 :group 'appt) |
101 | 90 |
102 (defcustom appt-audible t | 91 (defcustom appt-audible t |
103 "Non-nil means beep to indicate appointment." | 92 "Non-nil means beep to indicate appointment." |
104 :type 'boolean | 93 :type 'boolean |
105 :group 'appt) | 94 :group 'appt) |
106 | 95 |
107 (defcustom appt-visible t | |
108 "Non-nil means display appointment message in echo area. | |
109 This variable is only relevant if `appt-msg-window' is nil." | |
110 :type 'boolean | |
111 :group 'appt) | |
112 | |
113 (make-obsolete-variable 'appt-visible 'appt-display-format "22.1") | |
114 | |
115 (defcustom appt-msg-window t | |
116 "Non-nil means display appointment message in another window. | |
117 If non-nil, this variable overrides `appt-visible'." | |
118 :type 'boolean | |
119 :group 'appt) | |
120 | |
121 (make-obsolete-variable 'appt-msg-window 'appt-display-format "22.1") | |
122 | |
123 ;; TODO - add popup. | 96 ;; TODO - add popup. |
124 (defcustom appt-display-format 'ignore | 97 (defcustom appt-display-format 'window |
125 "How appointment reminders should be displayed. | 98 "How appointment reminders should be displayed. |
126 The options are: | 99 The options are: |
127 window - use a separate window | 100 window - use a separate window |
128 echo - use the echo area | 101 echo - use the echo area |
129 nil - no visible reminder. | 102 nil - no visible reminder. |
130 See also `appt-audible' and `appt-display-mode-line'. | 103 See also `appt-audible' and `appt-display-mode-line'." |
131 | |
132 The default value is 'ignore, which means to fall back on the value | |
133 of the (obsolete) variables `appt-msg-window' and `appt-visible'." | |
134 :type '(choice | 104 :type '(choice |
135 (const :tag "Separate window" window) | 105 (const :tag "Separate window" window) |
136 (const :tag "Echo-area" echo) | 106 (const :tag "Echo-area" echo) |
137 (const :tag "No visible display" nil) | 107 (const :tag "No visible display" nil)) |
138 (const :tag "Backwards compatibility setting - choose another value" | |
139 ignore)) | |
140 :group 'appt | 108 :group 'appt |
141 :version "22.1") | 109 :version "24.1") ; no longer inherit from deleted obsolete variables |
142 | 110 |
143 (defcustom appt-display-mode-line t | 111 (defcustom appt-display-mode-line t |
144 "Non-nil means display minutes to appointment and time on the mode line. | 112 "Non-nil means display minutes to appointment and time on the mode line. |
145 This is in addition to any other display of appointment messages." | 113 This is in addition to any other display of appointment messages." |
146 :type 'boolean | 114 :type 'boolean |
234 (defun appt-display-message (string mins) | 202 (defun appt-display-message (string mins) |
235 "Display a reminder about an appointment. | 203 "Display a reminder about an appointment. |
236 The string STRING describes the appointment, due in integer MINS minutes. | 204 The string STRING describes the appointment, due in integer MINS minutes. |
237 The format of the visible reminder is controlled by `appt-display-format'. | 205 The format of the visible reminder is controlled by `appt-display-format'. |
238 The variable `appt-audible' controls the audible reminder." | 206 The variable `appt-audible' controls the audible reminder." |
239 ;; Let-binding for backwards compatibility. Remove when obsolete | 207 (if appt-audible (beep 1)) |
240 ;; vars appt-msg-window and appt-visible are dropped. | 208 (cond ((eq appt-display-format 'window) |
241 (let ((appt-display-format | 209 (funcall appt-disp-window-function |
242 (if (eq appt-display-format 'ignore) | 210 (number-to-string mins) |
243 (cond (appt-msg-window 'window) | 211 ;; TODO - use calendar-month-abbrev-array rather than %b? |
244 (appt-visible 'echo)) | 212 (format-time-string "%a %b %e " (current-time)) |
245 appt-display-format))) | 213 string) |
246 (if appt-audible (beep 1)) | 214 (run-at-time (format "%d sec" appt-display-duration) |
247 (cond ((eq appt-display-format 'window) | 215 nil |
248 (funcall appt-disp-window-function | 216 appt-delete-window-function)) |
249 (number-to-string mins) | 217 ((eq appt-display-format 'echo) |
250 ;; TODO - use calendar-month-abbrev-array rather than %b? | 218 (message "%s" string)))) |
251 (format-time-string "%a %b %e " (current-time)) | |
252 string) | |
253 (run-at-time (format "%d sec" appt-display-duration) | |
254 nil | |
255 appt-delete-window-function)) | |
256 ((eq appt-display-format 'echo) | |
257 (message "%s" string))))) | |
258 | 219 |
259 | 220 |
260 (defun appt-check (&optional force) | 221 (defun appt-check (&optional force) |
261 "Check for an appointment and update any reminder display. | 222 "Check for an appointment and update any reminder display. |
262 If optional argument FORCE is non-nil, reparse the diary file for | 223 If optional argument FORCE is non-nil, reparse the diary file for |
346 appt-mode-string nil | 307 appt-mode-string nil |
347 appt-display-count nil) | 308 appt-display-count nil) |
348 ;; If there are entries in the list, and the user wants a | 309 ;; If there are entries in the list, and the user wants a |
349 ;; message issued, get the first time off of the list and | 310 ;; message issued, get the first time off of the list and |
350 ;; calculate the number of minutes until the appointment. | 311 ;; calculate the number of minutes until the appointment. |
351 (when (and appt-issue-message appt-time-msg-list) | 312 (when appt-time-msg-list |
352 (setq appt-comp-time (caar (car appt-time-msg-list)) | 313 (setq appt-comp-time (caar (car appt-time-msg-list)) |
353 appt-warn-time (or (nth 3 (car appt-time-msg-list)) | 314 appt-warn-time (or (nth 3 (car appt-time-msg-list)) |
354 appt-message-warning-time) | 315 appt-message-warning-time) |
355 min-to-app (- appt-comp-time cur-comp-time)) | 316 min-to-app (- appt-comp-time cur-comp-time)) |
356 (while (and appt-time-msg-list | 317 (while (and appt-time-msg-list |
513 | 474 |
514 | 475 |
515 (defvar number) | 476 (defvar number) |
516 (defvar original-date) | 477 (defvar original-date) |
517 (defvar diary-entries-list) | 478 (defvar diary-entries-list) |
518 ;; Autoload for the old way of using this package. Can be removed sometime. | 479 |
519 ;;;###autoload | |
520 (defun appt-make-list () | 480 (defun appt-make-list () |
521 "Update the appointments list from today's diary buffer. | 481 "Update the appointments list from today's diary buffer. |
522 The time must be at the beginning of a line for it to be | 482 The time must be at the beginning of a line for it to be |
523 put in the appointments list (see examples in documentation of | 483 put in the appointments list (see examples in documentation of |
524 the function `appt-check'). We assume that the variables DATE and | 484 the function `appt-check'). We assume that the variables DATE and |
525 NUMBER hold the arguments that `diary-list-entries' received. | 485 NUMBER hold the arguments that `diary-list-entries' received. |
526 They specify the range of dates that the diary is being processed for. | 486 They specify the range of dates that the diary is being processed for. |
527 | 487 |
528 Any appointments made with `appt-add' are not affected by this function. | 488 Any appointments made with `appt-add' are not affected by this function." |
529 | 489 ;; We have something to do if the range of dates that the diary is |
530 For backwards compatibility, this function activates the | 490 ;; considering includes the current date. |
531 appointment package (if it is not already active)." | 491 (if (and (not (calendar-date-compare |
532 ;; See comments above appt-activate defun. | 492 (list (calendar-current-date)) |
533 (if (not appt-timer) | 493 (list original-date))) |
534 (appt-activate 1) | 494 (calendar-date-compare |
535 ;; We have something to do if the range of dates that the diary is | 495 (list (calendar-current-date)) |
536 ;; considering includes the current date. | 496 (list (calendar-gregorian-from-absolute |
537 (if (and (not (calendar-date-compare | 497 (+ (calendar-absolute-from-gregorian original-date) |
538 (list (calendar-current-date)) | 498 number))))) |
539 (list original-date))) | 499 (save-excursion |
540 (calendar-date-compare | 500 ;; Clear the appointments list, then fill it in from the diary. |
541 (list (calendar-current-date)) | 501 (dolist (elt appt-time-msg-list) |
542 (list (calendar-gregorian-from-absolute | 502 ;; Delete any entries that were not made with appt-add. |
543 (+ (calendar-absolute-from-gregorian original-date) | 503 (unless (nth 2 elt) |
544 number))))) | 504 (setq appt-time-msg-list |
545 (save-excursion | 505 (delq elt appt-time-msg-list)))) |
546 ;; Clear the appointments list, then fill it in from the diary. | 506 (if diary-entries-list |
547 (dolist (elt appt-time-msg-list) | 507 ;; Cycle through the entry-list (diary-entries-list) |
548 ;; Delete any entries that were not made with appt-add. | 508 ;; looking for entries beginning with a time. If the |
549 (unless (nth 2 elt) | 509 ;; entry begins with a time, add it to the |
550 (setq appt-time-msg-list | 510 ;; appt-time-msg-list. Then sort the list. |
551 (delq elt appt-time-msg-list)))) | 511 (let ((entry-list diary-entries-list) |
552 (if diary-entries-list | 512 (new-time-string "") |
553 ;; Cycle through the entry-list (diary-entries-list) | 513 time-string) |
554 ;; looking for entries beginning with a time. If the | 514 ;; Below, we assume diary-entries-list was in date |
555 ;; entry begins with a time, add it to the | 515 ;; order. It is, unless something on |
556 ;; appt-time-msg-list. Then sort the list. | 516 ;; diary-list-entries-hook has changed it, eg |
557 (let ((entry-list diary-entries-list) | 517 ;; diary-include-other-files (bug#7019). It must be |
558 (new-time-string "") | 518 ;; in date order if number = 1. |
559 time-string) | 519 (and diary-list-entries-hook |
560 ;; Below, we assume diary-entries-list was in date | 520 appt-display-diary |
561 ;; order. It is, unless something on | 521 (not (eq diary-number-of-entries 1)) |
562 ;; diary-list-entries-hook has changed it, eg | 522 (not (memq (car (last diary-list-entries-hook)) |
563 ;; diary-include-other-files (bug#7019). It must be | 523 '(diary-sort-entries sort-diary-entries))) |
564 ;; in date order if number = 1. | 524 (setq entry-list (sort entry-list 'diary-entry-compare))) |
565 (and diary-list-entries-hook | 525 ;; Skip diary entries for dates before today. |
566 appt-display-diary | 526 (while (and entry-list |
567 (not (eq diary-number-of-entries 1)) | 527 (calendar-date-compare |
568 (not (memq (car (last diary-list-entries-hook)) | 528 (car entry-list) (list (calendar-current-date)))) |
569 '(diary-sort-entries sort-diary-entries))) | 529 (setq entry-list (cdr entry-list))) |
570 (setq entry-list (sort entry-list 'diary-entry-compare))) | 530 ;; Parse the entries for today. |
571 ;; Skip diary entries for dates before today. | 531 (while (and entry-list |
572 (while (and entry-list | 532 (calendar-date-equal |
573 (calendar-date-compare | 533 (calendar-current-date) (caar entry-list))) |
574 (car entry-list) (list (calendar-current-date)))) | 534 (setq time-string (cadr (car entry-list))) |
575 (setq entry-list (cdr entry-list))) | 535 (while (string-match appt-time-regexp time-string) |
576 ;; Parse the entries for today. | 536 (let* ((beg (match-beginning 0)) |
577 (while (and entry-list | 537 ;; Get just the time for this appointment. |
578 (calendar-date-equal | 538 (only-time (match-string 0 time-string)) |
579 (calendar-current-date) (caar entry-list))) | 539 ;; Find the end of this appointment |
580 (setq time-string (cadr (car entry-list))) | 540 ;; (the start of the next). |
581 (while (string-match appt-time-regexp time-string) | 541 (end (string-match |
582 (let* ((beg (match-beginning 0)) | 542 (concat "\n[ \t]*" appt-time-regexp) |
583 ;; Get just the time for this appointment. | 543 time-string |
584 (only-time (match-string 0 time-string)) | 544 (match-end 0))) |
585 ;; Find the end of this appointment | 545 ;; Get the whole string for this appointment. |
586 ;; (the start of the next). | 546 (appt-time-string |
587 (end (string-match | 547 (substring time-string beg end)) |
588 (concat "\n[ \t]*" appt-time-regexp) | 548 (appt-time (list (appt-convert-time only-time))) |
589 time-string | 549 (time-msg (list appt-time appt-time-string))) |
590 (match-end 0))) | 550 ;; Add this appointment to appt-time-msg-list. |
591 ;; Get the whole string for this appointment. | 551 (setq appt-time-msg-list |
592 (appt-time-string | 552 (nconc appt-time-msg-list (list time-msg)) |
593 (substring time-string beg end)) | 553 ;; Discard this appointment from the string. |
594 (appt-time (list (appt-convert-time only-time))) | 554 time-string |
595 (time-msg (list appt-time appt-time-string))) | 555 (if end (substring time-string end) "")))) |
596 ;; Add this appointment to appt-time-msg-list. | 556 (setq entry-list (cdr entry-list))))) |
597 (setq appt-time-msg-list | 557 (setq appt-time-msg-list (appt-sort-list appt-time-msg-list)) |
598 (nconc appt-time-msg-list (list time-msg)) | 558 ;; Convert current time to minutes after midnight (12:01am = 1), |
599 ;; Discard this appointment from the string. | 559 ;; so that elements in the list that are earlier than the |
600 time-string | 560 ;; present time can be removed. |
601 (if end (substring time-string end) "")))) | 561 (let* ((now (decode-time)) |
602 (setq entry-list (cdr entry-list))))) | 562 (cur-comp-time (+ (* 60 (nth 2 now)) (nth 1 now))) |
603 (setq appt-time-msg-list (appt-sort-list appt-time-msg-list)) | 563 (appt-comp-time (caar (car appt-time-msg-list)))) |
604 ;; Convert current time to minutes after midnight (12:01am = 1), | 564 (while (and appt-time-msg-list (< appt-comp-time cur-comp-time)) |
605 ;; so that elements in the list that are earlier than the | 565 (setq appt-time-msg-list (cdr appt-time-msg-list)) |
606 ;; present time can be removed. | 566 (if appt-time-msg-list |
607 (let* ((now (decode-time)) | 567 (setq appt-comp-time (caar (car appt-time-msg-list))))))))) |
608 (cur-comp-time (+ (* 60 (nth 2 now)) (nth 1 now))) | |
609 (appt-comp-time (caar (car appt-time-msg-list)))) | |
610 (while (and appt-time-msg-list (< appt-comp-time cur-comp-time)) | |
611 (setq appt-time-msg-list (cdr appt-time-msg-list)) | |
612 (if appt-time-msg-list | |
613 (setq appt-comp-time (caar (car appt-time-msg-list)))))))))) | |
614 | 568 |
615 | 569 |
616 (defun appt-sort-list (appt-list) | 570 (defun appt-sort-list (appt-list) |
617 "Sort an appointment list, putting earlier items at the front. | 571 "Sort an appointment list, putting earlier items at the front. |
618 APPT-LIST is a list of the same format as `appt-time-msg-list'." | 572 APPT-LIST is a list of the same format as `appt-time-msg-list'." |
647 (list (expand-file-name diary-file)))) | 601 (list (expand-file-name diary-file)))) |
648 appt-timer | 602 appt-timer |
649 (let ((appt-display-diary nil)) | 603 (let ((appt-display-diary nil)) |
650 (appt-check t))) | 604 (appt-check t))) |
651 nil) | 605 nil) |
652 | |
653 ;; In Emacs-21.3, the manual documented the following procedure to | |
654 ;; activate this package: | |
655 ;; (display-time) | |
656 ;; (add-hook 'diary-hook 'appt-make-list) | |
657 ;; (diary 0) | |
658 ;; The display-time call was not necessary, AFAICS. | |
659 ;; What was really needed was to add the hook and load this file. | |
660 ;; Calling (diary 0) once the hook had been added was in some sense a | |
661 ;; roundabout way of loading this file. This file used to have code at | |
662 ;; the top-level that set up the appt-timer and global-mode-string. | |
663 ;; One way to maintain backwards compatibility would be to call | |
664 ;; (appt-activate 1) at top-level. However, this goes against the | |
665 ;; convention that just loading an Emacs package should not activate | |
666 ;; it. Instead, we make appt-make-list activate the package (after a | |
667 ;; suggestion from rms). This means that one has to call diary in | |
668 ;; order to get it to work, but that is in line with the old (weird, | |
669 ;; IMO) documented behavior for activating the package. | |
670 ;; Actually, since (diary 0) does not run diary-hook, I don't think | |
671 ;; the documented behavior in Emacs-21.3 would ever have worked. | |
672 ;; Oh well, at least with the changes to appt-make-list it will now | |
673 ;; work as well as it ever did. | |
674 ;; The new method is just to use (appt-activate 1). | |
675 ;; -- gmorris | |
676 | 606 |
677 ;;;###autoload | 607 ;;;###autoload |
678 (defun appt-activate (&optional arg) | 608 (defun appt-activate (&optional arg) |
679 "Toggle checking of appointments. | 609 "Toggle checking of appointments. |
680 With optional numeric argument ARG, turn appointment checking on if | 610 With optional numeric argument ARG, turn appointment checking on if |