/* Manipulation of keymaps
- Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995,
- 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+ Copyright (C) 1985-1988, 1993-1995, 1998-2011 Free Software Foundation, Inc.
This file is part of GNU Emacs.
Lisp_Object control_x_map; /* The keymap used for globally bound
C-x-prefixed default commands */
-/* was MinibufLocalMap */
-Lisp_Object Vminibuffer_local_map;
/* The keymap used by the minibuf for local
bindings when spaces are allowed in the
minibuf */
-/* was MinibufLocalNSMap */
-Lisp_Object Vminibuffer_local_ns_map;
/* The keymap used by the minibuf for local
bindings when spaces are not encouraged
in the minibuf */
/* keymap used for minibuffers when doing completion */
-/* was MinibufLocalCompletionMap */
-Lisp_Object Vminibuffer_local_completion_map;
-
-/* keymap used for minibuffers when doing completion in filenames */
-Lisp_Object Vminibuffer_local_filename_completion_map;
-
-/* keymap used for minibuffers when doing completion in filenames
- with require-match*/
-Lisp_Object Vminibuffer_local_filename_must_match_map;
-
/* keymap used for minibuffers when doing completion and require a match */
-/* was MinibufLocalMustMatchMap */
-Lisp_Object Vminibuffer_local_must_match_map;
-
-/* Alist of minor mode variables and keymaps. */
-Lisp_Object Vminor_mode_map_alist;
-
-/* Alist of major-mode-specific overrides for
- minor mode variables and keymaps. */
-Lisp_Object Vminor_mode_overriding_map_alist;
-
-/* List of emulation mode keymap alists. */
-Lisp_Object Vemulation_mode_map_alists;
-
-/* A list of all commands given new bindings since a certain time
- when nil was stored here.
- This is used to speed up recomputation of menu key equivalents
- when Emacs starts up. t means don't record anything here. */
-Lisp_Object Vdefine_key_rebound_commands;
-
Lisp_Object Qkeymapp, Qkeymap, Qnon_ascii, Qmenu_item, Qremap;
Lisp_Object QCadvertised_binding;
/* Pre-allocated 2-element vector for Fcommand_remapping to use. */
static Lisp_Object command_remapping_vector;
-/* A char with the CHAR_META bit set in a vector or the 0200 bit set
- in a string key sequence is equivalent to prefixing with this
- character. */
-extern Lisp_Object meta_prefix_char;
-
-extern Lisp_Object Voverriding_local_map;
-
/* Hash table used to cache a reverse-map to speed up calls to where-is. */
static Lisp_Object where_is_cache;
/* Which keymaps are reverse-stored in the cache. */
Lisp_Object, Lisp_Object, int *,
int, int, int);
static void silly_event_symbol_error (Lisp_Object);
+static Lisp_Object get_keyelt (Lisp_Object, int);
\f
/* Keymap object support - constructors and predicates. */
initial_define_key (control_x_map, Ctl('X'), "exchange-point-and-mark"); */
void
-initial_define_key (Lisp_Object keymap, int key, char *defname)
+initial_define_key (Lisp_Object keymap, int key, const char *defname)
{
store_in_keymap (keymap, make_number (key), intern_c_string (defname));
}
void
-initial_define_lispy_key (Lisp_Object keymap, char *keyname, char *defname)
+initial_define_lispy_key (Lisp_Object keymap, const char *keyname, const char *defname)
{
store_in_keymap (keymap, intern_c_string (keyname), intern_c_string (defname));
}
{
if (!NILP (val))
{
- map_keymap_function_t fun = XSAVE_VALUE (XCAR (args))->pointer;
+ map_keymap_function_t fun =
+ (map_keymap_function_t) XSAVE_VALUE (XCAR (args))->pointer;
args = XCDR (args);
/* If the key is a range, make a copy since map_char_table modifies
it in place. */
else if (CHAR_TABLE_P (binding))
{
map_char_table (map_keymap_char_table_item, Qnil, binding,
- Fcons (make_save_value (fun, 0),
+ Fcons (make_save_value ((void *) fun, 0),
Fcons (make_save_value (data, 0),
args)));
}
This can GC because menu_item_eval_property calls Feval. */
-Lisp_Object
+static Lisp_Object
get_keyelt (Lisp_Object object, int autoload)
{
while (1)
&& (!CONSP (c)
/* If C is a range, it must be a leaf. */
|| (INTEGERP (XCAR (c)) && idx != length)))
- error ("Key sequence contains invalid event");
+ message_with_string ("Key sequence contains invalid event %s", c, 1);
if (idx == length)
RETURN_UNGCPRO (store_in_keymap (keymap, c, def));
/* Allow string since binding for `menu-bar-select-buffer'
includes the buffer name in the key sequence. */
if (!INTEGERP (c) && !SYMBOLP (c) && !CONSP (c) && !STRINGP (c))
- error ("Key sequence contains invalid event");
+ message_with_string ("Key sequence contains invalid event %s", c, 1);
cmd = access_keymap (keymap, c, t_ok, 0, 1);
if (idx == length)
(Lisp_Object character)
{
/* Currently MAX_MULTIBYTE_LENGTH is 4 (< 6). */
- unsigned char str[6];
+ char str[6];
int c;
CHECK_NUMBER (character);
c = XINT (character);
if (!ASCII_CHAR_P (c))
{
- int len = CHAR_STRING (c, str);
+ int len = CHAR_STRING (c, (unsigned char *) str);
return make_multibyte_string (str, 1, len);
}
return data.sequences;
}
-static Lisp_Object Vwhere_is_preferred_modifier;
-
/* This function can GC if Flookup_key autoloads any keymaps. */
DEFUN ("where-is-internal", Fwhere_is_internal, Swhere_is_internal, 1, 5, 0,
register Lisp_Object start1;
struct gcpro gcpro1;
- char *alternate_heading
+ const char *alternate_heading
= "\
Keyboard translations:\n\n\
You type Translation\n\
don't omit it; instead, mention it but say it is shadowed. */
void
-describe_map_tree (startmap, partial, shadow, prefix, title, nomenu, transl,
- always_title, mention_shadow)
- Lisp_Object startmap, shadow, prefix;
- int partial;
- char *title;
- int nomenu;
- int transl;
- int always_title;
- int mention_shadow;
+describe_map_tree (Lisp_Object startmap, int partial, Lisp_Object shadow,
+ Lisp_Object prefix, const char *title, int nomenu, int transl,
+ int always_title, int mention_shadow)
{
Lisp_Object maps, orig_maps, seen, sub_shadows;
struct gcpro gcpro1, gcpro2, gcpro3;
int something = 0;
- char *key_heading
+ const char *key_heading
= "\
key binding\n\
--- -------\n";
PARTIAL, SHADOW, NOMENU are as in `describe_map_tree' above. */
static void
-describe_map (map, prefix, elt_describer, partial, shadow,
- seen, nomenu, mention_shadow)
- register Lisp_Object map;
- Lisp_Object prefix;
- void (*elt_describer) (Lisp_Object, Lisp_Object);
- int partial;
- Lisp_Object shadow;
- Lisp_Object *seen;
- int nomenu;
- int mention_shadow;
+describe_map (Lisp_Object map, Lisp_Object prefix,
+ void (*elt_describer) (Lisp_Object, Lisp_Object),
+ int partial, Lisp_Object shadow,
+ Lisp_Object *seen, int nomenu, int mention_shadow)
{
Lisp_Object tail, definition, event;
Lisp_Object tem;
ARGS is simply passed as the second argument to ELT_DESCRIBER. */
static void
-describe_vector (vector, prefix, args, elt_describer,
- partial, shadow, entire_map,
- indices, char_table_depth, keymap_p,
- mention_shadow)
- register Lisp_Object vector;
- Lisp_Object prefix, args;
- void (*elt_describer) (Lisp_Object, Lisp_Object);
- int partial;
- Lisp_Object shadow;
- Lisp_Object entire_map;
- int *indices;
- int char_table_depth;
- int keymap_p;
- int mention_shadow;
+describe_vector (Lisp_Object vector, Lisp_Object prefix, Lisp_Object args,
+ void (*elt_describer) (Lisp_Object, Lisp_Object),
+ int partial, Lisp_Object shadow, Lisp_Object entire_map,
+ int *indices, int char_table_depth, int keymap_p,
+ int mention_shadow)
{
Lisp_Object definition;
Lisp_Object tem2;
Qnil)))));
staticpro (&exclude_keys);
- DEFVAR_LISP ("define-key-rebound-commands", &Vdefine_key_rebound_commands,
+ DEFVAR_LISP ("define-key-rebound-commands", Vdefine_key_rebound_commands,
doc: /* List of commands given new key bindings recently.
This is used for internal purposes during Emacs startup;
don't alter it yourself. */);
Vdefine_key_rebound_commands = Qt;
- DEFVAR_LISP ("minibuffer-local-map", &Vminibuffer_local_map,
+ DEFVAR_LISP ("minibuffer-local-map", Vminibuffer_local_map,
doc: /* Default keymap to use when reading from the minibuffer. */);
Vminibuffer_local_map = Fmake_sparse_keymap (Qnil);
- DEFVAR_LISP ("minibuffer-local-ns-map", &Vminibuffer_local_ns_map,
+ DEFVAR_LISP ("minibuffer-local-ns-map", Vminibuffer_local_ns_map,
doc: /* Local keymap for the minibuffer when spaces are not allowed. */);
Vminibuffer_local_ns_map = Fmake_sparse_keymap (Qnil);
Fset_keymap_parent (Vminibuffer_local_ns_map, Vminibuffer_local_map);
- DEFVAR_LISP ("minibuffer-local-completion-map", &Vminibuffer_local_completion_map,
+ DEFVAR_LISP ("minibuffer-local-completion-map", Vminibuffer_local_completion_map,
doc: /* Local keymap for minibuffer input with completion. */);
Vminibuffer_local_completion_map = Fmake_sparse_keymap (Qnil);
Fset_keymap_parent (Vminibuffer_local_completion_map, Vminibuffer_local_map);
DEFVAR_LISP ("minibuffer-local-filename-completion-map",
- &Vminibuffer_local_filename_completion_map,
+ Vminibuffer_local_filename_completion_map,
doc: /* Local keymap for minibuffer input with completion for filenames. */);
Vminibuffer_local_filename_completion_map = Fmake_sparse_keymap (Qnil);
Fset_keymap_parent (Vminibuffer_local_filename_completion_map,
Vminibuffer_local_completion_map);
- DEFVAR_LISP ("minibuffer-local-must-match-map", &Vminibuffer_local_must_match_map,
+ DEFVAR_LISP ("minibuffer-local-must-match-map", Vminibuffer_local_must_match_map,
doc: /* Local keymap for minibuffer input with completion, for exact match. */);
Vminibuffer_local_must_match_map = Fmake_sparse_keymap (Qnil);
Fset_keymap_parent (Vminibuffer_local_must_match_map,
Vminibuffer_local_completion_map);
DEFVAR_LISP ("minibuffer-local-filename-must-match-map",
- &Vminibuffer_local_filename_must_match_map,
+ Vminibuffer_local_filename_must_match_map,
doc: /* Local keymap for minibuffer input with completion for filenames with exact match. */);
Vminibuffer_local_filename_must_match_map = Fmake_sparse_keymap (Qnil);
Fset_keymap_parent (Vminibuffer_local_filename_must_match_map,
Vminibuffer_local_must_match_map);
- DEFVAR_LISP ("minor-mode-map-alist", &Vminor_mode_map_alist,
+ DEFVAR_LISP ("minor-mode-map-alist", Vminor_mode_map_alist,
doc: /* Alist of keymaps to use for minor modes.
Each element looks like (VARIABLE . KEYMAP); KEYMAP is used to read
key sequences and look up bindings if VARIABLE's value is non-nil.
in the list takes precedence. */);
Vminor_mode_map_alist = Qnil;
- DEFVAR_LISP ("minor-mode-overriding-map-alist", &Vminor_mode_overriding_map_alist,
+ DEFVAR_LISP ("minor-mode-overriding-map-alist", Vminor_mode_overriding_map_alist,
doc: /* Alist of keymaps to use for minor modes, in current major mode.
This variable is an alist just like `minor-mode-map-alist', and it is
used the same way (and before `minor-mode-map-alist'); however,
it is provided for major modes to bind locally. */);
Vminor_mode_overriding_map_alist = Qnil;
- DEFVAR_LISP ("emulation-mode-map-alists", &Vemulation_mode_map_alists,
+ DEFVAR_LISP ("emulation-mode-map-alists", Vemulation_mode_map_alists,
doc: /* List of keymap alists to use for emulations modes.
It is intended for modes or packages using multiple minor-mode keymaps.
Each element is a keymap alist just like `minor-mode-map-alist', or a
`minor-mode-map-alist' and `minor-mode-overriding-map-alist'. */);
Vemulation_mode_map_alists = Qnil;
- DEFVAR_LISP ("where-is-preferred-modifier", &Vwhere_is_preferred_modifier,
+ DEFVAR_LISP ("where-is-preferred-modifier", Vwhere_is_preferred_modifier,
doc: /* Preferred modifier to use for `where-is'.
When a single binding is requested, `where-is' will return one that
uses this modifier if possible. If nil, or if no such binding exists,
initial_define_key (global_map, 033, "ESC-prefix");
initial_define_key (global_map, Ctl ('X'), "Control-X-prefix");
}
-
-/* arch-tag: 6dd15c26-7cf1-41c4-b904-f42f7ddda463
- (do not change this comment) */