From a1daddd610574dd81c006fdb5265deaa448bf9ae Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Sat, 31 Mar 2012 13:03:59 -0700 Subject: [PATCH] Revert 2012-03-28 calendar change * lisp/calendar/calendar.el (calendar-window-list) (calendar-hide-window): Restore. (calendar-exit): Use calendar-window-list, calendar-hide-window again. Fixes: debbugs:11140 --- lisp/ChangeLog | 4 +++ lisp/calendar/calendar.el | 63 +++++++++++++++++++++++++++------------ 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 970c74bf50f..87426eb0bea 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,9 @@ 2012-03-31 Glenn Morris + * calendar/calendar.el (calendar-window-list) + (calendar-hide-window): Restore. (Bug#11140) + (calendar-exit): Use calendar-window-list, calendar-hide-window again. + * emacs-lisp/edebug.el (edebug-unwrap-results): Doc fix. 2012-03-30 Thierry Volpiatto diff --git a/lisp/calendar/calendar.el b/lisp/calendar/calendar.el index cdef98a2763..d9ec27b4f88 100644 --- a/lisp/calendar/calendar.el +++ b/lisp/calendar/calendar.el @@ -1793,6 +1793,19 @@ 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) @@ -1804,29 +1817,41 @@ the STRINGS are just concatenated and the result truncated." (push b buffs))) buffs)) -(defun calendar-exit (&optional kill) +(defun calendar-exit () "Get out of the calendar window and hide it and related buffers." - (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)))))) + (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))))) (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." -- 2.39.2