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.