From 7dcc885a7acd673980478318da12468716e7d10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 11 Nov 2020 18:26:47 +0100 Subject: [PATCH] =?UTF-8?q?csi:=20implement=20=E2=80=9CCSI=20=3F=201035?= =?UTF-8?q?=E2=80=9D=20-=20toggle=20Num=20Lock=20override?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This adds a num_lock_modifier state to the terminal, and hooks up “CSI?1035h/l” to toggle it. --- csi.c | 8 ++++++++ terminal.c | 1 + terminal.h | 3 +++ 3 files changed, 12 insertions(+) diff --git a/csi.c b/csi.c index 7c4d5077..c86f39c1 100644 --- a/csi.c +++ b/csi.c @@ -465,6 +465,12 @@ decset_decrst(struct terminal *term, unsigned param, bool enable) term->meta.eight_bit = enable; break; + case 1035: + /* numLock */ + LOG_DBG("%s Num Lock modifier", enable ? "enabling" : "disabling"); + term->num_lock_modifier = enable; + break; + case 1036: /* metaSendsEscape */ LOG_DBG("%s meta-sends-escape", enable ? "enabling" : "disabling"); @@ -586,6 +592,7 @@ xtsave(struct terminal *term, unsigned param) case 1007: term->xtsave.alt_scrolling = term->alt_scrolling; break; case 1015: term->xtsave.mouse_urxvt = term->mouse_reporting == MOUSE_URXVT; break; case 1034: term->xtsave.meta_eight_bit = term->meta.eight_bit; break; + case 1035: term->xtsave.num_lock_modifier = term->num_lock_modifier; break; case 1036: term->xtsave.meta_esc_prefix = term->meta.esc_prefix; break; case 1049: term->xtsave.alt_screen = term->grid == &term->alt; break; case 2004: term->xtsave.bracketed_paste = term->bracketed_paste; break; @@ -616,6 +623,7 @@ xtrestore(struct terminal *term, unsigned param) case 1007: enable = term->xtsave.alt_scrolling; break; case 1015: enable = term->xtsave.mouse_urxvt; break; case 1034: enable = term->xtsave.meta_eight_bit; break; + case 1035: enable = term->xtsave.num_lock_modifier; break; case 1036: enable = term->xtsave.meta_esc_prefix; break; case 1049: enable = term->xtsave.alt_screen; break; case 2004: enable = term->xtsave.bracketed_paste; break; diff --git a/terminal.c b/terminal.c index 4651fc1a..bb986c0c 100644 --- a/terminal.c +++ b/terminal.c @@ -995,6 +995,7 @@ term_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper, .esc_prefix = true, .eight_bit = true, }, + .num_lock_modifier = true, .tab_stops = tll_init(), .wl = wayl, .render = { diff --git a/terminal.h b/terminal.h index eede87c1..c8c62966 100644 --- a/terminal.h +++ b/terminal.h @@ -250,6 +250,8 @@ struct terminal { bool eight_bit; } meta; + bool num_lock_modifier; + /* Saved DECSET modes - we save the SET state */ struct { uint32_t origin:1; @@ -270,6 +272,7 @@ struct terminal { uint32_t mouse_urxvt:1; uint32_t meta_eight_bit:1; uint32_t meta_esc_prefix:1; + uint32_t num_lock_modifier:1; uint32_t alt_screen:1; } xtsave;