Technical Reference
Menu structure
Section titled “Menu structure”Folders form a tree: every folder is either a root or has exactly one parent. There is no configured nesting-depth limit, and circular parent links are blocked. In the popup, child folders appear first in tree order, followed by the folder’s Python actions.
New Root appends an independent root. New Child creates a folder in the selected parent. Move Up/Down reorders siblings while preserving folder identities and descendants. Actions are Python-only; create a child folder rather than an action pointing to another menu.
Duplicate Item inserts an independent copy after the selected action. Duplicate Menu copies a whole branch beside its original. Copied names receive Copy and copied shortcuts are disabled; branch duplication also disables Global Priority. Move to Menu and Move Menu preserve settings. Moving a folder into itself or a descendant is rejected.
Delete Menu Branch asks for confirmation and removes the folder, descendants, and their actions. These are preference edits, so scene Undo cannot restore them. Export a backup first.
Popup placement and appearance
Section titled “Popup placement and appearance”The first opening places the first visible item under the cursor. Later openings use the last visible selection remembered for that menu. The popup stays still as you move the pointer; viewport-edge clamping may offset the initial placement to keep it visible.
| Setting | Behavior |
|---|---|
| Compact | 80% UI scale |
| Normal | 100% UI scale; default |
| Large | 125% UI scale |
| Extra Large | 150% UI scale |
| Custom | Exact scale from 0.50 to 3.00 |
| Rows Per Column | Maximum 1–100 rows; default 12 |
Rows overflow into equal-width columns on the right. A short editor may reduce the row count further. Width follows the title, action names, shortcuts, and folder arrows; extreme names are ellipsized when they cannot fit.
Context filters
Section titled “Context filters”A root menu’s workspace, editor, and Blender mode filters must all match. Its descendants inherit this availability. A child’s own filter settings are preserved and apply again if the child becomes a root.
The editor selector covers regular Blender editors, including specialized variants such as UV/Image, Graph/Drivers, Timeline/Dope Sheet, Shader/Geometry Nodes/Compositor, and Asset Browser. Properties tabs share one Properties setting; Outliner display modes share one Outliner setting. Top Bar, Status Bar, splash screens, and operating-system dialogs are outside these filters.
All known Blender modes start enabled. None intentionally disables the corresponding filter. An unknown Blender mode or an unlisted/custom workspace is allowed only when every known option in that filter is enabled. Individual custom workspaces cannot currently be selected by name.
Root and item shortcuts
Section titled “Root and item shortcuts”A root hotkey opens its menu from an allowed editor. A child’s hotkey selects that folder inside its parent. Item shortcuts accept a key plus Ctrl, Shift, and Alt, or can be Disabled.
New actions take the first unused unmodified key, starting with 1–0 and A–Z, then other supported keys. The supported catalog includes punctuation, arrows, navigation keys, F1–F24, media keys, and numeric-keypad keys. Windows/Command, OS, and Hyper modifiers are excluded; Caps Lock is not exposed by Blender’s public keymap enum.
Shifted symbols normally use their physical base key plus Shift, such as Shift+= for +. When two items in a menu share a combination, settings show a warning and the first matching item wins. While the popup is open, configured item shortcuts are consumed by the menu.
Conflicts and global priority
Section titled “Conflicts and global priority”The root-shortcut indicator reports conflicts with Blender commands, other add-ons, and other menus. Override conflicting hotkey adds MenuWeave-owned priority bindings in Blender’s add-on keyconfig; it does not disable or rewrite the other command. Other add-ons and user keymap overrides can still affect the final priority.
Global Priority is available only on roots. It lets the root branch’s configured action shortcuts run without opening the popup and respects that root’s context filters. A matching global action wins over the same root’s opening shortcut. Among active roots, the newest activation wins a duplicate combination; inside a menu, the first matching action wins.
Global activation state and order are saved in preferences and JSON. Active branches use their configured Global Active colors. In Text Editor and Console, unmodified and Shift-only global shortcuts pass through to preserve text entry; use Ctrl or Alt combinations there. Already-running Blender modal tools keep their event handling.
Use the root’s key icon to disable priority or call Disable all global hotkeys. Keymap edits made in Blender’s own Keymap preferences are separate from MenuWeave’s JSON export.
Visibility
Section titled “Visibility”An action with Show in Menu disabled remains available through its configured shortcuts but is omitted from visual navigation and layout. A child folder’s eye controls whether it appears in its parent.
The action list and folder tree have independent temporary reveal controls. Each reveals its own hidden entry type without changing saved visibility. While a reveal mode is active, its corresponding per-entry eyes are locked. Reveal state is runtime-only.
Python execution and Repeat Last
Section titled “Python execution and Repeat Last”Actions run with Blender Python access and a fresh namespace containing bpy, context, and ih_menu_weave. Check editor, mode, selection, and data prerequisites in your code. External add-on calls work only when that add-on is available and its operator context is valid.
A successful action participates in Blender’s native operator history. Repeat Last repeats the newest compatible Blender operation or menu script. Optional custom repeat code replaces the repeated script, not its first execution. Local variables are not captured; custom repeat code must be self-contained.
Opening menus and using menu service controls do not replace the last operation. A failed script does not become repeatable, but changes it already made to Blender data are not automatically rolled back. Repeating a script that launches a dialog or modal tool may launch that interaction again; arbitrary mouse gestures and asynchronous results are not captured.
JSON and lifecycle
Section titled “JSON and lifecycle”Export Settings saves everything or one branch. A branch becomes a standalone JSON root and includes its descendants and actions. Import Settings → Append assigns fresh IDs and appends imported roots; Replace replaces the current configuration. Failed application restores the previous configuration.
Only schema 15 exports are accepted. Python source, indentation, blank lines, and editor position are preserved. Import only configurations whose embedded scripts you trust.
Preferences follow Blender’s normal saving behavior. Disabling the extension removes its owned keymaps and runtime overlays; file loading closes overlays. MenuWeave does not clean up classes, timers, or handlers that user scripts create themselves.