efaq: Backspace invokes help
9.6 Why does the <Backspace> key invoke help?
=============================================
The <Backspace> key (on most keyboards) generates ASCII code 8. ‘C-h’
sends the same code. In Emacs by default ‘C-h’ invokes help-command.
This is intended to be easy to remember since the first letter of ‘help’
is ‘h’. The easiest solution to this problem is to use ‘C-h’ (and
<Backspace>) for help and <DEL> (the <Delete> key) for deleting the
previous character.
For many people this solution may be problematic:
• They normally use <Backspace> outside of Emacs for deleting the
previous character. This can be solved by making <DEL> the command
for deleting the previous character outside of Emacs. On many Unix
systems, this command will remap <DEL>:
stty erase '^?'
• The user may prefer the <Backspace> key for deleting the previous
character because it is more conveniently located on their keyboard
or because they don’t even have a separate <Delete> key. In this
case, the <Backspace> key should be made to behave like <Delete>.
There are several methods.
− Some terminals (e.g., VT3## terminals) and terminal emulators
(e.g., TeraTerm) allow the character generated by the
<Backspace> key to be changed from a setup menu.
− You may be able to get a keyboard that is completely
programmable, or a terminal emulator that supports remapping
of any key to any other key.
− With Emacs 21.1 and later, you can control the effect of the
<Backspace> and <Delete> keys, on both dumb terminals and a
windowed displays, by customizing the option
‘normal-erase-is-backspace-mode’, or by invoking ‘M-x
normal-erase-is-backspace’. See the documentation of these
symbols (Emacs Lisp documentation) for more info.
− It is possible to swap the <Backspace> and <DEL> keys inside
Emacs:
(keyboard-translate ?\C-h ?\C-?)
This is the recommended method of forcing <Backspace> to act
as <DEL>, because it works even in modes which bind <DEL> to
something other than ‘delete-backward-char’.
Similarly, you could remap <DEL> to act as ‘C-d’, which by
default deletes forward:
(keyboard-translate ?\C-? ?\C-d)
Swapping keys, for further details about
‘keyboard-translate’.
− Another approach is to switch key bindings and put help on
‘C-x h’ instead:
(global-set-key "\C-h" 'delete-backward-char)
;; overrides mark-whole-buffer
(global-set-key "\C-xh" 'help-command)
This method is not recommended, though: it only solves the
problem for those modes which bind <DEL> to
‘delete-backward-char’. Modes which bind <DEL> to something
else, such as ‘view-mode’, will not work as you expect when
you press the <Backspace> key. For this reason, we recommend
the ‘keyboard-translate’ method, shown above.
Other popular key bindings for help are ‘M-?’ and ‘C-x ?’.
Don’t try to bind <DEL> to ‘help-command’, because there are many
modes that have local bindings of <DEL> that will interfere.
When Emacs 21 or later runs on a windowed display, it binds the
<Delete> key to a command which deletes the character at point, to make
Emacs more consistent with keyboard operation on these systems.
For more information about troubleshooting this problem, see If
<DEL> Fails to Delete (emacs)DEL Does Not Delete.