aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDmitry Antipov2012-10-11 17:23:12 +0400
committerDmitry Antipov2012-10-11 17:23:12 +0400
commit549c3414d97575bfe537d2a4d357d48ea58c980a (patch)
tree511b12bbc7e7b3a18426b983a9babcbbc79d0054 /src
parentd3e4228575e9ba9e99dc4a7dae788280ffcc4566 (diff)
downloademacs-549c3414d97575bfe537d2a4d357d48ea58c980a.tar.gz
emacs-549c3414d97575bfe537d2a4d357d48ea58c980a.zip
* editfns.c (save_excursion_save): Use nil if mark points to nowhere.
(save_excursion_restore): Do not restore mark if it was not saved.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog5
-rw-r--r--src/editfns.c17
2 files changed, 18 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 0b274598986..99caae59cf7 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
12012-10-11 Dmitry Antipov <dmantipov@yandex.ru>
2
3 * editfns.c (save_excursion_save): Use nil if mark points to nowhere.
4 (save_excursion_restore): Do not restore mark if it was not saved.
5
12012-10-11 Paul Eggert <eggert@cs.ucla.edu> 62012-10-11 Paul Eggert <eggert@cs.ucla.edu>
2 7
3 * marker.c (cached_modiff): EMACS_INT, not int. 8 * marker.c (cached_modiff): EMACS_INT, not int.
diff --git a/src/editfns.c b/src/editfns.c
index fc6465a3d46..19fad7130a7 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -819,9 +819,13 @@ save_excursion_save (void)
819{ 819{
820 bool visible = (XBUFFER (XWINDOW (selected_window)->buffer) 820 bool visible = (XBUFFER (XWINDOW (selected_window)->buffer)
821 == current_buffer); 821 == current_buffer);
822 /* Do not copy the mark if it points to nowhere. */
823 Lisp_Object mark = (XMARKER (BVAR (current_buffer, mark))->buffer
824 ? Fcopy_marker (BVAR (current_buffer, mark), Qnil)
825 : Qnil);
822 826
823 return Fcons (Fpoint_marker (), 827 return Fcons (Fpoint_marker (),
824 Fcons (Fcopy_marker (BVAR (current_buffer, mark), Qnil), 828 Fcons (mark,
825 Fcons (visible ? Qt : Qnil, 829 Fcons (visible ? Qt : Qnil,
826 Fcons (BVAR (current_buffer, mark_active), 830 Fcons (BVAR (current_buffer, mark_active),
827 selected_window)))); 831 selected_window))));
@@ -856,9 +860,14 @@ save_excursion_restore (Lisp_Object info)
856 info = XCDR (info); 860 info = XCDR (info);
857 tem = XCAR (info); 861 tem = XCAR (info);
858 omark = Fmarker_position (BVAR (current_buffer, mark)); 862 omark = Fmarker_position (BVAR (current_buffer, mark));
859 Fset_marker (BVAR (current_buffer, mark), tem, Fcurrent_buffer ()); 863 if (NILP (tem))
860 nmark = Fmarker_position (tem); 864 unchain_marker (XMARKER (BVAR (current_buffer, mark)));
861 unchain_marker (XMARKER (tem)); 865 else
866 {
867 Fset_marker (BVAR (current_buffer, mark), tem, Fcurrent_buffer ());
868 nmark = Fmarker_position (tem);
869 unchain_marker (XMARKER (tem));
870 }
862 871
863 /* visible */ 872 /* visible */
864 info = XCDR (info); 873 info = XCDR (info);