GNU bug report logs - #3600
23.0.94; shrink-window-if-larger-than-buffer

Previous Next

Package: emacs;

Reported by: "Drew Adams" <drew.adams <at> oracle.com>

Date: Wed, 17 Jun 2009 19:50:05 UTC

Severity: normal

Done: Lars Magne Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: martin rudalics <rudalics <at> gmx.at>
To: Drew Adams <drew.adams <at> oracle.com>, 3600 <at> debbugs.gnu.org
Subject: bug#3600: 23.0.94; shrink-window-if-larger-than-buffer
Date: Thu, 18 Jun 2009 12:07:35 +0200
[Message part 1 (text/plain, inline)]
> The code imposes this as one of the conditions for fitting the window
> to the buffer:
>
> (or (not (frame-parameter frame 'minibuffer))
>     (let ((mini-window (minibuffer-window frame)))
>       (or (null mini-window)
>           (not (eq frame (window-frame mini-window)))
>                (< (nth 3 edges) (nth 1 (window-edges mini-window)))
>                (> (nth 1 edges) (frame-parameter frame 'menu-bar-lines)))))
>
> I don't understand the last condition (>). At the least, this
> condition seems to be missing from the doc string:
>
> "Do nothing if the buffer contains more lines than the present window
> height, or if some of the window's contents are scrolled out of view,
> or if shrinking this window would also shrink another window, or if
> the window is the only window of its frame."
>
> What is that last condition (>) for?  What is the relation between the
> number of menu-bar-lines and the `Top' position of the window?

I guess it's a poor man's attempt to make sure that there's some other
window above or below the one to shrink.

> And doesn't this code raise an error if the `menu-bar-lines' parameter
> is nil? Should it really be doing that?

Looks like a bug.  Could you try the attached patch?  Since this code
hasn't been touched for quite some time we can't fix it for Emacs 23.1
though.

martin
[window.el.diff (text/plain, inline)]
*** window.el.~1.180.~	2009-05-07 11:10:52.000000000 +0200
--- window.el	2009-06-18 11:31:13.234375000 +0200
***************
*** 1520,1527 ****
    (when (null window)
      (setq window (selected-window)))
    (let* ((frame (window-frame window))
! 	 (mini (frame-parameter frame 'minibuffer))
! 	 (edges (window-edges window)))
      (if (and (not (eq window (frame-root-window frame)))
  	     (window-safely-shrinkable-p window)
  	     (pos-visible-in-window-p (point-min) window)
--- 1520,1526 ----
    (when (null window)
      (setq window (selected-window)))
    (let* ((frame (window-frame window))
! 	 (mini (frame-parameter frame 'minibuffer)))
      (if (and (not (eq window (frame-root-window frame)))
  	     (window-safely-shrinkable-p window)
  	     (pos-visible-in-window-p (point-min) window)
***************
*** 1530,1539 ****
  		 (let ((mini-window (minibuffer-window frame)))
  		   (or (null mini-window)
  		       (not (eq frame (window-frame mini-window)))
! 		       (< (nth 3 edges)
! 			  (nth 1 (window-edges mini-window)))
! 		       (> (nth 1 edges)
! 			  (frame-parameter frame 'menu-bar-lines))))))
  	(fit-window-to-buffer window (window-height window)))))
  
  (defun kill-buffer-and-window ()
--- 1529,1536 ----
  		 (let ((mini-window (minibuffer-window frame)))
  		   (or (null mini-window)
  		       (not (eq frame (window-frame mini-window)))
! 		       (/= (window-height window)
! 			   (window-height (frame-root-window frame)))))))
  	(fit-window-to-buffer window (window-height window)))))
  
  (defun kill-buffer-and-window ()

This bug report was last modified 13 years and 255 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.