diff options
| author | Dmitry Antipov | 2012-10-11 17:23:12 +0400 |
|---|---|---|
| committer | Dmitry Antipov | 2012-10-11 17:23:12 +0400 |
| commit | 549c3414d97575bfe537d2a4d357d48ea58c980a (patch) | |
| tree | 511b12bbc7e7b3a18426b983a9babcbbc79d0054 /src | |
| parent | d3e4228575e9ba9e99dc4a7dae788280ffcc4566 (diff) | |
| download | emacs-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/ChangeLog | 5 | ||||
| -rw-r--r-- | src/editfns.c | 17 |
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 @@ | |||
| 1 | 2012-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 | |||
| 1 | 2012-10-11 Paul Eggert <eggert@cs.ucla.edu> | 6 | 2012-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); |