]> code.delx.au - gnu-emacs/commitdiff
* lisp/calendar/calendar.el (calendar-exit): reinstate the 2012-03-28 patch.
authorSam Steingold <sds@gnu.org>
Tue, 5 Jun 2012 17:33:10 +0000 (13:33 -0400)
committerSam Steingold <sds@gnu.org>
Tue, 5 Jun 2012 17:33:10 +0000 (13:33 -0400)
Fixes: debbugs:11140
lisp/ChangeLog
lisp/calendar/calendar.el

index 87c9844247f79ca035a2dd1e786eab1660c90064..fe4f4e4e449eb3c7b4ea61fa75b4e6f7f111d7e5 100644 (file)
@@ -1,3 +1,8 @@
+2012-06-05  Sam Steingold  <sds@gnu.org>
+
+       * calendar/calendar.el (calendar-exit): reinstate the 2012-03-28
+       patch (Bug#11140).
+
 2012-06-05  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * emacs-list/cust-print.el: Move to obsolete.
index 4d4f7e14187ebcefca7ecdb8b45205ab51efbe67..62d09c6b62cf3a4d2cd580ef3f00e97f9a501fc2 100644 (file)
@@ -1793,19 +1793,6 @@ the STRINGS are just concatenated and the result truncated."
                          ?\s (- calendar-right-margin (1- start))))))
         (force-mode-line-update))))
 
-(defun calendar-window-list ()
-  "List of all calendar-related windows."
-  (let ((calendar-buffers (calendar-buffer-list))
-        list)
-    ;; Using 0 rather than t for last argument - see bug#2199.
-    ;; This is only used with calendar-hide-window, which ignores
-    ;; iconified frames anyway, so could use 'visible rather than 0.
-    (walk-windows (lambda (w)
-                    (if (memq (window-buffer w) calendar-buffers)
-                        (push w list)))
-                  nil 0)
-    list))
-
 (defun calendar-buffer-list ()
   "List of all calendar-related buffers (as buffers, not strings)."
   (let (buffs)
@@ -1817,41 +1804,29 @@ the STRINGS are just concatenated and the result truncated."
            (push b buffs)))
     buffs))
 
-(defun calendar-exit ()
+(defun calendar-exit (&optional kill)
   "Get out of the calendar window and hide it and related buffers."
-  (interactive)
-  (let ((diary-buffer (get-file-buffer diary-file)))
-    (if (or (not diary-buffer)
-            (not (buffer-modified-p diary-buffer))
-            (yes-or-no-p
-             "Diary modified; do you really want to exit the calendar? "))
-        ;; Need to do this multiple times because one time can replace some
-        ;; calendar-related buffers with other calendar-related buffers.
-        (mapc (lambda (x)
-                (mapc 'calendar-hide-window (calendar-window-list)))
-              (calendar-window-list)))))
+  (interactive "P")
+  (let ((diary-buffer (get-file-buffer diary-file))
+        (calendar-buffers (calendar-buffer-list)))
+    (when (or (not diary-buffer)
+              (not (buffer-modified-p diary-buffer))
+              (yes-or-no-p
+               "Diary modified; do you really want to exit the calendar? "))
+      (if (and calendar-setup (display-multi-frame-p))
+          ;; FIXME: replace this cruft with the `quit-restore' window property
+          (dolist (w (window-list-1 nil nil t))
+            (if (and (memq (window-buffer w) calendar-buffers)
+                     (window-dedicated-p w))
+                (if calendar-remove-frame-by-deleting
+                    (delete-frame (window-frame w))
+                    (iconify-frame (window-frame w)))
+              (quit-window kill w)))
+        (dolist (b calendar-buffers)
+          (quit-windows-on b kill))))))
 
 (define-obsolete-function-alias 'exit-calendar 'calendar-exit "23.1")
 
-(defun calendar-hide-window (window)
-  "Hide WINDOW if it is calendar-related."
-  (let ((buffer (if (window-live-p window) (window-buffer window))))
-    (if (memq buffer (calendar-buffer-list))
-        (cond
-         ((and (display-multi-frame-p)
-               (eq 'icon (cdr (assoc 'visibility
-                                     (frame-parameters
-                                      (window-frame window))))))
-          nil)
-         ((and (display-multi-frame-p) (window-dedicated-p window))
-          (if calendar-remove-frame-by-deleting
-              (delete-frame (window-frame window))
-              (iconify-frame (window-frame window))))
-         ((not (and (select-window window) (one-window-p window)))
-          (delete-window window))
-         (t (set-buffer buffer)
-            (bury-buffer))))))
-
 (defun calendar-current-date (&optional offset)
   "Return the current date in a list (month day year).
 Optional integer OFFSET is a number of days from the current date."