emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Function for deleting a key binding in a sparse keymap


From: Stefan Monnier
Subject: Re: Function for deleting a key binding in a sparse keymap
Date: Mon, 12 Dec 2005 10:52:07 -0500
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.0.50 (gnu/linux)

> (unless (FIND-IN special-event-map)
>   (if overriding-terminal-local-map
>       (FIND-IN overriding-terminal-local-map)
>     (if overriding-local-map
>         (FIND-IN overriding-local-map)
>       (unless (FIND-IN (KEYMAP-PROPERTY-AT-POINT))
>         (unless (FIND-IN-ANY EMULATION-MODE-MAP-ALISTS)
>           (unless (FIND-IN-ANY minor-mode-overriding-map-alist)
>             (unless (FIND-IN-ANY minor-mode-map-alist)
>               (unless (FIND-IN (LOCAL-MAP-PROPERTY-AT-POINT))
>                 (FIND-IN (current-local-map))))))))))
> (unless FOUND
>   (FIND-IN (current-global-map)))

How 'bout

(or (FIND-IN special-event-map)
    (if overriding-terminal-local-map
        (FIND-IN overriding-terminal-local-map)
      (if overriding-local-map
          (FIND-IN overriding-local-map)
        (or (FIND-IN (get-text-property (point) 'keymap))
            (FIND-IN-ANY emulation-mode-map-alists)
            (FIND-IN-ANY minor-mode-overriding-map-alist)
            (FIND-IN-ANY minor-mode-map-alist)
            (FIND-IN (or (get-text-property (point) 'local-map)
                         (current-local-map))))))
    (FIND-IN (current-global-map)))

BTW, the special-event-map should be moved elsewhere, since it's applied not
to event-sequences but to single events, during read-key-sequence (IIRC).
I.e. just like function-key-map and key-translation-map, it's
used differently.


        Stefan


PS: I wish the actual code were as clear as the above ;-)





reply via email to

[Prev in Thread] Current Thread [Next in Thread]