commit 2fc7e532b23e2f820c6b73d352ec7c41fefa45b5 from: Peter Hofmann via: Hiltjo Posthuma date: Sat Oct 7 10:16:59 2023 UTC 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". commit - a6bbc0c96b0a1db804061b0db79101c6b26aec57 commit + 2fc7e532b23e2f820c6b73d352ec7c41fefa45b5 blob - 623376e1b172781f66dd21ef220e165a8146eaad blob + 3d250ddcdb95707453254d3f717dd8022d122fb9 --- st.c +++ 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)) {