changeset 41593:bc65be224d92

(access_keymap): Handle t bindings like nil bindings. Make nil bindings in char-tables transparent. (store_in_keymap): Turn a nil binding into a t binding for char-tables.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 26 Nov 2001 22:30:21 +0000
parents b89d0c514129
children 452efff38a6e
files src/keymap.c
diffstat 1 files changed, 20 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/keymap.c	Mon Nov 26 21:15:29 2001 +0000
+++ b/src/keymap.c	Mon Nov 26 22:30:21 2001 +0000
@@ -589,14 +589,25 @@
 	    /* Character codes with modifiers
 	       are not included in a char-table.
 	       All character codes without modifiers are included.  */
-	    if (NATNUMP (idx)
-		&& (XFASTINT (idx) & CHAR_MODIFIER_MASK) == 0)
-	      val = Faref (binding, idx);
+	    if (NATNUMP (idx) && (XFASTINT (idx) & CHAR_MODIFIER_MASK) == 0)
+	      {
+		val = Faref (binding, idx);
+		/* `nil' has a special meaning for char-tables, so
+		   we use something else to record an explicitly
+		   unbound entry.  */
+		if (NILP (val))
+		  val = Qunbound;
+	      }
 	  }
 
 	/* If we found a binding, clean it up and return it.  */
 	if (!EQ (val, Qunbound))
 	  {
+	    if (EQ (val, Qt))
+	      /* A Qt binding is just like an explicit nil binding
+		 (i.e. it shadows any parent binding but not bindings in
+		 keymaps of lower precedence).  */
+	      val = Qnil;
 	    val = get_keyelt (val, autoload);
 	    if (KEYMAPP (val))
 	      fix_submap_inheritance (map, idx, val);
@@ -765,12 +776,13 @@
 	    /* Character codes with modifiers
 	       are not included in a char-table.
 	       All character codes without modifiers are included.  */
-	    if (NATNUMP (idx)
-		&& ! (XFASTINT (idx)
-		      & (CHAR_ALT | CHAR_SUPER | CHAR_HYPER
-			 | CHAR_SHIFT | CHAR_CTL | CHAR_META)))
+	    if (NATNUMP (idx) && !(XFASTINT (idx) & CHAR_MODIFIER_MASK))
 	      {
-		Faset (elt, idx, def);
+		Faset (elt, idx,
+		       /* `nil' has a special meaning for char-tables, so
+			  we use something else to record an explicitly
+			  unbound entry.  */
+		       NILP (def) ? Qt : def);
 		return def;
 	      }
 	    insertion_point = tail;