]> git.eshelyaron.com Git - emacs.git/commitdiff
(silly_event_symbol_error): New subrtn, from Fdefine_key.
authorRichard M. Stallman <rms@gnu.org>
Sat, 29 Dec 2001 14:54:28 +0000 (14:54 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 29 Dec 2001 14:54:28 +0000 (14:54 +0000)
Handle modifier bits.  Correct typo in error message.

src/ChangeLog
src/keymap.c

index 116d8ec26e413bf2a40d0312a5595b03ed65d901..02e47483009fa4f291e46fc11ddda685d5fc2e08 100644 (file)
@@ -1,3 +1,8 @@
+2001-12-29  Richard M. Stallman  <rms@gnu.org>
+
+       * keymap.c (silly_event_symbol_error): New subrtn, from Fdefine_key.
+       Handle modifier bits.  Correct typo in error message.
+
 2001-12-28  Richard M. Stallman  <rms@gnu.org>
 
        * abbrev.c: Use the plist of an abbrev for multiple params if nec.
index ecc17e4a95777ed0776143e41b5124b7dcb4cf1f..a6867db32c0829cf6066e6837d72b1f5d63ca034 100644 (file)
@@ -115,6 +115,7 @@ static void describe_translation P_ ((Lisp_Object, Lisp_Object));
 static void describe_map P_ ((Lisp_Object, Lisp_Object,
                              void (*) P_ ((Lisp_Object, Lisp_Object)),
                              int, Lisp_Object, Lisp_Object*, int));
+static void silly_event_symbol_error P_ ((Lisp_Object));
 \f
 /* Keymap object support - constructors and predicates.                        */
 
@@ -1011,11 +1012,8 @@ the front of KEYMAP.  */)
       if (CONSP (c) && lucid_event_type_list_p (c))
        c = Fevent_convert_list (c);
 
-      if (SYMBOLP (c) && ! NILP (Fassoc (Fsymbol_name (c), exclude_keys)))
-       error ("To bind the key %s, use; use \"%s\", not [%s]",
-              XSYMBOL (c)->name->data,
-              XSTRING (XCDR (Fassoc (Fsymbol_name (c), exclude_keys)))->data,
-              XSYMBOL (c)->name->data);
+      if (SYMBOLP (c))
+       silly_event_symbol_error (c);
 
       if (INTEGERP (c)
          && (XINT (c) & meta_bit)
@@ -1156,6 +1154,52 @@ append_key (key_sequence, key)
   return Fvconcat (2, args);
 }
 
+/* Given a event type C which is a symbol,
+   signal an error if is a mistake such as RET or M-RET or C-DEL, etc.  */
+
+static void
+silly_event_symbol_error (c)
+     Lisp_Object c;
+{
+  Lisp_Object parsed, base, name, assoc;
+  int modifiers;
+         
+  parsed = parse_modifiers (c);
+  modifiers = (int) XUINT (XCAR (XCDR (parsed)));
+  base = XCAR (parsed);
+  name = Fsymbol_name (base);
+  /* This alist includes elements such as ("RET" . "\\r").  */
+  assoc = Fassoc (name, exclude_keys);
+
+  if (! NILP (assoc))
+    {
+      char new_mods[sizeof ("\\A-\\C-\\H-\\M-\\S-\\s-")];
+      char *p = new_mods;
+      Lisp_Object keystring;
+      if (modifiers & alt_modifier)
+       { *p++ = '\\'; *p++ = 'A'; *p++ = '-'; }
+      if (modifiers & ctrl_modifier)
+       { *p++ = '\\'; *p++ = 'C'; *p++ = '-'; }
+      if (modifiers & hyper_modifier)
+       { *p++ = '\\'; *p++ = 'H'; *p++ = '-'; }
+      if (modifiers & meta_modifier)
+       { *p++ = '\\'; *p++ = 'M'; *p++ = '-'; }
+      if (modifiers & shift_modifier)
+       { *p++ = '\\'; *p++ = 'S'; *p++ = '-'; }
+      if (modifiers & super_modifier)
+       { *p++ = '\\'; *p++ = 's'; *p++ = '-'; }
+      *p = 0;
+
+      c = reorder_modifiers (c);
+      keystring = concat2 (build_string (new_mods), XCDR (assoc));
+               
+      error ((modifiers & ~meta_modifier
+             ? "To bind the key %s, use [?%s], not [%s]"
+             : "To bind the key %s, use \"%s\", not [%s]"),
+            XSYMBOL (c)->name->data, XSTRING (keystring)->data,
+            XSYMBOL (c)->name->data);
+    }
+}
 \f
 /* Global, local, and minor mode keymap stuff.                         */