Reference
Shortcuts, commands, menus, file formats and vocabulary — the things you look up rather than read.
Keyboard shortcuts
| Keys | Action |
|---|---|
| Ctrl + S | Save workspace |
| Ctrl + O | Open a .vsml workspace |
| Ctrl + B | Toggle the primary sidebar (toolbox) |
| Ctrl + J | Toggle the bottom dock |
| Ctrl + F | Focus the toolbox block search |
| F11 | Presentation perspective |
| Ctrl + Z | Undo |
| Ctrl + Shift + Z | Redo |
| Ctrl + Shift + P / F1 | Command palette |
| Esc | Close the palette or an open menu |
Command palette
Ctrl + Shift + P or F1. Commands are grouped by the menu they come from; typing a group's name narrows the list to it.
| Group | Commands |
|---|---|
File: |
New Workspace · Open Workspace… · Save Workspace · Load Autosave |
Edit: |
Undo · Redo |
View: |
Toggle Primary Sidebar · Toggle Bottom Panel · Show Blocks · Show Project Files · Show Code Outline · Show Problems · Show Output · Toggle Color Theme · Presentation Perspective |
Build: |
Refresh Generated Code · Apply Code to Blocks |
Tools: |
Switch to Macaca Nigra · Switch to Goropa · Settings · RUN — Execution runtime is not configured (disabled) |
The disabled Run entry is not a bug in the palette — see
Code Generation for why it stays that way.
Menu map
| Menu | Contents |
|---|---|
| File | New Workspace · Open Workspace… · Save Workspace · Load Autosave |
| Edit | Undo · Redo |
| View | Panel toggles · Perspective (Edit / Presentation) · Color theme |
| Build | Refresh generated code · Apply code to blocks |
| Tools | Renderer switch (Macaca Nigra / Goropa) · Settings · Command palette… |
| Examples | The seven programs listed in Overview |
| Help | This help site · About ViSML |
The workspace right-click menu adds Screenshot (exports the block diagram as a PNG) and About; it removes Blockly's default Delete Workspace and Disable Block entries. Right-clicking an individual block adds a Type item where applicable — see Types.
File formats
| Format | Holds |
|---|---|
.vsml |
A ViSML workspace, as plain JSON — Blockly's modern workspace serialization. Saved and opened locally; nothing is uploaded. |
| Local storage | The rolling autosave backup, plus the active renderer, theme, autosave interval and panel layout. |
| SML text | Not a file format on disk, but the Code panel round-trips a program as text via Apply to Blocks — see Code Generation. |
Glossary
| Term | Means |
|---|---|
| Ascription | Constraining a structure's interface with a signature. Transparent
(:) reveals the structure's real types to callers;
opaque (:>) hides them behind the signature's
own. |
| Curried function | A function of several arguments defined as nested one-argument functions,
fun f a b = … — contrast with a tuple-argument
(“uncurried”) function, fun f (a, b) = …. |
| Datatype | A user-defined type built from named constructors, optionally recursive and
polymorphic — e.g. 'a bt = LEAF of 'a | NODE of 'a bt * 'a * 'a
bt. |
| Functor | A function from structures to structures — SML's mechanism for parameterising one module over another. |
| Goropa | ViSML's text-code-styled renderer, added 2026. See Renderers. |
| Grammar tooltip | A hover tooltip showing the exact SML grammar production a block realises, e.g.
exp ::= if exp then exp else exp. See
Blocks. |
| Macaca Nigra | ViSML's default renderer, distinguished by grammar-category-specific connector shapes. See Renderers. |
| Pattern matching | Destructuring a value against one or more shapes — a function clause, or a
case…of — selecting the first pattern that fits. |
| Round-trip | Parsing generated SML text back into blocks and regenerating it, checking the result is a fixed point. See Code Generation. |
| Signature | An interface for a structure: the types and values it promises to provide, without committing to their implementation. |
| Structure | A module: a bundle of types, values and sub-structures, written
struct…end. |
| T2BB | Text-to-Block Builder — the grammar-transformation framework behind ViSML's toolbox, classifying every production as terminal, alias, mixed or repetitive. See Renderers. |
| Terminal label | A small coloured caption on a block marking its grammatical role — “Condition of”, “is true”, “Bound”. See Blocks. |
B-Lambda help — where the type system this project deliberately omits is the whole subject. B-MJ help — where the execution semantics this project deliberately omits is the whole subject.