uttrflow / uttrflow/uttrflow-swift

Shortcuts can't be turned off or restored to their defaults, so ⇧⌘V, ⌃⌘V and ⌃⌘C stay taken from other apps

Open
#685 0 comments 0 reactions 0 assignees View on GitHub
area:general enhancement needs-info P2
Dominant language
Swift
Stars
4
Forks
17
Avg merge
3h 32m
Merged PRs (30d)
277

Description

## What happens

Uttrflow ships four shortcuts (`ShortcutSet.default`, `Sources/UttrflowCore/Keyboard/ShortcutSet.swift:17-22`): Dictate ⌥Space, Clipboard ⇧⌘V, Paste last transcript ⌃⌘V and Copy last transcript ⌃⌘C. The last three are **claimed**: registered with Carbon, which swallows the combination so the frontmost app never receives it (`Docs/shortcuts.md`, "Carbon, only where a key must be swallowed"; registration in `AppDelegate.startWatchingForClaimedShortcuts`, `Sources/Uttrflow/AppDelegate.swift:688-718`).

In Settings each shortcut row has only **Change** (and Cancel while recording) (`Sources/Uttrflow/Settings/SettingsControlView.swift:209-217`). There is no way to:

- **turn a shortcut off.** `ShortcutSet.remove(at:from:)` exists and says "the last one may go, since an action with none is allowed" (`ShortcutSet.swift:59-65`), and the row can draw "None" (`SettingsControlView.swift:201-204`), but no `SettingsChange` removes a binding; the only removal is a legacy migration (`Sources/UttrflowSettings/SettingsStore.swift:38`);
- **put the defaults back.** The doc comment on `ShortcutSet.default` says "the shortcuts screen offers this back as 'reset'" (`ShortcutSet.swift:16`); no screen does. The only route is Reset personalisation, which also deletes the dictionary, history, clipboard history and preferences.

Nothing on the row says a claimed shortcut takes the combination away from other apps either; the explanations are "Opens the clipboard panel from any app." and similar (`Sources/UttrflowUX/ShortcutRegistry.swift:34-48`).

## Why it matters

⇧⌘V is paste-without-formatting in many apps (the reason `Docs/shortcuts.md` gives for claiming it), and any of the three may already be what someone uses in their own tools. A user who wants one of them back has to rebind the Uttrflow shortcut to some other combination they do not want, rather than simply switching it off. Somebody experimenting with shortcuts has no way back to the defaults short of wiping their data.

## How to reproduce

Open Settings → General and look for a way to leave Paste last transcript unbound, or to restore the original four shortcuts.

## Acceptance criteria

Product decisions first (hence `needs-info`): which shortcuts may be unbound (probably every one but Dictate), and where "Restore default shortcuts" lives.

Then:

- A claimed shortcut can be cleared from its row; the row shows "None" and the combination reaches other apps again.
- A "Restore Defaults" action resets only `shortcuts` (and `shortcutsReturnedToDefault`), through `SettingsEditor`, refusing nothing that would clash.
- The explanation for each claimed shortcut says it takes the combination from other apps while set.
- The `ShortcutSet.default` comment matches what the screen offers.
- Tests in `Tests/UttrflowUXTests/SettingsPresenterTests.swift` and the settings editor tests cover clearing and restoring.

Contributor guide

Open the contributing guide

Research direction

Resolve the needs-info decisions first, then read ShortcutSet.swift, SettingsControlView.swift, SettingsEditor and AppDelegate.startWatchingForClaimedShortcuts to trace removal, reset, and claimed-key registration. Run SettingsPresenterTests.swift and the settings editor tests; done means supported shortcuts can show None, defaults can be restored without wiping other data, claimed-shortcut explanations are explicit, and the documented default matches the screen.

Written by the indexing model from the issue text.

Assessment

Tech stack
swift
Domain
desktop
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.