diff --git a/packages/mainmenu-extension/src/index.ts b/packages/mainmenu-extension/src/index.ts index 98427ef72d2c..83ecd74d20db 100644 --- a/packages/mainmenu-extension/src/index.ts +++ b/packages/mainmenu-extension/src/index.ts @@ -71,6 +71,8 @@ export namespace CommandIDs { export const restartKernelAndClear = 'kernelmenu:restart-and-clear'; + export const restartAndRunToSelected = 'notebook:restart-and-run-to-selected'; + export const changeKernel = 'kernelmenu:change'; export const shutdownKernel = 'kernelmenu:shutdown'; @@ -547,6 +549,7 @@ export function createKernelMenu(app: JupyterFrontEnd, menu: KernelMenu): void { const restartGroup = [ CommandIDs.restartKernel, CommandIDs.restartKernelAndClear, + CommandIDs.restartAndRunToSelected, CommandIDs.restartAndRunAll ].map(command => { return { command }; diff --git a/packages/notebook-extension/src/index.ts b/packages/notebook-extension/src/index.ts index bb95f0ff1cce..32aded4a56c7 100644 --- a/packages/notebook-extension/src/index.ts +++ b/packages/notebook-extension/src/index.ts @@ -101,6 +101,8 @@ namespace CommandIDs { export const restartClear = 'notebook:restart-clear-output'; + export const restartAndRunToSelected = 'notebook:restart-and-run-to-selected'; + export const restartRunAll = 'notebook:restart-run-all'; export const reconnectToKernel = 'notebook:reconnect-to-kernel'; @@ -1249,6 +1251,33 @@ function addCommands( }, isEnabled }); + commands.addCommand(CommandIDs.restartAndRunToSelected, { + label: 'Restart Kernel and Run up to Selected Cell…', + execute: args => { + const current = getCurrent(args); + if (current) { + const { context, content } = current; + return sessionDialogs! + .restart(current.sessionContext) + .then(restarted => { + if (restarted) { + void NotebookActions.runAllAbove( + content, + context.sessionContext + ).then(executed => { + if (executed || content.activeCellIndex === 0) { + void NotebookActions.run(content, context.sessionContext); + } + }); + } + }); + } + }, + isEnabled: () => { + // Can't run if there are multiple cells selected + return isEnabledAndSingleSelected(); + } + }); commands.addCommand(CommandIDs.restartRunAll, { label: 'Restart Kernel and Run All Cells…', execute: args => { @@ -1918,6 +1947,7 @@ function populatePalette( CommandIDs.renderAllMarkdown, CommandIDs.runAllAbove, CommandIDs.runAllBelow, + CommandIDs.restartAndRunToSelected, CommandIDs.selectAll, CommandIDs.deselectAll, CommandIDs.clearAllOutputs,