Plota docs

10. Keyboard shortcuts

This table is generated from src/ui/shortcuts.ts — the same ALL_SHORTCUTS table the app matches keystrokes against, and the same one the in-app Help panel renders. tests/shortcuts.test.mjs asserts that nothing in it is left unbound and that every chrome combo is reachable; tests/helpPanel.test.mjs asserts the Help panel is generated from it rather than transcribed.

mod is Ctrl on Windows and Linux, on macOS.

Application and tools#

Windows / LinuxmacOSActionBound in
Ctrl+x⌘xCutShell.useChromeShortcuts
Ctrl+c⌘cCopyShell.useChromeShortcuts
Ctrl+v⌘vPasteShell.useChromeShortcuts
Ctrl+⇧+v⌘⇧vPaste in placeShell.useChromeShortcuts
Ctrl+]⌘]Bring to frontShell.useChromeShortcuts
Ctrl+[⌘[Send to backShell.useChromeShortcuts
Ctrl+⇧+]⌘⇧]Bring forwardShell.useChromeShortcuts
Ctrl+⇧+[⌘⇧[Send backwardShell.useChromeShortcuts
Ctrl+⇧+e⌘⇧eExport dialogShell.useChromeShortcuts
Ctrl+o⌘oImport diagramShell.useChromeShortcuts
Ctrl+s⌘sSave to My diagramsShell.useChromeShortcuts
Ctrl+n⌘nNew diagramShell.useChromeShortcuts
Ctrl+⇧+f⌘⇧fZoom to fit viewportShell.useChromeShortcuts
Ctrl++Zoom inShell.useChromeShortcuts
Ctrl+-⌘-Zoom outShell.useChromeShortcuts
Ctrl+0⌘0Zoom to 100%Shell.useChromeShortcuts
⇧++Increase font sizeShell.useChromeShortcuts
--Decrease font sizeShell.useChromeShortcuts
vvSelect toolShell.useChromeShortcuts
hhPan toolShell.useChromeShortcuts
ccConnect toolShell.useChromeShortcuts
ttText toolShell.useChromeShortcuts
ssShape toolShell.useChromeShortcuts
ggShow gridShell.useChromeShortcuts
⇧+g⇧gSnap to gridShell.useChromeShortcuts
rrSmart routeShell.useChromeShortcuts
jjCrossoversShell.useChromeShortcuts
[[Toggle library panelShell.useChromeShortcuts
]]Toggle inspectorShell.useChromeShortcuts
Ctrl+k⌘kCommand paletteCommandPalette

Editing the diagram#

Windows / LinuxmacOSActionBound in
Ctrl+z⌘zUndoCanvas
Ctrl+⇧+z⌘⇧zRedoCanvas
Ctrl+y⌘yRedoCanvas
Ctrl+a⌘aSelect allCanvas
Ctrl+d⌘dDuplicateCanvas
Ctrl+g⌘gGroupCanvas
Ctrl+⇧+g⌘⇧gUngroupCanvas
Ctrl+l⌘lLock / unlockCanvas
Ctrl+⇧+h⌘⇧hHide / showCanvas
DeleteDeleteDelete selectionCanvas
EnterEnterEdit textCanvas
Arrow keysArrow keysNudge selectionCanvas

View and navigation#

Windows / LinuxmacOSActionBound in
Ctrl+f⌘fFind in diagramview/index
Ctrl+1⌘1Zoom to fit documentview/index
Ctrl+2⌘2Zoom to selectionview/index
F5F5Presentation modeview/index
Alt+r⌥rToggle rulersview/index
Alt+m⌥mToggle minimapview/index
Alt+d⌥dToggle dark canvasview/index

Style#

Windows / LinuxmacOSActionBound in
Ctrl+Alt+c⌘⌥cCopy stylestyle/index
Ctrl+Alt+v⌘⌥vPaste stylestyle/index

AI#

Windows / LinuxmacOSActionBound in
Ctrl+i⌘iAI command barai/CommandBar

Notes#

  • Ctrl/⌘ + prints oddly on macOS. displayCombo('mod++', true) renders as with the + lost, in this table and in the Help panel. The binding itself is fine.
  • The Bound in column is not trivia: it says which module owns the key, so a shortcut that stops working can be traced to one file. Shell handles the chrome, Canvas handles everything that edits the document (so the two never fight over a keystroke), and the view, style and AI features bind their own.
  • Modifier-free keys are ignored inside text fields, the inline label editor and the command palette, so typing c in a search box does not switch tools.
  • Ctrl/⌘ V only calls preventDefault() when the in-app clipboard has something; with it empty, the native paste event is allowed through so a foreign diagram on the system clipboard can be imported.
  • ? and F1 both open the Help panel. They are bound by src/ui/helpFeature.ts and are deliberately not in ALL_SHORTCUTS, so they do not appear in the table above or in the Help panel's own list — that table is owned by the chrome and the help feature only reads it.
  • Two toolbar tooltips advertise a key the app does not bind: the rulers button says ⇧R when the real binding is Alt R. Use the table above.

Mouse and pointer#

GestureEffect
Drag on empty canvasMarquee select (Shift adds to the selection)
Alt + drag, middle-drag, two-finger scrollPan
Ctrl/⌘ + wheelZoom at the pointer
Double-click a shapeEdit its text
Double-click empty canvasCreate the armed shape there and edit it
Hover a shapeShow its eight ports
Drag from a port into empty spaceCreate a connected shape and edit it
Alt-click a connectorInsert a waypoint there
Drag a connector segmentMove that straight run
Drag a connector endRe-wire it
Shift while resizingKeep the aspect ratio
Alt while resizingResize from the centre
Ctrl/⌘ while resizing a containerLeave the children where they are
Shift while rotatingSnap the angle
Right-clickThe menu for whatever is under the pointer