From: Martin Rudalics Date: Mon, 10 Oct 2011 17:52:03 +0000 (+0200) Subject: In vc actions use quit-windows-on instead of delete-windows-on. X-Git-Tag: emacs-pretest-24.0.91~163 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=366ca7f3da85b695afa34c3c3270b16a16d47f42;p=emacs.git In vc actions use quit-windows-on instead of delete-windows-on. * window.el (quit-windows-on): New function. * vc/vc.el (vc-revert, vc-rollback): * vc/vc-dispatcher.el (vc-finish-logentry): Call quit-windows-on instead of deleting windows. (Bug#4557) (Bug#5310) (Bug#5556) (Bug#6183) (Bug#7074)((Bug#7447) --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 103d7b25518..7b9adfd1279 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -3,6 +3,12 @@ * window.el (special-display-buffer-names) (special-display-regexps): Remove some remnants of earlier changes from doc-strings. + (quit-windows-on): New function. + + * vc/vc.el (vc-revert, vc-rollback): + * vc/vc-dispatcher.el (vc-finish-logentry): Call quit-windows-on + instead of deleting windows. (Bug#4557) (Bug#5310) (Bug#5556) + (Bug#6183) (Bug#7074)((Bug#7447) 2011-10-09 Martin Rudalics diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el index 388d4c94a08..84c7f4a510b 100644 --- a/lisp/vc/vc-dispatcher.el +++ b/lisp/vc/vc-dispatcher.el @@ -666,18 +666,15 @@ the buffer contents as a comment." (funcall log-operation log-fileset log-entry)) - ;; Remove checkin window (after the checkin so that if that fails - ;; we don't zap the log buffer and the typing therein). - ;; -- IMO this should be replaced with quit-window - (cond ((and logbuf vc-delete-logbuf-window) - (delete-windows-on logbuf (selected-frame)) - ;; Kill buffer and delete any other dedicated windows/frames. - (kill-buffer logbuf)) - (logbuf - (with-selected-window (or (get-buffer-window logbuf 0) - (selected-window)) - (with-current-buffer logbuf - (bury-buffer))))) + + ;; Quit windows on logbuf. + (cond + ((not logbuf)) + (vc-delete-logbuf-window + (quit-windows-on logbuf t (selected-frame))) + (t + (quit-windows-on logbuf nil 0))) + ;; Now make sure we see the expanded headers (when log-fileset (mapc diff --git a/lisp/vc/vc.el b/lisp/vc/vc.el index 6704a43e59b..62536fd94be 100644 --- a/lisp/vc/vc.el +++ b/lisp/vc/vc.el @@ -2302,8 +2302,7 @@ to the working revision (except for keyword expansion)." (if (= nfiles 1) "" "s")))))) (error "Revert canceled"))) (when diff-buffer - (delete-windows-on diff-buffer) - (kill-buffer diff-buffer))) + (quit-windows-on diff-buffer t))) (dolist (file files) (message "Reverting %s..." (vc-delistify files)) (vc-revert-file file) @@ -2349,8 +2348,7 @@ depending on the underlying version-control system." ;; Display changes (unless (yes-or-no-p "Discard these revisions? ") (error "Rollback canceled")) - (delete-windows-on "*vc-diff*") - (kill-buffer"*vc-diff*") + (quit-windows-on "*vc-diff*" t) ;; Do the actual reversions (message "Rolling back %s..." (vc-delistify files)) (with-vc-properties diff --git a/lisp/window.el b/lisp/window.el index 7241e148dae..4d8b3c92b95 100644 --- a/lisp/window.el +++ b/lisp/window.el @@ -2984,6 +2984,27 @@ one. If non-nil, reset `quit-restore' parameter to nil." (if kill (kill-buffer buffer) (bury-buffer-internal buffer)))) + +(defun quit-windows-on (&optional buffer-or-name kill frame) + "Quit all windows showing BUFFER-OR-NAME. +BUFFER-OR-NAME may be a buffer or the name of an existing buffer +and defaults to the current buffer. Optional argument KILL +non-nil means to kill BUFFER-OR-NAME. KILL nil means to bury +BUFFER-OR-NAME. Optional argument FRAME is handled as by +`delete-windows-on'. + +This function calls `quit-window' on all candidate windows +showing BUFFER-OR-NAME." + (interactive "BQuit windows on (buffer):\nP") + (let ((buffer (window-normalize-buffer buffer-or-name)) + ;; Handle the "inverted" meaning of the FRAME argument wrt other + ;; `window-list-1' based function. + (all-frames (cond ((not frame) t) ((eq frame t) nil) (t frame)))) + (dolist (window (window-list-1 nil nil all-frames)) + (if (eq (window-buffer window) buffer) + (quit-window kill window) + ;; If a window doesn't show BUFFER, unrecord BUFFER in it. + (unrecord-window-buffer window buffer))))) ;;; Splitting windows. (defsubst window-split-min-size (&optional horizontal)