From: Richard M. Stallman Date: Wed, 2 Jan 2002 21:54:11 +0000 (+0000) Subject: (read_key_sequence): Handle the keymap property before minor mode maps. X-Git-Tag: ttn-vms-21-2-B4~17354 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=4cbedc160b34e1a83b63b99b1b1a64b3c6736493;p=emacs.git (read_key_sequence): Handle the keymap property before minor mode maps. --- diff --git a/src/keyboard.c b/src/keyboard.c index 96f8ec96830..2c083217d6a 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -8093,45 +8093,50 @@ read_key_sequence (keybuf, bufsize, prompt, dont_downcase_last, keybuf with its symbol, or if the sequence starts with a mouse click and we need to switch buffers, we jump back here to rebuild the initial keymaps from the current buffer. */ - { - Lisp_Object *maps; + nmaps = 0; - if (!NILP (current_kboard->Voverriding_terminal_local_map) - || !NILP (Voverriding_local_map)) - { - if (3 > nmaps_allocated) - { - submaps = (Lisp_Object *) alloca (3 * sizeof (submaps[0])); - defs = (Lisp_Object *) alloca (3 * sizeof (defs[0])); - nmaps_allocated = 3; - } - nmaps = 0; - if (!NILP (current_kboard->Voverriding_terminal_local_map)) - submaps[nmaps++] = current_kboard->Voverriding_terminal_local_map; - if (!NILP (Voverriding_local_map)) - submaps[nmaps++] = Voverriding_local_map; - } - else - { - int extra_maps = 2; - nmaps = current_minor_maps (0, &maps); - if (!NILP (orig_keymap)) - extra_maps = 3; - if (nmaps + extra_maps > nmaps_allocated) - { - submaps = (Lisp_Object *) alloca ((nmaps+extra_maps) - * sizeof (submaps[0])); - defs = (Lisp_Object *) alloca ((nmaps+extra_maps) - * sizeof (defs[0])); - nmaps_allocated = nmaps + extra_maps; - } - bcopy (maps, (void *) submaps, nmaps * sizeof (submaps[0])); - if (!NILP (orig_keymap)) - submaps[nmaps++] = orig_keymap; - submaps[nmaps++] = orig_local_map; - } - submaps[nmaps++] = current_global_map; - } + if (!NILP (current_kboard->Voverriding_terminal_local_map) + || !NILP (Voverriding_local_map)) + { + if (3 > nmaps_allocated) + { + submaps = (Lisp_Object *) alloca (3 * sizeof (submaps[0])); + defs = (Lisp_Object *) alloca (3 * sizeof (defs[0])); + nmaps_allocated = 3; + } + if (!NILP (current_kboard->Voverriding_terminal_local_map)) + submaps[nmaps++] = current_kboard->Voverriding_terminal_local_map; + if (!NILP (Voverriding_local_map)) + submaps[nmaps++] = Voverriding_local_map; + } + else + { + int extra_maps = 2; + int nminor; + int total; + Lisp_Object *maps; + + nminor = current_minor_maps (0, &maps); + total = nminor + (!NILP (orig_keymap) ? 3 : 2); + + if (total > nmaps_allocated) + { + submaps = (Lisp_Object *) alloca (total * sizeof (submaps[0])); + defs = (Lisp_Object *) alloca (total * sizeof (defs[0])); + nmaps_allocated = total; + } + + if (!NILP (orig_keymap)) + submaps[nmaps++] = orig_keymap; + + bcopy (maps, (void *) submaps + nmaps, + nminor * sizeof (submaps[0])); + + nmaps += nminor; + + submaps[nmaps++] = orig_local_map; + } + submaps[nmaps++] = current_global_map; /* Find an accurate initial value for first_binding. */ for (first_binding = 0; first_binding < nmaps; first_binding++)