diff options
author | Peter Hofmann <scm@uninformativ.de> | 2023-10-07 07:40:07 +0200 |
---|---|---|
committer | Rafael Marçalo <raroma09@gmail.com> | 2023-10-08 23:31:49 +0100 |
commit | 9f15a1c4913cb42c8ee1ba0d83175ee295f4eae4 (patch) | |
tree | 96c716e629c7fc302e853bf0623bff6f575c2aee | |
parent | 3343846d48e59734e4a77cb97c69742eb4f9baa4 (diff) |
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
@@ -1156,7 +1156,7 @@ tscrollup(int orig, int n, int copyhist) 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)) { |