emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r110507: * editfns.c (save_excursion_


From: Dmitry Antipov
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r110507: * editfns.c (save_excursion_save): Use nil if mark points to nowhere.
Date: Thu, 11 Oct 2012 17:23:12 +0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 110507
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Thu 2012-10-11 17:23:12 +0400
message:
  * editfns.c (save_excursion_save): Use nil if mark points to nowhere.
  (save_excursion_restore): Do not restore mark if it was not saved.
modified:
  src/ChangeLog
  src/editfns.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-10-11 04:33:12 +0000
+++ b/src/ChangeLog     2012-10-11 13:23:12 +0000
@@ -1,3 +1,8 @@
+2012-10-11  Dmitry Antipov  <address@hidden>
+
+       * editfns.c (save_excursion_save): Use nil if mark points to nowhere.
+       (save_excursion_restore): Do not restore mark if it was not saved.
+
 2012-10-11  Paul Eggert  <address@hidden>
 
        * marker.c (cached_modiff): EMACS_INT, not int.

=== modified file 'src/editfns.c'
--- a/src/editfns.c     2012-09-23 08:44:20 +0000
+++ b/src/editfns.c     2012-10-11 13:23:12 +0000
@@ -819,9 +819,13 @@
 {
   bool visible = (XBUFFER (XWINDOW (selected_window)->buffer)
                  == current_buffer);
+  /* Do not copy the mark if it points to nowhere.  */
+  Lisp_Object mark = (XMARKER (BVAR (current_buffer, mark))->buffer
+                     ? Fcopy_marker (BVAR (current_buffer, mark), Qnil)
+                     : Qnil);
 
   return Fcons (Fpoint_marker (),
-               Fcons (Fcopy_marker (BVAR (current_buffer, mark), Qnil),
+               Fcons (mark,
                       Fcons (visible ? Qt : Qnil,
                              Fcons (BVAR (current_buffer, mark_active),
                                     selected_window))));
@@ -856,9 +860,14 @@
   info = XCDR (info);
   tem = XCAR (info);
   omark = Fmarker_position (BVAR (current_buffer, mark));
-  Fset_marker (BVAR (current_buffer, mark), tem, Fcurrent_buffer ());
-  nmark = Fmarker_position (tem);
-  unchain_marker (XMARKER (tem));
+  if (NILP (tem))
+    unchain_marker (XMARKER (BVAR (current_buffer, mark)));
+  else
+    {
+      Fset_marker (BVAR (current_buffer, mark), tem, Fcurrent_buffer ());
+      nmark = Fmarker_position (tem);
+      unchain_marker (XMARKER (tem));
+    }
 
   /* visible */
   info = XCDR (info);


reply via email to

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