]> git.eshelyaron.com Git - emacs.git/commitdiff
New variable selection-inhibit-update-commands, for inhibiting selection updates.
authorChong Yidong <cyd@gnu.org>
Mon, 26 Mar 2012 04:06:31 +0000 (12:06 +0800)
committerChong Yidong <cyd@gnu.org>
Mon, 26 Mar 2012 04:06:31 +0000 (12:06 +0800)
* 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
src/keyboard.c

index 71bfec1f0613c9d4a5043460b2d056b553278039..490d42790802911ea1e0b882df85fbb95023759e 100644 (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
index f791773c3522c0e38ec58a8c4f8da0f2b56642d2..e60420599c986fad19368b76914c1310001b46ce 100644 (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