From 85647b14e7492b1feccfb9fb3070a387d9eec248 Mon Sep 17 00:00:00 2001 From: Martin Valba Date: Sun, 8 Jan 2023 20:42:34 +0200 Subject: [PATCH] Read description for info # Commits from Termux for Terminal backend ## Implement CSI 3 J - Clear transcript * https://github.com/termux/termux-app/commit/2a36b915cbb201bda9b77431ae6d670961cee67a ## Avoid joining lines for shared transcript * https://github.com/termux/termux-app/commit/370ac2bd8911b5632933975300e779f722ad03af * All of this is needed so our terminal backend is up to date and works as needed * If theres better method to give credit then lemme know. --- .../com/offsec/nhterm/backend/TerminalBuffer.java | 11 ++++++++++- .../com/offsec/nhterm/backend/TerminalEmulator.java | 2 +- .../nhterm/frontend/session/view/TerminalView.java | 4 +++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java b/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java index 1bbcc42..2e0a1f5 100644 --- a/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java +++ b/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalBuffer.java @@ -49,7 +49,15 @@ public final class TerminalBuffer { return getSelectedText(0, -getActiveTranscriptRows(), mColumns, mScreenRows).trim(); } + public String getTranscriptTextWithoutJoinedLines() { + return getSelectedText(0, -getActiveTranscriptRows(), mColumns, mScreenRows, false).trim(); + } + public String getSelectedText(int selX1, int selY1, int selX2, int selY2) { + return getSelectedText(selX1, selY1, selX2, selY2, true); + } + + public String getSelectedText(int selX1, int selY1, int selX2, int selY2, boolean joinBackLines) { final StringBuilder builder = new StringBuilder(); final int columns = mColumns; @@ -87,7 +95,8 @@ public final class TerminalBuffer { } if (lastPrintingCharIndex != -1) builder.append(line, x1Index, lastPrintingCharIndex - x1Index + 1); - if (!rowLineWrap && row < selY2 && row < mScreenRows - 1) builder.append('\n'); + if ((!joinBackLines || !rowLineWrap) + && row < selY2 && row < mScreenRows - 1) builder.append('\n'); } return builder.toString(); } diff --git a/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java b/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java index 31ae3a3..4aceda7 100644 --- a/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java +++ b/nhterm/src/main/java/com/offsec/nhterm/backend/TerminalEmulator.java @@ -1528,7 +1528,7 @@ public final class TerminalEmulator { case 'I': // Cursor Horizontal Forward Tabulation (CHT). Move the active position n tabs forward. setCursorCol(nextTabStop(getArg0(1))); 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. switch (getArg0(0)) { case 0: // Erase from the active position to the end of the screen, inclusive (default). diff --git a/nhterm/src/main/java/com/offsec/nhterm/frontend/session/view/TerminalView.java b/nhterm/src/main/java/com/offsec/nhterm/frontend/session/view/TerminalView.java index a565f4a..8f5ed88 100644 --- a/nhterm/src/main/java/com/offsec/nhterm/frontend/session/view/TerminalView.java +++ b/nhterm/src/main/java/com/offsec/nhterm/frontend/session/view/TerminalView.java @@ -469,9 +469,11 @@ public final class TerminalView extends View { isScreenHeld = true; } + int rowsInHistory = mEmulator.getScreen().getActiveTranscriptRows(); + if (mTopRow < -rowsInHistory) mTopRow = -rowsInHistory; + if (mIsSelectingText || isScreenHeld) { // Do not scroll when selecting text. - int rowsInHistory = mEmulator.getScreen().getActiveTranscriptRows(); int rowShift = mEmulator.getScrollCounter(); if (-mTopRow + rowShift > rowsInHistory) { // .. unless we're hitting the end of history transcript, in which