Do not scroll when below bottom margin

This commit is contained in:
Fredrik Fornwall
2017-10-28 10:54:47 +02:00
parent 3f04a0a0d5
commit 9e5293a08e
2 changed files with 22 additions and 5 deletions

View File

@@ -1192,13 +1192,21 @@ public final class TerminalEmulator {
}
private void doLinefeed() {
boolean belowScrollingRegion = mCursorRow >= mBottomMargin;
int newCursorRow = mCursorRow + 1;
if (newCursorRow >= mBottomMargin) {
if (belowScrollingRegion) {
// Move down (but not scroll) as long as we are above the last row.
if (mCursorRow != mRows - 1) {
setCursorRow(newCursorRow);
}
} else {
if (newCursorRow == mBottomMargin) {
scrollDownOneLine();
newCursorRow = mBottomMargin - 1;
}
setCursorRow(newCursorRow);
}
}
private void continueSequence(int state) {
mEscapeState = state;
@@ -1571,7 +1579,7 @@ public final class TerminalEmulator {
break;
case 'r': // "CSI${top};${bottom}r" - set top and bottom Margins (DECSTBM).
{
// http://www.vt100.net/docs/vt510-rm/DECSTBM
// https://vt100.net/docs/vt510-rm/DECSTBM.html
// The top margin defaults to 1, the bottom margin defaults to mRows.
// The escape sequence numbers top 1..23, but we number top 0..22.
// The escape sequence numbers bottom 2..24, and so do we (because we use a zero based numbering

View File

@@ -98,4 +98,13 @@ public class ScrollRegionTest extends TerminalTestCase {
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 ");
}
public void testScrollDownBelowScrollRegion() {
withTerminalSized(2, 5).enterString("1\r\n2\r\n3\r\n4\r\n5").assertLinesAre("1 ", "2 ", "3 ", "4 ", "5 ");
enterString("\033[1;3r"); // DECSTBM margins.
enterString("\033[4;1H"); // Place cursor just below bottom margin.
enterString("QQ\r\nRR\r\n\r\n\r\nYY");
assertLinesAre("1 ", "2 ", "3 ", "QQ", "YY");
}
}