-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Add the layout restorer #7747
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add the layout restorer #7747
Conversation
|
EDIT this error has been fixed There is a conflict on the title of the browser tab with this PR. BEFORE THE PRrecord-2025-10-21_11.29.54.webmAFTER THE PRrecord-2025-10-21_11.30.28.webmThe tab title is not updated correctly anymore, probably because of https://github.com/jupyterlab/jupyterlab/blob/21f9c73298d7a450dba9927d404c87aae3011f7a/packages/apputils-extension/src/index.ts#L462-L469. Maybe we should provide the |
Added in c1b056e |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Many thanks @brichet for working on this!
Just did a first pass on the diff without testing locally for now, and overall the changes look good 👍
Left a couple of small comments before checking it locally.
| /** | ||
| * The default layout restorer provider. | ||
| */ | ||
| const layoutRestorer: JupyterFrontEndPlugin<ILayoutRestorer | null> = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since the left and right panels can also be opened on other pages, maybe this plugin should always provide a LayoutRestorer?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I though only the Notebook has side panel, but the tree view also have one indeed. And the header is also expandable for all the view.
To avoid confusion, we'll probably need a workspace file for each view (tree, notebook, console, terminal, file), because each view has its own panels.
Currently the workspace filename is set to nb-default in the state plugin, but we can probably have a dedicated one according to the URL, or the main widget in the shell.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Right, we could look into that separately, and only support the notebook page for now.
| }, | ||
| }); | ||
|
|
||
| commands.addCommand(CommandIDs.resetOnLoad, { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wondering if this command should be exposed somewhere in the UI? Like in JupyterLab under the Workspaces menu.
Users would then have a way to reset the UI to the defaults and clean things up.
It could be part of the command palette or the menu, or both.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, sounds good. It could be in the file menu, like in lab.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually we should probably create another command (reset) to expose it to the UI. This one checks the URL to find a reset in the query parameters.
|
I converted it to draft to explore layout restoration on other views than Notebook, and workspace reset in the UI. |
Adds the layout restorer, to restore the state of the side/down panels.
It includes the current widgets opened in each panel, and the size of the panels.
record-2025-10-17_20.16.35.webm
Fixes #6990
User facing change
nb-default.Code changes
RestoreLayoutandSaveLayoutfunction to the shell, which uses some dedicated function to "dehydrate" and "rehydrate" the shell'@jupyter-notebook/application-extension:layout', which handle the shell layout restoration'@jupyter-notebook/apputils-extension:state', which was previously activated from jupyterlab. Providing our ownIStateDBallow to avoid some side effect, that the tab title update (which does not work correctly in Notebook, see Add the layout restorer #7747 (comment))