Article View: comp.archives
Article #4785[list.epoch] Using mouse during a search
From: Heinz Schmidt
Date: Thu, 09 May 1991 05:24
Date: Thu, 09 May 1991 05:24
295 lines
12524 bytes
12524 bytes
Archive-name: emacs/epoch/sky-mouse/1991-04-26
Archive-directory: icsi-ftp.berkeley.edu:/pub/ai/sky-mouse/ [128.32.201.55]
Original-posting-by: hws@ICSI.Berkeley.EDU (Heinz Schmidt)
Original-subject: Using mouse during a search
Reposted-by: emv@msen.com (Edward Vielmetti, MSEN)
> Date: 26 Apr 91 15:43:21 GMT
> From: olympus!chase@cis.ohio-state.edu (Chris Chase)
> Sender: epoch-request@cs.uiuc.edu
>
> Quite often during a search I use the mouse to place the point
> or select a region. I often forget to exit the search and using
> the mouse does not terminate the seach unlike using control keys
> which always terminate a search. Thus, if I place the point then
> type something the search command just continues. This continually
> messes me up.
>
> How can I make the mouse button commands terminate a search? So if
> I place the point or select a region during a search the corresponding
> search terminates.
>
> Thanks in advance,
> Chris Chase
> --
> EE Department
> Princeton University
> chase@ee.princeton.edu
Hi.
Look for our mouse package, available via anonymous ftp. The recursive
edit problem you mention is solved by placing a
mouse-exit-minibuffer command on C-Left.
We did not want to have every mouse-set-point exit the minibuffer
because it is often useful to yank some text from a buffer into the
minibuffer or vice versa.
Also the redisplay problem that was a subject of many recent mails is
solved there by having mouse-set-point do an explicit redisplay call.
So the cursor follows mouse pointing even if you have typed into
another screen (unsynchronized kbd and mouse input seems to be one
source of this problem, because the redisplay logic seems to go like:
'typein? oh we don't have to redisplay now, lets do the command
first.').
For more info on the package cf. the blurb below or the README file
on our ftp host.
--------------------------------------------------------------------------
Heinz W. Schmidt hws@icsi.berkeley.edu
International Computer Science Institute, Berkeley (415) 642-4274 x175
---------------------------------
FTP: icsi-ftp.berkeley.edu [Currently: 128.32.201.55]
VERSION
-------
The latest version on icsi-ftp (pub/ai/sky-mouse) is
-rw-r--r-- 1 hws 79811 Feb 4 14:45 sky-mouse-1-1.tar.Z
Replacement history:
-rw-r--r-- 1 hws 59665 Dec 17 14:14 sky-mouse-1-0.tar.Z
-rw-r--r-- 1 hws 56482 Dec 11 16:43 sky-mouse.tar.Z
FUNCTION & CONCEPTS
-------------------
The package started off as a substitute for a few Zmacs Mouse
functions for people that found the transition from Lisp machines to
Unix harsh with respect to source-level programming support.
In the meantime it has taken kind of a direction of its own. The
typical mouse save/kill/yank operations are still there and based on
regions and the kill-ring. That is, what the mouse selects is the
Emacs region. Beyond this the package's syntax knowledge was
considerably improved. Beside its use of the syntax table by means of
an Dan Pierson's thing.el plus some enhancements by a set of
'language-tools', the package understands 'syntactic things' defined
by 'matching delimiters' like
'if' 'end'
'while' 'end'
...
In this way it carries over the selection capabilities known from Lisp
and C mode to languages like Eiffel/Sather that are moderate or even
poor in their use of parentheses. Yet, parsing is essentially
restricted to 'paren counting' like in the other modes.
In particular the command mouse-yank-thing-to-point allows to compose
code at the cursor point without moving the mouse back and forth
between source and destination. While the mouse is 'searching for
good patterns', composition can be checked visually very fast while
the hand can rest on the mouse for a sequence of command invocations
and typically requires only small movements in the source
window/screen. For yanking across Epoch screens, the mouse can
be used to fix the focus (mouse-toggle-focus), iteratively yank
some pieces of code to the focus, and finally release the focus
(mouse-toggle-focus) or simply set it to another screen.
Similarly a single mouse button can be used for a combination of
indentation and filling. The object 'can decide' which formatting
command is meaningful (comments fills, procedures indent etc.)
Operations like this decrease the number of times the hand has to move
back and forth between kbd and mouse, since a larger sequence of updating
operations can be performed fast with a series of clicks and drags
before the next typing becomes necessary.
The modifiers/button combination choses the command to be applied.
(C-M for instance, typically relates to a syntactic construct).
The mouse position chooses the object the command is applied to. Thus
selection and view/update are logically separated. Multi click hints
are supported with a multi-click-distance in microseconds.
The first dimension of a selection is its method: 'click', 'drag',
'extend', 'thing' and a few combinations thereof. For instance some
formatting commands apply to the marked region with drag and to the
thing under the mouse with click.
Thing clicks have a second dimension defined by the handle of objects
to which we click. The current 'thing selection' works uniformly
in all programming language modes that we use:
You point to You mean
end of line line
comment-start comment up to the end of line
word char word
symbol char symbol
punctuation char to end of next symbol
open paren char group
close paren char group
whitespace whitespace
keyword first char corresponding language construct
The methods can be easily customized by the syntax-table and the value
of matching-identifiers-alist.
Under Epoch, multi-click processing is supported. Actually the
underlying model is Multi-click hints. These allow mouse commands to
`extend their meaning' depending on the number of clicks that invoked
them.
For instance, the command mark-thing takes advantage of multi-click hints as
follows
Click to Multi-click-hint Selection
word nil word
symbol nil symbol
word/symbol 2 symbol
word/symbol 3 line
word/symbol 4 sentence
word/symbol 5 paragraph
paren nil group
paren n=2,3,.. outward n levels
The current implementation is limited because timeouts and event times
are not visible to Emacs Lisp. This can lead to confusion when the
machine is busy or when commands have side-effects. [As soon as Epoch
allows we will change the logic. It is to collect multi-click
sequences while incrementally and visibly extending regions. Then the
command is run and ideally perhaps it is not even to interpret the
multi-click hint.]
TO RUN THE PACKAGE YOU NEED
===========================
Emacs 18.55-18.57 with x-mouse support.
or
Epoch 3.2 upwards.
We run it under olwm and twm. Watch out for the 'window' button event
definitions in your .twmrc! Suggestions for customizing X resources
and setting up twm mouse buttons are part of the documentation.
The package supports buffer local mouse command tables. For instance
with Epoch's contrib hyper-info or with our scroll-mode, different
mouse cursors and button are activated by just moving the mouse into
the corresponding window. For Epoch this may be taken for granted. For
x-mouse we wrote our own mouse handling extension to this effect.
The basic functions for epoch + x-mouse are implemented in two
separate files that realize the same low-level abstraction of
region-oriented mouse commands. The main body of commands builds on
the common abstraction and is shared in the two versions. The package
figures what to load at runtime.
The Epoch + x-mouse versions are functionally equivalent. The only
disadvantage under x-mouse is missing visual feedback by underlining
(video-reverting) the region. Here the cursor just jumps back and
forth once to let you know the selection.
DOCUMENTATION
-------------
C-h z switches into a dialog similar to a combination of C-h c
(brief describe) and C-h d (document) known for kbd commands:
You press the mouse buttons and see the online documentation until
you finally end the dialog with RET.
C-h Z brings up a verbose Mouse Tutorial (intended to be) written in
the style of the tutorial that you get with C-h T.
The mouse tutorial includes a section on mouse programming and mouse
modes.
WHAT'S ON THE MOUSE BY DEFAULT
==============================
The global mouse map includes the following functions by default.
Mod Left Middle Right Options
-- Select Extend Paste wmgr = olwm
-- Select Paste Extend wmgr /= olwm
S Mark Thing Save/Kill/Yank -- (reserved)
C Exit minibuffer Kill to point Toggle Scroll Mode
M Toggle Focus Yank to point Warp to point
M-S Exec kbd macro Exec point Fn Exec region Fn
C-S Buffer menu Help menu -- (reserved) only x-mouse
C-M Mark Thing Yank to point Format (fill or indent)
C-M-S Help Mouse Help Mouse Help Mouse
A minor scroll mode shows an example of how to define buffer local
mice:
| Left Middle Right
----------------------------------------------------------------------
|
- | Line to top Drag Scroll Line to bottom
|
S | Page up Page percent Page down
|
M | All up Help All down
|
M-S | Help Help Help
|
C | End scrolling End scrolling End scrolling
|
RELATED PACKAGES
================
The ftp site contains a number of related Elisp files. In particular
language-tools.el a number of generic commands for
programming environments
scr-title.el functions on screen title bars, such as
replacing the common tens of *scratch* titles
by other meaningful title bars.
a number of other files we grabbed from the Epoch mailing list.
-- comp.archives file verification
icsi-ftp.berkeley.edu
total 191
-rw-r--r-- 1 hws 5073 Apr 1 17:11 #README-#
-rw-r--r-- 1 hws 2447 Feb 5 22:15 scr-title.el.Z
-rw-r--r-- 1 hws 2966 Feb 5 20:30 SAMPLE-DOT.epoch.Z
-rw-r--r-- 1 hws 2881 Feb 5 20:06 BLURB
-rw-r--r-- 1 hws 4999 Feb 5 17:15 README-
-rw-r--r-- 1 hws 79997 Feb 4 23:57 sky-mouse-1-1.tar.Z
-rw-r--r-- 1 hws 11538 Feb 4 01:30 mini-cl.el.Z
-rw-r--r-- 1 hws 10754 Feb 4 01:09 language-tools.el.Z
-rw-r--r-- 1 hws 2384 Feb 4 01:06 epoch-util.el.Z
-rw-r--r-- 1 hws 1767 Feb 4 01:06 thing.el.Z
-rw-r--r-- 1 hws 1426 Jan 30 23:20 hyper-man.patch.Z
-rw-r--r-- 1 hws 1829 Jan 16 19:16 common-styles.el.Z
-rw-r--r-- 1 hws 59665 Dec 17 22:14 sky-mouse-1-0.tar.Z
-rw-r--r-- 1 hws 1816 Dec 1 23:17 bitmaps.el.Z
found sky-mouse ok
icsi-ftp.berkeley.edu:/pub/ai/sky-mouse/
Technical Details
Message-ID:
<1991May9.052446.28086@ox.com>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!rphroy!ox.com!msen.com!emvReferences:
<9104262120.AA17248@icsib11.Berkeley.EDU>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!rphroy!ox.com!msen.com!emv From: hws@ICSI.Berkeley.EDU (Heinz Schmidt) Newsgroups: comp.archives Subject: [list.epoch] Using mouse during a search Message-ID: <1991May9.052446.28086@ox.com> Date: 9 May 91 05:24:46 GMT References: <9104262120.AA17248@icsib11.Berkeley.EDU> Sender: emv@msen.com (Edward Vielmetti, MSEN) Reply-To: hws@ICSI.Berkeley.EDU (Heinz Schmidt) Followup-To: list.epoch Organization: OTA Limited Partnership Lines: 295 Approved: emv@msen.com (Edward Vielmetti, MSEN) X-Original-Newsgroups: list.epoch