Hey, excellent job on this product so far. It’s very exciting and powerful. I only have some tiny UI feedback for now.
After working with it for a few minutes, I couldn’t figure out how to do one little thing: rearrange cells.
It would be nice to re-arrange cells by dragging the labels that display on the left-hand side (the things that currently say “click to edit” on hover).
In the interim, you can reorder cells using keyboard shortcuts: Option-Command-Up ⌥⌘↑ moves the current cell up, and Option-Command-Down ⌥⌘↓ moves the current cell down.
On Windows, we now use Alt-Shift-Down and Alt-Shift-Up to cycle focus between cells.
Alt-Ctrl-Arrow overridden
This was incorrectly documented: it’s Alt-Command-Arrow on both platforms, not Alt-Ctrl-Arrow.
Hope that helps with our Windows support, unfortunately keybindings are kind of a game of battleship, with overlap at the OS, hardware, and software level.
Refer to the Help menu (under your user icon in the top right) and that will show you platform-specific keybindings for editing, as long as you’re on a notebook page.
This is partially solved. Click your icon in the upper right and then find “Help”. It shows a list of keyboard shortcuts (including a shortcut for moving cells). They may not work on all platforms (Change cell focus does not work on windows, move cells up/down does).
I am sure you’ve been there if you have developed JS notebooks on this system or Python notebooks in the past:
You created a comprehensive notebook with multiple sections, proper introduction, some data visualization, a section of cells with toggles to control your inputs and outputs, references and imports section, and then you decide to rearrange your notebook for the final published draft prior to sharing it with the world.
Rearranging cells on pretty much all notebooking systems like observable is a tedious and arduous task of copy, create, paste delete cells especially if you are moving toggle controls, or a bunch of defined functions, etc.
Would not it be much faster and more productive with a simple UX change if you could just simply drag and drop a cell by the cell label or some other ‘grab cell’ control to move it anywhere up or down in the notebook document?
I’d even take it further and suggest an md header cell (md #...) with other cells below till next such cell could be used for grouping, collapcing, and moving whole sections of the document
@mike, @tom and observablehq devs crew: your thought on this notebook rearrange streamline UX bit?
I’d even take it further and suggest an md header cell (md #... ) with other cells below till next such cell could be used for grouping, collapcing, and moving whole sections of the document
What I would most like to see is an API that supports both loading and saving notebooks. Then it would be possible to make an external tool supporting whatever kind of cell rearrangement UI anyone could ever want (among many other possible tools), without burdening the Observable staff directly or needing complicated additional first-party UIs.
I agree with @jrus. I am still itching to do an Electron app that would have custom cell renderers/decorators, options for different code formaters, with UX niceties like moving whole sections of the notebook document, plus cells bookmarking I brought up in the past.
There are endless possibilities 1 could explore building custom UIs on top of observable to fit different workflows without overburdening this system devs, provided a well defined notebook spec and api.
I’ve looked at observablehq/notebook-runtime and notebook-inspector repos just yesterday. I think it should be almost possible, but I have not tried it yet.
not sure. would need observable devs to chime in on this
also, load from and post notebook to github and gitlab would nice once load/save api is available. could be done by 3rd party devs too to fit diff. notebooks dev workflows.
.@jrus based on this response from @mbostock I suspect load/save notebook api is not in the current roadmap:
One could probably do it via raw XHR to observable api, but I don’t know if I would want to go there. would require some time to reverse engineer those calls. not impossible, but would be time consuming and hacky AF.
I’ll wait for the official public API and open source of observable for private hosting, etc. others have requested on this forum similar to how one can do with Jupyter notebooks today.