From 2382d6b4487cc9d599578034db8117eb3f1cc75f 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 | 2 ++ 3 files changed, 11 insertions(+) diff --git a/csi.c b/csi.c index c1982275..80f2bfd0 100644 --- a/csi.c +++ b/csi.c @@ -470,6 +470,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"); @@ -592,6 +598,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 1042: term->xtsave.bell_is_urgent = term->bell_is_urgent; break; case 1049: term->xtsave.alt_screen = term->grid == &term->alt; break; @@ -624,6 +631,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 1042: enable = term->xtsave.bell_is_urgent; break; case 1049: enable = term->xtsave.alt_screen; break; diff --git a/terminal.c b/terminal.c index b9e4528a..d117bf9c 100644 --- a/terminal.c +++ b/terminal.c @@ -1047,6 +1047,7 @@ term_init(const struct config *conf, struct fdm *fdm, struct reaper *reaper, .esc_prefix = true, .eight_bit = true, }, + .num_lock_modifier = true, .bell_is_urgent = conf->bell_is_urgent, .tab_stops = tll_init(), .wl = wayl, diff --git a/terminal.h b/terminal.h index 6a8e340b..5c7a9501 100644 --- a/terminal.h +++ b/terminal.h @@ -252,6 +252,7 @@ struct terminal { bool eight_bit; } meta; + bool num_lock_modifier; bool bell_is_urgent; /* Saved DECSET modes - we save the SET state */ @@ -275,6 +276,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 bell_is_urgent:1; uint32_t alt_screen:1; } xtsave;