diff --git a/lib/api.txt b/lib/api.txt index 5dae100..3acaa9a 100644 --- a/lib/api.txt +++ b/lib/api.txt @@ -106,6 +106,7 @@ package org.connectbot.terminal { method @InaccessibleFromKotlin public boolean getBoldAsBright(); method @InaccessibleFromKotlin public org.connectbot.terminal.TerminalDimensions getDimensions(); method public String? getLastCommandOutput(); + method public java.util.List getSnapshotLineTexts(); method public java.util.List getUrls(optional org.connectbot.terminal.UrlScanScope scope); method public void resize(int newRows, int newCols); method public int setAnsiPalette(int[] ansiColors); diff --git a/lib/src/main/java/org/connectbot/terminal/TerminalEmulator.kt b/lib/src/main/java/org/connectbot/terminal/TerminalEmulator.kt index 0f4275e..c44e4c4 100644 --- a/lib/src/main/java/org/connectbot/terminal/TerminalEmulator.kt +++ b/lib/src/main/java/org/connectbot/terminal/TerminalEmulator.kt @@ -193,6 +193,15 @@ sealed interface TerminalEmulator { * While the alternate screen is active, primary scrollback is not scanned. */ fun getUrls(scope: UrlScanScope = UrlScanScope.CurrentView): List + + /** + * Plain-text lines of the current terminal snapshot. Public accessor + * so consumers outside this module (notably Haven's SelectionToolbar + * for smart copy and word expansion) can read line text without + * reflecting into the internal `snapshot` StateFlow. Returns a fresh + * list at call time. + */ + fun getSnapshotLineTexts(): List } class TerminalEmulatorFactory { @@ -322,6 +331,8 @@ internal class TerminalEmulatorImpl( ) internal val snapshot: StateFlow = _snapshot.asStateFlow() + override fun getSnapshotLineTexts(): List = _snapshot.value.lines.map { it.text } + // Sequence number for ordering snapshots private var sequenceNumber = 0L diff --git a/lib/src/main/java/org/connectbot/terminal/TerminalLine.kt b/lib/src/main/java/org/connectbot/terminal/TerminalLine.kt index e2d9153..d6d705d 100644 --- a/lib/src/main/java/org/connectbot/terminal/TerminalLine.kt +++ b/lib/src/main/java/org/connectbot/terminal/TerminalLine.kt @@ -191,7 +191,7 @@ internal data class TerminalLine( row = row, cells = List(cols) { Cell( - char = '\u0000', + char = ' ', fgColor = defaultFg, bgColor = defaultBg, )