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-transparency-2fc7e532b23e2f820c6b73d352ec7c41fefa45b5.tar.gz st-transparency-2fc7e532b23e2f820c6b73d352ec7c41fefa45b5.tar.xz st-transparency-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)) {  | 
