Skip to content

Commit 9ecef58

Browse files
xbtoshiclaude
andcommitted
v0.1.33: select-mode toggle now ctrl+s — works while typing
The m binding only fired when no textinput was focused, so users couldn't flip to select-mode mid-wizard (e.g. while typing an amount). Move the toggle into the always-on shortcut group next to ctrl+c so it triggers regardless of focus. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent b28f569 commit 9ecef58

2 files changed

Lines changed: 28 additions & 20 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ All notable changes to **kyc-cli** and **sshwap** are documented here.
44
The format is loosely [Keep a Changelog](https://keepachangelog.com/);
55
versioning follows [SemVer](https://semver.org/).
66

7+
## [0.1.33] — 2026-05-10
8+
9+
### Changed
10+
- **Select-mode toggle is now `ctrl+s`** (was `m`). The `m` binding only
11+
fired when no textinput was focused, so users couldn't flip into
12+
select-mode while at the amount/address/memo step — exactly when
13+
they need to copy a quote line above the input. `ctrl+s` lives in
14+
the always-on shortcut group with `ctrl+c`, so it works regardless
15+
of focus.
16+
717
## [0.1.32] — 2026-05-10
818

919
### Added

internal/tui/model.go

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,26 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
309309
return m, nil
310310

311311
case tea.KeyMsg:
312-
// Always-on shortcuts
312+
// Always-on shortcuts — fire even while a textinput is focused,
313+
// otherwise the user can't escape into select-mode while typing
314+
// an address.
313315
switch msg.String() {
314316
case "ctrl+c", "ctrl+d":
315317
return m, tea.Quit
318+
case "ctrl+s":
319+
m.selectMode = !m.selectMode
320+
if m.selectMode {
321+
m.copyToast = "🖱 select mode — drag to select · ctrl+s for clicks"
322+
return m, tea.Batch(
323+
tea.DisableMouse,
324+
tea.Tick(3*time.Second, func(_ time.Time) tea.Msg { return clearToastMsg{} }),
325+
)
326+
}
327+
m.copyToast = "🖱 click mode — ctrl+s for select"
328+
return m, tea.Batch(
329+
tea.EnableMouseCellMotion,
330+
tea.Tick(2*time.Second, func(_ time.Time) tea.Msg { return clearToastMsg{} }),
331+
)
316332
}
317333

318334
// Global hotkeys (only when NOT actively typing into the active step)
@@ -335,24 +351,6 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
335351
case "a":
336352
m.tab = tabAbout
337353
return m, nil
338-
case "m":
339-
// Runtime toggle: clicks-vs-text-select. Some terminals
340-
// (notably Warp) don't honor the modifier-bypass
341-
// convention for native selection, so a hard toggle is
342-
// the only reliable way to get both interactions.
343-
m.selectMode = !m.selectMode
344-
if m.selectMode {
345-
m.copyToast = "🖱 select mode — drag to select · m for clicks"
346-
return m, tea.Batch(
347-
tea.DisableMouse,
348-
tea.Tick(3*time.Second, func(_ time.Time) tea.Msg { return clearToastMsg{} }),
349-
)
350-
}
351-
m.copyToast = "🖱 click mode — m for select"
352-
return m, tea.Batch(
353-
tea.EnableMouseCellMotion,
354-
tea.Tick(2*time.Second, func(_ time.Time) tea.Msg { return clearToastMsg{} }),
355-
)
356354
}
357355
}
358356

@@ -1080,7 +1078,7 @@ func (m Model) renderOrdered() string {
10801078
styleDim.Render("Send"),
10811079
styleOk.Render(fmt.Sprintf("%s %s", fmtAmt(t.FromAmount), strings.ToUpper(t.FromTicker))),
10821080
"",
1083-
styleDim.Render("To deposit address ") + styleDim.Render("(↑↓ enter copy · m → select mode)"),
1081+
styleDim.Render("To deposit address ") + styleDim.Render("(↑↓ enter copy · ctrl+s → select mode)"),
10841082
addrCaret + addrLine,
10851083
"",
10861084
qrCaret + qrLink,

0 commit comments

Comments
 (0)