diff --git a/package.json b/package.json index bf1a707..906a1dd 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,8 @@ "author": "Jay Ahn, Kiran Pinnipati", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "schema/*.json" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -43,7 +44,6 @@ "@jupyterlab/application": "^2.1.2", "@jupyterlab/apputils": "^2.2.4", "@jupyterlab/cells": "^2.2.4", - "@jupyterlab/coreutils": "^4.1.0", "@jupyterlab/docmanager": "^2.1.2", "@jupyterlab/docregistry": "^2.1.2", "@jupyterlab/fileeditor": "^2.1.2", @@ -77,7 +77,8 @@ "style/*.css" ], "jupyterlab": { - "extension": true + "extension": true, + "schemaDir": "schema" }, "husky": { "hooks": { diff --git a/schema/settings.json b/schema/settings.json new file mode 100644 index 0000000..88710a4 --- /dev/null +++ b/schema/settings.json @@ -0,0 +1,15 @@ +{ + "jupyter.lab.shortcuts": [ + { + "command": "codeSnippet:save-as-snippet", + "keys": ["Accel Shift A"], + "selector": ".jp-Cell" + }, + { + "command": "codeSnippet:save-as-snippet", + "keys": ["Accel Shift A"], + "selector": ".jp-FileEditor" + } + ], + "type": "object" +} diff --git a/src/index.ts b/src/index.ts index 67a226d..8dd8f1d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,8 @@ import { ILayoutRestorer } from '@jupyterlab/application'; import { ICommandPalette, WidgetTracker } from '@jupyterlab/apputils'; +import { ISettingRegistry } from '@jupyterlab/settingregistry'; + import { IEditorServices } from '@jupyterlab/codeeditor'; import { LabIcon } from '@jupyterlab/ui-components'; @@ -23,6 +25,7 @@ import { const CODE_SNIPPET_EXTENSION_ID = 'code-snippet-extension'; +const CODE_SNIPPET_SETTING_ID = 'jupyterlab-code-snippets:settings'; /** * Snippet Editor Icon */ @@ -150,7 +153,7 @@ function activateCodeSnippet( }); //Add an application command - const saveCommand = 'save as code snippet'; + const saveCommand = 'codeSnippet:save-as-snippet'; const toggled = false; app.commands.addCommand(saveCommand, { label: 'Save As Code Snippet', @@ -169,18 +172,16 @@ function activateCodeSnippet( } }); - //Put the command above in context menu + // Put the saveCommand above in context menu app.contextMenu.addItem({ command: saveCommand, selector: '.jp-Cell' }); - // Add keybinding to save - app.commands.addKeyBinding({ + // Put the saveCommand in non-notebook file context menu + app.contextMenu.addItem({ command: saveCommand, - args: {}, - keys: ['Accel Shift S'], - selector: '.jp-Cell' + selector: '.jp-FileEditor' }); // Track and restore the widget state @@ -211,6 +212,18 @@ function activateCodeSnippet( }); } +const codeSnippetExtensionSetting: JupyterFrontEndPlugin = { + id: CODE_SNIPPET_SETTING_ID, + autoStart: true, + requires: [ISettingRegistry], + activate: (app: JupyterFrontEnd, settingRegistry: ISettingRegistry) => { + void settingRegistry + .load(CODE_SNIPPET_SETTING_ID) + .then(_ => console.log('settingRegistry successfully loaded!')) + .catch(e => console.log(e)); + } +}; + function getSelectedText(): string { let selectedText; // window.getSelection @@ -224,4 +237,4 @@ function getSelectedText(): string { return selectedText.toString(); } -export default code_snippet_extension; +export default [code_snippet_extension, codeSnippetExtensionSetting];