Combine prefix with KEYS to make up the full key sequence to describe.
Correlate meta_prefix_char and following (simple) key to describe
as meta modifier. All callers changed.
(describe_map): Rename arg `keys' to `prefix'. Remove local
`elt_prefix' var. Use Fkey_description with prefix instead of
elt_prefix combined with Fsingle_key_description.
(describe_vector): Declare static. Replace arg `elt_prefix' with
`prefix'. Add KEYMAP_P arg. Add local var `elt_prefix'; use it
if !KEYMAP_P. Use Fkey_description with prefix instead of
Fsingle_key_description.
(Fdescribe_buffer_bindings): Use SYMBOL_NAME and XSTRING instead
of XSYMBOL and name field.
(describe_command, describe_translation): Use SYMBOL_NAME and
assignment instead of XSYMBOL and name field and XSETSTRING.
(Fkeymap_parent, keymap_memberp, fix_submap_inheritance): Use it.
(Fset_keymap_parent): Gcpro a bit more.
(access_keymap): Gcpro around meta_map call and around the main loop.
(get_keyelt): Gcpro when following indirect references.
(copy_keymap_item): New fun, extracted from Fcopy_keymap.
(copy_keymap_1, Fcopy_keymap): Use it. Don't copy the parent map.
(Fdefine_key, Flookup_key): Gcpro before calling get_keymap.
Remove useless ad-hoc remap code.
only update cmm_size if realloc actually succeeds.
Testing with initial size of 2 elements revealed that using
realloc on GNU/Linux would cause a random trap in xmalloc
later on, so I rewrote the code to use malloc/bcopy/free instead
of realloc.
(syms_of_keymap): DEFVAR_LISP it.
(current_minor_maps): Process keymap alists in that list before
minor-mode-overriding-map-alist and minor-mode-map-alist.
The validation of the event type was too strict as it didn't
allow string events; buffer names are used in bindings for
menu-bar-select-buffer (see `menu-bar-update-buffers').
added command remapping by entering the commands directly into
the keymaps. Now, command remapping uses an explicit `remap'
prefix in the keymaps, i.e. [remap COMMAND].
(Qremap, remap_command_vector): New variables.
(is_command_symbol): Removed function.
(Fdefine_key): No longer accept a symbol for KEY. Added
validation of [remap COMMAND] argument for KEY. The DEF is no
longer required to be a symbol when remapping a command.
(Fremap_command): New function to remap command through keymaps.
(Flookup_key): Perform command remapping initiated by
Fremap_command directly for speed.
(Fkey_binding): Use Fremap_command for command remapping.
(where_is_internal): Handle new command remapping representation.
(syms_of_keymap): Intern Qremap, initialize remap_command_vector,
staticpro them. Defsubr Fremap_command.
defining command remapping. Doc updated.
(Flookup_key): Remap command through keymap if KEY is a symbol.
(is_command_symbol): New function.
(Fkey_binding): Use it. New optional argument NO-REMAP. Doc
updated. Callers changed. Perform command remapping via
recursive call unless that arg is non-nil.
(where_is_internal): New argument no_remap. Callers changed.
Call recursively to find original key bindings for a remapped
comand unless that arg is non-nil.
(Fwhere_is_internal): New optional argument NO-REMAP. Doc
updated. Callers changed. Pass arg to where_is_internal.