aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Monnier2001-10-14 22:45:14 +0000
committerStefan Monnier2001-10-14 22:45:14 +0000
commit845e4cf4d4ce8467528a9d96284052e42dc122b0 (patch)
tree88f69b3dd164f62dd9fc8d458b9635c693544581 /src
parent99776d43e2bca8f64487870c9fb0010ebc08be11 (diff)
downloademacs-845e4cf4d4ce8467528a9d96284052e42dc122b0.tar.gz
emacs-845e4cf4d4ce8467528a9d96284052e42dc122b0.zip
(access_keymap): Unify handling of `t' and generic-char.
If a parent is reached and noinherit is set, exit immediately. Use AREF and ASIZE macros. Call get_keyelt before checking KEYMAPP.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog4
-rw-r--r--src/keymap.c69
2 files changed, 33 insertions, 40 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index a4374db8a99..e59a04459f5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,9 @@
12001-10-14 Stefan Monnier <monnier@cs.yale.edu> 12001-10-14 Stefan Monnier <monnier@cs.yale.edu>
2 2
3 * keymap.c (access_keymap): Unify handling of `t' and generic-char.
4 If a parent is reached and noinherit is set, exit immediately.
5 Use AREF and ASIZE macros. Call get_keyelt before checking KEYMAPP.
6
3 * s/ms-w32.h (EXEC_SUFFIXES): 7 * s/ms-w32.h (EXEC_SUFFIXES):
4 * s/msdos.h (EXEC_SUFFIXES): 8 * s/msdos.h (EXEC_SUFFIXES):
5 * process.h (EXEC_SUFFIXES): Remove. 9 * process.h (EXEC_SUFFIXES): Remove.
diff --git a/src/keymap.c b/src/keymap.c
index 50f27273c72..75a12ead3ca 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -476,8 +476,7 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
476 int noinherit; 476 int noinherit;
477 int autoload; 477 int autoload;
478{ 478{
479 int noprefix = 0; 479 Lisp_Object val = Qunbound;
480 Lisp_Object val;
481 480
482 /* If idx is a list (some sort of mouse click, perhaps?), 481 /* If idx is a list (some sort of mouse click, perhaps?),
483 the index we want to use is the car of the list, which 482 the index we want to use is the car of the list, which
@@ -517,12 +516,13 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
517 516
518 { 517 {
519 Lisp_Object tail; 518 Lisp_Object tail;
520 Lisp_Object t_binding; 519 Lisp_Object t_binding = Qnil;
521 Lisp_Object generic_binding; 520
521 /* If `t_ok' is 2, both `t' and generic-char bindings are accepted.
522 If it is 1, only generic-char bindings are accepted.
523 Otherwise, neither are. */
524 t_ok = t_ok ? 2 : 0;
522 525
523 t_binding = Qnil;
524 generic_binding = Qnil;
525
526 for (tail = XCDR (map); 526 for (tail = XCDR (map);
527 (CONSP (tail) 527 (CONSP (tail)
528 || (tail = get_keymap (tail, 0, autoload), CONSP (tail))); 528 || (tail = get_keymap (tail, 0, autoload), CONSP (tail)));
@@ -536,7 +536,7 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
536 /* If NOINHERIT, stop finding prefix definitions 536 /* If NOINHERIT, stop finding prefix definitions
537 after we pass a second occurrence of the `keymap' symbol. */ 537 after we pass a second occurrence of the `keymap' symbol. */
538 if (noinherit && EQ (binding, Qkeymap)) 538 if (noinherit && EQ (binding, Qkeymap))
539 noprefix = 1; 539 return Qnil;
540 } 540 }
541 else if (CONSP (binding)) 541 else if (CONSP (binding))
542 { 542 {
@@ -544,15 +544,9 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
544 int c1, c2, charset; 544 int c1, c2, charset;
545 545
546 if (EQ (key, idx)) 546 if (EQ (key, idx))
547 { 547 val = XCDR (binding);
548 val = XCDR (binding); 548 else if (t_ok
549 if (noprefix && KEYMAPP (val)) 549 && INTEGERP (idx)
550 return Qnil;
551 if (CONSP (val))
552 fix_submap_inheritance (map, idx, val);
553 return get_keyelt (val, autoload);
554 }
555 else if (INTEGERP (idx)
556 && (XINT (idx) & CHAR_MODIFIER_MASK) == 0 550 && (XINT (idx) & CHAR_MODIFIER_MASK) == 0
557 && INTEGERP (key) 551 && INTEGERP (key)
558 && (XINT (key) & CHAR_MODIFIER_MASK) == 0 552 && (XINT (key) & CHAR_MODIFIER_MASK) == 0
@@ -566,22 +560,19 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
566 /* KEY is the generic character of the charset of IDX. 560 /* KEY is the generic character of the charset of IDX.
567 Use KEY's binding if there isn't a binding for IDX 561 Use KEY's binding if there isn't a binding for IDX
568 itself. */ 562 itself. */
569 generic_binding = XCDR (binding); 563 t_binding = XCDR (binding);
564 t_ok = 0;
565 }
566 else if (t_ok > 1 && EQ (key, Qt))
567 {
568 t_binding = XCDR (binding);
569 t_ok = 1;
570 } 570 }
571 else if (t_ok && EQ (XCAR (binding), Qt))
572 t_binding = XCDR (binding);
573 } 571 }
574 else if (VECTORP (binding)) 572 else if (VECTORP (binding))
575 { 573 {
576 if (NATNUMP (idx) && XFASTINT (idx) < XVECTOR (binding)->size) 574 if (NATNUMP (idx) && XFASTINT (idx) < ASIZE (binding))
577 { 575 val = AREF (binding, XFASTINT (idx));
578 val = XVECTOR (binding)->contents[XFASTINT (idx)];
579 if (noprefix && KEYMAPP (val))
580 return Qnil;
581 if (CONSP (val))
582 fix_submap_inheritance (map, idx, val);
583 return get_keyelt (val, autoload);
584 }
585 } 576 }
586 else if (CHAR_TABLE_P (binding)) 577 else if (CHAR_TABLE_P (binding))
587 { 578 {
@@ -590,22 +581,20 @@ access_keymap (map, idx, t_ok, noinherit, autoload)
590 All character codes without modifiers are included. */ 581 All character codes without modifiers are included. */
591 if (NATNUMP (idx) 582 if (NATNUMP (idx)
592 && (XFASTINT (idx) & CHAR_MODIFIER_MASK) == 0) 583 && (XFASTINT (idx) & CHAR_MODIFIER_MASK) == 0)
593 { 584 val = Faref (binding, idx);
594 val = Faref (binding, idx);
595 if (noprefix && KEYMAPP (val))
596 return Qnil;
597 if (CONSP (val))
598 fix_submap_inheritance (map, idx, val);
599 return get_keyelt (val, autoload);
600 }
601 } 585 }
602 586
587 /* If we found a binding, clean it up and return it. */
588 if (!EQ (val, Qunbound))
589 {
590 val = get_keyelt (val, autoload);
591 if (KEYMAPP (val))
592 fix_submap_inheritance (map, idx, val);
593 return val;
594 }
603 QUIT; 595 QUIT;
604 } 596 }
605 597
606 if (!NILP (generic_binding))
607 return get_keyelt (generic_binding, autoload);
608
609 return get_keyelt (t_binding, autoload); 598 return get_keyelt (t_binding, autoload);
610 } 599 }
611} 600}