Bash, how to globally fix ^H and ^? backspace problems
Solution 1:
This page has all the information you will ever need on this issue; I suggest you read it. Now, if you are using bash
, it should be enough to create an ~/.inputrc
file containing these lines:
"\e[3~": delete-char
# this is actually equivalent to "\C-?": delete-char
# VT
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# kvt
"\e[H":beginning-of-line
"\e[F":end-of-line
# rxvt and konsole (i.e. the KDE-app...)
"\e[7~":beginning-of-line
"\e[8~":end-of-line
As an added bonus, they will make Home and End work as well.
Solution 2:
Most of the information in https://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html is indeed what you need. One correction to the information, is of their suggestion (for XTerm):
*VT100.Translations: #override \
<Key>BackSpace: string(0x7F)\n\
<Key>Delete: string("\033[3~")\n\
<Key>Home: string("\033[1~")\n\
<Key>End: string("\033[4~")
*ttyModes: erase ^?
While this will get XTerm to send the right character, and change stty to have backspace as ^?
, it will still erroniously report ^H
as backspace under some occasions, breaking i.e. backspace in Vim instert mode (see here: https://bugs.gentoo.org/154090). To avoid this, use VT100.backarrowKey: false
instead, so:
*VT100.backarrowKey: false
*VT100.Translations: #override \
<Key>Delete: string("\033[3~")\n\
<Key>Home: string("\033[1~")\n\
<Key>End: string("\033[4~")
*ttyModes: erase ^?
(see also https://wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key)