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: bug in 23.2.92 with anything Date: Sun, 16 Jan 2011 11:35:33 +0100 Message-ID: <4D32C9F5.3090205@gmx.at> References: <87aaj2asy4.fsf@gmail.com> <4D31FDEC.9050508@gmx.at> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070405000804040208050905" X-Trace: dough.gmane.org 1295174320 15406 80.91.229.12 (16 Jan 2011 10:38:40 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sun, 16 Jan 2011 10:38:40 +0000 (UTC) Cc: emacs-devel@gnu.org, Thierry Volpiatto To: Stefan Monnier Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Jan 16 11:38:36 2011 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.69) (envelope-from ) id 1PeQ0I-0003yQ-RK for ged-emacs-devel@m.gmane.org; Sun, 16 Jan 2011 11:38:35 +0100 Original-Received: from localhost ([127.0.0.1]:59283 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PeQ0I-0007H8-9I for ged-emacs-devel@m.gmane.org; Sun, 16 Jan 2011 05:38:34 -0500 Original-Received: from [140.186.70.92] (port=60107 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PeQ04-0007Fy-6k for emacs-devel@gnu.org; Sun, 16 Jan 2011 05:38:21 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PeQ02-0004YA-M6 for emacs-devel@gnu.org; Sun, 16 Jan 2011 05:38:20 -0500 Original-Received: from mailout-de.gmx.net ([213.165.64.23]:42839) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1PeQ02-0004XZ-BD for emacs-devel@gnu.org; Sun, 16 Jan 2011 05:38:18 -0500 Original-Received: (qmail invoked by alias); 16 Jan 2011 10:38:16 -0000 Original-Received: from 62-47-49-18.adsl.highway.telekom.at (EHLO [62.47.49.18]) [62.47.49.18] by mail.gmx.net (mp049) with SMTP; 16 Jan 2011 11:38:16 +0100 X-Authenticated: #14592706 X-Provags-ID: V01U2FsdGVkX1/tAK8eVwXtdA19D6UAxFTbp5F5yvHMFkyn0Yiqlz 8NHSN5qwTqHpLW User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) In-Reply-To: X-Y-GMX-Trusted: 0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) 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:134599 Archived-At: This is a multi-part message in MIME format. --------------070405000804040208050905 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit > Actually, using a global variable like this is butt-ugly. Indeed. > Could some one rename Fselect_window to something else, add a third > parameter to it and create a new Fselect_window that calls it (and let > Fset_window_configuration call the new function with the new param), so > as to get rid of this global var? Thierry could you try the attached patch against the trunk window.c? Thanks, martin --------------070405000804040208050905 Content-Type: text/plain; name="window.c.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="window.c.diff" === modified file 'src/window.c' *** src/window.c 2011-01-15 23:16:57 +0000 --- src/window.c 2011-01-16 10:18:51 +0000 *************** *** 85,90 **** --- 85,91 ---- int (* fn) (struct window *, void *), void *); static Lisp_Object window_list_1 (Lisp_Object, Lisp_Object, Lisp_Object); + static Lisp_Object select_window (Lisp_Object, Lisp_Object, int); /* This is the window in which the terminal's cursor should be left when nothing is being done with it. This must *************** *** 158,168 **** static int window_initialized; - /* Set in `set-window-configuration' to prevent "swapping out point" - in the old selected window. */ - - static int inhibit_point_swap; - /* Hook to run when window config changes. */ static Lisp_Object Qwindow_configuration_change_hook; --- 159,164 ---- *************** *** 3550,3569 **** return Qnil; } - /* Note that selected_window can be nil when this is called from - Fset_window_configuration. */ ! DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0, ! doc: /* Select WINDOW. Most editing will apply to WINDOW's buffer. ! If WINDOW is not already selected, make WINDOW's buffer current ! and make WINDOW the frame's selected window. Return WINDOW. ! Optional second arg NORECORD non-nil means do not put this buffer ! at the front of the list of recently selected ones and do not ! make this window the most recently selected one. ! Note that the main editor command loop selects the buffer of the ! selected window before each command. */) ! (register Lisp_Object window, Lisp_Object norecord) { register struct window *w; register struct window *ow; --- 3546,3560 ---- return Qnil; } ! /* If select_window is called with inhibit_point_swap non-zero it will ! not store point of the old selected window's buffer back into that ! window's pointm slot. This is needed by Fset_window_configuration to ! avoid that the display routine is called with selected_window set to ! Qnil causing a subsequent crash. */ ! static Lisp_Object ! select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap) { register struct window *w; register struct window *ow; *************** *** 3603,3611 **** /* Store the current buffer's actual point into the old selected window. It belongs to that window, and when the window is not selected, must be in the window. */ ! if (inhibit_point_swap) ! inhibit_point_swap = 0; ! else { ow = XWINDOW (selected_window); if (! NILP (ow->buffer)) --- 3594,3600 ---- /* Store the current buffer's actual point into the old selected window. It belongs to that window, and when the window is not selected, must be in the window. */ ! if (! inhibit_point_swap) { ow = XWINDOW (selected_window); if (! NILP (ow->buffer)) *************** *** 3639,3644 **** --- 3628,3648 ---- return window; } + DEFUN ("select-window", Fselect_window, Sselect_window, 1, 2, 0, + doc: /* Select WINDOW. Most editing will apply to WINDOW's buffer. + If WINDOW is not already selected, make WINDOW's buffer current + and make WINDOW the frame's selected window. Return WINDOW. + Optional second arg NORECORD non-nil means do not put this buffer + at the front of the list of recently selected ones and do not + make this window the most recently selected one. + + Note that the main editor command loop selects the buffer of the + selected window before each command. */) + (register Lisp_Object window, Lisp_Object norecord) + { + select_window (window, norecord, 0); + } + static Lisp_Object select_window_norecord (Lisp_Object window) { *************** *** 6167,6174 **** out point" in the old selected window using the buffer that has been restored into it. We already swapped out that point from that window's old buffer. */ ! inhibit_point_swap = 1; ! Fselect_window (data->current_window, Qnil); XBUFFER (XWINDOW (selected_window)->buffer)->last_selected_window = selected_window; --- 6171,6177 ---- out point" in the old selected window using the buffer that has been restored into it. We already swapped out that point from that window's old buffer. */ ! select_window (data->current_window, Qnil, 1); XBUFFER (XWINDOW (selected_window)->buffer)->last_selected_window = selected_window; *************** *** 7099,7106 **** window_scroll_preserve_hpos = -1; window_scroll_preserve_vpos = -1; - inhibit_point_swap = 0; - DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function, doc: /* Non-nil means call as function to display a help buffer. The function is called with one argument, the buffer to be displayed. --- 7102,7107 ---- --------------070405000804040208050905--