Browse Source

Merge pull request #552 from RooVetGit/fix_multiple_terminals_created

Fix multiple terminals created
Matt Rubens 11 months ago
parent
commit
2dfe2c5797
2 changed files with 18 additions and 1 deletions
  1. 5 0
      .changeset/friendly-bottles-kneel.md
  2. 13 1
      src/integrations/terminal/TerminalManager.ts

+ 5 - 0
.changeset/friendly-bottles-kneel.md

@@ -0,0 +1,5 @@
+---
+"roo-cline": patch
+---
+
+Fix issue where the terminal management system was creating unnecessary new terminals (thanks @evan-fannin!)

+ 13 - 1
src/integrations/terminal/TerminalManager.ts

@@ -161,8 +161,10 @@ export class TerminalManager {
 	}
 
 	async getOrCreateTerminal(cwd: string): Promise<TerminalInfo> {
+		const terminals = TerminalRegistry.getAllTerminals()
+
 		// 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) {
 				return false
 			}
@@ -173,11 +175,21 @@ export class TerminalManager {
 			}
 			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) {
+			// Navigate back to the desired directory
+			await this.runCommand(availableTerminal, `cd "${cwd}"`)
 			this.terminalIds.add(availableTerminal.id)
 			return availableTerminal
 		}
 
+		// If all terminals are busy, create a new one
 		const newTerminalInfo = TerminalRegistry.createTerminal(cwd)
 		this.terminalIds.add(newTerminalInfo.id)
 		return newTerminalInfo