Don't scroll selection on the other screen - st - simple terminal | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 2fc7e532b23e2f820c6b73d352ec7c41fefa45b5 | |
parent a6bbc0c96b0a1db804061b0db79101c6b26aec57 | |
Author: Peter Hofmann <[email protected]> | |
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.… |