From 52900255d98a555ea952b387e835fef4ad5e1ffa Mon Sep 17 00:00:00 2001 From: bakkeby Date: Tue, 11 May 2021 10:12:23 +0200 Subject: [PATCH] Restore cursor when exiting alt mode. If the mouse cursor is changed to a bar or an underline then st will use that when the terminal is first opened. When an application that changes the cursor via escape sequences is executed, e.g. vim which uses a block cursor by default, then that cursor will remain after exiting the program. This change sets the cursor back to default when exiting alt mode. --- st.c | 2 ++ win.h | 1 + x.c | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/st.c b/st.c index d35f134..d022494 100644 --- a/st.c +++ b/st.c @@ -1379,6 +1379,8 @@ tswapscreen(void) term.images_alt = im; #endif // SIXEL_PATCH term.mode ^= MODE_ALTSCREEN; + if (!IS_SET(MODE_ALTSCREEN)) + xsetdefaultcursor(); tfulldirt(); } diff --git a/win.h b/win.h index 3faaab9..4f161c7 100644 --- a/win.h +++ b/win.h @@ -43,6 +43,7 @@ int xsetcolorname(int, const char *); void xseticontitle(char *); void xsettitle(char *); int xsetcursor(int); +void xsetdefaultcursor(void); void xsetmode(int, unsigned int); void xsetpointermotion(int); void xsetsel(char *); diff --git a/x.c b/x.c index 39504c1..58e4974 100644 --- a/x.c +++ b/x.c @@ -2414,6 +2414,16 @@ xsetcursor(int cursor) return 0; } +void +xsetdefaultcursor(void) +{ + #if BLINKING_CURSOR_PATCH + xsetcursor(cursorstyle); + #else + xsetcursor(cursorshape); + #endif // BLINKING_CURSOR_PATCH +} + void xseturgency(int add) {