[net.emacs] hierarchical key-bindings

scc@jenny.UUCP (Stephen Crawley) (07/11/85)

People have mentioned using non-Gosling key bindings for various reasons.
The most common reason seems to be that they want to make emacs look like
the old frobitz editor they used back at college.  The other reason quoted
is that the Gosling bindings are hard to learn and hard to remember.  Indeed
the first reaction of a novice to the 100's of different key sequences is 
one of terror.

At Cambridge, we first tried without much success to emulate SSE, an old
editor we knew and some of us loved.  Then Dan Craft came up with a
hierachical key binding regime.  The key features of HierarKeys are
that the bindings are self documenting, and mneumonic.  

All bound functions are classified hierarchically into of levels and
sublevels.  Each level is assigned a mneumonic letter.  Except at the
top level, HierarKeys makes no distinction between ^X, x and X.  This
was done on the principle that differences in case etc are distinctly
non-mneumonic.

As an example, the top level of the "lab standard" bindings currently
has 15 sublevels.  These are Next, Previous, beginning/backward(A),
end/forward(Z), Window, Buffer, File, Search, Replace, Execute, Delete,
Copy, insert/Yank, Other and heLp.  The sublevels of Search are Forward,
rpt fWd, Backward, rpt bKwd, increment fwd(Z), increment bkwd(A) and
Regular.  All of these but the last are terminal ... they are bound to
built-in or MLisp functions, but Regular is another of bindings
containing Forward, rpt fWd, Backward, and rpt bKwd.  So, to execute
a forward regular expression search, one would type ^SRF or ^Srf or
^S^Rf and so on.

The most important feature of the system ... the one which makes it
self-teaching ... is that it displays the menu of Hierarchy bindings for
the current level in the minibuffer.  Of course, the menu is usually
to small to fit in the minibuffer, so ^\ is universally bound to a
function for scrolling the minibuffer horizontally over the menu.  For
ease of use, the most commonly used functions in a level are displayed
first.

In addition to the 15 (in our case) top level HierarKey bindings, there
are a number of control keys that are available for other things.  For
example ^M, ^I, ^? and the cursor keys have normal meanings, and ^Q, ^V,
^X and ^T are bound to accelerators for backword word (^AW), forward
word (^ZW), delete next char (^DC) and transpose characters (^DT).
Since most of our terminals have numeric key pads and/or function keys,
these are also used as accelerators.

The binding system was first implemented in MLISP, then in C to make it
go fast.  The vast majority of emacs users in Lab make use of
HierarKeys.  The general opinion is that the combination of a well
thought out, hierarchical mneumonic (not perfect) set of bindings, along
with prompting in the minibuffer makes HierarKeys easy to use for both
novices and experienced users.

Unfortunately, all of this has been implemented for Unipress release 1
emacs, so it is not really in a suitable state for general release.
Maybe sometime, someone at the Lab will find the time to port HierarKeys
and all the other stuff we use to GNU emacs.  However, I can post the
articles describing HierarKeys and other Cambridge stuff to anyone who
asks.

			Stephen C. Crawley

ARPA:	scc%cl.cam.ac.uk@ucl-cs.ARPA  SMail: Cambridge Univ. Computer Lab.,
JANET:	scc@uk.ac.cam.cl                     Corn Exchange Street,
UUCP:	{ukc,kcl-cs}!cl-jenny!scc	     Cambridge CB2 3QG, 
PHONE:	+44 223 352 435                      England.