Complete Action Catalog for OpenLogi: The Definitive Guide to All 45 Actions
OpenLogi exposes exactly 45 deterministic button-binding actions through the Action::catalog() method, ranging from basic mouse clicks to system-level macOS shortcuts, while excluding payload-carrying variants that require user input.
The complete action catalog for OpenLogi defines every assignable interaction available in the input remapping system. Located in crates/openlogi-core/src/binding/action.rs, the Action enum uses a macro-generated table to produce a deterministic, ordered list of all pickable actions that appear in the UI pop-over. This catalog represents the full set of zero-parameter actions users can bind to mouse buttons without additional configuration.
How the Action Catalog is Generated
The catalog originates from the for_each_unit_action! macro table defined in crates/openlogi-core/src/binding/action.rs. This macro enumerates every payload-free variant of the Action enum, preserving the exact presentation order for the UI picker.
The public method Action::catalog() iterates this table to return a Vec<Action> containing all 45 selectable variants. According to the OpenLogi source code, this method guarantees that the sequence matches the visual order in the Actions Ring interface, ensuring consistent user experience across the application.
The 45 Actions in OpenLogi's Catalog
The following list presents all actions in the exact order returned by Action::catalog(), organized by functional category for clarity:
Mouse Controls
- LeftClick – Primary mouse button activation
- RightClick – Secondary mouse button activation
- MiddleClick – Mouse wheel click action
- MouseBack – Extra button 4 for "back" navigation
- MouseForward – Extra button 5 for "forward" navigation
Clipboard and Editing
- Copy – Copy selection (⌘C / Ctrl+C)
- Paste – Paste from clipboard (⌘V / Ctrl+V)
- Cut – Cut selection (⌘X / Ctrl+X)
- Undo – Undo last action (⌘Z / Ctrl+Z)
- Redo – Redo last undone action (⌘⇧Z / Ctrl+Shift+Z)
- SelectAll – Select all content (⌘A / Ctrl+A)
- Find – Open find/search bar (⌘F / Ctrl+F)
- Save – Save current document (⌘S / Ctrl+S)
Browser Navigation
- BrowserBack – Navigate backward in browser history
- BrowserForward – Navigate forward in browser history
- NewTab – Open a new browser tab
- CloseTab – Close the current tab
- ReopenTab – Restore the last closed tab
- NextTab – Switch to the next tab
- PrevTab – Switch to the previous tab
- ReloadPage – Refresh the current page
macOS System Features
- MissionControl – Activate macOS Mission Control
- AppExpose – Show all windows of the current application
- PreviousDesktop – Switch to the previous desktop/Space
- NextDesktop – Switch to the next desktop/Space
- ShowDesktop – Hide all windows to show the desktop
- LaunchpadShow – Open the macOS Launchpad
System and Security
- None – Suppress input (do nothing)
- LockScreen – Lock the computer screen
- Screenshot – Capture full-screen screenshot
- CaptureRegion – Capture selected region to clipboard
- Sleep – Put the computer to sleep
Interface and Advanced Features
- ShowActionsRing – Open the Actions Ring overlay at cursor position
Media Controls
- PlayPause – Toggle media playback
- NextTrack – Skip to the next media track
- PrevTrack – Return to the previous media track
- VolumeUp – Increase system volume
- VolumeDown – Decrease system volume
- MuteVolume – Toggle mute state
Device-Specific and Scrolling
- CycleDpiPresets – Rotate through DPI sensitivity presets
- ToggleSmartShift – Toggle between ratchet and free-spin wheel modes
- ScrollUp – Vertical scroll-up tick
- ScrollDown – Vertical scroll-down tick
- HorizontalScrollLeft – Horizontal scroll-left tick
- HorizontalScrollRight – Horizontal scroll-right tick
Excluded Action Types
The catalog() method intentionally omits payload-carrying variants that require user-provided data. These excluded actions include:
CustomShortcut– Requires key combination inputSetDpiPreset– Requires specific DPI valueTypeText– Requires text string inputRunAppleScript– Requires script contentRunShellCommand– Requires command stringWorkflow– Requires workflow definitionOpenApplication– Requires application pathHoldShortcut– Requires duration parameters
These variants are instantiated programmatically rather than selected from the UI picker, which is why they remain outside the deterministic catalog.
Accessing the Catalog Programmatically
To retrieve the complete action list in Rust code, use the catalog() associated function:
// Retrieve the full, ordered list of pickable actions
let actions = openlogi_core::binding::Action::catalog();
// Iterate and print each action's label
for action in actions {
println!("{} – {}", action.label(), action.translation_key().unwrap_or("custom"));
}
You can also verify whether a specific action is user-pickable by checking against the catalog:
use openlogi_core::binding::Action;
fn is_pickable(a: &Action) -> bool {
// `catalog()` contains exactly the pickable actions
openlogi_core::binding::Action::catalog().contains(a)
}
Key Implementation Files
Understanding the complete action catalog for OpenLogi requires familiarity with these source files:
-
crates/openlogi-core/src/binding/action.rs– Defines theActionenum, thefor_each_unit_action!macro table, and thecatalog()method that generates the complete action list. -
crates/openlogi-core/src/binding/category.rs– Enumerates UI categories (Mouse,Editing,Browser, etc.) used for grouping actions in the pop-over interface. -
crates/openlogi-inject/src/inject.rs– Implements OS-level event synthesis for eachActionvariant, translating the enum into actual system events. -
crates/openlogi-desktop/src/features/action_ring.rs– Handles the Actions Ring UI that displays the catalog to users and manages selection state.
Summary
- OpenLogi provides 45 deterministic, pickable actions through the
Action::catalog()method. - The catalog is generated from a macro table in
crates/openlogi-core/src/binding/action.rsthat preserves UI presentation order. - Actions range from basic mouse clicks to complex macOS system features like Mission Control and SmartShift toggling.
- Payload-carrying variants requiring user input are excluded from the catalog and handled separately.
- The system ensures type-safe binding through Rust's enum system while maintaining a consistent user interface order.
Frequently Asked Questions
How many actions are available in the OpenLogi catalog?
The OpenLogi catalog contains exactly 45 pickable actions as returned by Action::catalog(). This count includes all mouse buttons, editing commands, browser navigation, media controls, system features, and scrolling actions, but excludes payload-dependent variants.
Why are actions like CustomShortcut missing from the catalog?
Payload-carrying actions such as CustomShortcut, TypeText, and RunShellCommand require additional user-provided data (key combinations, text strings, or script content). Since the catalog() method returns only deterministic, zero-parameter variants suitable for UI pickers, these configurable actions are instantiated programmatically rather than being listed in the macro table.
How do I programmatically check if an action is available in the picker?
Use the catalog() method to retrieve the complete vector of pickable actions, then check containment:
let is_available = Action::catalog().contains(&my_action);
This returns true only for the 45 standard actions, returning false for payload-carrying variants or any custom action types not included in the macro-generated table.
Where is the display order of actions defined?
The display order is hardcoded in the for_each_unit_action! macro within crates/openlogi-core/src/binding/action.rs. The Action::catalog() method iterates this macro in declaration order, ensuring the UI pop-over, the Actions Ring, and any programmatic access present actions in the identical sequence.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →