[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: supporting mouse-entered, mouse-left
From: |
Stephen J. Turnbull |
Subject: |
Re: supporting mouse-entered, mouse-left |
Date: |
Sat, 01 Aug 2009 13:07:00 +0900 |
Steve Yegge writes:
> The mode decorates the source with various text properties to
> facilitate navigation, outlining, folding, etc. My goal is to link
> together all the references to each local variable,
Are you being imprecise here? Surely you have already done this
"linking" for other reasons?
> so they light up when you mouse over any of them.
Ie, the only problem you are asking about here is to get the motion
event, and run a hook on that?
> I can't use track-mouse,
*sigh*
> or at least I don't think I can, since this feature needs to
> trigger automatically as you move the mouse (from the idle loop).
Well, even if track-mouse doesn't do exactly what you want, it's not
clear to me that it's unusable. I can think of two interfaces that
might serve:
(1) a minor mode where a click toggles the highlighting corresponding
to the js2-mode text properties at the point of the click (no
motion tracking needed), and
(2) a minor mode which is activated by a click (or popup menu
selection), after which you can explicitly use track-mouse until
the next non-motion event or something like that. I don't think
this kind of mouse-tracking would require huge amounts of code for
what you've described, although there are few enough mouse clicks
that you may already be using them all.
I think you do want some kind of activation, otherwise if any mouse
motion enables the effect we'd have to coin a term "apoplectic fruit
salad".
If you want to test the "any motion" interface now, XEmacs has
`mode-motion-hook' which handles all mouse motion events. Eg,
(defvar sjt/counter 0)
(add-hook 'mode-motion-hook
(lambda (ignored)
(message "got one! (%d)")
(incf sjt/counter)))
immediately starts counting of motion events. Unfortunately, your
mode may not work in XEmacs without a fair amount of extra work due to
a lot of divergence in the last couple of years, but you could hack up
a test buffer with appropriate extents and stuff and see whether the
flashing is attractive or distractive.
`mode-motion-hook' is a variable declared in Lisp.
-- loaded from "/playpen/src/XEmacs/xemacs/+optimized/lisp/mode-motion.elc"
Value: nil
Setting it would make its value buffer-local.
Documentation:
Function or functions which are called whenever the mouse moves.
Each function must take a single argument of the motion event.
You should normally use this rather than `mouse-motion-handler', which
does some additional window-system-dependent things. This hook is local
to every buffer, and should normally be set up by major-modes which want
to use special highlighting. Every time the mouse moves over a window,
the mode-motion-hook of the buffer of that window is run.
> I'll take a look at implementing it when I get some time. I just
> wanted to vet the idea with the list to make sure I wouldn't be
> wasting my time.
It's been used in Lucid Emacs and XEmacs for over ten and probably
more than 15 years with success. I see no reason why it shouldn't
be adopted in Emacs as well.
- supporting mouse-entered, mouse-left, Steve Yegge, 2009/07/31
- RE: supporting mouse-entered, mouse-left, Drew Adams, 2009/07/31
- RE: supporting mouse-entered, mouse-left, Stephen J. Turnbull, 2009/07/31
- RE: supporting mouse-entered, mouse-left, Drew Adams, 2009/07/31
- RE: supporting mouse-entered, mouse-left, Drew Adams, 2009/07/31
- Re: supporting mouse-entered, mouse-left, Steve Yegge, 2009/07/31
- RE: supporting mouse-entered, mouse-left, Drew Adams, 2009/07/31
- Re: supporting mouse-entered, mouse-left,
Stephen J. Turnbull <=
Re: supporting mouse-entered, mouse-left, Steve Yegge, 2009/07/31
Re: supporting mouse-entered, mouse-left, Stefan Monnier, 2009/07/31