@@ -6,7 +6,7 @@ import * as path from 'path';
66import * as semver from 'semver' ;
77import * as vscode from 'vscode' ;
88import * as models from '../models' ;
9- import { OutputTo , TerminalPer , TreeSort , log , settings } from '../utils' ;
9+ import { OutputTo , TerminalClose , TerminalPer , TreeSort , log , settings } from '../utils' ;
1010import stripAnsi = require( 'strip-ansi' ) ;
1111
1212const octokit = new Octokit ( ) ;
@@ -34,6 +34,7 @@ const errCodeTaskCalledTooManyTimes = 204;
3434class TaskfileService {
3535 private static _instance : TaskfileService ;
3636 private static outputChannel : vscode . OutputChannel ;
37+ private static terminal : vscode . Terminal ;
3738 private lastTaskName : string | undefined ;
3839 private lastTaskDir : string | undefined ;
3940 private version : semver . SemVer | undefined ;
@@ -224,16 +225,18 @@ class TaskfileService {
224225 public async runTask ( taskName : string , dir ?: string , cliArgs ?: string ) : Promise < void > {
225226 if ( settings . outputTo === OutputTo . terminal ) {
226227 log . info ( `Running task: "${ taskName } ${ cliArgs } " in: "${ dir } "` ) ;
227- var terminal : vscode . Terminal ;
228- if ( vscode . window . activeTerminal !== undefined && settings . terminal . per === TerminalPer . window ) {
229- log . info ( "Using existing terminal" ) ;
230- terminal = vscode . window . activeTerminal ;
231- } else {
228+ if ( TaskfileService . terminal !== undefined && settings . terminal . close === TerminalClose . onNextTask ) {
229+ log . info ( "Closing old terminal" ) ;
230+ TaskfileService . terminal . dispose ( ) ;
231+ }
232+ if ( TaskfileService . terminal === undefined || TaskfileService . terminal . exitStatus !== undefined || settings . terminal . per === TerminalPer . task ) {
232233 log . info ( "Using new terminal" ) ;
233- terminal = vscode . window . createTerminal ( "Task" ) ;
234+ TaskfileService . terminal = vscode . window . createTerminal ( "Task" ) ;
235+ } else {
236+ log . info ( "Using existing terminal" ) ;
234237 }
235- terminal . show ( ) ;
236- terminal . sendText ( this . command ( taskName , cliArgs ) ) ;
238+ TaskfileService . terminal . show ( ) ;
239+ TaskfileService . terminal . sendText ( this . command ( taskName , cliArgs ) ) ;
237240 } else {
238241 return await new Promise ( ( resolve ) => {
239242 log . info ( `Running task: "${ taskName } " in: "${ dir } "` ) ;
0 commit comments