[gnu.emacs] subsystem's style guide, plus a few "wish list" items.

gwl@sun.ufnet.ufl.edu (Gerry Lawrence) (06/14/89)

In <3246@mhres.mh.nl> jv@mhres.mh.nl (Johan Vromans) writes:

> I think it would be wise to coordinate on the look and feel of
> subsystems. One of the major advantages of GNU Emacs' subsystems is
> that they all behave similar. This is severely damaged by having these
> subsystems behave differently.

Yes! one of my biggest gripes is that I have to re-customize every new piece
of software to make it work at all, let alone like I want it to.  My situation
is worse than most because on any given day I use several different terminals,
all with different keyboards.  I even get stuck using gnu-emacs on VMS (no
comment).  Most of the time I don't have C-s or C-q available (dial-up
terminal or vt200).

Meanwhile every author of YAEUP (Yet Another Emacs Utility Package) is faced
with the unpleasant and impossible task of binding the hundreds and hundreds
of new functions to keys that _seem_ intuitive or convenient.

Don't get me wrong, I appreciate free software, and am generally impressed
with the quality of emacs utility software.  Neither do I blame authors for
assigning key bindings; there are no standards to follow, and even if there
were I wouldn't like them or couldn't use them (terminal not having C-s,C-q).

I've also always wanted a way to LOCK a key, that is a way to bind a key that
local rebindings can't override.  As an example, I always want C-c,C-c to
suspend-emacs, no matter what.  But of course packages like to set the local
binding of this, and suddenly, I'm stuck with rebinding the key in the
mode-hook, as well as searching through the "documentation" for other key
bindings that are going to screw me up.  Another key that has to be rebound is
the ` key on vt200's and new IBM-PC keyboards, which is for some reason placed
where the ESCAPE key should be.

Yes, I realize that the solution to my problem is to find one keyboard and
stick to it.  Alas, this seems a professional pipe dream right now.

SO, what to do?  I don't believe that a set of standards is the answer,
because any standard is going to be subject to the whim of its authors, and
not reflect the needs and choices of the user.  The best feature of Emacs is
that if you don't like it, you can change it, but I don't like to _have_ to
change it all the time.

One possible solution to this problems is to create another level between keys
and functions, call it maybe "meta-keyboard".  Programs (including emacs
itself) shouldn't bind functions to key's directly, but use the new keyboard
interface.  In order for this to work, of course, programmers would have to
adopt this "standard" for future packages, as well as re-write all the
existing code.

We could implement this now by re-writing global and local set-key to check
for the existence of key-bindings, and if a key is bound to a "similar"
function, bind it to that key.  Unfortunately there is no way that the program
could know that "move-forward" and "subsystem-fancy-move-forward" are
basically the same thing and the user would want the new function to be bound
to the old key.  Sounds like a lisp ai type senior project ;-)

Of course, if we _really_ wanted to bind keys "intuitively", we'd need some
sort of ability to log the frequency of use for functions and keys over a
period of time.  (I don't know is gnu emacs has this capability, haven't
looked)  Armed with this info we could bind keys according to their known
frequency of use.  Any takers?

Flame on and get your high-voltage-electric-lisp warmed up, you're going to
need it!


Gerry Lawrence     UFNET University of Florida Network Operations

gwl@sun.ufnet.ufl.edu
gwl%sun.ufnet.ufl.edu@bikini.cis.ufl.edu
UUCP:     ...!gatech!uflorida!sun.ufnet.ufl.edu!gwl
BITNET should try:    gwl@ufl.edu   (Thanks to CIS dept!)

--
Gerry Lawrence    gwl@sun.ufnet.ufl.edu
UFNET

jv@mh.nl (Johan Vromans) (06/14/89)

In article <20460@uflorida.cis.ufl.EDU> gwl@sun.ufnet.ufl.edu (Gerry Lawrence) writes:

 > [...]  I don't believe that a set of standards is the
 > answer, because any standard is going to be subject to the whim of
 > its authors, and not reflect the needs and choices of the user.

I think you miss an important point here. It is up to us *USERS*
to define the standards. Authors of software packages should find that
their packages are more easy to accept if they conform to certain
standards. 

 > [...]  Unfortunately there is no way that the program could know
 > that "move-forward" and "subsystem-fancy-move-forward" are basically
 > the same thing and the user would want the new function to be bound
 > to the old key.

That's why I suggested buffer-local functions some time ago in this
newgroup.

 > Of course, if we _really_ wanted to bind keys "intuitively", [...]

A good standard can help intuition :-) .
--
Johan Vromans			 jv@mh.nl via european backbone (mcvax)
Multihouse Automatisering bv		uucp: ..!{mcvax,hp4nl}!mh.nl!jv
Doesburgweg 7					  phone: +31 1820 62944
2803 PL Gouda - The Netherlands			    fax: +31 1820 62500