changeset 60321:efcf9ada3122

(mark-diary-entries): Remove any old marks first. (diary-redraw-calendar): New function. (make-diary-entry): Add diary-redraw-calendar to local write-contents-functions. Turn off selective display before inserting in diary.
author Glenn Morris <rgm@gnu.org>
date Tue, 01 Mar 2005 10:23:58 +0000
parents c0317237105a
children ae2850fc74dc
files lisp/calendar/diary-lib.el
diffstat 1 files changed, 21 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/calendar/diary-lib.el	Tue Mar 01 10:15:32 2005 +0000
+++ b/lisp/calendar/diary-lib.el	Tue Mar 01 10:23:58 2005 +0000
@@ -1,6 +1,6 @@
 ;;; diary-lib.el --- diary functions
 
-;; Copyright (C) 1989, 1990, 1992, 1993, 1994, 1995, 2003, 2004
+;; Copyright (C) 1989, 1990, 1992, 1993, 1994, 1995, 2003, 2004, 2005
 ;;           Free Software Foundation, Inc.
 
 ;; Author: Edward M. Reingold <reingold@cs.uiuc.edu>
@@ -841,6 +841,10 @@
 After the entries are marked, the hooks `nongregorian-diary-marking-hook' and
 `mark-diary-entries-hook' are run."
   (interactive)
+  ;; To remove any deleted diary entries.
+  (when mark-diary-entries-in-calendar
+    (setq mark-diary-entries-in-calendar nil)
+    (redraw-calendar))
   (let ((marking-diary-entries t)
         file-glob-attrs marks)
     (save-excursion
@@ -1647,11 +1651,26 @@
           (append diary-entries-list
                   (list (list date string specifier marker globcolor))))))
 
+(defun diary-redraw-calendar ()
+  "If `calendar-buffer' is live and diary entries are marked, redraw it."
+  (and mark-diary-entries-in-calendar
+       (redraw-calendar))
+  ;; Return value suitable for `write-contents-functions'.
+  nil)
+
 (defun make-diary-entry (string &optional nonmarking file)
   "Insert a diary entry STRING which may be NONMARKING in FILE.
-If omitted, NONMARKING defaults to nil and FILE defaults to `diary-file'."
+If omitted, NONMARKING defaults to nil and FILE defaults to
+`diary-file'.  Adds `diary-redraw-calendar' to
+`write-contents-functions' for FILE, so that the calendar will be
+redrawn with the new entry marked, if necessary."
   (let ((pop-up-frames (window-dedicated-p (selected-window))))
     (find-file-other-window (substitute-in-file-name (or file diary-file))))
+  (add-hook 'write-contents-functions 'diary-redraw-calendar nil t)
+  (when selective-display
+    (subst-char-in-region (point-min) (point-max) ?\^M ?\n t)
+    (setq selective-display nil)
+    (kill-local-variable 'mode-line-format))
   (widen)
   (goto-char (point-max))
   (when (let ((case-fold-search t))