diff --git a/packages/console-extension/schema/tracker.json b/packages/console-extension/schema/tracker.json index 5e40ec9bbe8a..2fffde24024f 100644 --- a/packages/console-extension/schema/tracker.json +++ b/packages/console-extension/schema/tracker.json @@ -14,7 +14,7 @@ }, { "command": "console:linebreak", - "keys": ["Ctrl Enter"], + "keys": ["Accel Enter"], "selector": ".jp-CodeConsole[data-jp-interaction-mode='terminal'] .jp-CodeConsole-promptCell" }, { diff --git a/packages/help-extension/package.json b/packages/help-extension/package.json index 3f2172794a3a..fa7ddb6a53e9 100644 --- a/packages/help-extension/package.json +++ b/packages/help-extension/package.json @@ -49,7 +49,6 @@ "access": "public" }, "jupyterlab": { - "extension": true, - "schemaDir": "schema" + "extension": true } } diff --git a/packages/help-extension/schema/plugin.json b/packages/help-extension/schema/plugin.json deleted file mode 100644 index fa2989fa5517..000000000000 --- a/packages/help-extension/schema/plugin.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "title": "Help", - "description": "Help settings.", - "jupyter.lab.shortcuts": [ - { - "command": "help:toggle", - "keys": ["Ctrl Shift H"], - "selector": "body" - } - ], - "properties": {}, - "additionalProperties": false, - "type": "object" -} diff --git a/packages/help-extension/src/index.tsx b/packages/help-extension/src/index.tsx index 856563002987..d406b3f53d4a 100644 --- a/packages/help-extension/src/index.tsx +++ b/packages/help-extension/src/index.tsx @@ -44,8 +44,6 @@ namespace CommandIDs { export const hide = 'help:hide'; - export const toggle = 'help:toggle'; - export const launchClassic = 'help:launch-classic-notebook'; } diff --git a/packages/mainmenu-extension/schema/plugin.json b/packages/mainmenu-extension/schema/plugin.json index 6fc33d0ca1aa..8ac887b30b50 100644 --- a/packages/mainmenu-extension/schema/plugin.json +++ b/packages/mainmenu-extension/schema/plugin.json @@ -24,12 +24,12 @@ }, { "command": "editmenu:redo", - "keys": ["Ctrl Shift Z"], + "keys": ["Accel Shift Z"], "selector": "[data-jp-undoer]" }, { "command": "editmenu:undo", - "keys": ["Ctrl Z"], + "keys": ["Accel Z"], "selector": "[data-jp-undoer]" }, { diff --git a/packages/mainmenu-extension/src/index.ts b/packages/mainmenu-extension/src/index.ts index a286a89ee9d9..0a89d0b945f2 100644 --- a/packages/mainmenu-extension/src/index.ts +++ b/packages/mainmenu-extension/src/index.ts @@ -298,6 +298,9 @@ export function createFileMenu( const commands = menu.menu.commands; // Add a delegator command for closing and cleaning up an activity. + // This one is a bit different, in that we consider it enabled + // even if it cannot find a delegate for the activity. + // In that case, we instead call the application `close` command. commands.addCommand(CommandIDs.closeAndCleanup, { label: () => { const action = Private.delegateLabel( @@ -308,16 +311,22 @@ export function createFileMenu( const name = Private.delegateLabel(app, menu.closeAndCleaners, 'name'); return `Close and ${action ? ` ${action} ${name}` : 'Shutdown'}`; }, - isEnabled: Private.delegateEnabled( - app, - menu.closeAndCleaners, - 'closeAndCleanup' - ), - execute: Private.delegateExecute( - app, - menu.closeAndCleaners, - 'closeAndCleanup' - ) + isEnabled: () => + !!app.shell.currentWidget && !!app.shell.currentWidget.title.closable, + execute: () => { + // Check if we have a registered delegate. If so, call that. + if ( + Private.delegateEnabled(app, menu.closeAndCleaners, 'closeAndCleanup')() + ) { + return Private.delegateExecute( + app, + menu.closeAndCleaners, + 'closeAndCleanup' + )(); + } + // If we have no delegate, call the top-level application close. + return app.commands.execute('application:close'); + } }); // Add a delegator command for creating a console for an activity. diff --git a/packages/terminal-extension/src/index.ts b/packages/terminal-extension/src/index.ts index 0694e4ca10be..1e887ed00885 100644 --- a/packages/terminal-extension/src/index.ts +++ b/packages/terminal-extension/src/index.ts @@ -18,7 +18,7 @@ import { import { ILauncher } from '@jupyterlab/launcher'; -import { IMainMenu } from '@jupyterlab/mainmenu'; +import { IFileMenu, IMainMenu } from '@jupyterlab/mainmenu'; import { ITerminalTracker, ITerminal } from '@jupyterlab/terminal'; @@ -192,6 +192,17 @@ function activate( // Add terminal creation to the file menu. mainMenu.fileMenu.newMenu.addGroup([{ command: CommandIDs.createNew }], 20); + + // Add terminal close-and-shutdown to the file menu. + mainMenu.fileMenu.closeAndCleaners.add({ + tracker, + action: 'Shutdown', + name: 'Terminal', + closeAndCleanup: (current: MainAreaWidget) => { + // The widget is automatically disposed upon session shutdown. + return current.content.session.shutdown(); + } + } as IFileMenu.ICloseAndCleaner>); } if (palette) {