summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hofmann <scm@uninformativ.de>2023-10-07 07:40:07 +0200
committerRafael Marçalo <raroma09@gmail.com>2023-10-08 23:31:49 +0100
commit9f15a1c4913cb42c8ee1ba0d83175ee295f4eae4 (patch)
tree96c716e629c7fc302e853bf0623bff6f575c2aee
parent3343846d48e59734e4a77cb97c69742eb4f9baa4 (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.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/st.c b/st.c
index e12b827..14c1adb 100644
--- a/st.c
+++ b/st.c
@@ -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)) {