aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1993-03-07 09:32:22 +0000
committerRichard M. Stallman1993-03-07 09:32:22 +0000
commit9772455e0d994124eda65fd0f51b088791e84872 (patch)
tree3a2e8afd60a5803dea769eb8db915cf36dce7bd8 /src
parent4d1f43c0381536f68fc0f3ae0011b3b3fc869830 (diff)
downloademacs-9772455e0d994124eda65fd0f51b088791e84872.tar.gz
emacs-9772455e0d994124eda65fd0f51b088791e84872.zip
(save_excursion_save): Save mark_active of buffer.
(save_excursion_restore): Restore mark_active of buffer. Run activate-mark-hook if it's on, or deactivate-mark-hook if it turns off. (region_limit): Error if mark inactive, if transient-mark-mode.
Diffstat (limited to 'src')
-rw-r--r--src/editfns.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/src/editfns.c b/src/editfns.c
index e121796e1b4..0a30a400a6c 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1,5 +1,5 @@
1/* Lisp functions pertaining to editing. 1/* Lisp functions pertaining to editing.
2 Copyright (C) 1985, 1986, 1987, 1989, 1992 Free Software Foundation, Inc. 2 Copyright (C) 1985, 1986, 1987, 1989, 1993 Free Software Foundation, Inc.
3 3
4This file is part of GNU Emacs. 4This file is part of GNU Emacs.
5 5
@@ -196,6 +196,8 @@ region_limit (beginningp)
196 int beginningp; 196 int beginningp;
197{ 197{
198 register Lisp_Object m; 198 register Lisp_Object m;
199 if (!NILP (Vtransient_mark_mode) && NILP (current_buffer->mark_active))
200 error ("There is no region now");
199 m = Fmarker_position (current_buffer->mark); 201 m = Fmarker_position (current_buffer->mark);
200 if (NILP (m)) error ("There is no region now"); 202 if (NILP (m)) error ("There is no region now");
201 if ((point < XFASTINT (m)) == beginningp) 203 if ((point < XFASTINT (m)) == beginningp)
@@ -281,14 +283,15 @@ save_excursion_save ()
281 283
282 return Fcons (Fpoint_marker (), 284 return Fcons (Fpoint_marker (),
283 Fcons (Fcopy_marker (current_buffer->mark), 285 Fcons (Fcopy_marker (current_buffer->mark),
284 visible ? Qt : Qnil)); 286 Fcons (visible ? Qt : Qnil,
287 current_buffer->mark_active)));
285} 288}
286 289
287Lisp_Object 290Lisp_Object
288save_excursion_restore (info) 291save_excursion_restore (info)
289 register Lisp_Object info; 292 register Lisp_Object info;
290{ 293{
291 register Lisp_Object tem; 294 register Lisp_Object tem, tem1;
292 295
293 tem = Fmarker_buffer (Fcar (info)); 296 tem = Fmarker_buffer (Fcar (info));
294 /* If buffer being returned to is now deleted, avoid error */ 297 /* If buffer being returned to is now deleted, avoid error */
@@ -305,9 +308,17 @@ save_excursion_restore (info)
305 Fset_marker (current_buffer->mark, tem, Fcurrent_buffer ()); 308 Fset_marker (current_buffer->mark, tem, Fcurrent_buffer ());
306 unchain_marker (tem); 309 unchain_marker (tem);
307 tem = Fcdr (Fcdr (info)); 310 tem = Fcdr (Fcdr (info));
308 if (!NILP (tem) 311 tem1 = Fcar (tem);
312 if (!NILP (tem1)
309 && current_buffer != XBUFFER (XWINDOW (selected_window)->buffer)) 313 && current_buffer != XBUFFER (XWINDOW (selected_window)->buffer))
310 Fswitch_to_buffer (Fcurrent_buffer (), Qnil); 314 Fswitch_to_buffer (Fcurrent_buffer (), Qnil);
315
316 tem1 = current_buffer->mark_active;
317 current_buffer->mark_active = Fcdr (tem);
318 if (! NILP (current_buffer->mark_active))
319 call1 (Vrun_hooks, intern ("activate-mark-hook"));
320 else if (! NILP (tem1))
321 call1 (Vrun_hooks, intern ("deactivate-mark-hook"));
311 return Qnil; 322 return Qnil;
312} 323}
313 324
@@ -315,7 +326,8 @@ DEFUN ("save-excursion", Fsave_excursion, Ssave_excursion, 0, UNEVALLED, 0,
315 "Save point, mark, and current buffer; execute BODY; restore those things.\n\ 326 "Save point, mark, and current buffer; execute BODY; restore those things.\n\
316Executes BODY just like `progn'.\n\ 327Executes BODY just like `progn'.\n\
317The values of point, mark and the current buffer are restored\n\ 328The values of point, mark and the current buffer are restored\n\
318even in case of abnormal exit (throw or error).") 329even in case of abnormal exit (throw or error).\n\
330The state of activation of the mark is also restored.")
319 (args) 331 (args)
320 Lisp_Object args; 332 Lisp_Object args;
321{ 333{