diff --git a/packages/mainmenu-extension/src/index.ts b/packages/mainmenu-extension/src/index.ts index 883911a8055a..e2191404011c 100644 --- a/packages/mainmenu-extension/src/index.ts +++ b/packages/mainmenu-extension/src/index.ts @@ -91,6 +91,8 @@ export namespace CommandIDs { export const restartAndRunAll = 'runmenu:restart-and-run-all'; + export const restartAndRunToSelected = 'runmenu:restart-and-run-to-selected'; + export const runAbove = 'runmenu:run-above'; export const runBelow = 'runmenu:run-below'; @@ -538,7 +540,8 @@ export function createKernelMenu(app: JupyterFrontEnd, menu: KernelMenu): void { const restartGroup = [ CommandIDs.restartKernel, CommandIDs.restartKernelAndClear, - CommandIDs.restartAndRunAll + CommandIDs.restartAndRunAll, + CommandIDs.restartAndRunToSelected ].map(command => { return { command }; }); @@ -687,6 +690,21 @@ export function createRunMenu(app: JupyterFrontEnd, menu: RunMenu): void { ), execute: Private.delegateExecute(app, menu.codeRunners, 'restartAndRunAll') }); + commands.addCommand(CommandIDs.restartAndRunToSelected, { + label: () => { + return `Restart Kernel and Run up to Selected Cell …`; + }, + isEnabled: Private.delegateEnabled( + app, + menu.codeRunners, + 'restartAndRunToSelected' + ), + execute: Private.delegateExecute( + app, + menu.codeRunners, + 'restartAndRunToSelected' + ) + }); const runAllGroup = [CommandIDs.runAll, CommandIDs.restartAndRunAll].map( command => { diff --git a/packages/mainmenu/src/run.ts b/packages/mainmenu/src/run.ts index c9c4328c4a64..05f4c83450db 100644 --- a/packages/mainmenu/src/run.ts +++ b/packages/mainmenu/src/run.ts @@ -79,5 +79,11 @@ export namespace IRunMenu { * returns a promise of whether the action was performed. */ restartAndRunAll?: (widget: T) => Promise; + /** + * A function to restart and run all the code hosted by the widget + * up to the currently selected cell, which returns a promise of whether + * the action was performed. + */ + restartAndRunToSelected?: (widget: T) => Promise; } } diff --git a/packages/notebook-extension/src/index.ts b/packages/notebook-extension/src/index.ts index e88150e6230a..cc28f0fd4ab9 100644 --- a/packages/notebook-extension/src/index.ts +++ b/packages/notebook-extension/src/index.ts @@ -2113,6 +2113,21 @@ function populateMenus( } return restarted; }); + }, + restartAndRunToSelected: current => { + const { context, content } = current; + return context.session.restart().then(restarted => { + if (restarted) { + void NotebookActions.runAllAbove(content, context.session).then( + executed => { + if (executed) { + void NotebookActions.run(content, context.session); + } + } + ); + } + return restarted; + }); } } as IRunMenu.ICodeRunner);