]> git.eshelyaron.com Git - emacs.git/commitdiff
(cmd_error): Clear prefix arg here.
authorKarl Heuer <kwzh@gnu.org>
Wed, 1 Feb 1995 22:18:21 +0000 (22:18 +0000)
committerKarl Heuer <kwzh@gnu.org>
Wed, 1 Feb 1995 22:18:21 +0000 (22:18 +0000)
(command_loop_1): Not here.
(command_loop_1): Save original perdisplay in case we're already locked to a
particular display.
Move display-specific cleanup to end of main loop.
Use perdisplay to access prefix arg.
(Fcommand_execute, Fexecute_extended_command): Use perdisplay.

src/keyboard.c

index 99044239e1dc5056ea34e18e8cd3c7fda50f1726..ea0f10bd1106a4970a3aaa55facdcc61d6e4fab2 100644 (file)
@@ -705,11 +705,17 @@ cmd_error (data)
   Vstandard_output = Qt;
   Vstandard_input = Qt;
   Vexecuting_macro = Qnil;
+  if (!current_perdisplay)
+    abort ();
+  current_perdisplay->Vprefix_arg = Qnil;
   cmd_error_internal (data, 0);
 
   Vquit_flag = Qnil;
 
   Vinhibit_quit = Qnil;
+#ifdef MULTI_PERDISPLAY
+  current_perdisplay = 0;
+#endif
 
   return make_number (0);
 }
@@ -907,8 +913,8 @@ command_loop_1 ()
   int no_direct;
   int prev_modiff;
   struct buffer *prev_buffer;
+  PERDISPLAY *global_perdisplay = current_perdisplay;
 
-  Vprefix_arg = Qnil;
   Vdeactivate_mark = Qnil;
   waiting_for_input = 0;
   cancel_echoing ();
@@ -932,11 +938,6 @@ command_loop_1 ()
 
   while (1)
     {
-      /* Install chars successfully executed in kbd macro.  */
-
-      if (defining_kbd_macro && NILP (Vprefix_arg))
-       finalize_kbd_macro_chars ();
-
       /* Make sure the current window's buffer is selected.  */
       if (XBUFFER (XWINDOW (selected_window)->buffer) != current_buffer)
        set_buffer_internal (XBUFFER (XWINDOW (selected_window)->buffer));
@@ -973,7 +974,7 @@ command_loop_1 ()
        }
 
 #ifdef C_ALLOCA
-         alloca (0);           /* Cause a garbage collection now */
+      alloca (0);              /* Cause a garbage collection now */
                                /* Since we can free the most stuff here.  */
 #endif /* C_ALLOCA */
 
@@ -995,7 +996,7 @@ command_loop_1 ()
        call0 (Qrecompute_lucid_menubar);
 
       /* Read next key sequence; i gets its length.  */
-      i = read_key_sequence (keybuf, (sizeof keybuf / sizeof (keybuf[0])), Qnil, 0);
+      i = read_key_sequence (keybuf, sizeof keybuf / sizeof keybuf[0], Qnil, 0);
 
       ++num_input_keys;
 
@@ -1010,7 +1011,7 @@ command_loop_1 ()
        {
          cancel_echoing ();
          this_command_key_count = 0;
-         continue;
+         goto finalize;
        }
 
       last_command_char = keybuf[i - 1];
@@ -1057,12 +1058,12 @@ command_loop_1 ()
          bitch_at_user ();
          defining_kbd_macro = 0;
          update_mode_lines = 1;
-         Vprefix_arg = Qnil;
+         current_perdisplay->Vprefix_arg = Qnil;
 
        }
       else
        {
-         if (NILP (Vprefix_arg) && ! no_direct)
+         if (NILP (current_perdisplay->Vprefix_arg) && ! no_direct)
            {
              /* Recognize some common commands in common situations and
                 do them directly.  */
@@ -1185,7 +1186,7 @@ command_loop_1 ()
          /* Here for a command that isn't executed directly */
 
          nonundocount = 0;
-         if (NILP (Vprefix_arg))
+         if (NILP (current_perdisplay->Vprefix_arg))
            Fundo_boundary ();
          Fcommand_execute (this_command, Qnil);
 
@@ -1209,7 +1210,7 @@ command_loop_1 ()
         3) we want to leave this_command_key_count non-zero, so that
         read_char will realize that it is re-reading a character, and
         not echo it a second time.  */
-      if (NILP (Vprefix_arg))
+      if (NILP (current_perdisplay->Vprefix_arg))
        {
          last_command = this_command;
          cancel_echoing ();
@@ -1226,6 +1227,16 @@ command_loop_1 ()
          else if (current_buffer != prev_buffer || MODIFF != prev_modiff)
            call1 (Vrun_hooks, intern ("activate-mark-hook"));
        }
+
+    finalize:
+      /* Install chars successfully executed in kbd macro.  */
+
+      if (defining_kbd_macro && NILP (current_perdisplay->Vprefix_arg))
+       finalize_kbd_macro_chars ();
+
+#ifdef MULTI_PERDISPLAY
+      current_perdisplay = global_perdisplay;
+#endif
     }
 }
 
@@ -5414,8 +5425,9 @@ Otherwise, that is done only if an arg is read using the minibuffer.")
   struct backtrace backtrace;
   extern int debug_on_next_call;
 
-  prefixarg = Vprefix_arg, Vprefix_arg = Qnil;
-  Vcurrent_prefix_arg = prefixarg;
+  prefixarg = current_perdisplay->Vprefix_arg;
+  current_perdisplay->Vprefix_arg = Qnil;
+  current_perdisplay->Vcurrent_prefix_arg = prefixarg;
   debug_on_next_call = 0;
 
   if (SYMBOLP (cmd))
@@ -5531,7 +5543,7 @@ DEFUN ("execute-extended-command", Fexecute_extended_command, Sexecute_extended_
   UNGCPRO;
 
   function = Fintern (function, Qnil);
-  Vprefix_arg = prefixarg;
+  current_perdisplay->Vprefix_arg = prefixarg;
   this_command = function;
 
   return Fcommand_execute (function, Qt);