diff --git a/README.md b/README.md
index b85153df..f67ac691 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@
1. [Mouse](#mouse)
1. [Server (daemon) mode](#server-daemon-mode)
1. [Alt/meta](#alt-meta)
+1. [Backspace](#backspace)
1. [DPI and font size](#dpi-and-font-size)
1. [Requirements](#requirements)
1. [Running](#running)
@@ -220,6 +221,22 @@ mode_, `\E[?1034l`), and enabled again with `smm` (_set meta mode_,
'\E[?1034h`).
+## Backspace
+
+Foot transmits DEL (`^?`) on backspace. This corresponds to
+XTerm's `backarrowKey` option set to `false`, and to DECBKM being
+_reset_.
+
+To instead transmit BS (`^H`), press
+ctrl+backspace.
+
+Note that foot does **not** implement DECBKM, and that the behavior
+described above **cannot** be changed.
+
+Finally, pressing alt will prefix the transmitted byte with
+ESC.
+
+
## DPI and font size
Font sizes are apparently a complex thing. Many applications use a
diff --git a/doc/foot.1.scd b/doc/foot.1.scd
index fcd9d1f8..8b5268b7 100644
--- a/doc/foot.1.scd
+++ b/doc/foot.1.scd
@@ -199,6 +199,17 @@ This can also be disabled programatically with *rmm* (Reset Meta Mode,
*\E[?1034l*), and enabled again with *smm* (Set Meta Mode,
*\E[?1034h*).
+# BACKSPACE
+
+Foot transmits DEL (*^?*) on backspace. This corresponds to XTerm's
+*backarrowKey* option set to *false*, and to DECBKM being _reset_.
+
+To instead transmit BS (*^H*), press *ctrl*+*backspace*.
+
+Note that foot does *not* implement DECBKM, and that the behavior
+described above *cannot* be changed.
+
+Finally, pressing *alt* will prefix the transmitted byte with ESC.
# CONFIGURATION
diff --git a/keymap.h b/keymap.h
index 28933e4b..3cdce002 100644
--- a/keymap.h
+++ b/keymap.h
@@ -38,9 +38,22 @@ static const struct key_data key_backtab[] = {
};
static const struct key_data key_backspace[] = {
- {MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x7f"},
- {MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x7f"},
- {MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x7f"},
+ {MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x7f"},
+ {MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x7f"},
+ {MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x7f"},
+ {MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x08"},
+ {MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x08"},
+ {MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x08"},
+ {MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x08"},
+ {MOD_META, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x7f"},
+ {MOD_META | MOD_SHIFT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x7f"},
+ {MOD_META | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x7f"},
+ {MOD_META | MOD_SHIFT | MOD_ALT, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x7f"},
+ {MOD_META | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x08"},
+ {MOD_META | MOD_SHIFT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x08"},
+ {MOD_META | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x08"},
+ {MOD_META | MOD_SHIFT | MOD_ALT | MOD_CTRL, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\033\x08"},
+ {MOD_ANY, CURSOR_KEYS_DONTCARE, KEYPAD_DONTCARE, "\x7f"},
};
#define DEFAULT_MODS_FOR_SINGLE(sym) \