From 2fc7e532b23e2f820c6b73d352ec7c41fefa45b5 Mon Sep 17 00:00:00 2001 From: Peter Hofmann Date: Sat, 7 Oct 2023 07:40:07 +0200 Subject: [PATCH] Don't scroll selection on the other screen Fixes garbage selections when switching to/from the alternate screen. How to reproduce: - Be in primary screen. - Select something. - Run this (switches to alternate screen, positions the cursor at the bottom, triggers selscroll(), and then goes back to primary screen): tput smcup; tput cup $(tput lines) 0; echo foo; tput rmcup - Notice how the (visual) selection now covers a different line. The reason is that selscroll() calls selnormalize() and that cannot find the original range anymore. It's all empty lines now, so it snaps to "select the whole line". --- st.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/st.c b/st.c index 623376e..3d250dd 100644 --- a/st.c +++ b/st.c @@ -1097,7 +1097,7 @@ tscrollup(int orig, int n) void selscroll(int orig, int n) { - if (sel.ob.x == -1) + if (sel.ob.x == -1 || sel.alt != IS_SET(MODE_ALTSCREEN)) return; if (BETWEEN(sel.nb.y, orig, term.bot) != BETWEEN(sel.ne.y, orig, term.bot)) {