* src/keyboard.c (command_loop_1): If command is nil, call `undefined'.
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 29 Oct 2013 21:05:35 +0000 (17:05 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 29 Oct 2013 21:05:35 +0000 (17:05 -0400)
* lisp/subr.el (undefined): Add missing behavior from the C code for
unbound keys.

lisp/ChangeLog
lisp/subr.el
src/ChangeLog
src/keyboard.c

index 988047c..f15ba16 100644 (file)
@@ -1,5 +1,8 @@
 2013-10-29  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * subr.el (undefined): Add missing behavior from the C code for
+       unbound keys.
+
        * rect.el: Use lexical-binding.  Add new rectangular region support.
        (rectangle-mark): New command.
        (rectangle--region): New var.
index ae1db66..0267366 100644 (file)
@@ -586,7 +586,15 @@ saving keyboard macros (see `edmacro-mode')."
 (defun undefined ()
   "Beep to tell the user this binding is undefined."
   (interactive)
-  (ding))
+  (ding)
+  (message "%s is undefined" (key-description (this-single-command-keys)))
+  (setq defining-kbd-macro nil)
+  (force-mode-line-update)
+  ;; If this is a down-mouse event, don't reset prefix-arg;
+  ;; pass it to the command run by the up event.
+  (setq prefix-arg
+        (when (memq 'down (event-modifiers last-command-event))
+          current-prefix-arg)))
 
 ;; Prevent the \{...} documentation construct
 ;; from mentioning keys that run this command.
index b06279b..7dab8c0 100644 (file)
@@ -1,3 +1,7 @@
+2013-10-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * keyboard.c (command_loop_1): If command is nil, call `undefined'.
+
 2013-10-29  Paul Eggert  <eggert@cs.ucla.edu>
 
        * insdel.c: Fix minor problems found by static checking.
index 0ff4cda..6831f4d 100644 (file)
@@ -1510,27 +1510,8 @@ command_loop_1 (void)
       already_adjusted = 0;
 
       if (NILP (Vthis_command))
-       {
-         /* nil means key is undefined.  */
-         Lisp_Object keys = Fvector (i, keybuf);
-         keys = Fkey_description (keys, Qnil);
-         bitch_at_user ();
-         message_with_string ("%s is undefined", keys, 0);
-         kset_defining_kbd_macro (current_kboard, Qnil);
-         update_mode_lines = 1;
-         /* If this is a down-mouse event, don't reset prefix-arg;
-            pass it to the command run by the up event.  */
-         if (EVENT_HAS_PARAMETERS (last_command_event))
-           {
-             Lisp_Object breakdown
-               = parse_modifiers (EVENT_HEAD (last_command_event));
-             int modifiers = XINT (XCAR (XCDR (breakdown)));
-             if (!(modifiers & down_modifier))
-               kset_prefix_arg (current_kboard, Qnil);
-           }
-         else
-           kset_prefix_arg (current_kboard, Qnil);
-       }
+       /* nil means key is undefined.  */
+       call0 (Qundefined);
       else
        {
          /* Here for a command that isn't executed directly.  */