diff --git a/app/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java b/app/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java index 7cb0a78..1bbcc42 100644 --- a/app/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java +++ b/app/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java @@ -1,5 +1,7 @@ package com.offsec.nhterm.backend; +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 * history. @@ -432,4 +434,13 @@ 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; + } } diff --git a/app/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java b/app/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java index 3a2685c..5e5c0fa 100644 --- a/app/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java +++ b/app/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java @@ -1372,6 +1372,7 @@ public final class TerminalEmulator { break; case 'c': // RIS - Reset to Initial State (http://vt100.net/docs/vt510-rm/RIS). reset(); + mMainBuffer.clearTranscript(); blockClear(0, 0, mColumns, mRows); setCursorPosition(0, 0); break; @@ -1530,6 +1531,9 @@ public final class TerminalEmulator { // move.. blockClear(0, 0, mColumns, mRows); break; + case 3: // Delete all lines saved in the scrollback buffer (xterm etc) + mMainBuffer.clearTranscript(); + break; default: unknownSequence(b); return;