Skip to content

Commit 3c798a2

Browse files
committed
Support for selecting different kernels
1 parent bc065d0 commit 3c798a2

4 files changed

Lines changed: 22 additions & 6 deletions

File tree

src/client/common/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export namespace Commands {
2424
export const Get_All_KernelSpecs = 'jupyter:getAllKernelSpecs';
2525
export const Select_Kernel = 'jupyter:selectKernel';
2626
export const Kernel_Options = 'jupyter:kernelOptions';
27+
export const StartKernelForKernelSpeck = 'jupyter:sartKernelForKernelSpecs';
2728
export const ExecuteRangeInKernel = 'jupyter:execRangeInKernel';
2829
export const ExecuteSelectionOrLineInKernel = 'jupyter.runSelectionLine';
2930
export namespace Cell {

src/client/jupyter/display/kernelPicker.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ export class KernelPicker extends vscode.Disposable {
2424
if (kernelSpecs.length === 0) {
2525
return resolve();
2626
}
27-
this.displayKernelPicker(kernelSpecs).then(resolve);
27+
this.displayKernelPicker(kernelSpecs).then((kernelSpec: KernelspecMetadata) => {
28+
if (kernelSpec) {
29+
vscode.commands.executeCommand(Commands.Jupyter.StartKernelForKernelSpeck, kernelSpec, kernelSpec.language);
30+
}
31+
});
2832
});
2933
});
3034
}

src/client/jupyter/kernel-manager.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ import {ZMQKernel} from './zmq-kernel';
99
import {launchSpec} from 'spawnteract';
1010
import {KernelspecMetadata, Kernelspec} from './contracts';
1111
import {Commands} from '../common/constants';
12+
import {EventEmitter} from 'events';
1213

13-
export class KernelManagerImpl extends vscode.Disposable {
14+
export class KernelManagerImpl extends EventEmitter {
1415
private _runningKernels: Map<string, Kernel>;
1516
private _kernelSpecs: { [key: string]: Kernelspec };
1617
private disposables: vscode.Disposable[];
1718
constructor(private outputChannel: vscode.OutputChannel) {
18-
super(() => { });
19+
super();
1920
this.disposables = [];
2021
this._runningKernels = new Map<string, Kernel>();
2122
this._kernelSpecs = this.getKernelSpecsFromSettings();
@@ -24,6 +25,7 @@ export class KernelManagerImpl extends vscode.Disposable {
2425

2526
private registerCommands() {
2627
this.disposables.push(vscode.commands.registerCommand(Commands.Jupyter.Get_All_KernelSpecs_For_Language, this.getAllKernelSpecsFor.bind(this)));
28+
this.disposables.push(vscode.commands.registerCommand(Commands.Jupyter.StartKernelForKernelSpeck, this.startKernel.bind(this)));
2729
}
2830
public dispose() {
2931
this._runningKernels.forEach(kernel => {
@@ -35,6 +37,7 @@ export class KernelManagerImpl extends vscode.Disposable {
3537
public setRunningKernelFor(language: string, kernel: Kernel) {
3638
kernel.kernelSpec.language = language;
3739
this._runningKernels.set(language, kernel);
40+
this.emit('kernelChanged', kernel, language);
3841
return kernel;
3942
}
4043

@@ -114,10 +117,11 @@ export class KernelManagerImpl extends vscode.Disposable {
114117
}
115118

116119
public startKernel(kernelSpec: KernelspecMetadata, language: string): Promise<Kernel> {
117-
// console.log('KernelManager: startKernelFor:', language);
118-
const projectPath = path.dirname(vscode.window.activeTextEditor.document.fileName);
120+
this.destroyRunningKernelFor(language);
121+
// This doesn't always work
122+
// const projectPath = path.dirname(vscode.window.activeTextEditor.document.fileName);
119123
const spawnOptions = {
120-
cwd: projectPath
124+
cwd: vscode.workspace.rootPath
121125
};
122126
return launchSpec(kernelSpec, spawnOptions).then(result => {
123127
const kernel = new ZMQKernel(kernelSpec, language, result.config, result.connectionFile, result.spawn);

src/client/jupyter/main.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@ export class Jupyter extends vscode.Disposable {
3535
this.disposables.push(this.status);
3636
this.display = new JupyterDisplay(codeLensProvider, highlightProvider);
3737
this.disposables.push(this.display);
38+
39+
// This happend when user changes it from status bar
40+
this.kernelManager.on('kernelChanged', (kernel: Kernel, language: string) => {
41+
if (this.kernel !== kernel && (this.kernel && this.kernel.kernelSpec.language === kernel.kernelSpec.language)) {
42+
this.onKernelChanged(kernel);
43+
}
44+
});
3845
}
3946
public dispose() {
4047
this.disposables.forEach(d => d.dispose());

0 commit comments

Comments
 (0)