From 90d49b7fb27dfa5a7d8cdb6aa11a5ce65ad9ddfa Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Mon, 26 Mar 2012 12:06:31 +0800 Subject: [PATCH] New variable selection-inhibit-update-commands, for inhibiting selection updates. * keyboard.c (Vselection_inhibit_update_commands): New variable. (command_loop_1): Use it; inhibit selection update for handle-select-window too. Fixes: debbugs:8996 --- src/ChangeLog | 6 ++++++ src/keyboard.c | 15 ++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/ChangeLog b/src/ChangeLog index 71bfec1f06..490d427908 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2012-03-26 Chong Yidong + + * keyboard.c (Vselection_inhibit_update_commands): New variable. + (command_loop_1): Use it; inhibit selection update for + handle-select-window too (Bug#8996). + 2012-03-25 Fabrice Popineau * w32heap.c (_heap_init, _heap_term): Remove dead MSVC-specific diff --git a/src/keyboard.c b/src/keyboard.c index f791773c35..e60420599c 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -241,6 +241,7 @@ Lisp_Object internal_last_event_frame; Time last_event_timestamp; static Lisp_Object Qx_set_selection, Qhandle_switch_frame; +static Lisp_Object Qhandle_select_window; Lisp_Object QPRIMARY; static Lisp_Object Qself_insert_command; @@ -1647,7 +1648,8 @@ command_loop_1 (void) ? EQ (CAR_SAFE (Vtransient_mark_mode), Qonly) : (!NILP (Vselect_active_regions) && !NILP (Vtransient_mark_mode))) - && !EQ (Vthis_command, Qhandle_switch_frame)) + && NILP (Fmemq (Vthis_command, + Vselection_inhibit_update_commands))) { EMACS_INT beg = XINT (Fmarker_position (BVAR (current_buffer, mark))); @@ -11649,6 +11651,7 @@ syms_of_keyboard (void) DEFSYM (Qx_set_selection, "x-set-selection"); DEFSYM (QPRIMARY, "PRIMARY"); DEFSYM (Qhandle_switch_frame, "handle-switch-frame"); + DEFSYM (Qhandle_select_window, "handle-select-window"); DEFSYM (Qinput_method_function, "input-method-function"); DEFSYM (Qinput_method_exit_on_first_char, "input-method-exit-on-first-char"); @@ -12285,6 +12288,16 @@ text in the region before modifying the buffer. The next `deactivate-mark' call uses this to set the window selection. */); Vsaved_region_selection = Qnil; + DEFVAR_LISP ("selection-inhibit-update-commands", + Vselection_inhibit_update_commands, + doc: /* List of commands which should not update the selection. +Normally, if `select-active-regions' is non-nil and the mark remains +active after a command (i.e. the mark was not deactivated), the Emacs +command loop sets the selection to the text in the region. However, +if the command is in this list, the selection is not updated. */); + Vselection_inhibit_update_commands + = list2 (Qhandle_switch_frame, Qhandle_select_window); + DEFVAR_LISP ("debug-on-event", Vdebug_on_event, doc: /* Enter debugger on this event. When Emacs -- 2.20.1