diff lisp/window.el @ 223:2c611d1463a6 r20-4b10

Import from CVS: tag r20-4b10
author cvs
date Mon, 13 Aug 2007 10:10:54 +0200
parents 41ff10fd062f
children c5d627a313b1
line wrap: on
line diff
--- a/lisp/window.el	Mon Aug 13 10:10:03 2007 +0200
+++ b/lisp/window.el	Mon Aug 13 10:10:54 2007 +0200
@@ -278,20 +278,16 @@
   (or window (setq window (selected-window)))
   (save-excursion
     (set-buffer (window-buffer window))
-    (let* ((w (selected-window))	;save-window-excursion can't win
-	   (buffer-file-name buffer-file-name)
-	   (p (point))
-	   (n 0)
-	   (ignore-final-newline
-	    ;; If buffer ends with a newline, ignore it when counting height
-	    ;; unless point is after it.
-	    (and (not (eobp))
-		 (eq ?\n (char-after (1- (point-max))))))
-	   (buffer-read-only nil)
-	   (modified (buffer-modified-p))
-	   (buffer (current-buffer))
-	   (mini (frame-property (window-frame window) 'minibuffer))
-	   (edges (window-pixel-edges (selected-window))))
+    (let ((n 0)
+	  (test-pos
+	   (- (point-max)
+	      ;; If buffer ends with a newline, ignore it when counting
+	      ;; height unless point is after it.
+	      (if (and (not (eobp))
+		       (eq ?\n (char-after (1- (point-max)))))
+		  1 0)))
+	  (mini (frame-property (window-frame window) 'minibuffer))
+	  (edges (window-pixel-edges (selected-window))))
       (if (and (< 1 (let ((frame (selected-frame)))
 		      (select-frame (window-frame window))
 		      (unwind-protect
@@ -307,33 +303,20 @@
 		   (< (nth 3 edges)
 		      (nth 1 (window-pixel-edges mini)))
 		   (> (nth 1 edges)
-		      ;FSFmacs (frame-property (window-frame window)
-		      ;			       'menu-bar-lines params)
 		      0)))
-	  (unwind-protect
-	      (let ((shrinkee (or window w)))
-		(set-buffer (window-buffer shrinkee))
-		(goto-char (point-min))
-		(while (pos-visible-in-window-p
-			(- (point-max)
-			   (if ignore-final-newline 1 0))
-			shrinkee)
-		  ;; defeat file locking... don't try this at home, kids!
-		  (setq buffer-file-name nil)
-		  (insert ?\n) (setq n (1+ n)))
-		(if (> n 0)
-		    (shrink-window (min (1- n)
-					(- (window-height shrinkee)
-					   window-min-height))
-				   nil
-				   shrinkee)))
-	    (delete-region (point-min) (point))
-	    (set-buffer-modified-p modified)
-	    (goto-char p)
-	    ;; (select-window w) ; Emacs
-	    ;; Make sure we unbind buffer-read-only
-	    ;; with the proper current buffer.
-	    (set-buffer buffer))))))
+	  (progn
+	    (save-window-excursion
+	      (goto-char (point-min))
+	      (while (and (window-live-p window)
+			  (pos-visible-in-window-p test-pos window))
+		(shrink-window 1 nil window)
+		(setq n (1+ n))))
+	    (if (> n 0)
+		(shrink-window (min (1- n)
+				    (- (window-height window)
+				       (1+ window-min-height)))
+			       nil
+			       window)))))))
 
 (defun kill-buffer-and-window ()
   "Kill the current buffer and delete the selected window."