Subject: bug#4543: window-full-height-p

From: martin rudalics <[email-masked]>
Date: Fri, 25 Sep 2009 14:59:51 +0200

>> `window-full-width-p' is based on the definition
 >>
 >>    /* Total width of frame F, in columns (characters),
 >>       including the width used by scroll bars if any.  */
 >>
 >>    #define FRAME_TOTAL_COLS(f) ((f)->total_cols)
 >>
 >> from frame.h whose semantics I don't understand.  Not really simple.
 >
 > Maybe I can help.  What is the difficulty with the semantics of this
 > attribute of a frame?

It's merely how this is set in `change_frame_size_1' which does

   SET_FRAME_COLS (f, newwidth);

where

#define SET_FRAME_COLS(f, val)						\
      (FRAME_COLS (f) = (val),						\
       (f)->total_cols = FRAME_TOTAL_COLS_ARG (f, FRAME_COLS (f)))

and

#define FRAME_TOTAL_COLS_ARG(f, width)		\
      ((width)					\
       + FRAME_SCROLL_BAR_COLS (f)		\
       + FRAME_FRINGE_COLS (f))
and

#define FRAME_SCROLL_BAR_COLS(f)			\
      (FRAME_HAS_VERTICAL_SCROLL_BARS (f)		\
       ? FRAME_CONFIG_SCROLL_BAR_COLS (f)		\
       : 0)

etc ...  What are the scrollbars of a frame, I'm asking myself.  If we
define a frame as a collection of windows and frame-width as the width
of the widest window in that frame, things are deceptively simple.  But
the calculations sketched above are a little over my head.

 > What's wrong with this (taken from frame.c:frame-parameters) as the
 > frame height:
 >
 >   height = (f->new_text_lines ? f->new_text_lines : FRAME_LINES (f));

new_text_lines is for a pending size change and zero otherwise.  You
probably mean text_lines whose precise semantics I don't know - what are
canonical characters?

 > and then subtract from it the height of the minibuffer window?
 >
 > The C variable `minibuf_window' should give you the Lisp object that
 > holds the minibuffer window, and its `total_lines' attribute should
 > give you the height of that window.  Or am I missing something?

Then why not use the height of the frame-root-window directly?  No need
to subtract one value from the other.

martin