From: martin rudalics <rudalics@gmx.at>
To: rms@gnu.org
Cc: jan.h.d@swipnet.se, emacs-devel@gnu.org
Subject: Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
Date: Tue, 10 Jul 2007 14:11:42 +0200 [thread overview]
Message-ID: <4693777E.6070907@gmx.at> (raw)
In-Reply-To: <E1I88QR-00012w-MF@fencepost.gnu.org>
[-- Attachment #1: Type: text/plain, Size: 777 bytes --]
> ! && (window_height (window) >=
> ! window_min_size_2 (XWINDOW (window), 0) << 1))
>
> Please break the line before the >= operator, not after.
Done. I also replaced shifting by multiplication as proposed by David
(there are still two ">>" left in `split-window'). Moreover, I now do
the check in `display-buffer' for the largest _and_ the LRU window.
Finally, I do not reset `split-height-threshold' any more when it is
less than `window-min-height'. Otherwise, binding `window-min-height'
temporarily to a larger value may break a user's customizations of
`split-height-threshold' due to the following assignment in
`display-buffer':
if (split_height_threshold < window_min_height << 1)
split_height_threshold = window_min_height << 1;
[-- Attachment #2: window.c.patch --]
[-- Type: text/plain, Size: 8369 bytes --]
*** window.c.~1.577.~ Tue Jun 5 22:41:24 2007
--- window.c Tue Jul 10 13:59:22 2007
***************
*** 62,67 ****
--- 62,68 ----
static void window_scroll_pixel_based P_ ((Lisp_Object, int, int, int));
static void window_scroll_line_based P_ ((Lisp_Object, int, int, int));
static int window_min_size_1 P_ ((struct window *, int));
+ static int window_min_size_2 P_ ((struct window *, int));
static int window_min_size P_ ((struct window *, int, int, int *));
static void size_window P_ ((Lisp_Object, int, int, int, int, int));
static int freeze_window_start P_ ((struct window *, void *));
***************
*** 2553,2559 ****
*cols = MIN_SAFE_WINDOW_WIDTH;
}
-
/* Value is non-zero if window W is fixed-size. WIDTH_P non-zero means
check if W's width can be changed, otherwise check W's height.
CHECK_SIBLINGS_P non-zero means check resizablity of WINDOW's
--- 2554,2559 ----
***************
*** 2655,2660 ****
--- 2655,2687 ----
return fixed_p;
}
+ /* Return the minimum size for leaf window W. WIDTH_P non-zero means
+ take into account fringes and the scrollbar of W. WIDTH_P zero
+ means take into account mode-line and header-line of W. Return 1
+ for the minibuffer. */
+
+ static int
+ window_min_size_2 (w, width_p)
+ struct window *w;
+ int width_p;
+ {
+ int size;
+
+ if (width_p)
+ size = max (window_min_width,
+ (MIN_SAFE_WINDOW_WIDTH
+ + WINDOW_FRINGE_COLS (w)
+ + WINDOW_SCROLL_BAR_COLS (w)));
+ else if (MINI_WINDOW_P (w))
+ size = 1;
+ else
+ size = max (window_min_height,
+ (MIN_SAFE_WINDOW_HEIGHT
+ + (WINDOW_WANTS_MODELINE_P (w) ? 1 : 0)
+ + (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0 )));
+
+ return size;
+ }
/* Return the minimum size of window W, not taking fixed-width windows
into account. WIDTH_P non-zero means return the minimum width,
***************
*** 2724,2745 ****
}
}
else
! {
! if (width_p)
! size = max (window_min_width,
! (MIN_SAFE_WINDOW_WIDTH
! + WINDOW_FRINGE_COLS (w)
! + WINDOW_SCROLL_BAR_COLS (w)));
! else
! {
! if (MINI_WINDOW_P (w)
! || (!WINDOW_WANTS_MODELINE_P (w)
! && !WINDOW_WANTS_HEADER_LINE_P (w)))
! size = 1;
! else
! size = window_min_height;
! }
! }
return size;
}
--- 2751,2757 ----
}
}
else
! size = window_min_size_2 (w, width_p);
return size;
}
***************
*** 2981,2991 ****
Lisp_Object child, *forward, *sideward;
int old_size, min_size, safe_min_size;
- /* We test nodelete_p != 2 and nodelete_p != 1 below, so it
- seems like it's too soon to do this here. ++KFS. */
- if (nodelete_p == 2)
- nodelete_p = 0;
-
check_min_window_sizes ();
size = max (0, size);
--- 2993,2998 ----
***************
*** 2996,3017 ****
{
old_size = WINDOW_TOTAL_COLS (w);
min_size = window_min_width;
! /* Ensure that there is room for the scroll bar and fringes!
! We may reduce display margins though. */
! safe_min_size = (MIN_SAFE_WINDOW_WIDTH
! + WINDOW_FRINGE_COLS (w)
! + WINDOW_SCROLL_BAR_COLS (w));
}
else
{
old_size = XINT (w->total_lines);
min_size = window_min_height;
! safe_min_size = MIN_SAFE_WINDOW_HEIGHT;
}
if (old_size < min_size && nodelete_p != 2)
w->too_small_ok = Qt;
/* Maybe delete WINDOW if it's too small. */
if (nodelete_p != 1 && !NILP (w->parent))
{
--- 3003,3025 ----
{
old_size = WINDOW_TOTAL_COLS (w);
min_size = window_min_width;
! safe_min_size = window_min_size_2 (w, 1);
}
else
{
old_size = XINT (w->total_lines);
min_size = window_min_height;
! safe_min_size = window_min_size_2 (w, 0);
}
if (old_size < min_size && nodelete_p != 2)
w->too_small_ok = Qt;
+ /* Move the following test here since otherwise the
+ preceding test doesn't make sense. martin. */
+ if (nodelete_p == 2)
+ nodelete_p = 0;
+
/* Maybe delete WINDOW if it's too small. */
if (nodelete_p != 1 && !NILP (w->parent))
{
***************
*** 3708,3716 ****
frames = Qnil;
if (FRAME_MINIBUF_ONLY_P (f))
XSETFRAME (frames, last_nonminibuf_frame);
- /* Don't try to create a window if we would get an error. */
- if (split_height_threshold < window_min_height << 1)
- split_height_threshold = window_min_height << 1;
/* Note that both Fget_largest_window and Fget_lru_window
ignore minibuffers and dedicated windows.
--- 3716,3721 ----
***************
*** 3737,3744 ****
split it. */
if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& window_height (window) >= split_height_threshold
! && WINDOW_FULL_WIDTH_P (XWINDOW (window)))
window = Fsplit_window (window, Qnil, Qnil);
else
{
--- 3742,3751 ----
split it. */
if (!NILP (window)
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
+ && WINDOW_FULL_WIDTH_P (XWINDOW (window))
&& window_height (window) >= split_height_threshold
! && (window_height (window)
! >= (2 * window_min_size_2 (XWINDOW (window), 0))))
window = Fsplit_window (window, Qnil, Qnil);
else
{
***************
*** 3751,3757 ****
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& (EQ (window, selected_window)
|| EQ (XWINDOW (window)->parent, Qnil))
! && window_height (window) >= window_min_height << 1)
window = Fsplit_window (window, Qnil, Qnil);
else
window = Fget_lru_window (frames, Qnil);
--- 3758,3766 ----
&& ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
&& (EQ (window, selected_window)
|| EQ (XWINDOW (window)->parent, Qnil))
! && window_height (window) >= split_height_threshold
! && (window_height (window)
! >= (2 * window_min_size_2 (XWINDOW (window), 0))))
window = Fsplit_window (window, Qnil, Qnil);
else
window = Fget_lru_window (frames, Qnil);
***************
*** 4000,4008 ****
if (NILP (horflag))
{
! if (size_int < window_min_height)
error ("Window height %d too small (after splitting)", size_int);
! if (size_int + window_min_height > XFASTINT (o->total_lines))
error ("Window height %d too small (after splitting)",
XFASTINT (o->total_lines) - size_int);
if (NILP (o->parent)
--- 4009,4019 ----
if (NILP (horflag))
{
! int window_safe_height = window_min_size_2 (o, 0);
!
! if (size_int < window_safe_height)
error ("Window height %d too small (after splitting)", size_int);
! if (size_int + window_safe_height > XFASTINT (o->total_lines))
error ("Window height %d too small (after splitting)",
XFASTINT (o->total_lines) - size_int);
if (NILP (o->parent)
***************
*** 4015,4024 ****
}
else
{
! if (size_int < window_min_width)
error ("Window width %d too small (after splitting)", size_int);
!
! if (size_int + window_min_width > XFASTINT (o->total_cols))
error ("Window width %d too small (after splitting)",
XFASTINT (o->total_cols) - size_int);
if (NILP (o->parent)
--- 4026,4036 ----
}
else
{
! int window_safe_width = window_min_size_2 (o, 1);
!
! if (size_int < window_safe_width)
error ("Window width %d too small (after splitting)", size_int);
! if (size_int + window_safe_width > XFASTINT (o->total_cols))
error ("Window width %d too small (after splitting)",
XFASTINT (o->total_cols) - size_int);
if (NILP (o->parent)
***************
*** 4499,4505 ****
/* Don't make this window too small. */
if (XINT (CURSIZE (window)) + delta
! < (horiz_flag ? window_min_width : window_min_height))
{
Fset_window_configuration (old_config);
error ("Cannot adjust window size as specified");
--- 4511,4517 ----
/* Don't make this window too small. */
if (XINT (CURSIZE (window)) + delta
! < window_min_size_2 (XWINDOW (window), horiz_flag))
{
Fset_window_configuration (old_config);
error ("Cannot adjust window size as specified");
[-- Attachment #3: Type: text/plain, Size: 142 bytes --]
_______________________________________________
Emacs-devel mailing list
Emacs-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-devel
next prev parent reply other threads:[~2007-07-10 12:11 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-03 4:24 [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1] Richard Stallman
2007-07-09 12:03 ` Jan Djärv
2007-07-09 17:51 ` martin rudalics
2007-07-10 5:38 ` Richard Stallman
2007-07-10 7:13 ` David Kastrup
2007-07-10 22:01 ` Richard Stallman
2007-07-10 12:11 ` martin rudalics [this message]
2007-07-10 22:01 ` Richard Stallman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4693777E.6070907@gmx.at \
--to=rudalics@gmx.at \
--cc=emacs-devel@gnu.org \
--cc=jan.h.d@swipnet.se \
--cc=rms@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.