Skip to content

Feat/keyboard double click - #1466

Open
yudshj wants to merge 6 commits into
AprilNEA:masterfrom
yudshj:feat/keyboard-double-click
Open

yudshj wants to merge 6 commits into
AprilNEA:masterfrom
yudshj:feat/keyboard-double-click

Conversation

@yudshj

@yudshj yudshj commented Sep 17, 2026

Copy link
Copy Markdown

No description provided.

Pair physical press and release with Fn through shared held-input ownership. Add the macOS action picker entry, localization, cancellation handling and IPC protocol 31. Cover lifecycle, wire and CLI compatibility, and document user validation and the local DMG.
@greptile-apps

greptile-apps Bot commented Sep 17, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 4/5

The PR should not merge until pulse-only controls retain their configured click fallback; the remaining findings are documentation corrections.

Fix All in CodexFindings

  1. P1 Pulse bindings lose clicks
  2. P2 Protocol version is outdated
  3. P2 Fn guidance contradicts support

Summary

This PR adds configurable click, hold, and double-click actions; a keyboard-chord editor with modifier-only and Fn support; lifecycle-aware Globe/Fn injection; and the associated configuration, IPC, localization, and testing updates.

  • Introduces Binding::Clicks and timed double-click recognition.
  • Generalizes held keyboard ownership across macOS, Linux, and Windows.
  • Adds macOS Globe/Fn hold behavior and filters it from unsupported activation contexts.
  • Adds three-card mouse-button editing and keyboard shortcut dialogs.
  • Updates wire-format goldens, locales, and feature documentation.
Diagram
%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A[Physical button down] --> B{Binding type}
    B -->|Single held input| C[Start held keyboard output]
    B -->|Clicks / LongPress| D[Wait for hold threshold]
    A2[Physical button up] --> E{First short click has double action?}
    E -->|No| F[Dispatch click action]
    E -->|Yes| G[Wait up to 200 ms]
    G -->|Second down in interval| H[Dispatch double-click action on release]
    G -->|Timeout| F
    D -->|Threshold reached| I[Dispatch hold action]
    C --> J[Release or cancellation]
    I --> J
    J --> K[Drop held-input guard and release unowned keys]
Loading

Reviews (1) · Last reviewed commit: "docs(gui): clarify dpi preset and instal..."

Comment on lines +611 to +615
if binding.is_some_and(|binding| {
binding.click_action().requires_physical_release()
|| matches!(binding, Binding::Clicks(_))
|| matches!(binding, Binding::LongPress(long) if long.double_click().is_some())
}) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Pulse bindings lose clicks

Pulse-only HID++ controls now reject every Binding::Clicks binding before emitting a runtime event. For example, a binding with Click set to Copy and Hold set to Paste performs no action on hardware that only reports pulses, even though pulse-only sources are expected to fall back to the click action. Please reject only actions that require a physical release, or preserve the configured click fallback.

Fix in Codex Fix in Claude Code

Comment thread docs/TESTING_GLOBE_KEY.md

## Scope and prerequisites

Applies to keyboard-chord and double-click builds using IPC protocol 33.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Protocol version is outdated

This guide identifies these builds as IPC protocol 33, but the implementation and wire-format test pin protocol 34. Because the GUI and agent require matching protocol versions, this can lead readers to pair incompatible builds that cannot connect. Please update the guide and document what protocol 34 adds.

Fix in Codex Fix in Claude Code

Comment thread docs/CONFIGURATION.md
Comment on lines +117 to +122
Globe/Fn is not a portable USB keyboard usage and cannot be entered as
`CustomShortcut = "Fn"`. This action is hidden on Linux/Windows, where execution
is unsupported. It is not offered in gesture editors or Actions Ring slots.
Pulse-only hardware, deferred gesture/short/long actions, and direct one-shot
execution reject it rather than opening and immediately closing voice input.
Use a single binding on a button with real down/up edges.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Fn guidance contradicts support

This section says CustomShortcut = "Fn" cannot be entered, but the new KeyCombo parser and keyboard editor support Fn, including modifier-only chords, and a custom shortcut emits it as a balanced tap on macOS. This contradiction may cause users to avoid a supported configuration. Please distinguish an immediate Fn custom-shortcut tap from HoldGlobeKey and lifecycle-held shortcuts.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Fix in Codex Fix in Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant