Skip to content

Commit ed6a519

Browse files
committed
wip #236972
1 parent 7f434da commit ed6a519

File tree

6 files changed

+36
-0
lines changed

6 files changed

+36
-0
lines changed

src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,10 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer
453453
return this.inTerminal();
454454
}
455455

456+
public async getTaskForTerminal(instanceId: number): Promise<Task | undefined> {
457+
return this._taskSystem?.getTaskForTerminal(instanceId);
458+
}
459+
456460
private async _registerCommands(): Promise<void> {
457461
CommandsRegistry.registerCommand({
458462
id: 'workbench.action.tasks.runTask',

src/vs/workbench/contrib/tasks/browser/terminalTaskSystem.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1823,6 +1823,16 @@ export class TerminalTaskSystem extends Disposable implements ITaskSystem {
18231823
return 'other';
18241824
}
18251825

1826+
public getTaskForTerminal(instanceId: number): Task | undefined {
1827+
for (const key in this._activeTasks) {
1828+
const activeTask = this._activeTasks[key];
1829+
if (activeTask.terminal?.instanceId === instanceId) {
1830+
return activeTask.task;
1831+
}
1832+
}
1833+
return undefined;
1834+
}
1835+
18261836
private _appendOutput(output: string): void {
18271837
const outputChannel = this._outputService.getChannel(this._outputChannelId);
18281838
outputChannel?.append(output);

src/vs/workbench/contrib/tasks/common/taskService.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export interface ITaskService {
7777
getBusyTasks(): Promise<Task[]>;
7878
terminate(task: Task): Promise<ITaskTerminateResponse>;
7979
tasks(filter?: ITaskFilter): Promise<Task[]>;
80+
getTaskForTerminal(instanceId: number): Promise<Task | undefined>;
8081
/**
8182
* Gets tasks currently known to the task system. Unlike {@link tasks},
8283
* this does not activate extensions or prompt for workspace trust.

src/vs/workbench/contrib/tasks/common/taskSystem.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,5 @@ export interface ITaskSystem {
116116
revealTask(task: Task): boolean;
117117
customExecutionComplete(task: Task, result: number): Promise<void>;
118118
isTaskVisible(task: Task): boolean;
119+
getTaskForTerminal(instanceId: number): Task | undefined;
119120
}

src/vs/workbench/contrib/terminal/browser/terminalActions.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import { editorGroupToColumn } from '../../../services/editor/common/editorGroup
6262
import { InstanceContext } from './terminalContextMenu.js';
6363
import { AccessibleViewProviderId } from '../../../../platform/accessibility/browser/accessibleView.js';
6464
import { TerminalTabList } from './terminalTabsList.js';
65+
import { ITaskService } from '../../tasks/common/taskService.js';
6566

6667
export const switchTerminalActionViewItemSeparator = '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500';
6768
export const switchTerminalShowTabsTitle = localize('showTerminalTabs', "Show Tabs");
@@ -1434,6 +1435,24 @@ export function registerTerminalActions() {
14341435
}
14351436
}
14361437
});
1438+
1439+
registerTerminalAction({
1440+
id: TerminalCommandId.RerunTaskTerminal,
1441+
title: localize2('workbench.action.terminal.rerunTaskTerminal', 'Rerun Task Terminal'),
1442+
precondition: sharedWhenClause.terminalAvailable,
1443+
run: async (c, accessor, args) => {
1444+
const terminalService = accessor.get(ITerminalService);
1445+
const taskSystem = accessor.get(ITaskService);
1446+
const instance = terminalService.activeInstance;
1447+
1448+
if (instance) {
1449+
const task = await taskSystem.getTaskForTerminal(instance.instanceId);
1450+
if (task) {
1451+
await taskSystem.run(task);
1452+
}
1453+
}
1454+
}
1455+
});
14371456
}
14381457

14391458
interface IRemoteTerminalPick extends IQuickPickItem {

src/vs/workbench/contrib/terminal/common/terminal.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,7 @@ export const enum TerminalCommandId {
480480
ShowEnvironmentContributions = 'workbench.action.terminal.showEnvironmentContributions',
481481
StartVoice = 'workbench.action.terminal.startVoice',
482482
StopVoice = 'workbench.action.terminal.stopVoice',
483+
RerunTaskTerminal = 'workbench.action.terminal.rerunTaskTerminal',
483484
}
484485

485486
export const DEFAULT_COMMANDS_TO_SKIP_SHELL: string[] = [

0 commit comments

Comments
 (0)