From 746812d9da7e6e2437fcac311d18641748942213 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sat, 7 Aug 2010 16:26:55 -0400 Subject: [PATCH] Avoid restrictions when copying window selection. * src/keyboard.c (command_loop_1): * src/insdel.c (prepare_to_modify_buffer): Don't call validate_region. --- src/ChangeLog | 5 +++++ src/insdel.c | 13 ++++++------- src/keyboard.c | 13 ++++++++----- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b1c5d5651c8..8ed347761c1 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2010-08-07 Chong Yidong + + * keyboard.c (command_loop_1): + * insdel.c (prepare_to_modify_buffer): Don't call validate_region. + 2010-08-07 Chong Yidong * insdel.c (prepare_to_modify_buffer): Save active region text to diff --git a/src/insdel.c b/src/insdel.c index ac220d6b74b..00025808e37 100644 --- a/src/insdel.c +++ b/src/insdel.c @@ -2055,13 +2055,12 @@ prepare_to_modify_buffer (EMACS_INT start, EMACS_INT end, && !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); - } + int b = XINT (Fmarker_position (current_buffer->mark)); + int e = XINT (make_number (PT)); + if (b < e) + Vsaved_region_selection = make_buffer_string (b, e, 0); + else if (b > e) + Vsaved_region_selection = make_buffer_string (e, b, 0); } signal_before_change (start, end, preserve_ptr); diff --git a/src/keyboard.c b/src/keyboard.c index de793fccde1..f12395544b9 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -1797,11 +1797,14 @@ command_loop_1 (void) { /* Set window selection. If `select-active-regions' is `lazy', only do it for temporarily active regions. */ - Lisp_Object beg = Fmarker_position (current_buffer->mark); - Lisp_Object end = make_number (PT); - validate_region (&beg, &end); - call2 (Qx_set_selection, QPRIMARY, - make_buffer_string (XINT (beg), XINT (end), 0)); + int beg = XINT (Fmarker_position (current_buffer->mark)); + int end = XINT (make_number (PT)); + if (beg < end) + call2 (Qx_set_selection, QPRIMARY, + make_buffer_string (beg, end, 0)); + else if (beg > end) + call2 (Qx_set_selection, QPRIMARY, + make_buffer_string (end, beg, 0)); } if (!NILP (Vdeactivate_mark)) -- 2.39.2