summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/addons
diff options
context:
space:
mode:
Diffstat (limited to 'packages/desktop/src/addons')
-rw-r--r--packages/desktop/src/addons/serialize.ts33
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