emacs-devel
[Top][All Lists]
Advanced

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

Re: A bug, I think, in key-binding


From: Richard Stallman
Subject: Re: A bug, I think, in key-binding
Date: Tue, 22 Aug 2006 11:41:44 -0400

    >     > Perhaps we should have a function to do lookup on a key
    >     > sequence just the same way the command loop does.  That can be
    >     > written in Lisp; it just has to see if the first event is a
    >     > mouse even, and move point there inside save-excursion.

    ...
    > Perhaps an optional argument to key-binding is the way to do it.
    > Would you like to implement that?

    Actually, I don't think we should need an optional argument at all:
    when feeding an event into key-binding (which is defined to use all
    local maps), one would likely rather have the same maps apply as
    read-key-sequence has.

I agree that is the cleanest design, but I was worried about the
incompatible change it involves.

So I just checked all the calls to `key-binding' and `XYZ-key-binding'
in the Emacs sources (except those in viper).  It seems that this
change would hardly ever cause a bug, and often might fix a bug.  So I
am now in favor of your proposal.

Would someone please implement this, then ack this message?


    key-binding is a built-in function in `C source code'.
    (key-binding SEQUENCE &optional ACCEPT-DEFAULT NO-REMAP LOCATION)

    Return the binding for command SEQUENCE in current keymaps.
    SEQUENCE is a string or vector, a sequence of keystrokes,
    or an event to look up.
    The binding is probably a symbol with a function definition.

    Normally, `key-binding' ignores bindings for t, which act as default
    bindings, used when nothing else in the keymap applies; this makes it
    usable as a general function for probing keymaps.  However, if the
    optional second argument ACCEPT-DEFAULT is non-nil, `key-binding' does
    recognize the default bindings, just as `read-key-sequence' does.

    Like the normal command loop, `key-binding' will remap the command
    resulting from looking up KEY by looking up the command in the
    current keymaps.  However, if the optional third argument NO-REMAP
    is non-nil, `key-binding' returns the unmapped command.

    If SEQUENCE is a mouse event, the current maps may depend on
    whether the event occured above mouse-sensitive areas.  If
    LOCATION is an event, the current maps will be selected according
    to LOCATION rather than SEQUENCE.  This can be used for looking up
    artificial bindings like `follow-link'.  If LOCATION is non-nil
    but not an event, the current maps will not be mouse-sensitive
    even when SEQUENCE is an event.





reply via email to

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