From a7eff408d382a7aade3f080d6ad585a38efab9e9 Mon Sep 17 00:00:00 2001 From: thegecko Date: Fri, 3 Feb 2023 22:04:01 +0000 Subject: [PATCH] Ensure correct pseudoterminal ID Signed-off-by: thegecko --- .../plugin-ext/src/main/browser/terminal-main.ts | 6 ++++-- packages/plugin-ext/src/plugin/terminal-ext.ts | 13 ++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/plugin-ext/src/main/browser/terminal-main.ts b/packages/plugin-ext/src/main/browser/terminal-main.ts index d412b1b114e84..2fc2369a21b4e 100644 --- a/packages/plugin-ext/src/main/browser/terminal-main.ts +++ b/packages/plugin-ext/src/main/browser/terminal-main.ts @@ -95,20 +95,22 @@ export class TerminalServiceMainImpl implements TerminalServiceMain, TerminalLin protected async trackTerminal(terminal: TerminalWidget): Promise { let name = terminal.title.label; this.extProxy.$terminalCreated(terminal.id, name); + const updateTitle = () => { if (name !== terminal.title.label) { name = terminal.title.label; this.extProxy.$terminalNameChanged(terminal.id, name); } }; - terminal.title.changed.connect(updateTitle); - this.toDispose.push(Disposable.create(() => terminal.title.changed.disconnect(updateTitle))); const updateProcessId = () => terminal.processId.then( processId => this.extProxy.$terminalOpened(terminal.id, processId, terminal.terminalId, terminal.dimensions.cols, terminal.dimensions.rows), () => {/* no-op */ } ); + updateProcessId(); + terminal.title.changed.connect(updateTitle); + this.toDispose.push(Disposable.create(() => terminal.title.changed.disconnect(updateTitle))); this.toDispose.push(terminal.onDidOpen(() => updateProcessId())); this.toDispose.push(terminal.onTerminalDidClose(term => this.extProxy.$terminalClosed(term.id, term.exitStatus))); this.toDispose.push(terminal.onSizeChanged(({ cols, rows }) => { diff --git a/packages/plugin-ext/src/plugin/terminal-ext.ts b/packages/plugin-ext/src/plugin/terminal-ext.ts index 7eceb6b1a489a..b38764f1d0758 100644 --- a/packages/plugin-ext/src/plugin/terminal-ext.ts +++ b/packages/plugin-ext/src/plugin/terminal-ext.ts @@ -189,7 +189,18 @@ export class TerminalServiceExtImpl implements TerminalServiceExt { terminal.deferredProcessId = new Deferred(); terminal.deferredProcessId.resolve(processId); } - const pseudoTerminal = this._pseudoTerminals.get(terminalId.toString()); + + // Switch the pseudoterminal keyed by terminalId to be keyed by terminal ID + const tId = terminalId.toString(); + if (this._pseudoTerminals.has(tId)) { + const pseudo = this._pseudoTerminals.get(tId); + if (pseudo) { + this._pseudoTerminals.set(id, pseudo); + } + this._pseudoTerminals.delete(tId); + } + + const pseudoTerminal = this._pseudoTerminals.get(id); if (pseudoTerminal) { pseudoTerminal.emitOnOpen(cols, rows); }