comparison src/keymap.c @ 5125:b5df3737028a ben-lisp-object

merge
author Ben Wing <ben@xemacs.org>
date Wed, 24 Feb 2010 01:58:04 -0600
parents 623d57b7fbe8 ae48681c47fa
children 2a462149bd6a
comparison
equal deleted inserted replaced
5124:623d57b7fbe8 5125:b5df3737028a
1 /* Manipulation of keymaps 1 /* Manipulation of keymaps
2 Copyright (C) 1985, 1991-1995 Free Software Foundation, Inc. 2 Copyright (C) 1985, 1991-1995 Free Software Foundation, Inc.
3 Copyright (C) 1995 Board of Trustees, University of Illinois. 3 Copyright (C) 1995 Board of Trustees, University of Illinois.
4 Copyright (C) 1995 Sun Microsystems, Inc. 4 Copyright (C) 1995 Sun Microsystems, Inc.
5 Copyright (C) 2001, 2002 Ben Wing. 5 Copyright (C) 2001, 2002, 2010 Ben Wing.
6 Totally redesigned by jwz in 1991. 6 Totally redesigned by jwz in 1991.
7 7
8 This file is part of XEmacs. 8 This file is part of XEmacs.
9 9
10 XEmacs is free software; you can redistribute it and/or modify it 10 XEmacs is free software; you can redistribute it and/or modify it
147 */ 147 */
148 148
149 struct Lisp_Keymap 149 struct Lisp_Keymap
150 { 150 {
151 LISP_OBJECT_HEADER header; 151 LISP_OBJECT_HEADER header;
152 Lisp_Object parents; /* Keymaps to be searched after this one. 152 #define MARKED_SLOT(x) Lisp_Object x;
153 An ordered list */ 153 #include "keymap-slots.h"
154 Lisp_Object prompt; /* Qnil or a string to print in the minibuffer
155 when reading from this keymap */
156 Lisp_Object table; /* The contents of this keymap */
157 Lisp_Object inverse_table; /* The inverse mapping of the above */
158 Lisp_Object default_binding; /* Use this if no other binding is found
159 (this overrides parent maps and the
160 normal global-map lookup). */
161 Lisp_Object sub_maps_cache; /* Cache of directly inferior keymaps;
162 This holds an alist, of the key and the
163 maps, or the modifier bit and the map.
164 If this is the symbol t, then the cache
165 needs to be recomputed. */
166 Lisp_Object name; /* Just for debugging convenience */
167 }; 154 };
168 155
169 #define MAKE_MODIFIER_HASH_KEY(modifier) make_int (modifier) 156 #define MAKE_MODIFIER_HASH_KEY(modifier) make_int (modifier)
170 #define MODIFIER_HASH_KEY_BITS(x) (INTP (x) ? XINT (x) : 0) 157 #define MODIFIER_HASH_KEY_BITS(x) (INTP (x) ? XINT (x) : 0)
171 158
215 int mice_only_p, 202 int mice_only_p,
216 Lisp_Object buffer); 203 Lisp_Object buffer);
217 static Lisp_Object keymap_submaps (Lisp_Object keymap); 204 static Lisp_Object keymap_submaps (Lisp_Object keymap);
218 205
219 Lisp_Object Qcontrol, Qctrl, Qmeta, Qsuper, Qhyper, Qalt, Qshift; 206 Lisp_Object Qcontrol, Qctrl, Qmeta, Qsuper, Qhyper, Qalt, Qshift;
220 Lisp_Object Qbutton0; 207
221 Lisp_Object Qbutton1, Qbutton2, Qbutton3, Qbutton4, Qbutton5; 208 #define INCLUDE_BUTTON_ZERO
222 Lisp_Object Qbutton6, Qbutton7, Qbutton8, Qbutton9, Qbutton10; 209 #define FROB(num) \
223 Lisp_Object Qbutton11, Qbutton12, Qbutton13, Qbutton14, Qbutton15; 210 Lisp_Object Qbutton##num; \
224 Lisp_Object Qbutton16, Qbutton17, Qbutton18, Qbutton19, Qbutton20; 211 Lisp_Object Qbutton##num##up;
225 Lisp_Object Qbutton21, Qbutton22, Qbutton23, Qbutton24, Qbutton25; 212 #include "keymap-buttons.h"
226 Lisp_Object Qbutton26;
227 Lisp_Object Qbutton0up;
228 Lisp_Object Qbutton1up, Qbutton2up, Qbutton3up, Qbutton4up, Qbutton5up;
229 Lisp_Object Qbutton6up, Qbutton7up, Qbutton8up, Qbutton9up, Qbutton10up;
230 Lisp_Object Qbutton11up, Qbutton12up, Qbutton13up, Qbutton14up, Qbutton15up;
231 Lisp_Object Qbutton16up, Qbutton17up, Qbutton18up, Qbutton19up, Qbutton20up;
232 Lisp_Object Qbutton21up, Qbutton22up, Qbutton23up, Qbutton24up, Qbutton25up;
233 Lisp_Object Qbutton26up;
234 213
235 Lisp_Object Qmenu_selection; 214 Lisp_Object Qmenu_selection;
215
236 /* Emacs compatibility */ 216 /* Emacs compatibility */
237 Lisp_Object Qdown_mouse_1, Qmouse_1; 217 #define FROB(num) \
238 Lisp_Object Qdown_mouse_2, Qmouse_2; 218 Lisp_Object Qmouse_##num; \
239 Lisp_Object Qdown_mouse_3, Qmouse_3; 219 Lisp_Object Qdown_mouse_##num;
240 Lisp_Object Qdown_mouse_4, Qmouse_4; 220 #include "keymap-buttons.h"
241 Lisp_Object Qdown_mouse_5, Qmouse_5;
242 Lisp_Object Qdown_mouse_6, Qmouse_6;
243 Lisp_Object Qdown_mouse_7, Qmouse_7;
244 Lisp_Object Qdown_mouse_8, Qmouse_8;
245 Lisp_Object Qdown_mouse_9, Qmouse_9;
246 Lisp_Object Qdown_mouse_10, Qmouse_10;
247 Lisp_Object Qdown_mouse_11, Qmouse_11;
248 Lisp_Object Qdown_mouse_12, Qmouse_12;
249 Lisp_Object Qdown_mouse_13, Qmouse_13;
250 Lisp_Object Qdown_mouse_14, Qmouse_14;
251 Lisp_Object Qdown_mouse_15, Qmouse_15;
252 Lisp_Object Qdown_mouse_16, Qmouse_16;
253 Lisp_Object Qdown_mouse_17, Qmouse_17;
254 Lisp_Object Qdown_mouse_18, Qmouse_18;
255 Lisp_Object Qdown_mouse_19, Qmouse_19;
256 Lisp_Object Qdown_mouse_20, Qmouse_20;
257 Lisp_Object Qdown_mouse_21, Qmouse_21;
258 Lisp_Object Qdown_mouse_22, Qmouse_22;
259 Lisp_Object Qdown_mouse_23, Qmouse_23;
260 Lisp_Object Qdown_mouse_24, Qmouse_24;
261 Lisp_Object Qdown_mouse_25, Qmouse_25;
262 Lisp_Object Qdown_mouse_26, Qmouse_26;
263 221
264 /* Kludge kludge kludge */ 222 /* Kludge kludge kludge */
265 Lisp_Object QLFD, QTAB, QRET, QESC, QDEL, QSPC, QBS; 223 Lisp_Object QLFD, QTAB, QRET, QESC, QDEL, QSPC, QBS;
266 224
267 225
268 /************************************************************************/ 226 /************************************************************************/
269 /* The keymap Lisp object */ 227 /* The keymap Lisp object */
270 /************************************************************************/ 228 /************************************************************************/
271 229
230 /* Keymaps are equal if Faces are equal if all of their display attributes are equal. We
231 don't compare names or doc-strings, because that would make equal
232 be eq.
233
234 This isn't concerned with "unspecified" attributes, that's what
235 #'face-differs-from-default-p is for. */
236 static int
237 keymap_equal (Lisp_Object obj1, Lisp_Object obj2, int depth,
238 int UNUSED (foldcase))
239 {
240 Lisp_Keymap *k1 = XKEYMAP (obj1);
241 Lisp_Keymap *k2 = XKEYMAP (obj2);
242
243 depth++;
244
245 return
246 (
247 #define MARKED_SLOT(x) \
248 internal_equal (k1->x, k2->x, depth) &&
249 #define MARKED_SLOT_NOCOMPARE(x)
250 #include "keymap-slots.h"
251 1
252 );
253 }
254
255 static Hashcode
256 keymap_hash (Lisp_Object obj, int depth)
257 {
258 Lisp_Keymap *k = XKEYMAP (obj);
259 Hashcode hash = 0xCAFEBABE; /* why not? */
260
261 depth++;
262
263 #define MARKED_SLOT(x) \
264 hash = HASH2 (hash, internal_hash (k->x, depth));
265 #define MARKED_SLOT_NOCOMPARE(x)
266 #include "keymap-slots.h"
267
268 return hash;
269 }
270
272 static Lisp_Object 271 static Lisp_Object
273 mark_keymap (Lisp_Object obj) 272 mark_keymap (Lisp_Object obj)
274 { 273 {
275 Lisp_Keymap *keymap = XKEYMAP (obj); 274 Lisp_Keymap *keymap = XKEYMAP (obj);
276 mark_object (keymap->parents); 275 #define MARKED_SLOT(x) mark_object (keymap->x);
277 mark_object (keymap->prompt); 276 #include "keymap-slots.h"
278 mark_object (keymap->inverse_table); 277 return Qnil;
279 mark_object (keymap->sub_maps_cache);
280 mark_object (keymap->default_binding);
281 mark_object (keymap->name);
282 return keymap->table;
283 } 278 }
284 279
285 static void 280 static void
286 print_keymap (Lisp_Object obj, Lisp_Object printcharfun, 281 print_keymap (Lisp_Object obj, Lisp_Object printcharfun,
287 int UNUSED (escapeflag)) 282 int UNUSED (escapeflag))
288 { 283 {
289 /* This function can GC */ 284 /* This function can GC */
290 Lisp_Keymap *keymap = XKEYMAP (obj); 285 Lisp_Keymap *keymap = XKEYMAP (obj);
291 if (print_readably) 286 if (print_readably)
292 printing_unreadable_object ("#<keymap 0x%x>", keymap->header.uid); 287 printing_unreadable_lcrecord (obj, 0);
293 write_c_string (printcharfun, "#<keymap "); 288 write_ascstring (printcharfun, "#<keymap ");
294 if (!NILP (keymap->name)) 289 if (!NILP (keymap->name))
295 { 290 {
296 write_fmt_string_lisp (printcharfun, "%S ", 1, keymap->name); 291 write_fmt_string_lisp (printcharfun, "%S ", 1, keymap->name);
297 } 292 }
298 write_fmt_string (printcharfun, "size %ld 0x%x>", 293 write_fmt_string (printcharfun, "size %ld 0x%x>",
299 (long) XINT (Fkeymap_fullness (obj)), keymap->header.uid); 294 (long) XINT (Fkeymap_fullness (obj)), keymap->header.uid);
300 } 295 }
301 296
302 static const struct memory_description keymap_description[] = { 297 static const struct memory_description keymap_description[] = {
303 { XD_LISP_OBJECT, offsetof (Lisp_Keymap, parents) }, 298 #define MARKED_SLOT(x) { XD_LISP_OBJECT, offsetof (Lisp_Keymap, x) },
304 { XD_LISP_OBJECT, offsetof (Lisp_Keymap, prompt) }, 299 #include "keymap-slots.h"
305 { XD_LISP_OBJECT, offsetof (Lisp_Keymap, table) },
306 { XD_LISP_OBJECT, offsetof (Lisp_Keymap, inverse_table) },
307 { XD_LISP_OBJECT, offsetof (Lisp_Keymap, default_binding) },
308 { XD_LISP_OBJECT, offsetof (Lisp_Keymap, sub_maps_cache) },
309 { XD_LISP_OBJECT, offsetof (Lisp_Keymap, name) },
310 { XD_END } 300 { XD_END }
311 }; 301 };
312 302
313 /* No need for keymap_equal #### Why not? */
314 DEFINE_DUMPABLE_LISP_OBJECT ("keymap", keymap, 303 DEFINE_DUMPABLE_LISP_OBJECT ("keymap", keymap,
315 mark_keymap, print_keymap, 0, 0, 0, 304 mark_keymap, print_keymap, 0,
305 keymap_equal, keymap_hash,
316 keymap_description, 306 keymap_description,
317 Lisp_Keymap); 307 Lisp_Keymap);
318 308
319 /************************************************************************/ 309 /************************************************************************/
320 /* Traversing keymaps and their parents */ 310 /* Traversing keymaps and their parents */
471 */ 461 */
472 /* !!#### I'm not sure how correct this is. */ 462 /* !!#### I'm not sure how correct this is. */
473 Ibyte str [1 + MAX_ICHAR_LEN]; 463 Ibyte str [1 + MAX_ICHAR_LEN];
474 Bytecount count = set_itext_ichar (str, XCHAR (keysym)); 464 Bytecount count = set_itext_ichar (str, XCHAR (keysym));
475 str[count] = 0; 465 str[count] = 0;
476 keysym = intern_int (str); 466 keysym = intern_istring (str);
477 } 467 }
478 return control_meta_superify (keysym, modifiers); 468 return control_meta_superify (keysym, modifiers);
479 } 469 }
480 470
481 471
493 keymap_lookup_directly (Lisp_Object keymap, 483 keymap_lookup_directly (Lisp_Object keymap,
494 Lisp_Object keysym, int modifiers) 484 Lisp_Object keysym, int modifiers)
495 { 485 {
496 Lisp_Keymap *k; 486 Lisp_Keymap *k;
497 487
498 modifiers &= ~(XEMACS_MOD_BUTTON1 | XEMACS_MOD_BUTTON2 | XEMACS_MOD_BUTTON3 488 modifiers &= ~(
499 | XEMACS_MOD_BUTTON4 | XEMACS_MOD_BUTTON5 | XEMACS_MOD_BUTTON6 489 #define FROB(num) XEMACS_MOD_BUTTON##num |
500 | XEMACS_MOD_BUTTON7 | XEMACS_MOD_BUTTON8 | XEMACS_MOD_BUTTON9 490 #include "keymap-buttons.h"
501 | XEMACS_MOD_BUTTON10 | XEMACS_MOD_BUTTON11 | XEMACS_MOD_BUTTON12 491 0);
502 | XEMACS_MOD_BUTTON13 | XEMACS_MOD_BUTTON14 | XEMACS_MOD_BUTTON15
503 | XEMACS_MOD_BUTTON16 | XEMACS_MOD_BUTTON17 | XEMACS_MOD_BUTTON18
504 | XEMACS_MOD_BUTTON19 | XEMACS_MOD_BUTTON20 | XEMACS_MOD_BUTTON21
505 | XEMACS_MOD_BUTTON22 | XEMACS_MOD_BUTTON23 | XEMACS_MOD_BUTTON24
506 | XEMACS_MOD_BUTTON25 | XEMACS_MOD_BUTTON26);
507 if ((modifiers & ~(XEMACS_MOD_CONTROL | XEMACS_MOD_META | XEMACS_MOD_SUPER 492 if ((modifiers & ~(XEMACS_MOD_CONTROL | XEMACS_MOD_META | XEMACS_MOD_SUPER
508 | XEMACS_MOD_HYPER | XEMACS_MOD_ALT | XEMACS_MOD_SHIFT)) 493 | XEMACS_MOD_HYPER | XEMACS_MOD_ALT | XEMACS_MOD_SHIFT))
509 != 0) 494 != 0)
510 ABORT (); 495 ABORT ();
511 496
681 { 666 {
682 Lisp_Object keysym = KEY_DATA_KEYSYM (key); 667 Lisp_Object keysym = KEY_DATA_KEYSYM (key);
683 int modifiers = KEY_DATA_MODIFIERS (key); 668 int modifiers = KEY_DATA_MODIFIERS (key);
684 Lisp_Keymap *k = XKEYMAP (keymap); 669 Lisp_Keymap *k = XKEYMAP (keymap);
685 670
686 modifiers &= ~(XEMACS_MOD_BUTTON1 | XEMACS_MOD_BUTTON2 | XEMACS_MOD_BUTTON3 671 modifiers &= ~(
687 | XEMACS_MOD_BUTTON4 | XEMACS_MOD_BUTTON5 | XEMACS_MOD_BUTTON6 672 #define FROB(num) XEMACS_MOD_BUTTON##num |
688 | XEMACS_MOD_BUTTON7 | XEMACS_MOD_BUTTON8 | XEMACS_MOD_BUTTON9 673 #include "keymap-buttons.h"
689 | XEMACS_MOD_BUTTON10 | XEMACS_MOD_BUTTON11 | XEMACS_MOD_BUTTON12 674 0);
690 | XEMACS_MOD_BUTTON13 | XEMACS_MOD_BUTTON14 | XEMACS_MOD_BUTTON15
691 | XEMACS_MOD_BUTTON16 | XEMACS_MOD_BUTTON17 | XEMACS_MOD_BUTTON18
692 | XEMACS_MOD_BUTTON19 | XEMACS_MOD_BUTTON20 | XEMACS_MOD_BUTTON21
693 | XEMACS_MOD_BUTTON22 | XEMACS_MOD_BUTTON23 | XEMACS_MOD_BUTTON24
694 | XEMACS_MOD_BUTTON25 | XEMACS_MOD_BUTTON26);
695 assert ((modifiers & ~(XEMACS_MOD_CONTROL | XEMACS_MOD_META 675 assert ((modifiers & ~(XEMACS_MOD_CONTROL | XEMACS_MOD_META
696 | XEMACS_MOD_SUPER | XEMACS_MOD_HYPER 676 | XEMACS_MOD_SUPER | XEMACS_MOD_HYPER
697 | XEMACS_MOD_ALT | XEMACS_MOD_SHIFT)) == 0); 677 | XEMACS_MOD_ALT | XEMACS_MOD_SHIFT)) == 0);
698 678
699 /* If the keysym is a one-character symbol, use the char code instead. */ 679 /* If the keysym is a one-character symbol, use the char code instead. */
798 make_keymap (Elemcount size) 778 make_keymap (Elemcount size)
799 { 779 {
800 Lisp_Object obj = ALLOC_LISP_OBJECT (keymap); 780 Lisp_Object obj = ALLOC_LISP_OBJECT (keymap);
801 Lisp_Keymap *keymap = XKEYMAP (obj); 781 Lisp_Keymap *keymap = XKEYMAP (obj);
802 782
803 keymap->parents = Qnil; 783 #define MARKED_SLOT(x) keymap->x = Qnil;
804 keymap->prompt = Qnil; 784 #include "keymap-slots.h"
805 keymap->table = Qnil;
806 keymap->inverse_table = Qnil;
807 keymap->default_binding = Qnil;
808 keymap->sub_maps_cache = Qnil; /* No possible submaps */
809 keymap->name = Qnil;
810 785
811 if (size != 0) /* hack for copy-keymap */ 786 if (size != 0) /* hack for copy-keymap */
812 { 787 {
813 keymap->table = 788 keymap->table =
814 make_lisp_hash_table (size, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ); 789 make_lisp_hash_table (size, HASH_TABLE_NON_WEAK, HASH_TABLE_EQ);
1401 else if (EQ (*keysym, QSPC)) 1376 else if (EQ (*keysym, QSPC))
1402 *keysym = QKspace; 1377 *keysym = QKspace;
1403 else if (EQ (*keysym, QBS)) 1378 else if (EQ (*keysym, QBS))
1404 *keysym = QKbackspace; 1379 *keysym = QKbackspace;
1405 /* Emacs compatibility */ 1380 /* Emacs compatibility */
1406 else if (EQ(*keysym, Qdown_mouse_1)) 1381 #define FROB(num) \
1407 *keysym = Qbutton1; 1382 else if (EQ(*keysym, Qdown_mouse_##num)) \
1408 else if (EQ(*keysym, Qdown_mouse_2)) 1383 *keysym = Qbutton##num; \
1409 *keysym = Qbutton2; 1384 else if (EQ(*keysym, Qmouse_##num)) \
1410 else if (EQ(*keysym, Qdown_mouse_3)) 1385 *keysym = Qbutton##num##up;
1411 *keysym = Qbutton3; 1386 #include "keymap-buttons.h"
1412 else if (EQ(*keysym, Qdown_mouse_4))
1413 *keysym = Qbutton4;
1414 else if (EQ(*keysym, Qdown_mouse_5))
1415 *keysym = Qbutton5;
1416 else if (EQ(*keysym, Qdown_mouse_6))
1417 *keysym = Qbutton6;
1418 else if (EQ(*keysym, Qdown_mouse_7))
1419 *keysym = Qbutton7;
1420 else if (EQ(*keysym, Qdown_mouse_8))
1421 *keysym = Qbutton8;
1422 else if (EQ(*keysym, Qdown_mouse_9))
1423 *keysym = Qbutton9;
1424 else if (EQ(*keysym, Qdown_mouse_10))
1425 *keysym = Qbutton10;
1426 else if (EQ(*keysym, Qdown_mouse_11))
1427 *keysym = Qbutton11;
1428 else if (EQ(*keysym, Qdown_mouse_12))
1429 *keysym = Qbutton12;
1430 else if (EQ(*keysym, Qdown_mouse_13))
1431 *keysym = Qbutton13;
1432 else if (EQ(*keysym, Qdown_mouse_14))
1433 *keysym = Qbutton14;
1434 else if (EQ(*keysym, Qdown_mouse_15))
1435 *keysym = Qbutton15;
1436 else if (EQ(*keysym, Qdown_mouse_16))
1437 *keysym = Qbutton16;
1438 else if (EQ(*keysym, Qdown_mouse_17))
1439 *keysym = Qbutton17;
1440 else if (EQ(*keysym, Qdown_mouse_18))
1441 *keysym = Qbutton18;
1442 else if (EQ(*keysym, Qdown_mouse_19))
1443 *keysym = Qbutton19;
1444 else if (EQ(*keysym, Qdown_mouse_20))
1445 *keysym = Qbutton20;
1446 else if (EQ(*keysym, Qdown_mouse_21))
1447 *keysym = Qbutton21;
1448 else if (EQ(*keysym, Qdown_mouse_22))
1449 *keysym = Qbutton22;
1450 else if (EQ(*keysym, Qdown_mouse_23))
1451 *keysym = Qbutton23;
1452 else if (EQ(*keysym, Qdown_mouse_24))
1453 *keysym = Qbutton24;
1454 else if (EQ(*keysym, Qdown_mouse_25))
1455 *keysym = Qbutton25;
1456 else if (EQ(*keysym, Qdown_mouse_26))
1457 *keysym = Qbutton26;
1458 else if (EQ(*keysym, Qmouse_1))
1459 *keysym = Qbutton1up;
1460 else if (EQ(*keysym, Qmouse_2))
1461 *keysym = Qbutton2up;
1462 else if (EQ(*keysym, Qmouse_3))
1463 *keysym = Qbutton3up;
1464 else if (EQ(*keysym, Qmouse_4))
1465 *keysym = Qbutton4up;
1466 else if (EQ(*keysym, Qmouse_5))
1467 *keysym = Qbutton5up;
1468 else if (EQ(*keysym, Qmouse_6))
1469 *keysym = Qbutton6up;
1470 else if (EQ(*keysym, Qmouse_7))
1471 *keysym = Qbutton7up;
1472 else if (EQ(*keysym, Qmouse_8))
1473 *keysym = Qbutton8up;
1474 else if (EQ(*keysym, Qmouse_9))
1475 *keysym = Qbutton9up;
1476 else if (EQ(*keysym, Qmouse_10))
1477 *keysym = Qbutton10up;
1478 else if (EQ(*keysym, Qmouse_11))
1479 *keysym = Qbutton11up;
1480 else if (EQ(*keysym, Qmouse_12))
1481 *keysym = Qbutton12up;
1482 else if (EQ(*keysym, Qmouse_13))
1483 *keysym = Qbutton13up;
1484 else if (EQ(*keysym, Qmouse_14))
1485 *keysym = Qbutton14up;
1486 else if (EQ(*keysym, Qmouse_15))
1487 *keysym = Qbutton15up;
1488 else if (EQ(*keysym, Qmouse_16))
1489 *keysym = Qbutton16up;
1490 else if (EQ(*keysym, Qmouse_17))
1491 *keysym = Qbutton17up;
1492 else if (EQ(*keysym, Qmouse_18))
1493 *keysym = Qbutton18up;
1494 else if (EQ(*keysym, Qmouse_19))
1495 *keysym = Qbutton19up;
1496 else if (EQ(*keysym, Qmouse_20))
1497 *keysym = Qbutton20up;
1498 else if (EQ(*keysym, Qmouse_21))
1499 *keysym = Qbutton21up;
1500 else if (EQ(*keysym, Qmouse_22))
1501 *keysym = Qbutton22up;
1502 else if (EQ(*keysym, Qmouse_23))
1503 *keysym = Qbutton23up;
1504 else if (EQ(*keysym, Qmouse_24))
1505 *keysym = Qbutton24up;
1506 else if (EQ(*keysym, Qmouse_25))
1507 *keysym = Qbutton25up;
1508 else if (EQ(*keysym, Qmouse_26))
1509 *keysym = Qbutton26up;
1510 } 1387 }
1511 } 1388 }
1512 1389
1513 1390
1514 /* Given any kind of key-specifier, return a keysym and modifier mask. 1391 /* Given any kind of key-specifier, return a keysym and modifier mask.
1547 case button_release_event: 1424 case button_release_event:
1548 { 1425 {
1549 int down = (XEVENT_TYPE (spec) == button_press_event); 1426 int down = (XEVENT_TYPE (spec) == button_press_event);
1550 switch (XEVENT_BUTTON_BUTTON (spec)) 1427 switch (XEVENT_BUTTON_BUTTON (spec))
1551 { 1428 {
1552 case 1: 1429 #define FROB(num) \
1553 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton1 : Qbutton1up)); 1430 case num: \
1431 SET_KEY_DATA_KEYSYM (returned_value, \
1432 (down ? Qbutton##num : \
1433 Qbutton##num##up)); \
1554 break; 1434 break;
1555 case 2: 1435 #include "keymap-buttons.h"
1556 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton2 : Qbutton2up));
1557 break;
1558 case 3:
1559 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton3 : Qbutton3up));
1560 break;
1561 case 4:
1562 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton4 : Qbutton4up));
1563 break;
1564 case 5:
1565 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton5 : Qbutton5up));
1566 break;
1567 case 6:
1568 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton6 : Qbutton6up));
1569 break;
1570 case 7:
1571 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton7 : Qbutton7up));
1572 break;
1573 case 8:
1574 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton8 : Qbutton8up));
1575 break;
1576 case 9:
1577 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton9 : Qbutton9up));
1578 break;
1579 case 10:
1580 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton10 : Qbutton10up));
1581 break;
1582 case 11:
1583 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton11 : Qbutton11up));
1584 break;
1585 case 12:
1586 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton12 : Qbutton12up));
1587 break;
1588 case 13:
1589 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton13 : Qbutton13up));
1590 break;
1591 case 14:
1592 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton14 : Qbutton14up));
1593 break;
1594 case 15:
1595 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton15 : Qbutton15up));
1596 break;
1597 case 16:
1598 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton16 : Qbutton16up));
1599 break;
1600 case 17:
1601 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton17 : Qbutton17up));
1602 break;
1603 case 18:
1604 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton18 : Qbutton18up));
1605 break;
1606 case 19:
1607 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton19 : Qbutton19up));
1608 break;
1609 case 20:
1610 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton20 : Qbutton20up));
1611 break;
1612 case 21:
1613 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton21 : Qbutton21up));
1614 break;
1615 case 22:
1616 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton22 : Qbutton22up));
1617 break;
1618 case 23:
1619 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton23 : Qbutton23up));
1620 break;
1621 case 24:
1622 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton24 : Qbutton24up));
1623 break;
1624 case 25:
1625 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton25 : Qbutton25up));
1626 break;
1627 case 26:
1628 SET_KEY_DATA_KEYSYM(returned_value, (down ? Qbutton26 : Qbutton26up));
1629 break;
1630 default: 1436 default:
1631 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton0 : Qbutton0up)); 1437 SET_KEY_DATA_KEYSYM (returned_value, (down ? Qbutton0 :
1438 Qbutton0up));
1632 break; 1439 break;
1633 } 1440 }
1634 SET_KEY_DATA_MODIFIERS (returned_value, XEVENT_BUTTON_MODIFIERS (spec)); 1441 SET_KEY_DATA_MODIFIERS (returned_value,
1442 XEVENT_BUTTON_MODIFIERS (spec));
1635 break; 1443 break;
1636 } 1444 }
1637 default: 1445 default:
1638 wtaerror ("unable to bind this type of event", spec); 1446 wtaerror ("unable to bind this type of event", spec);
1639 } 1447 }
1717 return; 1525 return;
1718 } 1526 }
1719 1527
1720 define_key_parser (list, &raw_key); 1528 define_key_parser (list, &raw_key);
1721 1529
1722 if (EQ (raw_key.keysym, Qbutton0) || EQ (raw_key.keysym, Qbutton0up) || 1530 if (
1723 EQ (raw_key.keysym, Qbutton1) || EQ (raw_key.keysym, Qbutton1up) || 1531 #define INCLUDE_BUTTON_ZERO
1724 EQ (raw_key.keysym, Qbutton2) || EQ (raw_key.keysym, Qbutton2up) || 1532 #define FROB(num) \
1725 EQ (raw_key.keysym, Qbutton3) || EQ (raw_key.keysym, Qbutton3up) || 1533 EQ (raw_key.keysym, Qbutton##num) || \
1726 EQ (raw_key.keysym, Qbutton4) || EQ (raw_key.keysym, Qbutton4up) || 1534 EQ (raw_key.keysym, Qbutton##num##up) ||
1727 EQ (raw_key.keysym, Qbutton5) || EQ (raw_key.keysym, Qbutton5up) || 1535 #include "keymap-buttons.h"
1728 EQ (raw_key.keysym, Qbutton6) || EQ (raw_key.keysym, Qbutton6up) || 1536 0)
1729 EQ (raw_key.keysym, Qbutton7) || EQ (raw_key.keysym, Qbutton7up) ||
1730 EQ (raw_key.keysym, Qbutton8) || EQ (raw_key.keysym, Qbutton8up) ||
1731 EQ (raw_key.keysym, Qbutton9) || EQ (raw_key.keysym, Qbutton9up) ||
1732 EQ (raw_key.keysym, Qbutton10) || EQ (raw_key.keysym, Qbutton10up) ||
1733 EQ (raw_key.keysym, Qbutton11) || EQ (raw_key.keysym, Qbutton11up) ||
1734 EQ (raw_key.keysym, Qbutton12) || EQ (raw_key.keysym, Qbutton12up) ||
1735 EQ (raw_key.keysym, Qbutton13) || EQ (raw_key.keysym, Qbutton13up) ||
1736 EQ (raw_key.keysym, Qbutton14) || EQ (raw_key.keysym, Qbutton14up) ||
1737 EQ (raw_key.keysym, Qbutton15) || EQ (raw_key.keysym, Qbutton15up) ||
1738 EQ (raw_key.keysym, Qbutton16) || EQ (raw_key.keysym, Qbutton16up) ||
1739 EQ (raw_key.keysym, Qbutton17) || EQ (raw_key.keysym, Qbutton17up) ||
1740 EQ (raw_key.keysym, Qbutton18) || EQ (raw_key.keysym, Qbutton18up) ||
1741 EQ (raw_key.keysym, Qbutton19) || EQ (raw_key.keysym, Qbutton19up) ||
1742 EQ (raw_key.keysym, Qbutton20) || EQ (raw_key.keysym, Qbutton20up) ||
1743 EQ (raw_key.keysym, Qbutton21) || EQ (raw_key.keysym, Qbutton21up) ||
1744 EQ (raw_key.keysym, Qbutton22) || EQ (raw_key.keysym, Qbutton22up) ||
1745 EQ (raw_key.keysym, Qbutton23) || EQ (raw_key.keysym, Qbutton23up) ||
1746 EQ (raw_key.keysym, Qbutton24) || EQ (raw_key.keysym, Qbutton24up) ||
1747 EQ (raw_key.keysym, Qbutton25) || EQ (raw_key.keysym, Qbutton25up) ||
1748 EQ (raw_key.keysym, Qbutton26) || EQ (raw_key.keysym, Qbutton26up))
1749 invalid_operation ("Mouse-clicks can't appear in saved keyboard macros", 1537 invalid_operation ("Mouse-clicks can't appear in saved keyboard macros",
1750 Qunbound); 1538 Qunbound);
1751 1539
1752 XSET_EVENT_CHANNEL (event, Vselected_console); 1540 XSET_EVENT_CHANNEL (event, Vselected_console);
1753 XSET_EVENT_TYPE (event, key_press_event); 1541 XSET_EVENT_TYPE (event, key_press_event);
1955 } 1743 }
1956 1744
1957 if (EQ (keys, new_keys)) 1745 if (EQ (keys, new_keys))
1958 signal_ferror_with_frob (Qinvalid_operation, mpc_binding, 1746 signal_ferror_with_frob (Qinvalid_operation, mpc_binding,
1959 "can't bind %s: %s has a non-keymap binding", 1747 "can't bind %s: %s has a non-keymap binding",
1960 (char *) XSTRING_DATA (Fkey_description (keys)), 1748 (CIbyte *) XSTRING_DATA (Fkey_description (keys)),
1961 (char *) XSTRING_DATA (Fsingle_key_description 1749 (CIbyte *) XSTRING_DATA (Fsingle_key_description
1962 (Vmeta_prefix_char))); 1750 (Vmeta_prefix_char)));
1963 else 1751 else
1964 signal_ferror_with_frob (Qinvalid_operation, mpc_binding, 1752 signal_ferror_with_frob (Qinvalid_operation, mpc_binding,
1965 "can't bind %s: %s %s has a non-keymap binding", 1753 "can't bind %s: %s %s has a non-keymap binding",
1966 (char *) XSTRING_DATA (Fkey_description (keys)), 1754 (CIbyte *) XSTRING_DATA (Fkey_description (keys)),
1967 (char *) XSTRING_DATA (Fkey_description 1755 (CIbyte *) XSTRING_DATA (Fkey_description
1968 (new_keys)), 1756 (new_keys)),
1969 (char *) XSTRING_DATA (Fsingle_key_description 1757 (CIbyte *) XSTRING_DATA (Fsingle_key_description
1970 (Vmeta_prefix_char))); 1758 (Vmeta_prefix_char)));
1971 } 1759 }
1972 1760
1973 DEFUN ("define-key", Fdefine_key, 3, 3, 0, /* 1761 DEFUN ("define-key", Fdefine_key, 3, 3, 0, /*
1974 Define key sequence KEYS, in KEYMAP, as DEF. 1762 Define key sequence KEYS, in KEYMAP, as DEF.
1975 KEYMAP is a keymap object. 1763 KEYMAP is a keymap object.
3229 Lisp_Object binding, 3017 Lisp_Object binding,
3230 void *function) 3018 void *function)
3231 { 3019 {
3232 /* This function can GC */ 3020 /* This function can GC */
3233 Lisp_Object fn; 3021 Lisp_Object fn;
3234 fn = VOID_TO_LISP (function); 3022 fn = GET_LISP_FROM_VOID (function);
3235 call2 (fn, make_key_description (key, 1), binding); 3023 call2 (fn, make_key_description (key, 1), binding);
3236 } 3024 }
3237 3025
3238 3026
3239 static void 3027 static void
3289 keymap = tmp; 3077 keymap = tmp;
3290 } 3078 }
3291 GCPRO2 (function, keymap); 3079 GCPRO2 (function, keymap);
3292 keymap = get_keymap (keymap, 1, 1); 3080 keymap = get_keymap (keymap, 1, 1);
3293 map_keymap (XKEYMAP (keymap)->table, !NILP (sort_first), 3081 map_keymap (XKEYMAP (keymap)->table, !NILP (sort_first),
3294 map_keymap_mapper, LISP_TO_VOID (function)); 3082 map_keymap_mapper, STORE_LISP_IN_VOID (function));
3295 UNGCPRO; 3083 UNGCPRO;
3296 return Qnil; 3084 return Qnil;
3297 } 3085 }
3298 3086
3299 3087
3492 3280
3493 if (i == 0) 3281 if (i == 0)
3494 string = s2; 3282 string = s2;
3495 else 3283 else
3496 { 3284 {
3497 /* if (NILP (sep)) Lisp_Object sep = build_string (" ") */; 3285 /* if (NILP (sep)) Lisp_Object sep = build_ascstring (" ") */;
3498 string = concat2 (string, concat2 (Vsingle_space_string, s2)); 3286 string = concat2 (string, concat2 (Vsingle_space_string, s2));
3499 } 3287 }
3500 } 3288 }
3501 return string; 3289 return string;
3502 } 3290 }
3650 { 3438 {
3651 p += set_itext_ichar (p, c); 3439 p += set_itext_ichar (p, c);
3652 } 3440 }
3653 3441
3654 *p = 0; 3442 *p = 0;
3655 return build_string ((char *) buf); 3443 return build_istring (buf);
3656 } 3444 }
3657 3445
3658 3446
3659 /************************************************************************/ 3447 /************************************************************************/
3660 /* where-is (mapping bindings to keys) */ 3448 /* where-is (mapping bindings to keys) */
3946 if (! c->keys_so_far_malloced) 3734 if (! c->keys_so_far_malloced)
3947 { 3735 {
3948 Lisp_Key_Data *new_ = xnew_array (Lisp_Key_Data, size); 3736 Lisp_Key_Data *new_ = xnew_array (Lisp_Key_Data, size);
3949 memcpy ((void *)new_, (const void *)c->keys_so_far, 3737 memcpy ((void *)new_, (const void *)c->keys_so_far,
3950 c->keys_so_far_total_size * sizeof (Lisp_Key_Data)); 3738 c->keys_so_far_total_size * sizeof (Lisp_Key_Data));
3951 xfree (c->keys_so_far, Lisp_Key_Data); 3739 xfree (c->keys_so_far);
3952 c->keys_so_far = new_; 3740 c->keys_so_far = new_;
3953 } 3741 }
3954 else 3742 else
3955 XREALLOC_ARRAY (c->keys_so_far, Lisp_Key_Data, size); 3743 XREALLOC_ARRAY (c->keys_so_far, Lisp_Key_Data, size);
3956 3744
4022 3810
4023 if (NILP (firstonly)) 3811 if (NILP (firstonly))
4024 result = Fnreverse (result); 3812 result = Fnreverse (result);
4025 3813
4026 if (c.keys_so_far_malloced) 3814 if (c.keys_so_far_malloced)
4027 xfree (c.keys_so_far, Lisp_Key_Data *); 3815 xfree (c.keys_so_far);
4028 return result; 3816 return result;
4029 } 3817 }
4030 3818
4031 3819
4032 /************************************************************************/ 3820 /************************************************************************/
4145 struct gcpro gcpro1; 3933 struct gcpro gcpro1;
4146 GCPRO1 (definition); 3934 GCPRO1 (definition);
4147 3935
4148 Findent_to (make_int (16), make_int (3), buffer); 3936 Findent_to (make_int (16), make_int (3), buffer);
4149 if (keymapp) 3937 if (keymapp)
4150 buffer_insert_c_string (XBUFFER (buffer), "<< "); 3938 buffer_insert_ascstring (XBUFFER (buffer), "<< ");
4151 3939
4152 if (SYMBOLP (definition)) 3940 if (SYMBOLP (definition))
4153 { 3941 {
4154 buffer_insert1 (XBUFFER (buffer), Fsymbol_name (definition)); 3942 buffer_insert1 (XBUFFER (buffer), Fsymbol_name (definition));
4155 } 3943 }
4156 else if (STRINGP (definition) || VECTORP (definition)) 3944 else if (STRINGP (definition) || VECTORP (definition))
4157 { 3945 {
4158 buffer_insert_c_string (XBUFFER (buffer), "Kbd Macro: "); 3946 buffer_insert_ascstring (XBUFFER (buffer), "Kbd Macro: ");
4159 buffer_insert1 (XBUFFER (buffer), Fkey_description (definition)); 3947 buffer_insert1 (XBUFFER (buffer), Fkey_description (definition));
4160 } 3948 }
4161 else if (COMPILED_FUNCTIONP (definition)) 3949 else if (COMPILED_FUNCTIONP (definition))
4162 buffer_insert_c_string (XBUFFER (buffer), "Anonymous Compiled Function"); 3950 buffer_insert_ascstring (XBUFFER (buffer), "Anonymous Compiled Function");
4163 else if (CONSP (definition) && EQ (XCAR (definition), Qlambda)) 3951 else if (CONSP (definition) && EQ (XCAR (definition), Qlambda))
4164 buffer_insert_c_string (XBUFFER (buffer), "Anonymous Lambda"); 3952 buffer_insert_ascstring (XBUFFER (buffer), "Anonymous Lambda");
4165 else if (KEYMAPP (definition)) 3953 else if (KEYMAPP (definition))
4166 { 3954 {
4167 Lisp_Object name = XKEYMAP (definition)->name; 3955 Lisp_Object name = XKEYMAP (definition)->name;
4168 if (STRINGP (name) || (SYMBOLP (name) && !NILP (name))) 3956 if (STRINGP (name) || (SYMBOLP (name) && !NILP (name)))
4169 { 3957 {
4170 buffer_insert_c_string (XBUFFER (buffer), "Prefix command "); 3958 buffer_insert_ascstring (XBUFFER (buffer), "Prefix command ");
4171 if (SYMBOLP (name) 3959 if (SYMBOLP (name)
4172 && EQ (find_symbol_value (name), definition)) 3960 && EQ (find_symbol_value (name), definition))
4173 buffer_insert1 (XBUFFER (buffer), Fsymbol_name (name)); 3961 buffer_insert1 (XBUFFER (buffer), Fsymbol_name (name));
4174 else 3962 else
4175 { 3963 {
4176 buffer_insert1 (XBUFFER (buffer), Fprin1_to_string (name, Qnil)); 3964 buffer_insert1 (XBUFFER (buffer), Fprin1_to_string (name, Qnil));
4177 } 3965 }
4178 } 3966 }
4179 else 3967 else
4180 buffer_insert_c_string (XBUFFER (buffer), "Prefix Command"); 3968 buffer_insert_ascstring (XBUFFER (buffer), "Prefix Command");
4181 } 3969 }
4182 else 3970 else
4183 buffer_insert_c_string (XBUFFER (buffer), "??"); 3971 buffer_insert_ascstring (XBUFFER (buffer), "??");
4184 3972
4185 if (keymapp) 3973 if (keymapp)
4186 buffer_insert_c_string (XBUFFER (buffer), " >>"); 3974 buffer_insert_ascstring (XBUFFER (buffer), " >>");
4187 buffer_insert_c_string (XBUFFER (buffer), "\n"); 3975 buffer_insert_ascstring (XBUFFER (buffer), "\n");
4188 UNGCPRO; 3976 UNGCPRO;
4189 } 3977 }
4190 3978
4191 struct describe_map_closure 3979 struct describe_map_closure
4192 { 3980 {
4247 return; 4035 return;
4248 4036
4249 /* If we're only supposed to display mouse bindings and this isn't one, 4037 /* If we're only supposed to display mouse bindings and this isn't one,
4250 then bug out. */ 4038 then bug out. */
4251 if (closure->mice_only_p && 4039 if (closure->mice_only_p &&
4252 (! (EQ (keysym, Qbutton0) || 4040 (! (
4253 EQ (keysym, Qbutton1) || 4041 #define INCLUDE_BUTTON_ZERO
4254 EQ (keysym, Qbutton2) || 4042 #define FROB(num) EQ (keysym, Qbutton##num) || \
4255 EQ (keysym, Qbutton3) || 4043 EQ (keysym, Qbutton##num##up) ||
4256 EQ (keysym, Qbutton4) || 4044 #include "keymap-buttons.h"
4257 EQ (keysym, Qbutton5) || 4045 0)))
4258 EQ (keysym, Qbutton6) ||
4259 EQ (keysym, Qbutton7) ||
4260 EQ (keysym, Qbutton8) ||
4261 EQ (keysym, Qbutton9) ||
4262 EQ (keysym, Qbutton10) ||
4263 EQ (keysym, Qbutton11) ||
4264 EQ (keysym, Qbutton12) ||
4265 EQ (keysym, Qbutton13) ||
4266 EQ (keysym, Qbutton14) ||
4267 EQ (keysym, Qbutton15) ||
4268 EQ (keysym, Qbutton16) ||
4269 EQ (keysym, Qbutton17) ||
4270 EQ (keysym, Qbutton18) ||
4271 EQ (keysym, Qbutton19) ||
4272 EQ (keysym, Qbutton20) ||
4273 EQ (keysym, Qbutton21) ||
4274 EQ (keysym, Qbutton22) ||
4275 EQ (keysym, Qbutton23) ||
4276 EQ (keysym, Qbutton24) ||
4277 EQ (keysym, Qbutton25) ||
4278 EQ (keysym, Qbutton26) ||
4279 EQ (keysym, Qbutton0up) ||
4280 EQ (keysym, Qbutton1up) ||
4281 EQ (keysym, Qbutton2up) ||
4282 EQ (keysym, Qbutton3up) ||
4283 EQ (keysym, Qbutton4up) ||
4284 EQ (keysym, Qbutton5up) ||
4285 EQ (keysym, Qbutton6up) ||
4286 EQ (keysym, Qbutton7up) ||
4287 EQ (keysym, Qbutton8up) ||
4288 EQ (keysym, Qbutton9up) ||
4289 EQ (keysym, Qbutton10up) ||
4290 EQ (keysym, Qbutton11up) ||
4291 EQ (keysym, Qbutton12up) ||
4292 EQ (keysym, Qbutton13up) ||
4293 EQ (keysym, Qbutton14up) ||
4294 EQ (keysym, Qbutton15up) ||
4295 EQ (keysym, Qbutton16up) ||
4296 EQ (keysym, Qbutton17up) ||
4297 EQ (keysym, Qbutton18up) ||
4298 EQ (keysym, Qbutton19up) ||
4299 EQ (keysym, Qbutton20up) ||
4300 EQ (keysym, Qbutton21up) ||
4301 EQ (keysym, Qbutton22up) ||
4302 EQ (keysym, Qbutton23up) ||
4303 EQ (keysym, Qbutton24up) ||
4304 EQ (keysym, Qbutton25up) ||
4305 EQ (keysym, Qbutton26up))))
4306 return; 4046 return;
4307 4047
4308 /* If this command in this map is shadowed by some other map, ignore it. */ 4048 /* If this command in this map is shadowed by some other map, ignore it. */
4309 { 4049 {
4310 Lisp_Object tail; 4050 Lisp_Object tail;
4465 describe_map_parent_mapper, &describe_map_closure); 4205 describe_map_parent_mapper, &describe_map_closure);
4466 4206
4467 if (!NILP (list)) 4207 if (!NILP (list))
4468 { 4208 {
4469 list = list_sort (list, Qnil, describe_map_sort_predicate); 4209 list = list_sort (list, Qnil, describe_map_sort_predicate);
4470 buffer_insert_c_string (buf, "\n"); 4210 buffer_insert_ascstring (buf, "\n");
4471 while (!NILP (list)) 4211 while (!NILP (list))
4472 { 4212 {
4473 Lisp_Object elt = XCAR (XCAR (list)); 4213 Lisp_Object elt = XCAR (XCAR (list));
4474 Lisp_Object keysym = XCAR (elt); 4214 Lisp_Object keysym = XCAR (elt);
4475 int modifiers = XINT (XCDR (elt)); 4215 int modifiers = XINT (XCDR (elt));
4476 4216
4477 if (!NILP (elt_prefix)) 4217 if (!NILP (elt_prefix))
4478 buffer_insert_lisp_string (buf, elt_prefix); 4218 buffer_insert_lisp_string (buf, elt_prefix);
4479 4219
4480 if (modifiers & XEMACS_MOD_META) 4220 if (modifiers & XEMACS_MOD_META)
4481 buffer_insert_c_string (buf, "M-"); 4221 buffer_insert_ascstring (buf, "M-");
4482 if (modifiers & XEMACS_MOD_CONTROL) 4222 if (modifiers & XEMACS_MOD_CONTROL)
4483 buffer_insert_c_string (buf, "C-"); 4223 buffer_insert_ascstring (buf, "C-");
4484 if (modifiers & XEMACS_MOD_SUPER) 4224 if (modifiers & XEMACS_MOD_SUPER)
4485 buffer_insert_c_string (buf, "S-"); 4225 buffer_insert_ascstring (buf, "S-");
4486 if (modifiers & XEMACS_MOD_HYPER) 4226 if (modifiers & XEMACS_MOD_HYPER)
4487 buffer_insert_c_string (buf, "H-"); 4227 buffer_insert_ascstring (buf, "H-");
4488 if (modifiers & XEMACS_MOD_ALT) 4228 if (modifiers & XEMACS_MOD_ALT)
4489 buffer_insert_c_string (buf, "Alt-"); 4229 buffer_insert_ascstring (buf, "Alt-");
4490 if (modifiers & XEMACS_MOD_SHIFT) 4230 if (modifiers & XEMACS_MOD_SHIFT)
4491 buffer_insert_c_string (buf, "Sh-"); 4231 buffer_insert_ascstring (buf, "Sh-");
4492 if (SYMBOLP (keysym)) 4232 if (SYMBOLP (keysym))
4493 { 4233 {
4494 Lisp_Object code = Fget (keysym, Qcharacter_of_keysym, Qnil); 4234 Lisp_Object code = Fget (keysym, Qcharacter_of_keysym, Qnil);
4495 Ichar c = (CHAR_OR_CHAR_INTP (code) 4235 Ichar c = (CHAR_OR_CHAR_INTP (code)
4496 ? XCHAR_OR_CHAR_INT (code) : (Ichar) -1); 4236 ? XCHAR_OR_CHAR_INT (code) : (Ichar) -1);
4497 /* Calling Fsingle_key_description() would cons more */ 4237 /* Calling Fsingle_key_description() would cons more */
4498 #if 0 /* This is bogus */ 4238 #if 0 /* This is bogus */
4499 if (EQ (keysym, QKlinefeed)) 4239 if (EQ (keysym, QKlinefeed))
4500 buffer_insert_c_string (buf, "LFD"); 4240 buffer_insert_ascstring (buf, "LFD");
4501 else if (EQ (keysym, QKtab)) 4241 else if (EQ (keysym, QKtab))
4502 buffer_insert_c_string (buf, "TAB"); 4242 buffer_insert_ascstring (buf, "TAB");
4503 else if (EQ (keysym, QKreturn)) 4243 else if (EQ (keysym, QKreturn))
4504 buffer_insert_c_string (buf, "RET"); 4244 buffer_insert_ascstring (buf, "RET");
4505 else if (EQ (keysym, QKescape)) 4245 else if (EQ (keysym, QKescape))
4506 buffer_insert_c_string (buf, "ESC"); 4246 buffer_insert_ascstring (buf, "ESC");
4507 else if (EQ (keysym, QKdelete)) 4247 else if (EQ (keysym, QKdelete))
4508 buffer_insert_c_string (buf, "DEL"); 4248 buffer_insert_ascstring (buf, "DEL");
4509 else if (EQ (keysym, QKspace)) 4249 else if (EQ (keysym, QKspace))
4510 buffer_insert_c_string (buf, "SPC"); 4250 buffer_insert_ascstring (buf, "SPC");
4511 else if (EQ (keysym, QKbackspace)) 4251 else if (EQ (keysym, QKbackspace))
4512 buffer_insert_c_string (buf, "BS"); 4252 buffer_insert_ascstring (buf, "BS");
4513 else 4253 else
4514 #endif 4254 #endif
4515 if (c >= printable_min) 4255 if (c >= printable_min)
4516 buffer_insert_emacs_char (buf, c); 4256 buffer_insert_emacs_char (buf, c);
4517 else buffer_insert1 (buf, Fsymbol_name (keysym)); 4257 else buffer_insert1 (buf, Fsymbol_name (keysym));
4518 } 4258 }
4519 else if (CHARP (keysym)) 4259 else if (CHARP (keysym))
4520 buffer_insert_emacs_char (buf, XCHAR (keysym)); 4260 buffer_insert_emacs_char (buf, XCHAR (keysym));
4521 else 4261 else
4522 buffer_insert_c_string (buf, "---bad keysym---"); 4262 buffer_insert_ascstring (buf, "---bad keysym---");
4523 4263
4524 if (elided) 4264 if (elided)
4525 elided = 0; 4265 elided = 0;
4526 else 4266 else
4527 { 4267 {
4533 list = XCDR (list); 4273 list = XCDR (list);
4534 } 4274 }
4535 if (k != 0) 4275 if (k != 0)
4536 { 4276 {
4537 if (k == 1) 4277 if (k == 1)
4538 buffer_insert_c_string (buf, ", "); 4278 buffer_insert_ascstring (buf, ", ");
4539 else 4279 else
4540 buffer_insert_c_string (buf, " .. "); 4280 buffer_insert_ascstring (buf, " .. ");
4541 elided = 1; 4281 elided = 1;
4542 continue; 4282 continue;
4543 } 4283 }
4544 } 4284 }
4545 4285
4604 DEFSYMBOL (Qmeta); 4344 DEFSYMBOL (Qmeta);
4605 DEFSYMBOL (Qsuper); 4345 DEFSYMBOL (Qsuper);
4606 DEFSYMBOL (Qhyper); 4346 DEFSYMBOL (Qhyper);
4607 DEFSYMBOL (Qalt); 4347 DEFSYMBOL (Qalt);
4608 DEFSYMBOL (Qshift); 4348 DEFSYMBOL (Qshift);
4609 DEFSYMBOL (Qbutton0); 4349 #define INCLUDE_BUTTON_ZERO
4610 DEFSYMBOL (Qbutton1); 4350 #define FROB(num) \
4611 DEFSYMBOL (Qbutton2); 4351 DEFSYMBOL (Qbutton##num); \
4612 DEFSYMBOL (Qbutton3); 4352 DEFSYMBOL (Qbutton##num##up);
4613 DEFSYMBOL (Qbutton4); 4353 #include "keymap-buttons.h"
4614 DEFSYMBOL (Qbutton5); 4354 #define FROB(num) \
4615 DEFSYMBOL (Qbutton6); 4355 DEFSYMBOL (Qmouse_##num); \
4616 DEFSYMBOL (Qbutton7); 4356 DEFSYMBOL (Qdown_mouse_##num);
4617 DEFSYMBOL (Qbutton8); 4357 #include "keymap-buttons.h"
4618 DEFSYMBOL (Qbutton9);
4619 DEFSYMBOL (Qbutton10);
4620 DEFSYMBOL (Qbutton11);
4621 DEFSYMBOL (Qbutton12);
4622 DEFSYMBOL (Qbutton13);
4623 DEFSYMBOL (Qbutton14);
4624 DEFSYMBOL (Qbutton15);
4625 DEFSYMBOL (Qbutton16);
4626 DEFSYMBOL (Qbutton17);
4627 DEFSYMBOL (Qbutton18);
4628 DEFSYMBOL (Qbutton19);
4629 DEFSYMBOL (Qbutton20);
4630 DEFSYMBOL (Qbutton21);
4631 DEFSYMBOL (Qbutton22);
4632 DEFSYMBOL (Qbutton23);
4633 DEFSYMBOL (Qbutton24);
4634 DEFSYMBOL (Qbutton25);
4635 DEFSYMBOL (Qbutton26);
4636 DEFSYMBOL (Qbutton0up);
4637 DEFSYMBOL (Qbutton1up);
4638 DEFSYMBOL (Qbutton2up);
4639 DEFSYMBOL (Qbutton3up);
4640 DEFSYMBOL (Qbutton4up);
4641 DEFSYMBOL (Qbutton5up);
4642 DEFSYMBOL (Qbutton6up);
4643 DEFSYMBOL (Qbutton7up);
4644 DEFSYMBOL (Qbutton8up);
4645 DEFSYMBOL (Qbutton9up);
4646 DEFSYMBOL (Qbutton10up);
4647 DEFSYMBOL (Qbutton11up);
4648 DEFSYMBOL (Qbutton12up);
4649 DEFSYMBOL (Qbutton13up);
4650 DEFSYMBOL (Qbutton14up);
4651 DEFSYMBOL (Qbutton15up);
4652 DEFSYMBOL (Qbutton16up);
4653 DEFSYMBOL (Qbutton17up);
4654 DEFSYMBOL (Qbutton18up);
4655 DEFSYMBOL (Qbutton19up);
4656 DEFSYMBOL (Qbutton20up);
4657 DEFSYMBOL (Qbutton21up);
4658 DEFSYMBOL (Qbutton22up);
4659 DEFSYMBOL (Qbutton23up);
4660 DEFSYMBOL (Qbutton24up);
4661 DEFSYMBOL (Qbutton25up);
4662 DEFSYMBOL (Qbutton26up);
4663 DEFSYMBOL (Qmouse_1);
4664 DEFSYMBOL (Qmouse_2);
4665 DEFSYMBOL (Qmouse_3);
4666 DEFSYMBOL (Qmouse_4);
4667 DEFSYMBOL (Qmouse_5);
4668 DEFSYMBOL (Qmouse_6);
4669 DEFSYMBOL (Qmouse_7);
4670 DEFSYMBOL (Qmouse_8);
4671 DEFSYMBOL (Qmouse_9);
4672 DEFSYMBOL (Qmouse_10);
4673 DEFSYMBOL (Qmouse_11);
4674 DEFSYMBOL (Qmouse_12);
4675 DEFSYMBOL (Qmouse_13);
4676 DEFSYMBOL (Qmouse_14);
4677 DEFSYMBOL (Qmouse_15);
4678 DEFSYMBOL (Qmouse_16);
4679 DEFSYMBOL (Qmouse_17);
4680 DEFSYMBOL (Qmouse_18);
4681 DEFSYMBOL (Qmouse_19);
4682 DEFSYMBOL (Qmouse_20);
4683 DEFSYMBOL (Qmouse_21);
4684 DEFSYMBOL (Qmouse_22);
4685 DEFSYMBOL (Qmouse_23);
4686 DEFSYMBOL (Qmouse_24);
4687 DEFSYMBOL (Qmouse_25);
4688 DEFSYMBOL (Qmouse_26);
4689 DEFSYMBOL (Qdown_mouse_1);
4690 DEFSYMBOL (Qdown_mouse_2);
4691 DEFSYMBOL (Qdown_mouse_3);
4692 DEFSYMBOL (Qdown_mouse_4);
4693 DEFSYMBOL (Qdown_mouse_5);
4694 DEFSYMBOL (Qdown_mouse_6);
4695 DEFSYMBOL (Qdown_mouse_7);
4696 DEFSYMBOL (Qdown_mouse_8);
4697 DEFSYMBOL (Qdown_mouse_9);
4698 DEFSYMBOL (Qdown_mouse_10);
4699 DEFSYMBOL (Qdown_mouse_11);
4700 DEFSYMBOL (Qdown_mouse_12);
4701 DEFSYMBOL (Qdown_mouse_13);
4702 DEFSYMBOL (Qdown_mouse_14);
4703 DEFSYMBOL (Qdown_mouse_15);
4704 DEFSYMBOL (Qdown_mouse_16);
4705 DEFSYMBOL (Qdown_mouse_17);
4706 DEFSYMBOL (Qdown_mouse_18);
4707 DEFSYMBOL (Qdown_mouse_19);
4708 DEFSYMBOL (Qdown_mouse_20);
4709 DEFSYMBOL (Qdown_mouse_21);
4710 DEFSYMBOL (Qdown_mouse_22);
4711 DEFSYMBOL (Qdown_mouse_23);
4712 DEFSYMBOL (Qdown_mouse_24);
4713 DEFSYMBOL (Qdown_mouse_25);
4714 DEFSYMBOL (Qdown_mouse_26);
4715 DEFSYMBOL (Qmenu_selection); 4358 DEFSYMBOL (Qmenu_selection);
4716 DEFSYMBOL (QLFD); 4359 DEFSYMBOL (QLFD);
4717 DEFSYMBOL (QTAB); 4360 DEFSYMBOL (QTAB);
4718 DEFSYMBOL (QRET); 4361 DEFSYMBOL (QRET);
4719 DEFSYMBOL (QESC); 4362 DEFSYMBOL (QESC);