From ae23023341db2dc121f934dfe21e724d527da134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 21 Feb 2020 19:11:03 +0100 Subject: [PATCH] keymap: align backspace escapes with XTerm Backspace now emits DEL for all non-ctrl modifier combos, and BS for all ctrl modifier combos. The alt modifier prefixes DEL/BS with ESC. This also removes my own hack of mapping ctrl+backspace to alt+backspace. Describe backspace behavior in both the README and the man page. TODO: implement DECBKM to allow applications to toggle the backspace behavior. --- README.md | 17 +++++++++++++++++ doc/foot.1.scd | 11 +++++++++++ keymap.h | 19 ++++++++++++++++--- 3 files changed, 44 insertions(+), 3 deletions(-) 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) \