Homepage: https://www.gnu.org/software/emacs
Author: David Bakhash
Control Emacs through mouse strokes
This is the strokes package. It is intended to allow the user to
control Emacs by means of mouse strokes. Once strokes is loaded, you
can always get help be invoking `strokes-help':
> M-x strokes-help
and you can learn how to use the package. A mouse stroke, for now,
can be defined as holding the shift key and the middle button, for
instance, and then moving the mouse in whatever pattern you wish,
which you have set Emacs to understand as mapping to a given
command. For example, you may wish the have a mouse stroke that
looks like a capital `C' which means `copy-region-as-kill'. Treat
strokes just like you do key bindings. For example, Emacs sets key
bindings globally with the `global-set-key' command. Likewise, you
can do
> M-x strokes-global-set-stroke
to interactively program in a stroke. It would be wise to set the
first one to this very command, so that from then on, you invoke
`strokes-global-set-stroke' with a stroke. Likewise, there may
eventually be a `strokes-local-set-stroke' command, also analogous
to `local-set-key'.
You can always unset the last stroke definition with the command
> M-x strokes-unset-last-stroke
and the last stroke that was added to `strokes-global-map' will be
removed.
Other analogies between strokes and key bindings are as follows:
1) To describe a stroke binding, you can type
> M-x strokes-describe-stroke
analogous to `describe-key'. It's also wise to have a stroke,
like an `h', for help, or a `?', mapped to `describe-stroke'.
2) stroke bindings are set internally through the Lisp function
`strokes-define-stroke', similar to the `define-key' function.
some examples for a 3x3 stroke grid would be
(strokes-define-stroke c-mode-stroke-map
'((0 . 0) (1 . 1) (2 . 2))
'kill-region)
(strokes-define-stroke strokes-global-map
'((0 . 0) (0 . 1) (0 . 2) (1 . 2) (2 . 2))
'list-buffers)
however, if you would probably just have the user enter in the
stroke interactively and then set the stroke to whatever he/she
entered. The Lisp function to interactively read a stroke is
`strokes-read-stroke'. This is especially helpful when you're
on a fast computer that can handle a 9x9 stroke grid.
NOTE: only global stroke bindings are currently implemented,
however mode- and buffer-local stroke bindings may eventually
be implemented in a future version.
The important variables to be aware of for this package are listed
below. They can all be altered through the customizing package via
> M-x customize
and customizing the group named `strokes'. You can also read
documentation on the variables there.
`strokes-minimum-match-score' (determines the threshold of error that
makes a stroke acceptable or unacceptable. If your strokes aren't
matching, then you should raise this variable.
`strokes-grid-resolution' (determines the grid dimensions that you use
when defining/reading strokes. The finer the grid your computer can
handle, the more you can do, but even a 3x3 grid is pretty cool.)
The default value (9) should be fine for most decent computers.
NOTE: This variable should not be set to a number less than 3.
`strokes-use-strokes-buffer' will allow you to hide the strokes
buffer when doing simple strokes. This is a speedup for slow
computers as well as people who don't want to see their strokes.
If you find that your mouse is accelerating too fast, you can
execute an X command to slow it down. A good possibility is
% xset m 5/4 8
which seems, heuristically, to work okay, without much disruption.
Whenever you load in the strokes package, you will be able to save
what you've done upon exiting Emacs. You can also do
> M-x strokes-prompt-user-save-strokes
and it will save your strokes in your `strokes-file'.
Note that internally, all of the routines that are part of this
package are able to deal with complex strokes, as they are a superset
of simple strokes. However, the default of this package will map
S-mouse-2 to the command `strokes-do-stroke', and M-mouse-2 to
`strokes-do-complex-stroke'. Complex strokes are terminated
with mouse button 3.
You can also toggle between strokes mode by simple typing
> M-x strokes-mode
I hope that, with the help of others, this package will be useful
in entering in pictographic-like language text using the mouse
(i.e. Korean). Japanese and Chinese are a bit trickier, but I'm
sure that with help it can be done. The next version will allow
the user to enter strokes which "remove the pencil from the paper"
so to speak, so one character can have multiple strokes.
You can read more about strokes at:
https://web.archive.org/web/20041209171947/http://www.mit.edu/people/cadet/strokes-help.html
If you're interested in using strokes for writing English into Emacs
using strokes, then you'll want to read about it on the web page above
or just download from:
https://web.archive.org/web/20041204163338/http://www.mit.edu/people/cadet/strokes-abc.el
which is nothing but a file with some helper commands for inserting
alphanumerics and punctuation.
Great thanks to Rob Ristroph for his generosity in letting me use
his PC to develop this, Jason Johnson for his help in algorithms,
Euna Kim for her help in Korean, and massive thanks to the helpful
guys on the help instance on athena (zeno, jered, amu, gsstark,
ghudson, etc) Special thanks to Steve Baur, Kyle Jones, and Hrvoje
Nikšić for all their help. And special thanks to Dave Gillespie
for all the elisp help--he is responsible for helping me use the cl
macros at (near) max speed.
Tasks: (what I'm getting ready for future version)...
2) use 'strokes-read-complex-stroke for Korean, etc.
4) buffer-local 'strokes-local-map, and mode-stroke-maps would be nice
6) add some hooks, like `strokes-read-stroke-hook'
7) See what people think of the factory settings. Should I change
them? They're all pretty arbitrary in a way. I guess they
should be minimal, but computers are getting lots faster, and
if I choose the defaults too conservatively, then strokes will
surely disappoint some people on decent machines (until they
figure out M-x customize). I need feedback.
Other: I always have the most beta version of strokes, so if you
want it just let me know.
Fixme: Use pbm instead of xpm for pixmaps to work generally.