all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Xah Lee <xahlee@gmail.com>
To: help-gnu-emacs@gnu.org
Subject: Keyboard Hardware's Influence on Keyboard Shortcut Design
Date: Wed, 16 Jun 2010 16:45:03 -0700 (PDT)	[thread overview]
Message-ID: <b6bc4f32-6882-4f0e-8d62-6cabc54227ce@r5g2000prf.googlegroups.com> (raw)
In-Reply-To: b1e84c4a-e74e-4ace-9b0f-a00b370eb61d@q39g2000prh.googlegroups.com

Extended my post from this thread.

• Keyboard Hardware's Influence on Keyboard Shortcut Design
  http://xahlee.org/emacs/keyboard_hardware_and_key_choices.html

plain text version follows.
----------------------------------------------------------------------

Keyboard Hardware's Influence on Keyboard Shortcut Design

Xah Lee, 2010-06-16

In my study of keyboarding in the past 20 years, i've noticed that the
choices of many shortcuts in many apps are adopted to the many aspects
of the keyboard hardware of the time in use by the community. Emacs's
keybindings are not simply based on the first letter of commands, but
the qwerty layout's key positions have significant influence on it.
This also applies to the letter choice of unix's shell commands. Much
of this influences of design are unconscious.

--------------------------------------------------
Emacs's Meta and Control

As a example, emacs's notion of “Meta”, and heavy use of Control as
primary modifier, and avoiding any Ctrl+Shift+‹letter› in its keyboard
shortcuts, are caused by the lisp keyboard hardware and dumb terminals
of 1980s.
lisp-machine-keyboard-2-left

Symbolics's lisp machine keyboard PN 365407 Rev C. full keyboard❐.
right side close up❐. Photo by Joey Devilla. Used with permission.

For detail, see: Why Emacs's Keyboard Shortcuts Are Painful.

--------------------------------------------------
vi's Esc key and J K H I

Unix vi's use of j k h i for cursor movement, and the choice of Esc
key for mode switching, came from the keyboard it was developed on,
the ADM3A terminal.
terminal ADM3A vi

The ADM3A terminal. Source
terminal ADM3A keyboard layout

The ADM3A terminal's keyboard layout. Source

--------------------------------------------------
Gaming's W A S D

The gaming's convention of W A S D for character movement keys, is
also shaped by the PC keyboard's physical key layout used at the time.

Most people need to use the right hand for the mouse for operating a
gun or view, this leave the left hand for the less accuracy intensive
task of controlling the character.

This leaves the physical arrow keys, but those have some problems. The
arrow keys are on the right side of the keyboard, making it awkward to
use with left hand. So, some inverted T cluster of keys on the main
section of the keyboard is chosen.

But why not say

   E
 S D F

keys? They are in the standard typing position. Instead, W A S D is
more suitable, because W A S D is on the neighbor of Caps Lock, Tab,
Shift, Control, Alt, that gamers needs to use for Firing, Shield,
Jump, change weapon, etc. So, W A S D becomes the convention.

Also note that the common layout is QWERTY. W A S D is inverted T on
QWERTY layout. For those using the The Dvorak Keyboard Layout, the W A
S D keys are scattered and is a problem. In fact, in the early days,
many games do not respect user's choice of key layout in Operating
System, nor does it provide ways for users to change the keys. Even
today, some game software still have this problem, notably Second
Life. (In the early days, say mid 1990s, Operating systems such as
Windows hardly have a consistent keyboard layout API for programers)

--------------------------------------------------
The X C V for Cut Copy Paste

Another history is the convention of X C V keys for Cut Copy Paste.
This came from Apple.

Apple computer, in the late 1980s and early 1990s, popularized the
undo, cut, copy, paste concepts, and in general the computer keyboard
shortcuts concept. These keys are chosen because they are all adjacent
and on the left side of the keyboard. Also in this set are Quit (q),
Close (w), Select All (a), Save (s), Duplicate (d), and Undo (z). The
only exceptions are Open (o) and Print (p) on the right side of
keyboard.

Q W
 A S D
 Z X C V

All these keys have become universally the standard on about all
applications on Windows, Mac, Linux today, possibly except the Z for
undo and D for Duplicate.

See: Cut, copy, and paste.

--------------------------------------------------
Windows's PrtScn/SysRq for Screenshot

On today's PC keyboard, you'll find quite a few relic keys. PrtScn/
SysRq, ScrLk, Pause/Break, Insert. They used to have meaningful
purposes in the 1980 or earlier, some of them are separate keys. But
computer hardware changes, and software changes, dramatically over the
past 20 years. Keyboard itself does not change as fast. So, these keys
became defunct. Because the key name PrtScn somewhat relates to
screenshot capture, so Windows has chose it to be the key for saving
screenshots. Similarly, the “Backspace” key, was chosen as browser's
back to previous page shortcut. Note that this key is labeled “Delete”
on Apple's keyboards, even they sent the exact same signal. In Apple's
operating system, in Mac Classic of the 1990s or Mac OS X since early
2000s, this key was not used for browser's back function, only so in
mid 2000s when Apple started to adopt many Windows's conventions.

See also: Difference Between Apple and PC keyboards.

--------------------------------------------------
Conclusion?

If there's any conclusion, it is that many keyboard shortcut or hotkey
choices are based on what is practical at the time. Issues of logical
design, ergonomics, consistency, efficiency, are less important when
it conflict with practicality. Some of these concept didn't even exist
at the time, and some choices was good at the time but computer
keyboard has changed long since.

In retrospect, many of the choices are not the best today. For
example, qwerty layout was practical at the time, but the Dvorak
Layout was invented too late, when a convention was already
established, and ergonomics isn't as big a concern at the time since
not that many people need to use typewriters, but typing on computer
is done by everyone today, and programing have become a field that's
some million times more than the number of typists in the past.

Emacs's primary modifier the Ctrl is much better at the Alt position
on today's PC keyboards.

“vi”'s Esc might be better today at PC keyboard's Alt or Caps Lock.
“vi”'s H J K L is still pretty good, but arguably better with:

   I
 J K L

The QWERTY really should be Dvorak today.

The defunct keys, Insert, ScrLk, Pause, Break, really should be gone.
There needs to be keys to switch to previous next app/window/tab, or
toggle Show/Hide current window. The Num Lock on the number keypad
also is a relic, from a time long past that keyboards doesn't have
dedicate arrow keys and Page up/down Home/End etc keys.

  Xah
∑ http://xahlee.org/

  parent reply	other threads:[~2010-06-16 23:45 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <alpine.OSX.2.00.1006031053170.77397@hsinghsing.panda.com>
     [not found] ` <hu925r$1b$1@north.jnrs.ja.net>
     [not found]   ` <alpine.OSX.2.00.1006031431510.77397@hsinghsing.panda.com>
2010-06-04  7:59     ` line-move-visual Uday S Reddy
     [not found]       ` <87pr07qjio.fsf@thinkpad.tsdh.de>
2010-06-04 11:24         ` line-move-visual Uday S Reddy
2010-06-04 12:49           ` line-move-visual Tassilo Horn
2010-06-09 19:51             ` line-move-visual Joseph Brenner
2010-06-09 20:22               ` line-move-visual Brendan Halpin
2010-06-10  1:23               ` line-move-visual Stefan Monnier
     [not found]         ` <hualdf$eln$1@north.jnrs.ja.net>
2010-06-04 13:00           ` line-move-visual Tassilo Horn
2010-06-04 14:51             ` line-move-visual Stefan Monnier
2010-06-04 20:53               ` line-move-visual Tassilo Horn
2010-06-09 19:42               ` proposed keyboard-macro to record to elisp (was Re: line-move-visual) Joseph Brenner
2010-06-09 22:42                 ` LanX
     [not found]             ` <871vcmhq79.fsf@wivenhoe.ul.ie>
     [not found]               ` <hub2ss$is4$1@north.jnrs.ja.net>
2010-06-04 14:45                 ` line-move-visual Brendan Halpin
2010-06-04 17:49               ` line-move-visual Xah Lee
2010-06-04 18:18                 ` line-move-visual Mark Crispin
2010-06-04 19:19                   ` line-move-visual Xah Lee
     [not found]                     ` <alpine.OSX.2.00.1006041829210.77397@hsinghsing.panda.com>
     [not found]                       ` <089883ee-0a63-4cb4-a0ec-d2fe4e71cc03@y18g2000prn.googlegroups.com>
2010-06-06  9:53                         ` line-move-visual Uday S Reddy
2010-06-06  9:39                           ` line-move-visual David Kastrup
     [not found]                             ` <hug5rv$6d2$1@north.jnrs.ja.net>
2010-06-06 15:21                               ` line-move-visual Tassilo Horn
2010-06-07  8:19                                 ` line-move-visual Uday S Reddy
     [not found]                                   ` <m2fx0z46wj.fsf@gmail.com>
2010-06-07 16:20                                     ` line-move-visual Stefan Monnier
2010-06-06 15:43                               ` line-move-visual Alain Ketterlin
     [not found]                                 ` <87wrucccl3.fsf_-_@marauder.physik.uni-ulm.de>
2010-06-07  6:18                                   ` Wrong use of format=flowed antidote Uday S Reddy
2010-06-07 21:30                                 ` line-move-visual Joost Kremers
2010-06-06 18:17                               ` line-move-visual Mark Crispin
     [not found]                                 ` <4C0C466E.3000803@thadlabs.com>
2010-06-07  2:53                                   ` line-move-visual Mark Crispin
2010-06-07  8:46                               ` line-move-visual Tim X
2010-06-07 16:23                                 ` line-move-visual Stefan Monnier
2010-06-09 20:23                                   ` line-move-visual Joseph Brenner
2010-06-07  8:39                             ` line-move-visual Tim X
2010-06-10 10:12                               ` line-move-visual Uday S Reddy
2010-06-10 13:43                                 ` line-move-visual Stefan Monnier
2010-06-10 15:17                                   ` line-move-visual Uday S Reddy
2010-06-10 19:53                                     ` line-move-visual Stefan Monnier
2010-06-10 15:44                                   ` line-move-visual despen
2010-06-10 22:02                                   ` line-move-visual Tassilo Horn
2010-06-10 23:56                                     ` line-move-visual Uday S Reddy
2010-06-10 22:48                                   ` line-move-visual Evans Winner
     [not found]                                     ` <slrni2ja96.6pq.nospam-abuse@powdermilk.math.berkeley.edu>
2010-06-29 11:09                                       ` HOWTO: Cowtow to old farts Xah Lee
2010-06-10 16:57                                 ` line-move-visual Mark Crispin
2010-06-10 18:38                                   ` line-move-visual Uday S Reddy
2010-06-11 23:56                                     ` line-move-visual Mark Crispin
2010-06-12  0:17                                       ` line-move-visual Wojciech Meyer
2010-06-13 17:23                                         ` line-move-visual Mark Crispin
2010-06-13 20:56                                           ` line-move-visual Alan Mackenzie
2010-06-14  0:42                                             ` line-move-visual Jim Diamond
2010-06-14 10:49                                             ` line-move-visual Uday S Reddy
2010-06-14 17:16                                               ` line-move-visual Alan Mackenzie
2010-06-14 17:34                                                 ` line-move-visual Uday S Reddy
2010-06-15  9:26                                               ` line-move-visual Tim X
2010-06-15 13:49                                                 ` line-move-visual Stefan Monnier
     [not found]                                                   ` <87sk4n3ocs.fsf@rapttech.com.au>
2010-06-16 14:43                                                     ` line-move-visual Stefan Monnier
     [not found]                                             ` <m2k4q18od5.fsf@softwarematters.org>
     [not found]                                               ` <jwvaaqxbcca.fsf-monnier+gnu.emacs.help@gnu.org>
2010-06-15  6:54                                                 ` line-move-visual Pascal J. Bourguignon
2010-06-15  8:42                                                   ` line-move-visual Uday S Reddy
2010-06-15  9:30                                                     ` line-move-visual David Kastrup
2010-06-15  9:38                                                     ` line-move-visual Tim X
2010-06-15 13:45                                                     ` line-move-visual Stefan Monnier
2010-06-15 13:57                                                       ` line-move-visual David Kastrup
     [not found]                                                         ` <jwvbpbb6oyk.fsf-monnier+gnu.emacs.help@gnu.org>
2010-06-16 18:04                                                           ` line-move-visual David Kastrup
     [not found]                                                       ` <hv8gvf$98o$1@north.jnrs.ja.net>
     [not found]                                                         ` <hv8iog$313e$1@colin2.muc.de>
2010-06-15 19:37                                                           ` line-move-visual Leo
     [not found]                                                             ` <871vc8dpga.fsf@imladris.arda>
2010-06-16 12:37                                                               ` Emacs language Leo
2010-06-17  8:00                                                                 ` Teemu Likonen
2010-06-15 21:04                                                           ` line-move-visual Uday S Reddy
2010-06-16 15:33                                                             ` line-move-visual Alan Mackenzie
2010-06-17  8:51                                                               ` line-move-visual Uday S Reddy
2010-06-16 14:33                                                         ` line-move-visual Stefan Monnier
     [not found]                                                           ` <db13ae67-9d9a-4556-9a7c-8f86de63011f@b4g2000pra.googlegroups.com>
2010-07-19 22:41                                                             ` minor mode on/off/toggle with t/nil question Stefan Monnier
2010-06-15 16:51                                                     ` line-move-visual Alan Mackenzie
2010-06-16 12:43                                                       ` line-move-visual David Kastrup
2010-06-15 19:17                                                     ` line-move-visual Xah Lee
2010-06-16 14:49                                                       ` espresso-mode (was: line-move-visual) Stefan Monnier
     [not found]                                                     ` <4C17FE36.30102@thadlabs.com>
2010-06-15 22:45                                                       ` line-move-visual Xah Lee
2010-06-15 23:31                                                         ` line-move-visual Thad Floryan
2010-06-16  3:30                                                           ` line-move-visual Evans Winner
2010-06-16 16:14                                                             ` line-move-visual Xah Lee
2010-06-16 23:23                                                           ` line-move-visual Chris F.A. Johnson
     [not found]                                                           ` <b1e84c4a-e74e-4ace-9b0f-a00b370eb61d@q39g2000prh.googlegroups.com>
2010-06-16 23:45                                                             ` Xah Lee [this message]
2010-06-16 14:52                                                         ` line-move-visual Stefan Monnier
     [not found]                                                           ` <87r5k6sqg2.fsf@unm.edu>
2010-06-17  2:25                                                             ` line-move-visual Stefan Monnier
2010-06-17  3:51                                                               ` line-move-visual Chris F.A. Johnson
2010-06-17  9:03                                                             ` line-move-visual Uday S Reddy
2010-06-20 18:42                                                               ` line-move-visual B. T. Raven
2010-06-20 17:08                                                 ` line-move-visual B. T. Raven
2010-06-12  4:18                                       ` line-move-visual Tim X
2010-06-12  4:37                                         ` line-move-visual Evans Winner
2010-06-12  8:30                                           ` line-move-visual David Kastrup
2010-06-12  8:40                                             ` line-move-visual Evans Winner
2010-06-12  9:30                                             ` line-move-visual Uday S Reddy
2010-06-12 12:30                                               ` line-move-visual Tim X
2010-06-12 20:09                                           ` line-move-visual Joseph Brenner
2010-06-13  1:41                                             ` line-move-visual Tim X
2010-06-13 10:22                                               ` line-move-visual Uday S Reddy
2010-06-13 10:51                                                 ` line-move-visual David Kastrup
2010-06-13 11:32                                                   ` line-move-visual Uday S Reddy
2010-06-14  0:46                                                 ` line-move-visual Tim X
     [not found]                                                   ` <hv4nkd$quq$1@north.jnrs.ja.net>
2010-06-15  9:20                                                     ` line-move-visual Tim X
2010-06-15 11:29                                                       ` line-move-visual Uday S Reddy
2010-06-16  9:29                                                         ` line-move-visual Tim X
2010-06-14  4:48                                                 ` line-move-visual Tim X
     [not found]                                                 ` <m2iq5nw4pj.fsf@gmail.com>
     [not found]                                                   ` <hv2htd$4li$1@north.jnrs.ja.net>
     [not found]                                                     ` <m239wravxb.fsf@gmail.com>
2010-06-16  2:11                                                       ` line-move-visual Joseph Brenner
2010-06-16  6:46                                                         ` line-move-visual Helmut Eller
2010-06-13 10:36                                             ` line-move-visual David Kastrup
2010-06-16  2:19                                               ` line-move-visual Joseph Brenner
     [not found]                                         ` <huvsd5$8pm$1@north.jnrs.ja.net>
2010-06-12 12:25                                           ` line-move-visual Tim X
2010-06-12 20:17                                             ` line-move-visual Joseph Brenner
2010-06-10 19:57                                   ` line-move-visual Stefan Monnier
2010-06-13 12:46                                     ` line-move-visual Uday S Reddy
2010-06-09 21:38                             ` line-move-visual Joseph Brenner
     [not found]                               ` <slrni10ga0.t64.Jim.Diamond@jdiamond-nb.acadiau.ca>
2010-06-10 16:15                                 ` line-move-visual Mark Crispin
2010-06-04 17:52       ` line-move-visual Mark Crispin
2010-06-04 18:28         ` line-move-visual David Kastrup
     [not found]           ` <alpine.OSX.2.00.1006041808540.77397@hsinghsing.panda.com>
     [not found]             ` <878w6truxc.fsf@lola.goethe.zz>
2010-06-06  2:25               ` line-move-visual Mark Crispin
     [not found]               ` <87typc9dt8.fsf@kzsu.stanford.edu>
     [not found]                 ` <alpine.OSX.2.00.1006091815150.93771@hsinghsing.panda.com>
2010-06-10  7:12                   ` line-move-visual David Kastrup
2010-06-04 21:16         ` line-move-visual Stefan Monnier
2010-06-05  1:29           ` line-move-visual Mark Crispin
2010-06-04 13:20     ` line-move-visual sable

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b6bc4f32-6882-4f0e-8d62-6cabc54227ce@r5g2000prf.googlegroups.com \
    --to=xahlee@gmail.com \
    --cc=help-gnu-emacs@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.