st
simple terminal
git clone https://9o.is/git/st.git
commit 174345bf419528624a251cf2f86f4b09b9b5ca44
parent 986bcb17d1ff59ffe0b65c4eaa340f8955035c3d
Author: Peter Hofmann <scm@uninformativ.de>
Date: Sat, 7 Oct 2023 07:40:07 +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".
Diffstat:
| M | st.c | | | 2 | +- |
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git 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)) {