@@ -30,7 +30,7 @@ class JsdosTerminal implements vscode.Pseudoterminal {
30
30
this . writeEmitter . fire ( '\x1b[31mJSDos\x1b[0m\r\nhello' ) ;
31
31
}
32
32
close ( ) : void {
33
- this . ci . exit ( ) ;
33
+ // this.ci.exit();
34
34
}
35
35
input = "" ;
36
36
handleInput ?( data : string ) : void {
@@ -66,20 +66,24 @@ function getWebviewContent(webview: vscode.Webview, extensionUri: vscode.Uri) {
66
66
67
67
68
68
class Manager {
69
- ci : CommandInterface | undefined = undefined ;
69
+ hasCi : { ci : CommandInterface | undefined } = { ci : undefined } ;
70
70
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" )
76
78
77
- this . ci = ci ;
78
- const pty = new JsdosTerminal ( this . ci ) ;
79
+ this . hasCi = hasCi ;
80
+ const pty = new JsdosTerminal ( hasCi . ci ) ;
79
81
this . terminal = vscode . window . createTerminal ( { name : "jsdos" , pty, } ) ;
82
+ this . shell = pty . shell
80
83
}
81
84
webview ( context :vscode . ExtensionContext ) {
82
- if ( this . ci ) {
85
+ let ci = this . hasCi . ci ;
86
+ if ( ci ) {
83
87
const panel = vscode . window . createWebviewPanel (
84
88
"jsdos" ,
85
89
"jsdos panel" ,
@@ -95,10 +99,10 @@ class Manager {
95
99
96
100
panel . webview . postMessage ( {
97
101
command : "ci" ,
98
- width : this . ci ?. width ( ) ,
99
- height : this . ci ?. height ( )
102
+ width : ci ?. width ( ) ,
103
+ height : ci ?. height ( )
100
104
} ) ;
101
- this . ci ?. events ( ) . onFrame ( ( rgb , rgba ) => {
105
+ ci ?. events ( ) . onFrame ( ( rgb , rgba ) => {
102
106
panel . webview . postMessage ( {
103
107
command : 'rgb' ,
104
108
time : new Date ( ) . getTime ( ) ,
@@ -114,13 +118,13 @@ class Manager {
114
118
return ;
115
119
case 'keyup' :
116
120
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 ) ;
119
123
return ;
120
124
case 'keydown' :
121
125
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 ) ;
124
128
return ;
125
129
}
126
130
} ,
@@ -137,7 +141,7 @@ export const manager=new Manager();
137
141
138
142
export function activate ( context : vscode . ExtensionContext ) : void {
139
143
async function statusBarCommand ( ) {
140
- const items = [ "show jsdos view" , "show terminal" ] ;
144
+ const items = [ "show jsdos view" , "show terminal" , "exit" ] ;
141
145
142
146
const placeHolder = 'manipulate emulator' ;
143
147
const seleted = await vscode . window . showQuickPick ( items , { placeHolder } ) ;
@@ -147,6 +151,12 @@ export function activate(context: vscode.ExtensionContext): void {
147
151
if ( seleted === items [ 1 ] ) {
148
152
manager . terminal ?. show ( ) ;
149
153
}
154
+ if ( seleted === items [ 2 ] ) {
155
+ manager . hasCi . ci ?. exit ( )
156
+ manager . hasCi . ci = undefined
157
+ manager . bar . hide ( )
158
+ manager . terminal ?. hide ( )
159
+ }
150
160
}
151
161
const disposable = vscode . commands . registerCommand ( 'masmtasm.emulatorStatus' , statusBarCommand ) ;
152
162
context . subscriptions . push ( disposable ) ;
0 commit comments