Mercurial > emacs
comparison lisp/subr.el @ 93664:c7dd307b0ec5
* subr.el (keymap-canonicalize): New function.
* mouse.el (mouse-menu-non-singleton): Use it.
(mouse-major-mode-menu): Remove hack made unnecessary.
* keymap.c (Qkeymap_canonicalize): New var.
(Fmap_keymap_internal): New fun.
(describe_map): Use keymap-canonicalize.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Fri, 04 Apr 2008 17:31:20 +0000 |
parents | c15f559a5ada |
children | 6604d09cf521 |
comparison
equal
deleted
inserted
replaced
93663:959f4471c16e | 93664:c7dd307b0ec5 |
---|---|
547 (if (integerp b) t | 547 (if (integerp b) t |
548 ;; string< also accepts symbols. | 548 ;; string< also accepts symbols. |
549 (string< a b)))))) | 549 (string< a b)))))) |
550 (dolist (p list) | 550 (dolist (p list) |
551 (funcall function (car p) (cdr p))))) | 551 (funcall function (car p) (cdr p))))) |
552 | |
553 (defun keymap-canonicalize (map) | |
554 "Return an equivalent keymap, without inheritance." | |
555 (let ((bindings ()) | |
556 (ranges ())) | |
557 (while (keymapp map) | |
558 (setq map (map-keymap-internal | |
559 (lambda (key item) | |
560 (if (consp key) | |
561 ;; Treat char-ranges specially. | |
562 (push (cons key item) ranges) | |
563 (push (cons key item) bindings))) | |
564 map))) | |
565 (setq map (funcall (if ranges 'make-keymap 'make-sparse-keymap) | |
566 (keymap-prompt map))) | |
567 (dolist (binding ranges) | |
568 ;; Treat char-ranges specially. | |
569 (define-key map (car binding) (cdr binding))) | |
570 (dolist (binding (prog1 bindings (setq bindings ()))) | |
571 (let* ((key (car binding)) | |
572 (item (cdr binding)) | |
573 (oldbind (assq key bindings))) | |
574 ;; Newer bindings override older. | |
575 (if oldbind (setq bindings (delq oldbind bindings))) | |
576 (when item ;nil bindings just hide older ones. | |
577 (push binding bindings)))) | |
578 (nconc map bindings))) | |
552 | 579 |
553 (put 'keyboard-translate-table 'char-table-extra-slots 0) | 580 (put 'keyboard-translate-table 'char-table-extra-slots 0) |
554 | 581 |
555 (defun keyboard-translate (from to) | 582 (defun keyboard-translate (from to) |
556 "Translate character FROM to TO at a low level. | 583 "Translate character FROM to TO at a low level. |