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 | Fix bounds checks of dc.col (diff) | |
| download | st-2fc7e532b23e2f820c6b73d352ec7c41fefa45b5.tar.gz 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) | |||
| 1097 | void | 1097 | void |
| 1098 | selscroll(int orig, int n) | 1098 | selscroll(int orig, int n) |
| 1099 | { | 1099 | { |
| 1100 | if (sel.ob.x == -1) | 1100 | if (sel.ob.x == -1 || sel.alt != IS_SET(MODE_ALTSCREEN)) |
| 1101 | return; | 1101 | return; |
| 1102 | 1102 | ||
| 1103 | if (BETWEEN(sel.nb.y, orig, term.bot) != BETWEEN(sel.ne.y, orig, term.bot)) { | 1103 | if (BETWEEN(sel.nb.y, orig, term.bot) != BETWEEN(sel.ne.y, orig, term.bot)) { |
