# HG changeset patch # User Richard M. Stallman # Date 731496742 0 # Node ID a358c97a23e456b3c418a0e2f52e26c7575ec33b # Parent 8cf58355e8a12d3567e5b08e1f95409e3acf5318 (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. diff -r 8cf58355e8a1 -r a358c97a23e4 src/editfns.c --- a/src/editfns.c Sun Mar 07 09:31:37 1993 +0000 +++ b/src/editfns.c Sun Mar 07 09:32:22 1993 +0000 @@ -1,5 +1,5 @@ /* Lisp functions pertaining to editing. - Copyright (C) 1985, 1986, 1987, 1989, 1992 Free Software Foundation, Inc. + Copyright (C) 1985, 1986, 1987, 1989, 1993 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -196,6 +196,8 @@ int beginningp; { register Lisp_Object m; + if (!NILP (Vtransient_mark_mode) && NILP (current_buffer->mark_active)) + error ("There is no region now"); m = Fmarker_position (current_buffer->mark); if (NILP (m)) error ("There is no region now"); if ((point < XFASTINT (m)) == beginningp) @@ -281,14 +283,15 @@ return Fcons (Fpoint_marker (), Fcons (Fcopy_marker (current_buffer->mark), - visible ? Qt : Qnil)); + Fcons (visible ? Qt : Qnil, + current_buffer->mark_active))); } Lisp_Object save_excursion_restore (info) register Lisp_Object info; { - register Lisp_Object tem; + register Lisp_Object tem, tem1; tem = Fmarker_buffer (Fcar (info)); /* If buffer being returned to is now deleted, avoid error */ @@ -305,9 +308,17 @@ Fset_marker (current_buffer->mark, tem, Fcurrent_buffer ()); unchain_marker (tem); tem = Fcdr (Fcdr (info)); - if (!NILP (tem) + tem1 = Fcar (tem); + if (!NILP (tem1) && current_buffer != XBUFFER (XWINDOW (selected_window)->buffer)) Fswitch_to_buffer (Fcurrent_buffer (), Qnil); + + tem1 = current_buffer->mark_active; + current_buffer->mark_active = Fcdr (tem); + if (! NILP (current_buffer->mark_active)) + call1 (Vrun_hooks, intern ("activate-mark-hook")); + else if (! NILP (tem1)) + call1 (Vrun_hooks, intern ("deactivate-mark-hook")); return Qnil; } @@ -315,7 +326,8 @@ "Save point, mark, and current buffer; execute BODY; restore those things.\n\ Executes BODY just like `progn'.\n\ The values of point, mark and the current buffer are restored\n\ -even in case of abnormal exit (throw or error).") +even in case of abnormal exit (throw or error).\n\ +The state of activation of the mark is also restored.") (args) Lisp_Object args; {