summaryrefslogtreecommitdiff
path: root/st.c
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 /st.c
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".
Diffstat (limited to 'st.c')
-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)) {