From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.devel Subject: Re: [jbw@macs.hw.ac.uk: window-min-height not obeying its documentation in Emacs 22.1] Date: Mon, 09 Jul 2007 19:51:55 +0200 Message-ID: <469275BB.6060008@gmx.at> References: <46922415.20801@swipnet.se> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------010907040600060701020808" X-Trace: sea.gmane.org 1184003553 16751 80.91.229.12 (9 Jul 2007 17:52:33 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 9 Jul 2007 17:52:33 +0000 (UTC) Cc: rms@gnu.org, emacs-devel@gnu.org To: =?ISO-8859-15?Q?Jan_Dj=E4rv?= Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Jul 09 19:52:31 2007 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1I7xPS-0003Mx-Hp for ged-emacs-devel@m.gmane.org; Mon, 09 Jul 2007 19:52:30 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1I7xPR-0001Mb-TM for ged-emacs-devel@m.gmane.org; Mon, 09 Jul 2007 13:52:29 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1I7xPO-0001Kf-Dp for emacs-devel@gnu.org; Mon, 09 Jul 2007 13:52:26 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1I7xPN-0001Jn-Qc for emacs-devel@gnu.org; Mon, 09 Jul 2007 13:52:26 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1I7xPN-0001JZ-Mt for emacs-devel@gnu.org; Mon, 09 Jul 2007 13:52:25 -0400 Original-Received: from mail.gmx.net ([213.165.64.20]) by monty-python.gnu.org with smtp (Exim 4.60) (envelope-from ) id 1I7xPL-0003no-UW for emacs-devel@gnu.org; Mon, 09 Jul 2007 13:52:24 -0400 Original-Received: (qmail invoked by alias); 09 Jul 2007 17:52:21 -0000 Original-Received: from M3132P005.adsl.highway.telekom.at (EHLO [88.117.39.101]) [88.117.39.101] by mail.gmx.net (mp010) with SMTP; 09 Jul 2007 19:52:21 +0200 X-Authenticated: #14592706 X-Provags-ID: V01U2FsdGVkX18aaB5AeOMaJEcHmgH5fCSdSEfWGZeAAorM+bhYpq icP3Zq73Tu0WKF User-Agent: Mozilla Thunderbird 1.0 (Windows/20041206) X-Accept-Language: de-DE, de, en-us, en In-Reply-To: <46922415.20801@swipnet.se> X-Y-GMX-Trusted: 0 X-detected-kernel: Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:74514 Archived-At: This is a multi-part message in MIME format. --------------010907040600060701020808 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit > 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. --------------010907040600060701020808 Content-Type: text/plain; name="window.c.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="window.c.patch" *** 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"); --------------010907040600060701020808 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel --------------010907040600060701020808--