diff options
Diffstat (limited to 'packages/desktop/src/addons')
| -rw-r--r-- | packages/desktop/src/addons/serialize.ts | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/packages/desktop/src/addons/serialize.ts b/packages/desktop/src/addons/serialize.ts index 03899ff10..c9f848180 100644 --- a/packages/desktop/src/addons/serialize.ts +++ b/packages/desktop/src/addons/serialize.ts @@ -494,14 +494,9 @@ class StringSerializeHandler extends BaseSerializeHandler { } if (!excludeFinalCursorPosition) { - // Get cursor position relative to viewport (1-indexed for ANSI) - // cursorY is relative to the viewport, cursorX is column position - const cursorRow = this._buffer.cursorY + 1 // 1-indexed - const cursorCol = this._buffer.cursorX + 1 // 1-indexed - - // Use absolute cursor positioning (CUP - Cursor Position) - // This is more reliable than relative moves which depend on knowing - // exactly where the cursor ended up after all the content + const absoluteCursorRow = (this._buffer.baseY ?? 0) + this._buffer.cursorY + const cursorRow = constrain(absoluteCursorRow - this._firstRow + 1, 1, Number.MAX_SAFE_INTEGER) + const cursorCol = this._buffer.cursorX + 1 content += `\u001b[${cursorRow};${cursorCol}H` } @@ -549,22 +544,20 @@ export class SerializeAddon implements ITerminalAddon { return "" } - const activeBuffer = buffer.active || buffer.normal - if (!activeBuffer) { + const normalBuffer = buffer.normal || buffer.active + const altBuffer = buffer.alternate + + if (!normalBuffer) { return "" } let content = options?.range - ? this._serializeBufferByRange(activeBuffer, options.range, true) - : this._serializeBufferByScrollback(activeBuffer, options?.scrollback) - - // Handle alternate buffer if active and not excluded - if (!options?.excludeAltBuffer) { - const altBuffer = buffer.alternate - if (altBuffer && buffer.active?.type === "alternate") { - const alternateContent = this._serializeBufferByScrollback(altBuffer, undefined) - content += `\u001b[?1049h\u001b[H${alternateContent}` - } + ? this._serializeBufferByRange(normalBuffer, options.range, true) + : this._serializeBufferByScrollback(normalBuffer, options?.scrollback) + + if (!options?.excludeAltBuffer && buffer.active?.type === "alternate" && altBuffer) { + const alternateContent = this._serializeBufferByScrollback(altBuffer, undefined) + content += `\u001b[?1049h\u001b[H${alternateContent}` } return content |
