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
This commit is contained in:
Chong Yidong 2012-03-26 12:06:31 +08:00
parent c0bf77531e
commit 90d49b7fb2
2 changed files with 20 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2012-03-26 Chong Yidong <cyd@gnu.org>
* 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 <fabrice.popineau@supelec.fr>
* w32heap.c (_heap_init, _heap_term): Remove dead MSVC-specific

View file

@ -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