summaryrefslogtreecommitdiff
path: root/src/insdel.c
diff options
context:
space:
mode:
authorChong Yidong <cyd@stupidchicken.com>2010-08-07 15:39:04 -0400
committerChong Yidong <cyd@stupidchicken.com>2010-08-07 15:39:04 -0400
commit9852377f7860205876bbea901d534213d3cca639 (patch)
tree07f057a0f550cd3906fce8234b8baf9c69b50d79 /src/insdel.c
parentd064e6a60d02274435b8e44743ade46e4fa65a20 (diff)
downloademacs-9852377f7860205876bbea901d534213d3cca639.tar.gz
Change `select-active-region' mechanics.
Save region text prior to buffer modification. Set window selection lazily, during `deactivate-mark' or after each command when the region is temporarily active. * lisp/cus-start.el: Add custom declaration for select-active-regions. * lisp/mouse.el (mouse-drag-track): Remove hacks to deal with old select-active-regions implementation. (mouse-yank-at-click): Doc fix. * lisp/simple.el (select-active-regions): Move to keyboard.c. (deactivate-mark): Used saved-region-selection. (select-active-region): Function removed. (activate-mark, set-mark, push-mark-command) (handle-shift-selection): Don't call it. (keyboard-quit): Avoid adding the region to the window selection. * src/insdel.c (prepare_to_modify_buffer): Save active region text to Vsaved_region_selection. * src/keyboard.c (Vselect_active_regions): Move from simple.el. (Vsaved_region_selection, Qx_set_selection, QPRIMARY, Qlazy): New vars. (command_loop_1): Set window selection prior to deactivating the mark. * src/xselect.c (QPRIMARY): Move to keyboard.c.
Diffstat (limited to 'src/insdel.c')
-rw-r--r--src/insdel.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/insdel.c b/src/insdel.c
index 8b0b2f7ab01..ac220d6b74b 100644
--- a/src/insdel.c
+++ b/src/insdel.c
@@ -74,6 +74,8 @@ Lisp_Object combine_after_change_buffer;
Lisp_Object Qinhibit_modification_hooks;
+extern Lisp_Object Vselect_active_regions, Vsaved_region_selection;
+
/* Check all markers in the current buffer, looking for something invalid. */
@@ -2047,6 +2049,21 @@ prepare_to_modify_buffer (EMACS_INT start, EMACS_INT end,
base_buffer->filename);
#endif /* not CLASH_DETECTION */
+ /* If `select-active-regions' is non-nil, save the region text. */
+ if (!NILP (Vselect_active_regions)
+ && !NILP (current_buffer->mark_active)
+ && !NILP (Vtransient_mark_mode)
+ && NILP (Vsaved_region_selection))
+ {
+ Lisp_Object b = Fmarker_position (current_buffer->mark);
+ Lisp_Object e = make_number (PT);
+ if (NILP (Fequal (b, e)))
+ {
+ validate_region (&b, &e);
+ Vsaved_region_selection = make_buffer_string (XINT (b), XINT (e), 0);
+ }
+ }
+
signal_before_change (start, end, preserve_ptr);
if (current_buffer->newline_cache)