Skip to content

fix: 日本語 IME オンのままでも Space でチェックを切り替えられるようにする - #129

Merged
takecchi merged 1 commit into
mainfrom
codiva/codiva-ask-shift-space
Aug 20, 2026
Merged

fix: 日本語 IME オンのままでも Space でチェックを切り替えられるようにする#129
takecchi merged 1 commit into
mainfrom
codiva/codiva-ask-shift-space

Conversation

@takecchi

Copy link
Copy Markdown
Owner

なぜ Shift+Space が必要だったのか

日本語 IME の仕様でした。codiva 側の設計判断ではありません。

macOS の日本語入力では、かな入力モードで未変換のまま Space を押すと 全角スペース(U+3000) が確定して入力されます。半角スペースが送られるのは Shift+Space のときだけです。端末は IME が確定した文字列をそのまま送ってくるだけなので、アプリからは「押されたのは Space キー」だと分からず、input === ' ' の比較は必ず外れます

その結果、

  • 質問ダイアログ(AskUserQuestion)の複数選択チェック
  • /config の ON/OFF トグル

が「IME を切るか Shift+Space を押さないと反応しない」状態になっていました。

変更

  • core/key-sequence.ts に純粋な isSpaceKey(input) を追加(半角スペースと U+3000 の両方を Space キーとみなす)。
  • 質問ダイアログの複数選択トグル(ui/permission-dialog.tsx)と /configui/config-select.tsx)の判定をこれに寄せた。
  • 文字として挿入する経路(コンポーザ)は通していない — 打った全角スペースは全角のまま入るのが正しいので、正規化するのはキー操作としての Space 判定だけ。
  • ついでに /config も他画面と同じく normalizeChord を通すようにした(modifyOtherKeys / CSI-u を送る端末では Enter / Space が生のエスケープ列で届き、素の比較が外れるため)。
  • README(一覧ダイアログの節・/config の表)と docs/TECH_NOTES.md(Ink 7 の実装メモ)に理由を記載。

なお、ツール許可の y / n のような英字キーは IME が preedit に吸ってしまうため原理的に届きません(回避策は IME を切ること)。README にもその旨を書いています。

テスト

  • core/key-sequence.spec.ts: isSpaceKey のテーブルテスト(半角 / 全角 / 空 / タブ / 複数スペース / 通常文字)。

  • ui/permission-dialog.spec.tsx: 全角スペースで複数選択がトグルされる(既存の「素の Space」「modifyOtherKeys の Space」ケースの隣)。

  • tests/commands.test.tsx: /config が全角スペースでも切り替わる。

  • npm run lint(Biome 2.5.4)

  • npm run typecheck

  • npm test(115 files / 2935 tests)

  • npm run build

  • 実機での体感確認(IME をオンにしたまま Space でチェックが付くか)※ TTY が要るのでお願いします

macOS の日本語入力では、かな入力中の Space は全角スペース(U+3000)として
確定されてアプリへ届き、半角スペースが来るのは Shift+Space のときだけ。
端末は IME が確定した文字列を送ってくるだけなので `input === ' '` は必ず
外れ、質問ダイアログ(AskUserQuestion)の複数選択チェックと /config の
ON/OFF が「Shift+Space でしか押せない」状態になっていた。

キー操作としての Space 判定を純粋な `isSpaceKey`(半角と U+3000 の両方を
Space とみなす)に寄せ、両ダイアログで使う。文字として挿入する経路
(コンポーザ)は通さないので、打った全角スペースは全角のまま入る。

ついでに /config は他画面と同じく normalizeChord を通すようにした
(modifyOtherKeys / CSI-u を送る端末では Enter / Space が生のエスケープ列で
届き、素の比較が外れるため)。
@takecchi
takecchi merged commit 486e5c1 into main Aug 20, 2026
1 check passed
@takecchi
takecchi deleted the codiva/codiva-ask-shift-space branch August 20, 2026 16:09
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