/************************************************************************/
static Lisp_Object
-mark_keymap (Lisp_Object obj, void (*markobj) (Lisp_Object))
+mark_keymap (Lisp_Object obj)
{
Lisp_Keymap *keymap = XKEYMAP (obj);
- markobj (keymap->parents);
- markobj (keymap->prompt);
- markobj (keymap->inverse_table);
- markobj (keymap->sub_maps_cache);
- markobj (keymap->default_binding);
- markobj (keymap->name);
+ mark_object (keymap->parents);
+ mark_object (keymap->prompt);
+ mark_object (keymap->inverse_table);
+ mark_object (keymap->sub_maps_cache);
+ mark_object (keymap->default_binding);
+ mark_object (keymap->name);
return keymap->table;
}
print_internal (keymap->name, printcharfun, 1);
/* #### Yuck! This is no way to form plural! --hniksic */
sprintf (buf, "%s%d entr%s 0x%x>",
- ((NILP (keymap->name)) ? "" : " "),
+ (NILP (keymap->name) ? "" : " "),
size,
((size == 1) ? "y" : "ies"),
keymap->header.uid);
write_c_string (buf, printcharfun);
}
+static const struct lrecord_description keymap_description[] = {
+ { XD_LISP_OBJECT, offsetof(Lisp_Keymap, parents), 6 },
+ { XD_LISP_OBJECT, offsetof(Lisp_Keymap, name), 1 },
+ { XD_END }
+};
+
/* No need for keymap_equal #### Why not? */
DEFINE_LRECORD_IMPLEMENTATION ("keymap", keymap,
mark_keymap, print_keymap, 0, 0, 0,
+ keymap_description,
Lisp_Keymap);
\f
/************************************************************************/
make_keymap (size_t size)
{
Lisp_Object result;
- Lisp_Keymap *keymap = alloc_lcrecord_type (Lisp_Keymap, lrecord_keymap);
+ Lisp_Keymap *keymap = alloc_lcrecord_type (Lisp_Keymap, &lrecord_keymap);
XSETKEYMAP (result, keymap);
new_keymap->sub_maps_cache = Qnil; /* No submaps */
new_keymap->table = Fcopy_hash_table (keymap->table);
new_keymap->inverse_table = Fcopy_hash_table (keymap->inverse_table);
+ new_keymap->default_binding = keymap->default_binding;
/* After copying the inverse map, we need to copy the conses which
are its values, lest they be shared by the copy, and mangled.
*/
*keysym = QKescape;
else if (EQ (*keysym, QDEL))
*keysym = QKdelete;
+ else if (EQ (*keysym, QSPC))
+ *keysym = QKspace;
else if (EQ (*keysym, QBS))
*keysym = QKbackspace;
/* Emacs compatibility */
if (nkeys == 0)
return Qnil;
- if (nkeys < (countof (kkk)))
+ if (nkeys < countof (kkk))
raw_keys = kkk;
else
raw_keys = alloca_array (struct key_data, nkeys);
nkeys = event_chain_count (event_head);
- if (nkeys < (countof (kkk)))
+ if (nkeys < countof (kkk))
raw_keys = kkk;
else
raw_keys = alloca_array (struct key_data, nkeys);
get_relevant_extent_keymaps
(Fevent_modeline_position (terminal),
XBUFFER (buffer)->generated_modeline_string,
- /* #### third arg should maybe be a glyph. */
- Qnil, &closure);
+ Fevent_glyph_extent (terminal), &closure);
if (!UNBOUNDP (map) && !NILP (map))
relevant_map_push (get_keymap (map, 1, 1), &closure);
for (i = 0; i < size; i++)
{
Lisp_Object s2 = Fsingle_key_description
- (((STRINGP (keys))
- ? make_char (string_char (XSTRING (keys), i))
- : XVECTOR_DATA (keys)[i]));
+ (STRINGP (keys)
+ ? make_char (string_char (XSTRING (keys), i))
+ : XVECTOR_DATA (keys)[i]);
if (i == 0)
string = s2;
for (;;) /* loop over all keys that match */
{
- Lisp_Object k = ((CONSP (keys)) ? XCAR (keys) : keys);
+ Lisp_Object k = CONSP (keys) ? XCAR (keys) : keys;
int i;
so_far [keys_count].keysym = k;
defsymbol (&QRET, "RET");
defsymbol (&QESC, "ESC");
defsymbol (&QDEL, "DEL");
+ defsymbol (&QSPC, "SPC");
defsymbol (&QBS, "BS");
}
staticpro (&Vcurrent_global_map);
- Vsingle_space_string = make_pure_string ((CONST Bufbyte *) " ", 1, Qnil, 1);
+ Vsingle_space_string = make_string ((CONST Bufbyte *) " ", 1);
staticpro (&Vsingle_space_string);
}