diff options
author | Peter Hofmann <scm@uninformativ.de> | 2023-10-07 07:40:07 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2023-10-07 12:16:59 +0200 |
commit | 2fc7e532b23e2f820c6b73d352ec7c41fefa45b5 (patch) | |
tree | 33e02e000a5cabdca94add480200daf6a10ce0b3 | |
parent | a6bbc0c96b0a1db804061b0db79101c6b26aec57 (diff) | |
download | st-2fc7e532b23e2f820c6b73d352ec7c41fefa45b5.tar.gz st-2fc7e532b23e2f820c6b73d352ec7c41fefa45b5.tar.bz2 st-2fc7e532b23e2f820c6b73d352ec7c41fefa45b5.zip |
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".
-rw-r--r-- | st.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -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)) { |