@@ -40,7 +40,7 @@ import { TaskTerminalStatus } from './taskTerminalStatus.js';
40
40
import { ProblemCollectorEventKind , ProblemHandlingStrategy , StartStopProblemCollector , WatchingProblemCollector } from '../common/problemCollectors.js' ;
41
41
import { GroupKind } from '../common/taskConfiguration.js' ;
42
42
import { IResolveSet , IResolvedVariables , ITaskExecuteResult , ITaskResolver , ITaskSummary , ITaskSystem , ITaskSystemInfo , ITaskSystemInfoResolver , ITaskTerminateResponse , TaskError , TaskErrors , TaskExecuteKind , Triggers } from '../common/taskSystem.js' ;
43
- import { CommandOptions , CommandString , ContributedTask , CustomTask , DependsOrder , ICommandConfiguration , IConfigurationProperties , IExtensionTaskSource , IPresentationOptions , IShellConfiguration , IShellQuotingOptions , ITaskEvent , InMemoryTask , PanelKind , RevealKind , RevealProblemKind , RuntimeType , ShellQuoting , Task , TaskEvent , TaskEventKind , TaskScope , TaskSourceKind } from '../common/tasks.js' ;
43
+ import { CommandOptions , CommandString , ContributedTask , CustomTask , DependsOrder , ICommandConfiguration , IConfigurationProperties , IExtensionTaskSource , IPresentationOptions , IShellConfiguration , IShellQuotingOptions , ITaskEvent , InMemoryTask , PanelKind , RevealKind , RevealProblemKind , RuntimeType , ShellQuoting , TASK_TERMINAL_ACTIVE , Task , TaskEvent , TaskEventKind , TaskScope , TaskSourceKind } from '../common/tasks.js' ;
44
44
import { ITerminalGroupService , ITerminalInstance , ITerminalService } from '../../terminal/browser/terminal.js' ;
45
45
import { VSCodeOscProperty , VSCodeOscPt , VSCodeSequence } from '../../terminal/browser/terminalEscapeSequences.js' ;
46
46
import { TerminalProcessExtHostProxy } from '../../terminal/browser/terminalProcessExtHostProxy.js' ;
@@ -50,6 +50,8 @@ import { IWorkbenchEnvironmentService } from '../../../services/environment/comm
50
50
import { IOutputService } from '../../../services/output/common/output.js' ;
51
51
import { IPaneCompositePartService } from '../../../services/panecomposite/browser/panecomposite.js' ;
52
52
import { IPathService } from '../../../services/path/common/pathService.js' ;
53
+ import { RerunForActiveTerminalCommandId , rerunTaskIcon } from './task.contribution.js' ;
54
+ import { IContextKey , IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js' ;
53
55
54
56
interface ITerminalData {
55
57
terminal : ITerminalInstance ;
@@ -197,6 +199,8 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
197
199
private _hasReconnected : boolean = false ;
198
200
private readonly _onDidStateChange : Emitter < ITaskEvent > ;
199
201
private _reconnectedTerminals : ITerminalInstance [ ] | undefined ;
202
+ private _terminalTabActions = [ { id : RerunForActiveTerminalCommandId , label : nls . localize ( 'rerunTask' , 'Rerun Task' ) , icon : rerunTaskIcon } ] ;
203
+ private _taskTerminalActive : IContextKey < boolean > ;
200
204
201
205
taskShellIntegrationStartSequence ( cwd : string | URI | undefined ) : string {
202
206
return (
@@ -231,6 +235,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
231
235
private _viewDescriptorService : IViewDescriptorService ,
232
236
private _logService : ILogService ,
233
237
private _notificationService : INotificationService ,
238
+ contextKeyService : IContextKeyService ,
234
239
instantiationService : IInstantiationService ,
235
240
taskSystemInfoResolver : ITaskSystemInfoResolver ,
236
241
) {
@@ -244,6 +249,8 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
244
249
this . _onDidStateChange = new Emitter ( ) ;
245
250
this . _taskSystemInfoResolver = taskSystemInfoResolver ;
246
251
this . _register ( this . _terminalStatusManager = instantiationService . createInstance ( TaskTerminalStatus ) ) ;
252
+ this . _taskTerminalActive = TASK_TERMINAL_ACTIVE . bindTo ( contextKeyService ) ;
253
+ this . _register ( this . _terminalService . onDidChangeActiveInstance ( ( e ) => this . _taskTerminalActive . set ( e ?. shellLaunchConfig . type === 'Task' ) ) ) ;
247
254
}
248
255
249
256
public get onDidStateChange ( ) : Event < ITaskEvent > {
@@ -1261,6 +1268,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
1261
1268
}
1262
1269
shellLaunchConfig . isFeatureTerminal = true ;
1263
1270
shellLaunchConfig . useShellEnvironment = true ;
1271
+ shellLaunchConfig . tabActions = this . _terminalTabActions ;
1264
1272
return shellLaunchConfig ;
1265
1273
}
1266
1274
@@ -1461,6 +1469,7 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
1461
1469
const terminalData = { terminal : terminal , lastTask : taskKey , group } ;
1462
1470
terminal . onDisposed ( ( ) => this . _deleteTaskAndTerminal ( terminal , terminalData ) ) ;
1463
1471
this . _terminals [ terminalKey ] = terminalData ;
1472
+ terminal . shellLaunchConfig . tabActions = this . _terminalTabActions ;
1464
1473
return [ terminal , undefined ] ;
1465
1474
}
1466
1475
@@ -1823,6 +1832,16 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
1823
1832
return 'other' ;
1824
1833
}
1825
1834
1835
+ public getTaskForTerminal ( instanceId : number ) : Task | undefined {
1836
+ for ( const key in this . _activeTasks ) {
1837
+ const activeTask = this . _activeTasks [ key ] ;
1838
+ if ( activeTask . terminal ?. instanceId === instanceId ) {
1839
+ return activeTask . task ;
1840
+ }
1841
+ }
1842
+ return undefined ;
1843
+ }
1844
+
1826
1845
private _appendOutput ( output : string ) : void {
1827
1846
const outputChannel = this . _outputService . getChannel ( this . _outputChannelId ) ;
1828
1847
outputChannel ?. append ( output ) ;
0 commit comments