reuse existing non-busy terminals

This commit is contained in:
Evan
2025-01-16 14:08:03 +08:00
committed by Matt Rubens
parent bf49b3ea61
commit 674216cc8a

View File

@@ -161,8 +161,10 @@ export class TerminalManager {
} }
async getOrCreateTerminal(cwd: string): Promise<TerminalInfo> { async getOrCreateTerminal(cwd: string): Promise<TerminalInfo> {
const terminals = TerminalRegistry.getAllTerminals()
// Find available terminal from our pool first (created for this task) // Find available terminal from our pool first (created for this task)
const availableTerminal = TerminalRegistry.getAllTerminals().find((t) => { const matchingTerminal = terminals.find((t) => {
if (t.busy) { if (t.busy) {
return false return false
} }
@@ -173,11 +175,21 @@ export class TerminalManager {
} }
return arePathsEqual(vscode.Uri.file(cwd).fsPath, terminalCwd.fsPath) return arePathsEqual(vscode.Uri.file(cwd).fsPath, terminalCwd.fsPath)
}) })
if (matchingTerminal) {
this.terminalIds.add(matchingTerminal.id)
return matchingTerminal
}
// If no matching terminal exists, try to find any non-busy terminal
const availableTerminal = terminals.find((t) => !t.busy)
if (availableTerminal) { if (availableTerminal) {
// Navigate back to the desired directory
await this.runCommand(availableTerminal, `cd "${cwd}"`)
this.terminalIds.add(availableTerminal.id) this.terminalIds.add(availableTerminal.id)
return availableTerminal return availableTerminal
} }
// If all terminals are busy, create a new one
const newTerminalInfo = TerminalRegistry.createTerminal(cwd) const newTerminalInfo = TerminalRegistry.createTerminal(cwd)
this.terminalIds.add(newTerminalInfo.id) this.terminalIds.add(newTerminalInfo.id)
return newTerminalInfo return newTerminalInfo