Subject: Re: bug#18357: 24.3.93; Calendar not fully displayed

From: Eli Zaretskii <[email-masked]>
Date: Sat, 30 Aug 2014 12:58:26 +0300

> From: Stephen Berman <[email-masked]>
> Date: Fri, 29 Aug 2014 20:24:09 +0200
> 
> 0. emacs -Q
>    (sanity check) M-x calendar => The Calendar is fully displayed in the
>    lower fitted window.
> 1. M-x customize-option RET calendar-week-start-day RET, set value to 1
>    and save for current session.
>    M-x customize-face RET mode-line RET, show all attributes, check
>    `Overline' set its value to `On' and save for current session.
> 2. M-x calendar => Only the last four lines of the Calendar are
>    displayed in the lower fitted window.
> 
> It looks as if point is centered in the Calendar window, but if I type
> `C-l', it displays the last five lines, not just the last four.  Also,
> the date could be relevant, since point is on today's date, which is on
> the last line of the displayed Calendar; if this changes on September 1,
> I'll report back.
> 
> I'm not sure but I think I first observed this problem in my build of
> 2014-08-20.  I don't remember seeing it in my previous build of
> 2014-07-22, but if I do the above recipe with the executable from the
> that build, I do see the problematic display, which suggests it is due
> to a change in a non-pre-loaded lisp file, though nothing in the
> ChangeLog looks relevant, so perhaps my memory of when this began is
> failing me.
> 
> The Calendar display problem also happens in my 2014-08-21 build from
> the trunk, but only when configured --without-toolkit-scroll-bars; a
> trunk build with (GTK+) scroll bars (including the new horizontal scroll
> bar) does not show the problem.  However, I just rebuilt the current
> emacs-24 --without-toolkit-scroll-bars and still see the problem there.

Sorry, I don't see any problem here: with the customized face of the
mode line, the window showing the calendar buffer is not tall enough
to show all of the buffer _and_ show the cursor on today's date (we
don't allow point to be in a partially visible line).  So Emacs
scrolls the display to make the line with point fully visible.  That's
perfectly normal, not a problem.

calendar.el includes a facility to fit the window to the buffer's
contents, but it only does so when "M-x calendar" is invoked from the
window that displays the calendar:

    ;; Don't do any window-related stuff if we weren't called from a
    ;; window displaying the calendar.
    (when in-calendar-window
      (if (window-combined-p)
	  ;; Adjust the window to exactly fit the displayed calendar.
	  (fit-window-to-buffer nil nil calendar-minimum-window-height)
	;; For a full height window or a window that is horizontally
	;; combined don't fit height to that of its buffer.
	(set-window-vscroll nil 0))
      (sit-for 0))

This code has been there for ages, so I don't believe some change done
lately changed anything there.  Rather, I'm guessing that this is
caused by the fact that today's date is on the last line of the
buffer, which wasn't so before.

You can customize calendar-minimum-window-height to work around "the
problem".