diff options
| author | Richard M. Stallman | 1993-03-07 09:32:22 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1993-03-07 09:32:22 +0000 |
| commit | 9772455e0d994124eda65fd0f51b088791e84872 (patch) | |
| tree | 3a2e8afd60a5803dea769eb8db915cf36dce7bd8 /src | |
| parent | 4d1f43c0381536f68fc0f3ae0011b3b3fc869830 (diff) | |
| download | emacs-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.c | 22 |
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 | ||
| 4 | This file is part of GNU Emacs. | 4 | This 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 | ||
| 287 | Lisp_Object | 290 | Lisp_Object |
| 288 | save_excursion_restore (info) | 291 | save_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\ |
| 316 | Executes BODY just like `progn'.\n\ | 327 | Executes BODY just like `progn'.\n\ |
| 317 | The values of point, mark and the current buffer are restored\n\ | 328 | The values of point, mark and the current buffer are restored\n\ |
| 318 | even in case of abnormal exit (throw or error).") | 329 | even in case of abnormal exit (throw or error).\n\ |
| 330 | The state of activation of the mark is also restored.") | ||
| 319 | (args) | 331 | (args) |
| 320 | Lisp_Object args; | 332 | Lisp_Object args; |
| 321 | { | 333 | { |