mirror of
https://github.com/tmux/tmux.git
synced 2024-12-04 19:58:48 +00:00
Add an option to set the key sent by backspace for those whose system
uses ^H rather than ^?. GitHub issue 1969.
This commit is contained in:
parent
c225262e13
commit
08b07b1a08
10
input-keys.c
10
input-keys.c
@ -43,9 +43,6 @@ struct input_key_ent {
|
||||
};
|
||||
|
||||
static const struct input_key_ent input_keys[] = {
|
||||
/* Backspace key. */
|
||||
{ KEYC_BSPACE, "\177", 0 },
|
||||
|
||||
/* Paste keys. */
|
||||
{ KEYC_PASTE_START, "\033[200~", 0 },
|
||||
{ KEYC_PASTE_END, "\033[201~", 0 },
|
||||
@ -180,6 +177,13 @@ input_key(struct window_pane *wp, key_code key, struct mouse_event *m)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Is this backspace? */
|
||||
if ((key & KEYC_MASK_KEY) == KEYC_BSPACE) {
|
||||
key = options_get_number(global_options, "backspace");
|
||||
if (key >= 0x7f)
|
||||
key = '\177';
|
||||
}
|
||||
|
||||
/*
|
||||
* If this is a normal 7-bit key, just send it, with a leading escape
|
||||
* if necessary. If it is a UTF-8 key, split it and send it.
|
||||
|
12
key-string.c
12
key-string.c
@ -159,7 +159,7 @@ key_string_get_modifiers(const char **string)
|
||||
key_code
|
||||
key_string_lookup_string(const char *string)
|
||||
{
|
||||
static const char *other = "!#()+,-.0123456789:;<=>?'\r\t";
|
||||
static const char *other = "!#()+,-.0123456789:;<=>'\r\t";
|
||||
key_code key;
|
||||
u_int u;
|
||||
key_code modifiers;
|
||||
@ -196,7 +196,7 @@ key_string_lookup_string(const char *string)
|
||||
/* Is this a standard ASCII key? */
|
||||
if (string[1] == '\0' && (u_char)string[0] <= 127) {
|
||||
key = (u_char)string[0];
|
||||
if (key < 32 || key == 127)
|
||||
if (key < 32)
|
||||
return (KEYC_UNKNOWN);
|
||||
} else {
|
||||
/* Try as a UTF-8 key. */
|
||||
@ -226,6 +226,8 @@ key_string_lookup_string(const char *string)
|
||||
key -= 64;
|
||||
else if (key == 32)
|
||||
key = 0;
|
||||
else if (key == '?')
|
||||
key = 127;
|
||||
else if (key == 63)
|
||||
key = KEYC_BSPACE;
|
||||
else
|
||||
@ -329,7 +331,7 @@ key_string_lookup_key(key_code key)
|
||||
}
|
||||
|
||||
/* Invalid keys are errors. */
|
||||
if (key == 127 || key > 255) {
|
||||
if (key > 255) {
|
||||
snprintf(out, sizeof out, "Invalid#%llx", key);
|
||||
return (out);
|
||||
}
|
||||
@ -343,7 +345,9 @@ key_string_lookup_key(key_code key)
|
||||
} else if (key >= 32 && key <= 126) {
|
||||
tmp[0] = key;
|
||||
tmp[1] = '\0';
|
||||
} else if (key >= 128)
|
||||
} else if (key == 127)
|
||||
xsnprintf(tmp, sizeof tmp, "C-?");
|
||||
else if (key >= 128)
|
||||
xsnprintf(tmp, sizeof tmp, "\\%llo", key);
|
||||
|
||||
strlcat(out, tmp, sizeof out);
|
||||
|
@ -147,6 +147,12 @@ static const char *options_table_status_format_default[] = {
|
||||
/* Top-level options. */
|
||||
const struct options_table_entry options_table[] = {
|
||||
/* Server options. */
|
||||
{ .name = "backspace",
|
||||
.type = OPTIONS_TABLE_KEY,
|
||||
.scope = OPTIONS_TABLE_SERVER,
|
||||
.default_num = '\177',
|
||||
},
|
||||
|
||||
{ .name = "buffer-limit",
|
||||
.type = OPTIONS_TABLE_NUMBER,
|
||||
.scope = OPTIONS_TABLE_SERVER,
|
||||
|
9
spawn.c
9
spawn.c
@ -217,6 +217,7 @@ spawn_pane(struct spawn_context *sc, char **cause)
|
||||
u_int hlimit;
|
||||
struct winsize ws;
|
||||
sigset_t set, oldset;
|
||||
key_code key;
|
||||
|
||||
spawn_log(__func__, sc);
|
||||
|
||||
@ -378,13 +379,17 @@ spawn_pane(struct spawn_context *sc, char **cause)
|
||||
|
||||
/*
|
||||
* Update terminal escape characters from the session if available and
|
||||
* force VERASE to tmux's \177.
|
||||
* force VERASE to tmux's backspace.
|
||||
*/
|
||||
if (tcgetattr(STDIN_FILENO, &now) != 0)
|
||||
_exit(1);
|
||||
if (s->tio != NULL)
|
||||
memcpy(now.c_cc, s->tio->c_cc, sizeof now.c_cc);
|
||||
now.c_cc[VERASE] = '\177';
|
||||
key = options_get_number(global_options, "backspace");
|
||||
if (key >= 0x7f)
|
||||
now.c_cc[VERASE] = '\177';
|
||||
else
|
||||
now.c_cc[VERASE] = key;
|
||||
if (tcsetattr(STDIN_FILENO, TCSANOW, &now) != 0)
|
||||
_exit(1);
|
||||
|
||||
|
4
tmux.1
4
tmux.1
@ -2925,6 +2925,10 @@ omitted to toggle).
|
||||
.Pp
|
||||
Available server options are:
|
||||
.Bl -tag -width Ds
|
||||
.It Ic backspace Ar key
|
||||
Set the key sent by
|
||||
.Nm
|
||||
for backspace.
|
||||
.It Ic buffer-limit Ar number
|
||||
Set the number of buffers; as new buffers are added to the top of the stack,
|
||||
old ones are removed from the bottom if necessary to maintain this maximum
|
||||
|
Loading…
Reference in New Issue
Block a user