help-gnu-emacs
[Top][All Lists]
Advanced

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

Re: elisp mouse programming problems


From: Alex Schroeder
Subject: Re: elisp mouse programming problems
Date: Wed, 20 Aug 2003 12:34:38 +0200
User-agent: Gnus/5.1003 (Gnus v5.10.3) Emacs/21.3.50 (gnu/linux)

"David Vanderschel" <address@hidden> writes:

> I am having a problem with overriding the global map
> for some mouse events.  For example, I can bind
> C-mouse-1 in a major mode mode-map for a major mode I
> created.  Yet when that mode is in effect, such a
> mouse click still goes to mouse-select-buffer (as it
> is correctly bound globally) and never reaches the
> function I bound to the key for the mode.  I do not
> have this problem with all mouse events, and I cannot
> figure out what is going wrong.  I am consistently
> successful in overriding the global binding of
> ordinary key sequences (as opposed to mouse events) in
> this manner.  Extra details appended.

One mouse click will generate not only the mouse click event, but also
a button-down event.  And if somebody binds a command to the
button-down event, then the command bound to the click event is never
called.

See (elisp)Button-Down Events.

> Also, in testing such things, I am confused by the
> fact that I cannot seem to redefine the bindings of a
> mode-map by simply setting it to nil and rerunning the
> (modified) code which builds the mode-map.  The old
> bindings seem to remain in effect.  If I kill emacs
> and restart it, the changed bindings do take effect.
> Not even killing the buffer with the new mode,
> reloading the file which defines the program, and
> rerunning the program which creates the special mode
> buffer helps.  What is it that I do not understand
> here?

A keymap is a list that starts with the symbol `keymap'.  Only the cdr
of that list is used by Emacs when looking up keys.  When you just
change the value of a mode-map, the old cdr will still be used.
(Maybe you need to draw box diagrams to see this.)

The correct solution depends on where the bindings are:  Global map?
Local map?  Overlays?  Text properties?

Alex.
-- 
http://www.emacswiki.org/alex/
There is no substitute for experience.


reply via email to

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