diff options
author | Richard M. Stallman <[email protected]> | 2002-01-02 21:54:11 +0000 |
---|---|---|
committer | Richard M. Stallman <[email protected]> | 2002-01-02 21:54:11 +0000 |
commit | 4cbedc160b34e1a83b63b99b1b1a64b3c6736493 (patch) | |
tree | cddf61e99dd3346a208ea4f3287481047584868b /src/keyboard.c | |
parent | 308dd672ad0a61b871368d01b2d14f7d7f03b4c6 (diff) |
(read_key_sequence): Handle the keymap property before minor mode maps.
Diffstat (limited to 'src/keyboard.c')
-rw-r--r-- | src/keyboard.c | 81 |
1 files changed, 43 insertions, 38 deletions
diff --git a/src/keyboard.c b/src/keyboard.c index 96f8ec9683..2c083217d6 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++) |