From 0976d13694de02a17ab2a9e15723bbac52e7c969 Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Sat, 10 May 2025 11:22:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=BB=88=E7=AB=AF=E5=88=9D=E5=A7=8B=E7=BC=93=E5=86=B2=E5=8C=BA?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 移除尾部的空白行 --- .../session/actions/sshSuspendActions.ts | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/frontend/src/stores/session/actions/sshSuspendActions.ts b/packages/frontend/src/stores/session/actions/sshSuspendActions.ts index 3f41992..c489d8c 100644 --- a/packages/frontend/src/stores/session/actions/sshSuspendActions.ts +++ b/packages/frontend/src/stores/session/actions/sshSuspendActions.ts @@ -79,18 +79,34 @@ export const requestStartSshSuspend = (sessionId: string): void => { return; } - let initialBuffer = ''; // +++ 恢复 initialBuffer 的获取 +++ + let initialBuffer = ''; if (session.terminalManager && session.terminalManager.terminalInstance && session.terminalManager.terminalInstance.value) { const term = session.terminalManager.terminalInstance.value; const buffer = term.buffer.active; - for (let i = 0; i < buffer.length; i++) { - initialBuffer += (buffer.getLine(i)?.translateToString(true) || '') + '\n'; + + let lastNonEmptyLineIndex = -1; + // 从下往上找到最后一个非空行 + for (let i = buffer.length - 1; i >= 0; i--) { + const line = buffer.getLine(i); + // translateToString(true) 会移除行尾空白,再 trim() 判断是否整行都是空白 + if (line && line.translateToString(true).trim() !== '') { + lastNonEmptyLineIndex = i; + break; + } } - // 移除可能多余的最后一个换行符 - if (initialBuffer.endsWith('\n')) { - initialBuffer = initialBuffer.slice(0, -1); + + if (lastNonEmptyLineIndex !== -1) { + const lines = []; + for (let i = 0; i <= lastNonEmptyLineIndex; i++) { + // 获取行内容,translateToString(true) 会移除行尾空白 + lines.push(buffer.getLine(i)?.translateToString(true) || ''); + } + initialBuffer = lines.join('\n'); } - console.log(`[${t('term.sshSuspend')}] 已获取会话 ${sessionId} 的初始屏幕缓冲区内容,长度: ${initialBuffer.length}`); + // join('\n') 会在行间添加换行符,如果最后一行是空字符串,末尾不会有多余的 \n + // 如果最后一行非空,则自然以该行结束。 + + console.log(`[${t('term.sshSuspend')}] 已获取会话 ${sessionId} 的初始屏幕缓冲区内容 (处理后),长度: ${initialBuffer.length}, 最后非空行索引: ${lastNonEmptyLineIndex}`); } else { console.warn(`[${t('term.sshSuspend')}] 未能获取会话 ${sessionId} 的终端实例以提取初始缓冲区。`); }