# Complete Action Catalog for OpenLogi: The Definitive Guide to All 45 Actions

> Explore the complete OpenLogi action catalog featuring all 45 deterministic actions. Discover basic clicks to macOS shortcuts and learn how to leverage them for automation. Get the definitive guide now.

- Repository: [Xuan Zhang/OpenLogi](https://github.com/AprilNEA/OpenLogi)
- Tags: deep-dive
- Published: 2026-09-12

---

**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`](https://github.com/AprilNEA/OpenLogi/blob/main/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`](https://github.com/AprilNEA/OpenLogi/blob/main/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 input
- `SetDpiPreset` – Requires specific DPI value
- `TypeText` – Requires text string input
- `RunAppleScript` – Requires script content
- `RunShellCommand` – Requires command string
- `Workflow` – Requires workflow definition
- `OpenApplication` – Requires application path
- `HoldShortcut` – 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:

```rust
// 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:

```rust
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`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-core/src/binding/action.rs)** – Defines the `Action` enum, the `for_each_unit_action!` macro table, and the `catalog()` method that generates the complete action list.

- **[`crates/openlogi-core/src/binding/category.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/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`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-inject/src/inject.rs)** – Implements OS-level event synthesis for each `Action` variant, translating the enum into actual system events.

- **[`crates/openlogi-desktop/src/features/action_ring.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/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.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-core/src/binding/action.rs) that 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:

```rust
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`](https://github.com/AprilNEA/OpenLogi/blob/main/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.