forked from DonJayamanne/pythonVSCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathterminalProvider.ts
More file actions
40 lines (37 loc) · 2.01 KB
/
Copy pathterminalProvider.ts
File metadata and controls
40 lines (37 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
import { Disposable, Uri } from 'vscode';
import { ICommandManager, IDocumentManager, IWorkspaceService } from '../common/application/types';
import { Commands } from '../common/constants';
import { ITerminalServiceFactory } from '../common/terminal/types';
import { IServiceContainer } from '../ioc/types';
import { captureTelemetry } from '../telemetry';
import { EventName } from '../telemetry/constants';
export class TerminalProvider implements Disposable {
private disposables: Disposable[] = [];
constructor(private serviceContainer: IServiceContainer) {
this.registerCommands();
}
public dispose() {
this.disposables.forEach(disposable => disposable.dispose());
}
private registerCommands() {
const commandManager = this.serviceContainer.get<ICommandManager>(ICommandManager);
const disposable = commandManager.registerCommand(Commands.Create_Terminal, this.onCreateTerminal, this);
this.disposables.push(disposable);
}
@captureTelemetry(EventName.TERMINAL_CREATE, { triggeredBy: 'commandpalette' })
private async onCreateTerminal() {
const terminalService = this.serviceContainer.get<ITerminalServiceFactory>(ITerminalServiceFactory);
const activeResource = this.getActiveResource();
await terminalService.createTerminalService(activeResource, 'Python').show(false);
}
private getActiveResource(): Uri | undefined {
const documentManager = this.serviceContainer.get<IDocumentManager>(IDocumentManager);
if (documentManager.activeTextEditor && !documentManager.activeTextEditor.document.isUntitled) {
return documentManager.activeTextEditor.document.uri;
}
const workspace = this.serviceContainer.get<IWorkspaceService>(IWorkspaceService);
return Array.isArray(workspace.workspaceFolders) && workspace.workspaceFolders.length > 0 ? workspace.workspaceFolders[0].uri : undefined;
}
}