aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/tui/tui.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 342c68818d..ed82e23be2 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -844,7 +844,16 @@ static void fix_terminfo(TUIData *data)
}
if (STARTS_WITH(term, "xterm") || STARTS_WITH(term, "rxvt")) {
- unibi_set_if_empty(ut, unibi_cursor_normal, "\x1b[?25h");
+ const char *normal = unibi_get_str(ut, unibi_cursor_normal);
+ if (!normal) {
+ unibi_set_str(ut, unibi_cursor_normal, "\x1b[?25h");
+ } else if (STARTS_WITH(normal, "\x1b[?12l")) {
+ // terminfo typically includes DECRST 12 as part of setting up the normal
+ // cursor, which interferes with the user's control via
+ // NVIM_TUI_ENABLE_CURSOR_SHAPE. When DECRST 12 is present, skip over
+ // it, but honor the rest of the TI setting.
+ unibi_set_str(ut, unibi_cursor_normal, normal + strlen("\x1b[?12l"));
+ }
unibi_set_if_empty(ut, unibi_cursor_invisible, "\x1b[?25l");
unibi_set_if_empty(ut, unibi_flash_screen, "\x1b[?5h$<100/>\x1b[?5l");
unibi_set_if_empty(ut, unibi_exit_attribute_mode, "\x1b(B\x1b[m");