changeset 12542:f86a10208f7e

(current_minor_maps): Catch errors in Findirect_function. (current_minor_maps_error): New function.
author Karl Heuer <kwzh@gnu.org>
date Mon, 17 Jul 1995 22:21:54 +0000
parents 33a4586124e9
children 13aa3e939a4d
files src/keymap.c
diffstat 1 files changed, 20 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/keymap.c	Mon Jul 17 22:21:21 1995 +0000
+++ b/src/keymap.c	Mon Jul 17 22:21:54 1995 +0000
@@ -799,6 +799,13 @@
 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 @@
 	&& (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 @@
 	    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;