@@ -186,6 +186,56 @@ const fileActions: JupyterFrontEndPlugin<void> = {
186
186
} ,
187
187
} ;
188
188
189
+ /**
190
+ * A plugin to set the default file browser settings.
191
+ */
192
+ const fileBrowserSettings : JupyterFrontEndPlugin < void > = {
193
+ id : '@jupyter-notebook/tree-extension:settings' ,
194
+ description : 'Set up the default file browser settings' ,
195
+ requires : [ IDefaultFileBrowser , ISettingRegistry ] ,
196
+ autoStart : true ,
197
+ activate : (
198
+ app : JupyterFrontEnd ,
199
+ browser : IDefaultFileBrowser ,
200
+ settingRegistry : ISettingRegistry
201
+ ) => {
202
+ /**
203
+ * File browser default configuration.
204
+ */
205
+ const defaultFileBrowserConfig = {
206
+ navigateToCurrentDirectory : false ,
207
+ singleClickNavigation : true ,
208
+ showLastModifiedColumn : true ,
209
+ showFileSizeColumn : true ,
210
+ showHiddenFiles : false ,
211
+ showFileCheckboxes : true ,
212
+ sortNotebooksFirst : true ,
213
+ showFullPath : false ,
214
+ } ;
215
+
216
+ // apply defaults
217
+ let key : keyof typeof defaultFileBrowserConfig ;
218
+ for ( key in defaultFileBrowserConfig ) {
219
+ browser [ key ] = defaultFileBrowserConfig [ key ] ;
220
+ }
221
+
222
+ void settingRegistry . load ( FILE_BROWSER_PLUGIN_ID ) . then ( ( settings ) => {
223
+ function onSettingsChanged ( settings : ISettingRegistry . ISettings ) : void {
224
+ let key : keyof typeof defaultFileBrowserConfig ;
225
+ for ( key in defaultFileBrowserConfig ) {
226
+ const value = settings . get ( key ) . user as boolean ;
227
+ // only set the setting if it is defined by the user
228
+ if ( value === undefined ) {
229
+ browser [ key ] = value ;
230
+ }
231
+ }
232
+ }
233
+ settings . changed . connect ( onSettingsChanged ) ;
234
+ onSettingsChanged ( settings ) ;
235
+ } ) ;
236
+ } ,
237
+ } ;
238
+
189
239
/**
190
240
* A plugin to add the file filter toggle command to the palette
191
241
*/
@@ -360,25 +410,6 @@ const notebookTreeWidget: JupyterFrontEndPlugin<INotebookTree> = {
360
410
nbTreeWidget . tabBar . addTab ( running . title ) ;
361
411
}
362
412
363
- const settings = settingRegistry . load ( FILE_BROWSER_PLUGIN_ID ) ;
364
- Promise . all ( [ settings , app . restored ] )
365
- . then ( ( [ settings ] ) => {
366
- // Set Notebook 7 defaults if there is no user setting override
367
- [
368
- 'showFileCheckboxes' ,
369
- 'showFileSizeColumn' ,
370
- 'sortNotebooksFirst' ,
371
- 'showFullPath' ,
372
- ] . forEach ( ( setting ) => {
373
- if ( settings . user [ setting ] === undefined ) {
374
- void settings . set ( setting , true ) ;
375
- }
376
- } ) ;
377
- } )
378
- . catch ( ( reason : Error ) => {
379
- console . error ( reason . message ) ;
380
- } ) ;
381
-
382
413
app . shell . add ( nbTreeWidget , 'main' , { rank : 100 } ) ;
383
414
384
415
// add a separate tab for each setting editor
@@ -419,6 +450,7 @@ const notebookTreeWidget: JupyterFrontEndPlugin<INotebookTree> = {
419
450
const plugins : JupyterFrontEndPlugin < any > [ ] = [
420
451
createNew ,
421
452
fileActions ,
453
+ fileBrowserSettings ,
422
454
fileFilterCommand ,
423
455
loadPlugins ,
424
456
openFileBrowser ,
0 commit comments