# HG changeset patch # User Jim Blandy # Date 680712608 0 # Node ID d1e5cf833d3798f8a1a471ef7eaa57fe87854c00 # Parent 313b0555ba8f68ee1f8e622a3c9b2192cdb9a7e2 *** empty log message *** diff -r 313b0555ba8f -r d1e5cf833d37 src/keymap.c --- a/src/keymap.c Sun Jul 28 14:31:16 1991 +0000 +++ b/src/keymap.c Sun Jul 28 14:50:08 1991 +0000 @@ -142,10 +142,11 @@ 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; { @@ -335,7 +336,9 @@ "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; { @@ -357,9 +360,10 @@ 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; @@ -372,7 +376,9 @@ 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; @@ -667,8 +673,9 @@ 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; { @@ -959,7 +966,7 @@ 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; diff -r 313b0555ba8f -r d1e5cf833d37 src/window.c --- a/src/window.c Sun Jul 28 14:31:16 1991 +0000 +++ b/src/window.c Sun Jul 28 14:50:08 1991 +0000 @@ -1321,7 +1321,7 @@ } } -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\ @@ -2575,6 +2575,11 @@ 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 */ }