unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
@ 2007-07-03  4:24 Richard Stallman
  2007-07-09 12:03 ` Jan Djärv
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Stallman @ 2007-07-03  4:24 UTC (permalink / raw)
  To: emacs-devel

Would someone please DTRT then ack?

------- Start of forwarded message -------
X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY 
	autolearn=failed version=3.1.0
From: Joe Wells <jbw@macs.hw.ac.uk>
To: bug-gnu-emacs@gnu.org
Date: Mon, 02 Jul 2007 12:12:42 +0100
Subject: window-min-height not obeying its documentation in Emacs 22.1

I have window-min-height set to 4.  According to its documentation,
any window whose height is less than 4 will be deleted.  This is false
when the value split-height-threshold is small enough.  The following
script reproduces the bug (at least with my screen height).

- ----------------------------------------------------------------------
#!/bin/sh
~/local2/bin/emacs --quick --eval '(progn (split-window-vertically) (temp-buffer-resize-mode 1) (setq window-min-height 4) (setq split-height-threshold 4) (describe-bindings))'
#
# You will now see a window that is 1 line tall and is missing its
# mode line.  This should be impossible according to the documentation
# of window-min-height.
- ----------------------------------------------------------------------

This may just be a documentation bug.  But I would really like for
window-min-height to obey its documentation, as I get very confused by
windows that are missing their mode lines because they are only 1 line
tall.

Joe

- ----------------------------------------------------------------------
In GNU Emacs 22.1.1 (i686-pc-linux-gnu, GTK+ Version 2.8.20)
 of 2007-06-27 on artemis
Windowing system distributor `The X.Org Foundation', version 11.0.70000000
configured using `configure  '--prefix=/home/jbw/local2' '--enable-debug' '--disable-nls' '--with-x-toolkit=gtk' 'CFLAGS=-O0 -g3 -ggdb''

Important settings:
  value of $LC_ALL: nil
  value of $LC_COLLATE: nil
  value of $LC_CTYPE: en_US.UTF-8
  value of $LC_MESSAGES: nil
  value of $LC_MONETARY: nil
  value of $LC_NUMERIC: nil
  value of $LC_TIME: jbw
  value of $LANG: nil
  locale-coding-system: utf-8
  default-enable-multibyte-characters: t


_______________________________________________
bug-gnu-emacs mailing list
bug-gnu-emacs@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-gnu-emacs
------- End of forwarded message -------

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
  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
  0 siblings, 1 reply; 8+ messages in thread
From: Jan Djärv @ 2007-07-09 12:03 UTC (permalink / raw)
  To: rms; +Cc: emacs-devel

Richard Stallman skrev:
> Would someone please DTRT then ack?
> 

Fixed in HEAD.

	Jan D.

> ------- Start of forwarded message -------
> X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY 
> 	autolearn=failed version=3.1.0
> From: Joe Wells <jbw@macs.hw.ac.uk>
> To: bug-gnu-emacs@gnu.org
> Date: Mon, 02 Jul 2007 12:12:42 +0100
> Subject: window-min-height not obeying its documentation in Emacs 22.1
> 
> I have window-min-height set to 4.  According to its documentation,
> any window whose height is less than 4 will be deleted.  This is false
> when the value split-height-threshold is small enough.  The following
> script reproduces the bug (at least with my screen height).
> 
> - ----------------------------------------------------------------------
> #!/bin/sh
> ~/local2/bin/emacs --quick --eval '(progn (split-window-vertically) (temp-buffer-resize-mode 1) (setq window-min-height 4) (setq split-height-threshold 4) (describe-bindings))'
> #
> # You will now see a window that is 1 line tall and is missing its
> # mode line.  This should be impossible according to the documentation
> # of window-min-height.
> - ----------------------------------------------------------------------
> 
> This may just be a documentation bug.  But I would really like for
> window-min-height to obey its documentation, as I get very confused by
> windows that are missing their mode lines because they are only 1 line
> tall.
> 
> Joe
> 
> - ----------------------------------------------------------------------
> In GNU Emacs 22.1.1 (i686-pc-linux-gnu, GTK+ Version 2.8.20)
>  of 2007-06-27 on artemis
> Windowing system distributor `The X.Org Foundation', version 11.0.70000000
> configured using `configure  '--prefix=/home/jbw/local2' '--enable-debug' '--disable-nls' '--with-x-toolkit=gtk' 'CFLAGS=-O0 -g3 -ggdb''
> 
> Important settings:
>   value of $LC_ALL: nil
>   value of $LC_COLLATE: nil
>   value of $LC_CTYPE: en_US.UTF-8
>   value of $LC_MESSAGES: nil
>   value of $LC_MONETARY: nil
>   value of $LC_NUMERIC: nil
>   value of $LC_TIME: jbw
>   value of $LANG: nil
>   locale-coding-system: utf-8
>   default-enable-multibyte-characters: t
> 

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
  2007-07-09 12:03 ` Jan Djärv
@ 2007-07-09 17:51   ` martin rudalics
  2007-07-10  5:38     ` Richard Stallman
  0 siblings, 1 reply; 8+ messages in thread
From: martin rudalics @ 2007-07-09 17:51 UTC (permalink / raw)
  To: Jan Djärv; +Cc: rms, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 634 bytes --]

 > Fixed in HEAD.

The fix is correct but it only cures a symptom of the bug.  The real
problem is what the OP described as

 >> You will now see a window that is 1 line tall and is missing its
 >> mode line.

That's what you also get when - with `window-min-height' set to 1 - you
split windows or drag the mode-line: The last visible line of the window
whose height becomes 1 reappears as "header-line" of the window below.
Note that here's no convenient safe minimum window height (or width)
since you always have to cater for mode- and header-lines, fringes, and
scroll-bars.  Hence I'd propose something like the attached patch.

[-- Attachment #2: window.c.patch --]
[-- Type: text/plain, Size: 7144 bytes --]

*** window.c.~1.577.~	Tue Jun  5 22:41:24 2007
--- window.c	Mon Jul  9 19:29:14 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,2686 ----
    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;
  }
--- 2750,2756 ----
  	}
      }
    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);
  
--- 2992,2997 ----
***************
*** 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))
      {
--- 3002,3024 ----
      {
        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))
      {
***************
*** 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,3765 ----
  	      && ! FRAME_NO_SPLIT_P (XFRAME (XWINDOW (window)->frame))
  	      && (EQ (window, selected_window)
  		  || EQ (XWINDOW (window)->parent, Qnil))
! 	      && (window_height (window) >=
! 		  window_min_size_2 (XWINDOW (window), 0) << 1))
  	    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)
--- 4008,4018 ----
  
    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)
--- 4025,4035 ----
      }
    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");
--- 4510,4516 ----
  
        /* 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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
  2007-07-09 17:51   ` martin rudalics
@ 2007-07-10  5:38     ` Richard Stallman
  2007-07-10  7:13       ` David Kastrup
  2007-07-10 12:11       ` martin rudalics
  0 siblings, 2 replies; 8+ messages in thread
From: Richard Stallman @ 2007-07-10  5:38 UTC (permalink / raw)
  To: martin rudalics; +Cc: jan.h.d, emacs-devel

Your change is clean and clear that I could only find the tiniest nit
to criticize:

    ! 	      && (window_height (window) >=
    ! 		  window_min_size_2 (XWINDOW (window), 0) << 1))

Please break the line before the >= operator, not after.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
  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
  1 sibling, 1 reply; 8+ messages in thread
From: David Kastrup @ 2007-07-10  7:13 UTC (permalink / raw)
  To: rms; +Cc: martin rudalics, jan.h.d, emacs-devel

Richard Stallman <rms@gnu.org> writes:

> Your change is clean and clear that I could only find the tiniest nit
> to criticize:
>
>     ! 	      && (window_height (window) >=
>     ! 		  window_min_size_2 (XWINDOW (window), 0) << 1))
>
> Please break the line before the >= operator, not after.

I'd write * 2 instead of << 1 here.

-- 
David Kastrup

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
  2007-07-10  5:38     ` Richard Stallman
  2007-07-10  7:13       ` David Kastrup
@ 2007-07-10 12:11       ` martin rudalics
  2007-07-10 22:01         ` Richard Stallman
  1 sibling, 1 reply; 8+ messages in thread
From: martin rudalics @ 2007-07-10 12:11 UTC (permalink / raw)
  To: rms; +Cc: jan.h.d, emacs-devel

[-- 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

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
  2007-07-10  7:13       ` David Kastrup
@ 2007-07-10 22:01         ` Richard Stallman
  0 siblings, 0 replies; 8+ messages in thread
From: Richard Stallman @ 2007-07-10 22:01 UTC (permalink / raw)
  To: David Kastrup; +Cc: rudalics, jan.h.d, emacs-devel

    I'd write * 2 instead of << 1 here.

You found another nit!

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1]
  2007-07-10 12:11       ` martin rudalics
@ 2007-07-10 22:01         ` Richard Stallman
  0 siblings, 0 replies; 8+ messages in thread
From: Richard Stallman @ 2007-07-10 22:01 UTC (permalink / raw)
  To: martin rudalics; +Cc: jan.h.d, emacs-devel

If no further problems show up in a few days, please install your
patch.  Please install it in Emacs 22 as well as the trunk.

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-07-10 22:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2007-07-10 22:01         ` Richard Stallman

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).