DEFUN ("keymapp", Fkeymapp, Skeymapp, 1, 1, 0,
"Return t if ARG is a keymap.\n\
-A keymap is list (keymap . ALIST), where alist elements look like
-(CHAR . DEFN) or (SYMBOL . DEFN), or a list (keymap VECTOR . ALIST)
-where VECTOR is a 128-element vector of bindings for ASCII characters,
-and ALIST is as above.")
+\n\
+A keymap is list (keymap . ALIST), a list (keymap VECTOR . ALIST),\n\
+or a symbol whose function definition is a keymap is itself a keymap.\n\
+ALIST elements look like (CHAR . DEFN) or (SYMBOL . DEFN);\n\
+VECTOR is a 128-element vector of bindings for ASCII characters.")
(object)
Lisp_Object object;
{
"Return a copy of the keymap KEYMAP.\n\
The copy starts out with the same definitions of KEYMAP,\n\
but changing either the copy or KEYMAP does not affect the other.\n\
-Any key definitions that are subkeymaps are recursively copied.")
+Any key definitions that are subkeymaps are recursively copied.\n\
+However, a key definition which is a symbol whose definition is a keymap\n\
+is not copied.")
(keymap)
Lisp_Object keymap;
{
table = Fcopy_sequence (table);
for (i = 0; i < DENSE_TABLE_SIZE; i++)
- if (! NULL (Fkeymapp (XVECTOR (table)->contents[i])))
- XVECTOR (table)->contents[i]
- = Fcopy_keymap (XVECTOR (table)->contents[i]);
+ if (XTYPE (XVECTOR (copy)->contents[i]) != Lisp_Symbol)
+ if (! NULL (Fkeymapp (XVECTOR (table)->contents[i])))
+ XVECTOR (table)->contents[i]
+ = Fcopy_keymap (XVECTOR (table)->contents[i]);
XCONS (tail)->car = table;
tail = XCONS (tail)->cdr;
register Lisp_Object elt;
elt = XCONS (tail)->car;
- if (CONSP (elt) && ! NULL (Fkeymapp (XCONS (elt)->cdr)))
+ if (CONSP (elt)
+ && XTYPE (XCONS (elt)->cdr) != Lisp_Symbol
+ && ! NULL (Fkeymapp (XCONS (elt)->cdr)))
XCONS (elt)->cdr = Fcopy_keymap (XCONS (elt)->cdr);
tail = XCONS (tail)->cdr;
DEFUN ("define-prefix-command", Fdefine_prefix_command, Sdefine_prefix_command, 1, 2, 0,
"Define COMMAND as a prefix command.\n\
A new sparse keymap is stored as COMMAND's function definition and its value.\n\
-If a second optional argument MAPVAR is given, the map is stored as its\n\
-value instead of as COMMAND's value; but COMMAND is still defined as a function.")
+If a second optional argument MAPVAR is given, the map is stored as\n\
+its value instead of as COMMAND's value; but COMMAND is still defined\n\
+as a function.")
(name, mapvar)
Lisp_Object name, mapvar;
{
return Fsymbol_name (key);
case Lisp_Cons: /* Mouse event */
- key = XCONS (key)->cdr;
+ key = XCONS (key)->car;
if (XTYPE (key) == Lisp_Symbol)
return Fsymbol_name (key);
/* Mouse events should have an identifying symbol as their car;
}
}
\f
-static int window_select_count;
+int window_select_count;
DEFUN ("set-window-buffer", Fset_window_buffer, Sset_window_buffer, 2, 2, 0,
"Make WINDOW display BUFFER as its contents.\n\
Fset_window_buffer (minibuf_window, get_minibuffer (0));
selected_window = root_window;
+ /* Make sure this window seems more recently used than
+ a newly-created, never-selected window. Increment
+ window_select_count so the first selection ever will get
+ something newer than this. */
+ XFASTINT (XWINDOW (selected_window)->use_time) = ++window_select_count;
#endif /* not MULTI_SCREEN */
}