commit 6ade70c7264e4ee50416d34c928457b63b0c91df
parent 859906235eb65a9b78d326806adb1e061d0693bc
Author: Bakkeby <bakkeby@gmail.com>
Date: Sun, 8 Oct 2023 20:19:56 +0200
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
Diffstat:
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git 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)) {