From 6ade70c7264e4ee50416d34c928457b63b0c91df Mon Sep 17 00:00:00 2001 From: Bakkeby Date: Sun, 8 Oct 2023 20:19:56 +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". ref. https://git.suckless.org/st/commit/2fc7e532b23e2f820c6b73d352ec7c41fefa45b5.html --- st.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/st.c b/st.c index 862040b..7d359b1 100644 --- a/st.c +++ b/st.c @@ -1508,7 +1508,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)) {