Subject: Re: bug#16923: 24.3.50; reression: `set-frame-size' loses mode line

From: martin rudalics <[email-masked]>
Date: Thu, 06 Mar 2014 18:26:49 +0100

> Looking again, I realize I must have been mistaken in what I said
 > earlier today.  It seems now that the mode line disappears only when
 > the node does not change (fit-frame is called anyway).  So yes, the
 > node text size is the same.
 >
 > I was pretty sure that the mode line also disappears in some cases
 > when moving to a different node.  But I definitely do not see that
 > now, so I guess I was mistaken about that.
 >
 > And yes, the frame always has its borders, including the bottom border.

Once more:

(1) The mode line disappears only when the frame size remains the same.
     Check this please via the arguments you pass (to `set-frame-size' or
     whatever you use).

(2) Everything else is drawn correctly, there's no area with background
     space only, as you claimed earlier.

Is that correct (from your experience, so far)?  You might want to
attach a screenshot.

 > Actually, now I can repro it more simply, without using Info.  In my
 > setup, if I do M-: (fit-frame) more than once in the same frame, the
 > mode line sometimes disappears.  For most buffers/frames, it disappears.
 > But not always.  It does not disappear for `list-faces-display', for
 > some reason.  (It does disappear for `list-colors-display'.)

Add the following function to your .emacs ...

(defun window--resize-root-window (window delta horizontal ignore pixelwise)
   "Resize root window WINDOW vertically by DELTA lines.
HORIZONTAL non-nil means resize root window WINDOW horizontally
by DELTA columns.

IGNORE non-nil means ignore any restrictions imposed by fixed
size windows, `window-min-height' or `window-min-width' settings.

This function is only called by the frame resizing routines.  It
resizes windows proportionally and never deletes any windows."
   (when (and (windowp window) (numberp delta))
     (let ((pixel-delta
	   (if pixelwise
	       delta
	     (window--size-to-pixel window delta horizontal))))
       (when (window-sizable-p window pixel-delta horizontal ignore t)
	(window--resize-reset (window-frame window) horizontal)
	(window--resize-this-window
	 window pixel-delta horizontal ignore t)
	(window--dump-frame (window-frame window))))))

... and post the contents of the buffer *window-frame-dump* after a
fatal resize operation here (but make sure to not resize any frame again
_before_ getting hold of that buffer's contents!!!).

martin