changeset 362:d1e5cf833d37

*** empty log message ***
author Jim Blandy <jimb@redhat.com>
date Sun, 28 Jul 1991 14:50:08 +0000
parents 313b0555ba8f
children f4f9b557d934
files src/keymap.c src/window.c
diffstat 2 files changed, 25 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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 */
 }