@@ -30,7 +30,7 @@ class JsdosTerminal implements vscode.Pseudoterminal {
3030 this . writeEmitter . fire ( '\x1b[31mJSDos\x1b[0m\r\nhello' ) ;
3131 }
3232 close ( ) : void {
33- this . ci . exit ( ) ;
33+ // this.ci.exit();
3434 }
3535 input = "" ;
3636 handleInput ?( data : string ) : void {
@@ -66,20 +66,24 @@ function getWebviewContent(webview: vscode.Webview, extensionUri: vscode.Uri) {
6666
6767
6868class Manager {
69- ci : CommandInterface | undefined = undefined ;
69+ hasCi : { ci : CommandInterface | undefined } = { ci : undefined } ;
7070 terminal :vscode . Terminal | undefined = undefined ;
71- updateci ( ci : CommandInterface ) {
72- const bar = vscode . window . createStatusBarItem ( vscode . StatusBarAlignment . Left ) ;
73- bar . command = 'masmtasm.emulatorStatus' ;
74- bar . text = `jsdos` ;
75- bar . show ( ) ;
71+ shell :utils . Shell | undefined = undefined ;
72+ bar = vscode . window . createStatusBarItem ( vscode . StatusBarAlignment . Left ) ;
73+ updateci ( hasCi :{ ci : CommandInterface } ) {
74+ this . bar . command = 'masmtasm.emulatorStatus' ;
75+ this . bar . text = `jsdos` ;
76+ this . bar . show ( ) ;
77+ this . bar . color = new vscode . ThemeColor ( "activityBar.activeBackground" )
7678
77- this . ci = ci ;
78- const pty = new JsdosTerminal ( this . ci ) ;
79+ this . hasCi = hasCi ;
80+ const pty = new JsdosTerminal ( hasCi . ci ) ;
7981 this . terminal = vscode . window . createTerminal ( { name : "jsdos" , pty, } ) ;
82+ this . shell = pty . shell
8083 }
8184 webview ( context :vscode . ExtensionContext ) {
82- if ( this . ci ) {
85+ let ci = this . hasCi . ci ;
86+ if ( ci ) {
8387 const panel = vscode . window . createWebviewPanel (
8488 "jsdos" ,
8589 "jsdos panel" ,
@@ -95,10 +99,10 @@ class Manager {
9599
96100 panel . webview . postMessage ( {
97101 command : "ci" ,
98- width : this . ci ?. width ( ) ,
99- height : this . ci ?. height ( )
102+ width : ci ?. width ( ) ,
103+ height : ci ?. height ( )
100104 } ) ;
101- this . ci ?. events ( ) . onFrame ( ( rgb , rgba ) => {
105+ ci ?. events ( ) . onFrame ( ( rgb , rgba ) => {
102106 panel . webview . postMessage ( {
103107 command : 'rgb' ,
104108 time : new Date ( ) . getTime ( ) ,
@@ -114,13 +118,13 @@ class Manager {
114118 return ;
115119 case 'keyup' :
116120 const up = utils . htmlKey2jsdos ( message . code ) ;
117- if ( up && this . ci )
118- this . ci . sendKeyEvent ( up , false ) ;
121+ if ( up && ci )
122+ ci . sendKeyEvent ( up , false ) ;
119123 return ;
120124 case 'keydown' :
121125 const down = utils . htmlKey2jsdos ( message . code ) ;
122- if ( down && this . ci )
123- this . ci . sendKeyEvent ( down , true ) ;
126+ if ( down && ci )
127+ ci . sendKeyEvent ( down , true ) ;
124128 return ;
125129 }
126130 } ,
@@ -137,7 +141,7 @@ export const manager=new Manager();
137141
138142export function activate ( context : vscode . ExtensionContext ) : void {
139143 async function statusBarCommand ( ) {
140- const items = [ "show jsdos view" , "show terminal" ] ;
144+ const items = [ "show jsdos view" , "show terminal" , "exit" ] ;
141145
142146 const placeHolder = 'manipulate emulator' ;
143147 const seleted = await vscode . window . showQuickPick ( items , { placeHolder } ) ;
@@ -147,6 +151,12 @@ export function activate(context: vscode.ExtensionContext): void {
147151 if ( seleted === items [ 1 ] ) {
148152 manager . terminal ?. show ( ) ;
149153 }
154+ if ( seleted === items [ 2 ] ) {
155+ manager . hasCi . ci ?. exit ( )
156+ manager . hasCi . ci = undefined
157+ manager . bar . hide ( )
158+ manager . terminal ?. hide ( )
159+ }
150160 }
151161 const disposable = vscode . commands . registerCommand ( 'masmtasm.emulatorStatus' , statusBarCommand ) ;
152162 context . subscriptions . push ( disposable ) ;
0 commit comments