Next: , Up: Lossage


59.1 If <DEL> Fails to Delete

Every keyboard has a large key, usually labelled <Backspace>, which is ordinarily used to erase the last character that you typed. We call this key the usual erasure key. In Emacs, it is supposed to be equivalent to <DEL>.

When Emacs starts up on a graphical display, it determines automatically which key should be <DEL>. In some unusual cases, Emacs gets the wrong information from the system. If the usual erasure key deletes forwards instead of backwards, that is probably what happened—Emacs ought to be treating the <Backspace> key as <DEL>, but it isn't.

Some keyboards also have a <Delete> key, which is ordinarily used to forwards. If this key deletes backward in Emacs, that too suggests Emacs got the wrong information—but in the opposite sense.

On a text-only terminal, if you find the usual erasure key prompts for a Help command, like Control-h, instead of deleting a character, it means that key is actually sending the <BS> character. Emacs ought to be treating <BS> as <DEL>, but it isn't.

In all of those cases, the immediate remedy is the same: use the command M-x normal-erase-is-backspace-mode. This toggles between the two modes that Emacs supports for handling <DEL>, so if Emacs starts in the wrong mode, this should switch to the right mode. On a text-only terminal, if you want to ask for help when <BS> is treated as <DEL>, use <F1>; C-? may also work, if it sends character code 127.

To fix the problem automatically for every Emacs session, you can put one of the following lines into your .emacs file (see Init File). For the first case above, where <Backspace> deletes forwards instead of backwards, use this line to make <Backspace> act as <DEL> (resulting in behavior compatible with Emacs 20 and previous versions):

     (normal-erase-is-backspace-mode 0)

For the other two cases, use this line:

     (normal-erase-is-backspace-mode 1)

Another way to fix the problem for every Emacs session is to customize the variable normal-erase-is-backspace: the value t specifies the mode where <BS> or <BACKSPACE> is <DEL>, and nil specifies the other mode. See Easy Customization.