emacs-devel
[Top][All Lists]
Advanced

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

Re: Window configurations


From: martin rudalics
Subject: Re: Window configurations
Date: Sat, 05 Jun 2010 14:49:03 +0200
User-agent: Thunderbird 2.0.0.21 (Windows/20090302)

> I tried to remove the conditional, but it doesn't help.
> Maybe some other your changes fixed that?

[Indeed.  Just that I had the fix in my build but no more in the
source so it took me three hours to find out what really happened.]

It's a longstanding bug in Fselect_window.  At the time I changed
`pop-to-buffer' I wasn't aware of it and thus only added to the
confusion.

Please do two things: In Fselect_window move the

  if (NILP (norecord))
    record_buffer (w->buffer);

up into the

  if (NILP (norecord))
    {
      ++window_select_count;
      XSETFASTINT (w->use_time, window_select_count);
    }

clause such that the latter reads as

  if (NILP (norecord))
    {
      ++window_select_count;
      XSETFASTINT (w->use_time, window_select_count);
      record_buffer (w->buffer);
    }

so the buffer gets recorded even if the selected window does not change.

In addition, remove the conditional from `pop-to-buffer' as explained
before.  If you don't encounter problems, please check it in.

martin


PS: I'm not sure whether in Fselect_window this

  /* Go to the point recorded in the window.
     This is important when the buffer is in more
     than one window.  It also matters when
     redisplay_window has altered point after scrolling,
     because it makes the change only in the window.  */
  {
    register int new_point = marker_position (w->pointm);
    if (new_point < BEGV)
      SET_PT (BEGV);
    else if (new_point > ZV)
      SET_PT (ZV);
    else
      SET_PT (new_point);
  }

stuff should be moved in front of the

  if (EQ (window, selected_window))
    return window;

as well.  Any ideas?



reply via email to

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