@@ -45,6 +45,8 @@ interface WebSocketMessage {
4545 protocol ?: number ;
4646 /** The InterSystems IRIS `$ZVERSION`. Only present for "init". */
4747 version ?: string ;
48+ /** The current namespace. Only present for "prompt" on IRIS 2025.3+. */
49+ ns ?: string ;
4850}
4951
5052class WebSocketTerminal implements vscode . Pseudoterminal {
@@ -84,7 +86,7 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
8486 private _promptExitCode = ";0" ;
8587
8688 /** The leading characters for multi-line editing mode */
87- private readonly _multiLinePrompt : string = "... " ;
89+ public readonly multiLinePrompt = "... " ;
8890
8991 /** The WebSocket used to talk to the server */
9092 private _socket : WebSocket ;
@@ -96,8 +98,11 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
9698 // eslint-disable-next-line no-control-regex
9799 private _colorsRegex = / \x1b [ ^ m ] * ?m / g;
98100
101+ /** The terminal's current namespace */
102+ public currentNs : string ;
103+
99104 constructor (
100- private readonly _targetUri : vscode . Uri ,
105+ public readonly targetUri : vscode . Uri ,
101106 private readonly _nonce : string ,
102107 private readonly _nsOverride ?: string
103108 ) { }
@@ -204,7 +209,7 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
204209 }
205210
206211 open ( initialDimensions ?: vscode . TerminalDimensions ) : void {
207- const api = new AtelierAPI ( this . _targetUri ) ;
212+ const api = new AtelierAPI ( this . targetUri ) ;
208213 if ( this . _nsOverride ) api . setNamespace ( this . _nsOverride ) ;
209214 this . _cols = initialDimensions ?. columns ?? 100000 ;
210215 try {
@@ -279,6 +284,8 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
279284 this . _margin = this . _cursorCol = message . text . replace ( this . _colorsRegex , "" ) . length ;
280285 this . _prompt = message . text ;
281286 this . _promptExitCode = ";0" ;
287+ // Store the current namespace
288+ this . currentNs = message . ns ;
282289 }
283290 // Enable input
284291 this . _state = message . type ;
@@ -305,7 +312,7 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
305312 this . _hideCursorWrite (
306313 `\x1b7${ cursorLine > 0 ? `\x1b[${ cursorLine } A` : "" } \r\x1b[0J${ this . _prompt } ${ message . text . replace (
307314 / \r \n / g,
308- `\r\n${ this . _multiLinePrompt } `
315+ `\r\n${ this . multiLinePrompt } `
309316 ) } \x1b8`
310317 ) ;
311318 break ;
@@ -347,8 +354,8 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
347354 // Check if we should enter multi-line mode
348355 if ( this . _inputIsUnterminated ( ) ) {
349356 // Write the multi-line mode prompt to the terminal
350- this . _hideCursorWrite ( `\r\n${ this . _multiLinePrompt } ` ) ;
351- this . _margin = this . _cursorCol = this . _multiLinePrompt . length ;
357+ this . _hideCursorWrite ( `\r\n${ this . multiLinePrompt } ` ) ;
358+ this . _margin = this . _cursorCol = this . multiLinePrompt . length ;
352359 this . _input += "\r\n" ;
353360 return ;
354361 }
@@ -593,7 +600,7 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
593600 char = char
594601 . slice ( 0 , - 1 )
595602 . split ( "\r" )
596- . map ( ( l ) => ( l . startsWith ( this . _multiLinePrompt ) ? l . slice ( this . _multiLinePrompt . length ) : l ) )
603+ . map ( ( l ) => ( l . startsWith ( this . multiLinePrompt ) ? l . slice ( this . multiLinePrompt . length ) : l ) )
597604 . join ( "\r" ) ;
598605 }
599606 // Replace all single \r with \r\n
@@ -620,8 +627,8 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
620627 let newRow : number ;
621628 if ( char . includes ( "\r\n" ) ) {
622629 if ( this . _state == "prompt" ) {
623- char = char . replaceAll ( "\r\n" , `\r\n${ this . _multiLinePrompt } ` ) ;
624- this . _margin = this . _multiLinePrompt . length ;
630+ char = char . replaceAll ( "\r\n" , `\r\n${ this . multiLinePrompt } ` ) ;
631+ this . _margin = this . multiLinePrompt . length ;
625632 }
626633 const charLines = char . split ( "\r\n" ) ;
627634 newRow =
@@ -720,7 +727,7 @@ class WebSocketTerminal implements vscode.Pseudoterminal {
720727 this . _hideCursorWrite (
721728 `\x1b7${ cursorLine > 0 ? `\x1b[${ cursorLine } A` : "" } \r\x1b[${ this . _margin } C\x1b[0J${ this . _input . replace (
722729 / \r \n / g,
723- `\r\n${ this . _multiLinePrompt } `
730+ `\r\n${ this . multiLinePrompt } `
724731 ) } \x1b8`
725732 ) ;
726733 if ( this . _state == "prompt" && this . _syntaxColoringEnabled ( ) ) {
0 commit comments