]> git.eshelyaron.com Git - emacs.git/commitdiff
(current_minor_maps): Catch errors in Findirect_function.
authorKarl Heuer <kwzh@gnu.org>
Mon, 17 Jul 1995 22:21:54 +0000 (22:21 +0000)
committerKarl Heuer <kwzh@gnu.org>
Mon, 17 Jul 1995 22:21:54 +0000 (22:21 +0000)
(current_minor_maps_error): New function.

src/keymap.c

index 114282b8f83c8a3d732d58e0b261b02a19944b2f..034b5d642602c099b3bd7bb4b0915c4f102052c9 100644 (file)
@@ -799,6 +799,13 @@ append_key (key_sequence, key)
 static Lisp_Object *cmm_modes, *cmm_maps;
 static int cmm_size;
 
+/* Error handler used in current_minor_maps.  */
+static Lisp_Object
+current_minor_maps_error ()
+{
+  return Qnil;
+}
+
 /* Store a pointer to an array of the keymaps of the currently active
    minor modes in *buf, and return the number of maps it contains.
 
@@ -830,6 +837,8 @@ current_minor_maps (modeptr, mapptr)
        && (val = find_symbol_value (var), ! EQ (val, Qunbound))
        && ! NILP (val))
       {
+       Lisp_Object temp;
+
        if (i >= cmm_size)
          {
            Lisp_Object *newmodes, *newmaps;
@@ -865,9 +874,17 @@ current_minor_maps (modeptr, mapptr)
            else
              break;
          }
-       cmm_modes[i] = var;
-       cmm_maps [i] = Findirect_function (XCONS (assoc)->cdr);
-       i++;
+
+       /* Get the keymap definition--or nil if it is not defined.  */
+       temp = internal_condition_case_1 (Findirect_function,
+                                         XCONS (assoc)->cdr,
+                                         Qerror, current_minor_maps_error);
+       if (!NILP (temp))
+         {
+           cmm_modes[i] = var;
+           cmm_maps [i] = temp;
+           i++;
+         }
       }
 
   if (modeptr) *modeptr = cmm_modes;