From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.devel Subject: Re: split-window-preferred-function Date: Sat, 22 Mar 2008 03:07:11 +0200 Organization: JURTA Message-ID: <87r6e3k3hc.fsf@jurta.org> References: <47E188D5.5030502@gmx.at> <87hcf1rrdj.fsf@jurta.org> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1206149141 4462 80.91.229.12 (22 Mar 2008 01:25:41 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Sat, 22 Mar 2008 01:25:41 +0000 (UTC) Cc: martin rudalics , emacs-devel To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sat Mar 22 02:26:11 2008 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 1JcsUj-0000Wt-7S for ged-emacs-devel@m.gmane.org; Sat, 22 Mar 2008 02:26:01 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JcsU8-0003mo-NT for ged-emacs-devel@m.gmane.org; Fri, 21 Mar 2008 21:25:24 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JcsSq-0003D5-Ti for emacs-devel@gnu.org; Fri, 21 Mar 2008 21:24:04 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JcsSo-0003CN-Uw for emacs-devel@gnu.org; Fri, 21 Mar 2008 21:24:04 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JcsSo-0003CK-SV for emacs-devel@gnu.org; Fri, 21 Mar 2008 21:24:02 -0400 Original-Received: from relay02.kiev.sovam.com ([62.64.120.197]) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1JcsSo-0005Pb-L7 for emacs-devel@gnu.org; Fri, 21 Mar 2008 21:24:02 -0400 Original-Received: from [83.170.232.243] (helo=smtp.svitonline.com) by relay02.kiev.sovam.com with esmtp (Exim 4.67) (envelope-from ) id 1JcsSh-00071p-Gi; Sat, 22 Mar 2008 03:23:55 +0200 In-Reply-To: (Stefan Monnier's message of "Thu, 20 Mar 2008 21:47:23 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (x86_64-pc-linux-gnu) X-Scanner-Signature: e5a023dad48cfed04c9aaaf8a25ccfed X-DrWeb-checked: yes X-SpamTest-Envelope-From: juri@jurta.org X-SpamTest-Group-ID: 00000000 X-SpamTest-Header: Not Detected X-SpamTest-Info: Profiles 2455 [Mar 21 2008] X-SpamTest-Info: helo_type=3 X-SpamTest-Info: {HEADERS: header Content-Type found without required header Content-Transfer-Encoding} X-SpamTest-Method: none X-SpamTest-Rate: 11 X-SpamTest-Status: Not detected X-SpamTest-Status-Extended: not_detected X-SpamTest-Version: SMTP-Filter Version 3.0.0 [0278], KAS30/Release X-detected-kernel: by monty-python.gnu.org: FreeBSD 6.x (1) 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:93158 Archived-At: > I think we need to allow the function to return nil and in this case > continue with the rest of the code. I.e. it should be possible to > reproduce in Elisp what happens when split-window-preferred-function > is nil. A good way to make sure that's true is to write the code in > Elisp in the first place. If I understand you correctly, this patch implements what you meant: Index: src/window.c =================================================================== RCS file: /sources/emacs/emacs/src/window.c,v retrieving revision 1.604 diff -c -w -b -r1.604 window.c *** src/window.c 19 Mar 2008 15:18:29 -0000 1.604 --- src/window.c 22 Mar 2008 01:07:04 -0000 *************** *** 3848,3853 **** --- 3848,3859 ---- else window = Fget_largest_window (frames, Qt); + if (!NILP (Vsplit_window_preferred_function)) + tem = call1 (Vsplit_window_preferred_function, window); + + if (!NILP (tem)) + window = tem; + else /* If the largest window is tall enough, full-width, and either eligible for splitting or the only window, split it. */ if (!NILP (window) *************** *** 3857,3863 **** || (NILP (XWINDOW (window)->parent))) && (window_height (window) >= (2 * window_min_size_2 (XWINDOW (window), 0)))) ! window = call1 (Vsplit_window_preferred_function, window); else { Lisp_Object upper, other; --- 3863,3869 ---- || (NILP (XWINDOW (window)->parent))) && (window_height (window) >= (2 * window_min_size_2 (XWINDOW (window), 0)))) ! window = Fsplit_window (window, Qnil, Qnil); else { Lisp_Object upper, other; *************** *** 3872,3878 **** || (NILP (XWINDOW (window)->parent))) && (window_height (window) >= (2 * window_min_size_2 (XWINDOW (window), 0)))) ! window = call1 (Vsplit_window_preferred_function, window); else window = Fget_lru_window (frames, Qnil); /* If Fget_lru_window returned nil, try other approaches. */ --- 3878,3884 ---- || (NILP (XWINDOW (window)->parent))) && (window_height (window) >= (2 * window_min_size_2 (XWINDOW (window), 0)))) ! window = Fsplit_window (window, Qnil, Qnil); else window = Fget_lru_window (frames, Qnil); /* If Fget_lru_window returned nil, try other approaches. */ *************** *** 7598,7604 **** to split windows horizontally or vertically or some mix of the two. It is called with a window as single argument and should split it in two and return the new window. */); ! Vsplit_window_preferred_function = intern ("split-window"); DEFVAR_INT ("window-min-height", &window_min_height, doc: /* *Delete any window less than this tall (including its mode line). --- 7604,7610 ---- to split windows horizontally or vertically or some mix of the two. It is called with a window as single argument and should split it in two and return the new window. */); ! Vsplit_window_preferred_function = Qnil; DEFVAR_INT ("window-min-height", &window_min_height, doc: /* *Delete any window less than this tall (including its mode line). -- Juri Linkov http://www.jurta.org/emacs/