From 16273a19816f55383ce0ba299257676b15d95e15 Mon Sep 17 00:00:00 2001 From: Fredrik Fornwall Date: Sat, 12 Dec 2015 00:07:55 +0100 Subject: [PATCH] Fix bug with scrolling down and top scroll margin The Termux implementation of the ${CSI}${N}T escape sequence to scroll down N lines (SD - Pan Up) did not take the top margin into account when figuring out where to place the scrolled rows. Fixes #28. --- app/src/main/java/com/termux/terminal/TerminalEmulator.java | 2 +- app/src/test/java/com/termux/terminal/ScrollRegionTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/termux/terminal/TerminalEmulator.java b/app/src/main/java/com/termux/terminal/TerminalEmulator.java index 01a4c4dc..6889ae95 100644 --- a/app/src/main/java/com/termux/terminal/TerminalEmulator.java +++ b/app/src/main/java/com/termux/terminal/TerminalEmulator.java @@ -1444,7 +1444,7 @@ public final class TerminalEmulator { final int linesToScrollArg = getArg0(1); final int linesBetweenTopAndBottomMargins = mBottomMargin - mTopMargin; final int linesToScroll = Math.min(linesBetweenTopAndBottomMargins, linesToScrollArg); - mScreen.blockCopy(0, mTopMargin, mColumns, linesBetweenTopAndBottomMargins - linesToScroll, 0, linesToScroll); + mScreen.blockCopy(0, mTopMargin, mColumns, linesBetweenTopAndBottomMargins - linesToScroll, 0, mTopMargin + linesToScroll); blockClear(0, mTopMargin, mColumns, linesToScroll); } else { // "${CSI}${func};${startx};${starty};${firstrow};${lastrow}T" - initiate highlight mouse tracking. diff --git a/app/src/test/java/com/termux/terminal/ScrollRegionTest.java b/app/src/test/java/com/termux/terminal/ScrollRegionTest.java index ff431455..b7e258a5 100644 --- a/app/src/test/java/com/termux/terminal/ScrollRegionTest.java +++ b/app/src/test/java/com/termux/terminal/ScrollRegionTest.java @@ -94,4 +94,8 @@ public class ScrollRegionTest extends TerminalTestCase { withTerminalSized(3, 3).enterString("\033[?69h\033[0;2sABCD\0339").assertLinesAre("B ", "D ", " "); } + public void testScrollDownWithScrollRegion() { + withTerminalSized(2, 5).enterString("1\r\n2\r\n3\r\n4\r\n5").assertLinesAre("1 ", "2 ", "3 ", "4 ", "5 "); + enterString("\033[3r").enterString("\033[2T").assertLinesAre("1 ", "2 ", " ", " ", "3 "); + } }