emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r112164: * xdisp.c (with_echo_area_bu


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r112164: * xdisp.c (with_echo_area_buffer_unwind_data): Save window
Date: Thu, 28 Mar 2013 06:41:05 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 112164
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Thu 2013-03-28 06:41:05 +0400
message:
  * xdisp.c (with_echo_area_buffer_unwind_data): Save window
  start marker...
  (unwind_with_echo_area_buffer): ...to restore it here.  This
  is needed to ensure that...
  (redisplay_window): ...both window markers are valid here,
  which is verified by eassert.
  * editfns.c (save_excursion_save): Do not assume that
  selected_window always displays the buffer.
modified:
  src/ChangeLog
  src/editfns.c
  src/xdisp.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2013-03-27 14:33:03 +0000
+++ b/src/ChangeLog     2013-03-28 02:41:05 +0000
@@ -1,3 +1,14 @@
+2013-03-28  Dmitry Antipov  <address@hidden>
+
+       * xdisp.c (with_echo_area_buffer_unwind_data): Save window
+       start marker...
+       (unwind_with_echo_area_buffer): ...to restore it here.  This
+       is needed to ensure that...
+       (redisplay_window): ...both window markers are valid here,
+       which is verified by eassert.
+       * editfns.c (save_excursion_save): Do not assume that
+       selected_window always displays the buffer.
+
 2013-03-27  Stefan Monnier  <address@hidden>
 
        * casetab.c (init_casetab_once): Don't abuse the ascii eqv table for

=== modified file 'src/editfns.c'
--- a/src/editfns.c     2013-03-24 12:59:45 +0000
+++ b/src/editfns.c     2013-03-28 02:41:05 +0000
@@ -846,7 +846,7 @@
       ? Fcopy_marker (BVAR (current_buffer, mark), Qnil)
       : Qnil),
      /* Selected window if current buffer is shown in it, nil otherwise.  */
-     ((XBUFFER (XWINDOW (selected_window)->buffer) == current_buffer)
+     (EQ (XWINDOW (selected_window)->buffer, Fcurrent_buffer ())
       ? selected_window : Qnil),
      BVAR (current_buffer, mark_active));
 }

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2013-03-24 12:59:45 +0000
+++ b/src/xdisp.c       2013-03-28 02:41:05 +0000
@@ -9994,7 +9994,7 @@
   Vwith_echo_area_save_vector = Qnil;
 
   if (NILP (vector))
-    vector = Fmake_vector (make_number (7), Qnil);
+    vector = Fmake_vector (make_number (9), Qnil);
 
   XSETBUFFER (tmp, current_buffer); ASET (vector, i, tmp); ++i;
   ASET (vector, i, Vdeactivate_mark); ++i;
@@ -10006,10 +10006,12 @@
       ASET (vector, i, w->buffer); ++i;
       ASET (vector, i, make_number (marker_position (w->pointm))); ++i;
       ASET (vector, i, make_number (marker_byte_position (w->pointm))); ++i;
+      ASET (vector, i, make_number (marker_position (w->start))); ++i;
+      ASET (vector, i, make_number (marker_byte_position (w->start))); ++i;
     }
   else
     {
-      int end = i + 4;
+      int end = i + 6;
       for (; i < end; ++i)
        ASET (vector, i, Qnil);
     }
@@ -10032,16 +10034,18 @@
   if (WINDOWP (AREF (vector, 3)))
     {
       struct window *w;
-      Lisp_Object buffer, charpos, bytepos;
+      Lisp_Object buffer;
 
       w = XWINDOW (AREF (vector, 3));
       buffer = AREF (vector, 4);
-      charpos = AREF (vector, 5);
-      bytepos = AREF (vector, 6);
 
       wset_buffer (w, buffer);
       set_marker_both (w->pointm, buffer,
-                      XFASTINT (charpos), XFASTINT (bytepos));
+                      XFASTINT (AREF (vector, 5)),
+                      XFASTINT (AREF (vector, 6)));
+      set_marker_both (w->start, buffer,
+                      XFASTINT (AREF (vector, 7)),
+                      XFASTINT (AREF (vector, 8)));
     }
 
   Vwith_echo_area_save_vector = vector;
@@ -15231,12 +15235,14 @@
   SET_TEXT_POS (lpoint, PT, PT_BYTE);
   opoint = lpoint;
 
-  /* W must be a leaf window here.  */
-  eassert (!NILP (w->buffer));
 #ifdef GLYPH_DEBUG
   *w->desired_matrix->method = 0;
 #endif
 
+  /* Make sure that both W's markers are valid.  */
+  eassert (XMARKER (w->start)->buffer == buffer);
+  eassert (XMARKER (w->pointm)->buffer == buffer);
+
  restart:
   reconsider_clip_changes (w, buffer);
 


reply via email to

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