# Complete List of OpenLogi Actions: What You Can Map to Mouse Buttons

> Discover over 40 OpenLogi actions you can map to your mouse buttons. Control media, execute macros, and run shell commands with ease.

- Repository: [Xuan Zhang/OpenLogi](https://github.com/AprilNEA/OpenLogi)
- Tags: api-reference
- Published: 2026-08-29

---

**OpenLogi exposes 40+ mappable actions through the `Action` enum in [`crates/openlogi-core/src/binding/action.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-core/src/binding/action.rs), covering everything from basic clicks and media controls to complex macros and shell commands.**

OpenLogi is an open-source input device manager for Logitech peripherals that transforms physical button presses into software actions via TOML configuration files. The complete catalog of OpenLogi actions is defined in the core binding layer, offering granular control over system behavior, application navigation, and custom automation scripts.

## The Core Action Enum

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 defines every possible button behavior supported by the system. The `for_each_unit_action!` macro (lines 35-88) enumerates payload-free variants with their human-readable labels and UI icons, while payload-carrying variants like `CustomShortcut` and `Workflow` are handled separately by the `derive_action_core!` macro (line 96).

## Available Action Categories

### System-Level Actions

System controls manage power states and desktop visibility. Available variants include `None`, `LockScreen`, `Screenshot`, `CaptureRegion`, `Sleep`, and `ShowDesktop`. The `ShowActionsRing` variant (line 78) displays the radial menu but is marked `not_pickable` in the UI catalog.

### Mouse and Navigation Actions

These variants replicate or extend standard pointer behavior:

- **Click actions**: `LeftClick`, `RightClick`, `MiddleClick`, `MouseBack`, `MouseForward`
- **Desktop navigation**: `MissionControl`, `AppExpose`, `PreviousDesktop`, `NextDesktop`, `LaunchpadShow`

### Editing and Clipboard Actions

Text editing shortcuts are available as standalone actions: `Copy`, `Paste`, `Cut`, `Undo`, `Redo`, `SelectAll`, `Find`, and `Save`. These map directly to standard keyboard shortcuts regardless of the active application.

### Browser and Tab Control

Web browser navigation is handled through `BrowserBack`, `BrowserForward`, `NewTab`, `CloseTab`, `ReopenTab`, `NextTab`, `PrevTab`, and `ReloadPage`. These actions trigger native browser bindings without requiring application-specific profiles.

### Media Control Actions

Playback and volume are managed through `PlayPause`, `NextTrack`, `PrevTrack`, `VolumeUp`, `VolumeDown`, and `MuteVolume`. These interact with the system media session to control music players and video applications.

### Hardware-Specific Controls

Logitech-specific features include:

- **DPI management**: `CycleDpiPresets`, `SetDpiPreset(u8)`
- **SmartShift**: `ToggleSmartShift`

### Scrolling Actions

Discrete scroll events are exposed as `ScrollUp`, `ScrollDown`, `HorizontalScrollLeft`, and `HorizontalScrollRight` for buttons that should trigger scrolling without a physical wheel.

### Custom and Advanced Actions

Power-user functionality supports arbitrary input automation:

- **CustomShortcut(KeyCombo)**: Trigger specific key combinations
- **HoldShortcut(KeyCombo)**: Maintain key press while button is held (line 88)
- **TypeText(String)**: Input literal text strings
- **RunAppleScript(String)** and **RunShellCommand(String)**: Execute system scripts
- **OpenApplication(ApplicationTarget)**: Launch specific apps
- **Workflow(Vec<WorkflowStep>)**: Execute multi-step macros with delays and conditional logic

## Configuring Actions in TOML

OpenLogi stores user-defined bindings in TOML configuration files (see [`docs/config.example.toml`](https://github.com/AprilNEA/OpenLogi/blob/main/docs/config.example.toml)). The `Action` enum deserializes via Serde using external tagging, accepting variant names as strings for simple actions and tables for payload-carrying variants.

### Simple Unit Actions

Map buttons directly to action names:

```toml
[devices."receiver:abcd1234:slot:1".bindings]
Back = "BrowserBack"
Forward = "BrowserForward"
LeftClick = "LeftClick"

```

### Payload-Carrying Actions

Actions requiring parameters use inline tables:

```toml
[devices."receiver:abcd1234:slot:1".bindings]
MiddleClick = { HoldShortcut = "Ctrl+Space" }

```

This configuration utilizes `Action::HoldShortcut` (line 88) to maintain the `Ctrl+Space` chord while the physical button remains depressed.

### Gesture Differentiation

Buttons supporting gesture recognition distinguish between short and long presses:

```toml
[devices."receiver:abcd1234:slot:1".bindings]
DpiToggle = { short = "ShowDesktop", long = "MissionControl" }

```

### Complex Workflows

Multi-step automation sequences use the `Workflow` variant with `WorkflowStep` items (lines 200-214):

```toml
[devices."receiver:abcd1234:slot:1".bindings]
CustomMacro = { Workflow = [
  { PressKey = "Ctrl+V" },
  { Delay = { millis = 500 } },
  { RunShellCommand = "notify-send Done" }
] }

```

## Action Categorization and UI Organization

The `Action::category()` method (lines 221-236) maps each variant to a `Category` enum defined in [`crates/openlogi-core/src/binding/category.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-core/src/binding/category.rs). This drives the grouping logic in the OpenLogi UI pop-over, organizing actions into logical clusters like "System", "Navigation", and "Media" for quick discovery.

## Summary

- OpenLogi defines all mappable behaviors in the `Action` enum within [`crates/openlogi-core/src/binding/action.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-core/src/binding/action.rs).
- The `for_each_unit_action!` macro generates the UI catalog for payload-free variants, while runtime logic handles parameterized actions like `SetDpiPreset` and `CustomShortcut`.
- Configuration uses TOML syntax with variant names for simple actions and inline tables for complex payloads like `HoldShortcut` and `Workflow`.
- The `Action::category()` method groups actions for the UI based on the `Category` enum in [`src/binding/category.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/src/binding/category.rs).
- Advanced features include shell command execution, AppleScript support, and multi-step workflows with delays and key sequences.

## Frequently Asked Questions

### Where are OpenLogi actions defined in the source code?

All available actions are defined in the `Action` enum located at [`crates/openlogi-core/src/binding/action.rs`](https://github.com/AprilNEA/OpenLogi/blob/main/crates/openlogi-core/src/binding/action.rs). This file contains the `for_each_unit_action!` macro (lines 35-88) that enumerates standard actions and the `derive_action_core!` macro (line 96) that handles custom variants with payloads.

### How do I map a button to multiple actions in OpenLogi?

Use the `Workflow` variant to chain multiple `WorkflowStep` items together. Each step can press keys, insert delays, or run shell commands. The workflow executes sequentially when the button triggers, enabling complex macros without external scripting.

### Can I create custom keyboard shortcuts that aren't in the default action list?

Yes. The `CustomShortcut` and `HoldShortcut` variants accept a `KeyCombo` payload, allowing you to define arbitrary key combinations. Configure these in TOML using inline table syntax: `ButtonName = { CustomShortcut = "Ctrl+Alt+T" }`.

### What is the difference between `ShowDesktop` and `MissionControl` actions?

`ShowDesktop` minimizes all windows to reveal the desktop background, while `MissionControl` activates macOS Mission Control (or equivalent workspace overview on other platforms). Both are system-level actions found in the `Action` enum but map to distinct window management behaviors.