mirror of
https://github.com/termux/termux-app
synced 2024-06-13 12:56:41 +00:00
Implement CSI 3 J - Clear transcript
This commit is contained in:
parent
c986a46fb9
commit
2a36b915cb
|
@ -1,5 +1,7 @@
|
||||||
package com.termux.terminal;
|
package com.termux.terminal;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A circular buffer of {@link TerminalRow}:s which keeps notes about what is visible on a logical screen and the scroll
|
* A circular buffer of {@link TerminalRow}:s which keeps notes about what is visible on a logical screen and the scroll
|
||||||
* history.
|
* history.
|
||||||
|
@ -422,4 +424,14 @@ public final class TerminalBuffer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearTranscript() {
|
||||||
|
if (mScreenFirstRow < mActiveTranscriptRows) {
|
||||||
|
Arrays.fill(mLines, mTotalRows + mScreenFirstRow - mActiveTranscriptRows, mTotalRows, null);
|
||||||
|
Arrays.fill(mLines, 0, mScreenFirstRow, null);
|
||||||
|
} else {
|
||||||
|
Arrays.fill(mLines, mScreenFirstRow - mActiveTranscriptRows, mScreenFirstRow, null);
|
||||||
|
}
|
||||||
|
mActiveTranscriptRows = 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1404,7 +1404,7 @@ public final class TerminalEmulator {
|
||||||
case 'I': // Cursor Horizontal Forward Tabulation (CHT). Move the active position n tabs forward.
|
case 'I': // Cursor Horizontal Forward Tabulation (CHT). Move the active position n tabs forward.
|
||||||
setCursorCol(nextTabStop(getArg0(1)));
|
setCursorCol(nextTabStop(getArg0(1)));
|
||||||
break;
|
break;
|
||||||
case 'J': // "${CSI}${0,1,2}J" - Erase in Display (ED)
|
case 'J': // "${CSI}${0,1,2,3}J" - Erase in Display (ED)
|
||||||
// ED ignores the scrolling margins.
|
// ED ignores the scrolling margins.
|
||||||
switch (getArg0(0)) {
|
switch (getArg0(0)) {
|
||||||
case 0: // Erase from the active position to the end of the screen, inclusive (default).
|
case 0: // Erase from the active position to the end of the screen, inclusive (default).
|
||||||
|
@ -1419,6 +1419,9 @@ public final class TerminalEmulator {
|
||||||
// move..
|
// move..
|
||||||
blockClear(0, 0, mColumns, mRows);
|
blockClear(0, 0, mColumns, mRows);
|
||||||
break;
|
break;
|
||||||
|
case 3: // Delete all lines saved in the scrollback buffer (xterm etc)
|
||||||
|
mMainBuffer.clearTranscript();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
unknownSequence(b);
|
unknownSequence(b);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -46,4 +46,20 @@ public class ControlSequenceIntroducerTest extends TerminalTestCase {
|
||||||
withTerminalSized(5, 2).enterString("abcde\033[2G\033[2b\n").assertLinesAre("aeede", " ");
|
withTerminalSized(5, 2).enterString("abcde\033[2G\033[2b\n").assertLinesAre("aeede", " ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** CSI 3 J Clear scrollback (xterm, libvte; non-standard). */
|
||||||
|
public void testCsi3J() {
|
||||||
|
withTerminalSized(3, 2).enterString("a\r\nb\r\nc\r\nd");
|
||||||
|
assertEquals("a\nb\nc\nd", mTerminal.getScreen().getTranscriptText());
|
||||||
|
enterString("\033[3J");
|
||||||
|
assertEquals("c\nd", mTerminal.getScreen().getTranscriptText());
|
||||||
|
|
||||||
|
withTerminalSized(3, 2).enterString("Lorem_ipsum");
|
||||||
|
assertEquals("Lorem_ipsum", mTerminal.getScreen().getTranscriptText());
|
||||||
|
enterString("\033[3J");
|
||||||
|
assertEquals("ipsum", mTerminal.getScreen().getTranscriptText());
|
||||||
|
|
||||||
|
withTerminalSized(3, 2).enterString("w\r\nx\r\ny\r\nz\033[?1049h\033[3J\033[?1049l");
|
||||||
|
assertEquals("y\nz", mTerminal.getScreen().getTranscriptText());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -358,10 +358,12 @@ public final class TerminalView extends View {
|
||||||
public void onScreenUpdated() {
|
public void onScreenUpdated() {
|
||||||
if (mEmulator == null) return;
|
if (mEmulator == null) return;
|
||||||
|
|
||||||
|
int rowsInHistory = mEmulator.getScreen().getActiveTranscriptRows();
|
||||||
|
if (mTopRow < -rowsInHistory) mTopRow = -rowsInHistory;
|
||||||
|
|
||||||
boolean skipScrolling = false;
|
boolean skipScrolling = false;
|
||||||
if (mIsSelectingText) {
|
if (mIsSelectingText) {
|
||||||
// Do not scroll when selecting text.
|
// Do not scroll when selecting text.
|
||||||
int rowsInHistory = mEmulator.getScreen().getActiveTranscriptRows();
|
|
||||||
int rowShift = mEmulator.getScrollCounter();
|
int rowShift = mEmulator.getScrollCounter();
|
||||||
if (-mTopRow + rowShift > rowsInHistory) {
|
if (-mTopRow + rowShift > rowsInHistory) {
|
||||||
// .. unless we're hitting the end of history transcript, in which
|
// .. unless we're hitting the end of history transcript, in which
|
||||||
|
|
Loading…
Reference in New Issue
Block a user