From 4872811ba78bd68c71d40b820065c093ed427970 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 8 Sep 2023 06:52:31 +0000 Subject: [PATCH 1/2] Use DECSLRM and DECFRA only at level 4 rather than checking the terminal id. --- format.c | 5 ++--- tty-keys.c | 26 +++++++++++++------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/format.c b/format.c index 6e9094c2..7979e970 100644 --- a/format.c +++ b/format.c @@ -1126,7 +1126,6 @@ format_cb_mouse_word(struct format_tree *ft) struct window_pane *wp; struct grid *gd; u_int x, y; - char *s; if (!ft->m.valid) return (NULL); @@ -1139,7 +1138,7 @@ format_cb_mouse_word(struct format_tree *ft) if (!TAILQ_EMPTY(&wp->modes)) { if (TAILQ_FIRST(&wp->modes)->mode == &window_copy_mode || TAILQ_FIRST(&wp->modes)->mode == &window_view_mode) - return (s = window_copy_get_word(wp, x, y)); + return (window_copy_get_word(wp, x, y)); return (NULL); } gd = wp->base.grid; @@ -4185,7 +4184,7 @@ static char * format_loop_clients(struct format_expand_state *es, const char *fmt) { struct format_tree *ft = es->ft; - struct client *c = ft->client; + struct client *c; struct cmdq_item *item = ft->item; struct format_tree *nft; struct format_expand_state next; diff --git a/tty-keys.c b/tty-keys.c index 3a8b779e..3ad80c3d 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -1315,15 +1315,21 @@ tty_keys_device_attributes(struct tty *tty, const char *buf, size_t len, } /* - * Add terminal features. Technically, VT420 and VT525 do not support - * SIXEL, but some modern terminals report it anyway so we accept it - * here too. + * Add terminal features. Hardware level 5 does not offer SIXEL but + * some terminal emulators report it anyway and it does not harm + * to check it here. + * + * DECSLRM and DECFRA should be supported by level 5 as well as level + * 4, but VTE has rather ruined it by advertising level 5 despite not + * supporting them. */ switch (p[0]) { - case 62: /* VT220 */ - case 63: /* VT320 */ - case 64: /* VT420 */ - case 65: /* VT525 */ + case 64: /* level 4 */ + tty_add_features(features, "margins,rectfill", ","); + /* FALLTHROUGH */ + case 62: /* level 2 */ + case 63: /* level 3 */ + case 65: /* level 5 */ for (i = 1; i < n; i++) { log_debug("%s: DA feature: %d", c->name, p[i]); if (p[i] == 4) @@ -1395,12 +1401,6 @@ tty_keys_device_attributes2(struct tty *tty, const char *buf, size_t len, /* Add terminal features. */ switch (p[0]) { - case 41: /* VT420 */ - case 61: /* VT510 */ - case 64: /* VT520 */ - case 65: /* VT525 */ - tty_add_features(features, "margins,rectfill", ","); - break; case 'M': /* mintty */ tty_default_features(features, "mintty", 0); break; From c02bc4dbe9692fb8f698509a35c3abccf895f263 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 8 Sep 2023 07:05:06 +0000 Subject: [PATCH 2/2] On second thoughts, do check DA2 for DECFRA and DECSLRM since that will catch terminals that say they are VT520 even if we can't use DA1 (because of VTE). --- tty-keys.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tty-keys.c b/tty-keys.c index 3ad80c3d..ef80abc4 100644 --- a/tty-keys.c +++ b/tty-keys.c @@ -1399,8 +1399,17 @@ tty_keys_device_attributes2(struct tty *tty, const char *buf, size_t len, break; } - /* Add terminal features. */ + /* + * Add terminal features. We add DECSLRM and DECFRA for some + * identification codes here, notably 64 will catch VT520, even though + * we can't use level 5 from DA because of VTE. + */ switch (p[0]) { + case 41: /* VT420 */ + case 61: /* VT510 */ + case 64: /* VT520 */ + tty_add_features(features, "margins,rectfill", ","); + break; case 'M': /* mintty */ tty_default_features(features, "mintty", 0); break;