diff --git a/packages/filebrowser-extension/schema/browser.json b/packages/filebrowser-extension/schema/browser.json index 3f444e9f1586..19ec66a2df4c 100644 --- a/packages/filebrowser-extension/schema/browser.json +++ b/packages/filebrowser-extension/schema/browser.json @@ -1,6 +1,8 @@ { + "jupyter.lab.setting-icon-class": "jp-FileIcon", + "jupyter.lab.setting-icon-label": "File Browser", "title": "File Browser", - "description": "File browser settings.", + "description": "File Browser settings.", "jupyter.lab.shortcuts": [ { "command": "filebrowser:create-main-launcher", @@ -13,7 +15,14 @@ "selector": "body" } ], - "properties": {}, + "properties": { + "navigateToCurrentDirectory": { + "type": "boolean", + "title": "Navigate to document's current directory", + "description": "Whether to automatically navigate to a document's current directory", + "default": false + } + }, "additionalProperties": false, "type": "object" } diff --git a/packages/filebrowser-extension/src/index.ts b/packages/filebrowser-extension/src/index.ts index c76c3c8a12c8..f8c2035868bd 100644 --- a/packages/filebrowser-extension/src/index.ts +++ b/packages/filebrowser-extension/src/index.ts @@ -15,7 +15,13 @@ import { ToolbarButton } from '@jupyterlab/apputils'; -import { IStateDB, PageConfig, PathExt, URLExt } from '@jupyterlab/coreutils'; +import { + IStateDB, + PageConfig, + PathExt, + URLExt, + ISettingRegistry +} from '@jupyterlab/coreutils'; import { IDocumentManager } from '@jupyterlab/docmanager'; @@ -94,7 +100,12 @@ namespace CommandIDs { const browser: JupyterLabPlugin = { activate: activateBrowser, id: '@jupyterlab/filebrowser-extension:browser', - requires: [IFileBrowserFactory, ILayoutRestorer], + requires: [ + IFileBrowserFactory, + ILayoutRestorer, + IDocumentManager, + ISettingRegistry + ], autoStart: true }; @@ -223,7 +234,9 @@ function activateFactory( function activateBrowser( app: JupyterLab, factory: IFileBrowserFactory, - restorer: ILayoutRestorer + restorer: ILayoutRestorer, + docManager: IDocumentManager, + settingRegistry: ISettingRegistry ): void { const browser = factory.defaultBrowser; const { commands, shell } = app; @@ -261,6 +274,33 @@ function activateBrowser( shell.layoutModified.connect(() => { maybeCreate(); }); + + let navigateToCurrentDirectory: boolean = false; + + settingRegistry + .load('@jupyterlab/filebrowser-extension:browser') + .then(settings => { + settings.changed.connect(settings => { + navigateToCurrentDirectory = settings.get( + 'navigateToCurrentDirectory' + ).composite as boolean; + }); + navigateToCurrentDirectory = settings.get('navigateToCurrentDirectory') + .composite as boolean; + }); + + // Whether to automatically navigate to a document's current directory + shell.currentChanged.connect((shell, change) => { + if (navigateToCurrentDirectory) { + const { newValue } = change; + const context = docManager.contextForWidget(newValue); + if (context) { + commands.execute('filebrowser:activate', { path: context.path }); + commands.execute('filebrowser:navigate', { path: context.path }); + } + } + }); + maybeCreate(); }); }