From 4f11d6086fd9341e663fafaf2b256981af389eef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Fri, 21 Feb 2025 08:03:41 +0100 Subject: [PATCH] DECSCUSR+DECRQSS: treat hollow cursor as a block cursor If the user has configured cursor.style=hollow, make DECSCUSR 1/2 set the cursor to hollow rather than block, and make DECRQSS DECSCUSR respond as if cursor.style=block. The idea is to not expose the hollow variant in DECSCUSR in any way, to avoid having to extend it with custom encodings. Another way to think about it is this is just a slightly more discoverable way of doing: cursor.style=block cursor.block-cursor-is-hollow=yes --- csi.c | 3 ++- dcs.c | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/csi.c b/csi.c index b982023c..81c71e31 100644 --- a/csi.c +++ b/csi.c @@ -1756,7 +1756,8 @@ csi_dispatch(struct terminal *term, uint8_t final) case 1: /* blinking block */ case 2: /* steady block */ - term->cursor_style = CURSOR_BLOCK; + term->cursor_style = term->conf->cursor.style == CURSOR_HOLLOW + ? CURSOR_HOLLOW : CURSOR_BLOCK; break; case 3: /* blinking underline */ diff --git a/dcs.c b/dcs.c index ebea9e4c..376c73bd 100644 --- a/dcs.c +++ b/dcs.c @@ -422,6 +422,7 @@ decrqss_unhook(struct terminal *term) int mode; switch (term->cursor_style) { + case CURSOR_HOLLOW: /* FALLTHROUGH */ case CURSOR_BLOCK: mode = 2; break; case CURSOR_UNDERLINE: mode = 4; break; case CURSOR_BEAM: mode = 6; break;