emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: bug in 23.2.92 with anything


From: Thierry Volpiatto
Subject: Re: bug in 23.2.92 with anything
Date: Mon, 17 Jan 2011 11:09:29 +0100
User-agent: Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux)

martin rudalics <address@hidden> writes:

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

Your patch don't apply correctly, could you make it with git and tell me
on which revision number it apply?

> Thanks, martin
> === 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 ----
>

-- 
A+ Thierry
Get my Gnupg key:
gpg --keyserver pgp.mit.edu --recv-keys 59F29997 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]