From fbb908296b75005a5d8ca2fc64049ed86e023e8e Mon Sep 17 00:00:00 2001 From: Karl Heuer Date: Mon, 17 Jul 1995 22:21:54 +0000 Subject: [PATCH] (current_minor_maps): Catch errors in Findirect_function. (current_minor_maps_error): New function. --- src/keymap.c | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/keymap.c b/src/keymap.c index 114282b8f83..034b5d64260 100644 --- a/src/keymap.c +++ b/src/keymap.c @@ -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; -- 2.39.2