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

OpenLogi exposes 40+ mappable actions through the Action enum in 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, 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): 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). 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:

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

Payload-Carrying Actions

Actions requiring parameters use inline tables:

[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:

[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):

[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. 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.
  • 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.
  • 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. 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.

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:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →