From ad949fa7206f6a95b701d8546f7380b84c66b3db Mon Sep 17 00:00:00 2001 From: Brett Saviano Date: Wed, 16 Jul 2025 11:22:26 -0400 Subject: [PATCH 1/2] Support servers defined at the workspace-folder level for launching Lite Terminal from Servers tree view --- src/commands/webSocketTerminal.ts | 15 ++++++++++----- src/extension.ts | 13 ++++++++++--- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/commands/webSocketTerminal.ts b/src/commands/webSocketTerminal.ts index 2c44b543..250437cc 100644 --- a/src/commands/webSocketTerminal.ts +++ b/src/commands/webSocketTerminal.ts @@ -96,7 +96,10 @@ class WebSocketTerminal implements vscode.Pseudoterminal { // eslint-disable-next-line no-control-regex private _colorsRegex = /\x1b[^m]*?m/g; - constructor(private readonly _targetUri: vscode.Uri) {} + constructor( + private readonly _targetUri: vscode.Uri, + private readonly _nsOverride?: string + ) {} /** Hide the cursor, write `data` to the terminal, then show the cursor again. */ private _hideCursorWrite(data: string): void { @@ -201,6 +204,7 @@ class WebSocketTerminal implements vscode.Pseudoterminal { open(initialDimensions?: vscode.TerminalDimensions): void { const api = new AtelierAPI(this._targetUri); + if (this._nsOverride) api.setNamespace(this._nsOverride); this._cols = initialDimensions?.columns ?? 100000; try { // Open the WebSocket @@ -728,7 +732,8 @@ function reportError(msg: string, throwErrors = false) { function terminalConfigForUri( api: AtelierAPI, targetUri: vscode.Uri, - throwErrors = false + throwErrors: boolean, + nsOverride?: string ): vscode.ExtensionTerminalOptions | undefined { // Make sure the server connection is active if (!api.active || api.ns == "") { @@ -751,13 +756,13 @@ function terminalConfigForUri( vscode.window.terminals.length > 0 ? vscode.TerminalLocation.Editor : vscode.TerminalLocation.Panel, - pty: new WebSocketTerminal(targetUri), + pty: new WebSocketTerminal(targetUri, nsOverride), isTransient: true, iconPath: iscIcon, }; } -export async function launchWebSocketTerminal(targetUri?: vscode.Uri): Promise { +export async function launchWebSocketTerminal(targetUri?: vscode.Uri, nsOverride?: string): Promise { // Determine the server to connect to if (targetUri) { // Uri passed as command argument might be for a server we haven't yet resolved @@ -779,7 +784,7 @@ export async function launchWebSocketTerminal(targetUri?: vscode.Uri): Promise { (namespaceTreeItem) => { sendCommandTelemetryEvent("intersystems-servermanager.webterminal"); const idArray = namespaceTreeItem.id.split(":"); - const serverId = idArray[1]; const namespace = idArray[3]; - const targetUri = vscode.Uri.from({ scheme: "isfs", authority: `${serverId}:${namespace}` }); - launchWebSocketTerminal(targetUri); + const serverTreeItem = namespaceTreeItem?.parent?.parent; + const isWsFolderServer = + serverTreeItem?.label.includes("(") && typeof serverTreeItem?.params?.serverSummary?.scope?.uri == "object"; + launchWebSocketTerminal( + // Support servers that are defined at the workspace-folder level + serverTreeItem?.label.includes("(") && serverTreeItem?.params?.serverSummary?.scope?.uri + ? serverTreeItem?.params?.serverSummary?.scope?.uri + : vscode.Uri.from({ scheme: "isfs", authority: `${idArray[1]}:${namespace}` }), + isWsFolderServer ? namespace : undefined + ); } ), vscode.commands.registerCommand("vscode-objectscript.ObjectScriptExplorer.webterminal", (node: NodeBase) => { From 73738ff2218997678b9ba07d443adce3aec97e75 Mon Sep 17 00:00:00 2001 From: Brett Saviano Date: Wed, 16 Jul 2025 11:51:54 -0400 Subject: [PATCH 2/2] Update extension.ts --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 90cf66a2..e581f2f4 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1715,7 +1715,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { serverTreeItem?.label.includes("(") && typeof serverTreeItem?.params?.serverSummary?.scope?.uri == "object"; launchWebSocketTerminal( // Support servers that are defined at the workspace-folder level - serverTreeItem?.label.includes("(") && serverTreeItem?.params?.serverSummary?.scope?.uri + isWsFolderServer ? serverTreeItem?.params?.serverSummary?.scope?.uri : vscode.Uri.from({ scheme: "isfs", authority: `${idArray[1]}:${namespace}` }), isWsFolderServer ? namespace : undefined