From: Peter Hofmann Date: Sat, 7 Oct 2023 05:40:07 +0000 (+0200) Subject: Don't scroll selection on the other screen X-Git-Url: http://www.git.stargrave.org/?p=st.git;a=commitdiff_plain;h=2fc7e532b23e2f820c6b73d352ec7c41fefa45b5 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". --- 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)) {