Skip to content

fix(input): 入力開始時に仮のマークドテキストを同期的に表示する - #379

Closed
shinespark wants to merge 15 commits into
azooKey:mainfrom
shinespark:fix/provisional-marked-text
Closed

shinespark wants to merge 15 commits into
azooKey:mainfrom
shinespark:fix/provisional-marked-text

Conversation

@shinespark

Copy link
Copy Markdown

概要

ターミナル(Ghostty など)でひらがな入力をすると、入力し始めの 1 文字目のアルファベットが余計に確定される問題を直します。

原因

プロセス分離(XPC 化)以降、handle はキーを同期的に消費しますが、マークドテキストは ConverterServer の応答後に非同期で設定されます。keyDown の処理中に IME がマークドテキストも insertText も設定しないと、一部のクライアントは生のキーをそのまま送ります。そのため、合成開始の 1 文字目だけが英字として漏れていました。

変更内容

  • ConverterClientEventRouter.provisionalMarkedText を追加しました。入力状態が空で、応答待ちのキーがなく、合成を始めるキーのときに、入力文字を返します
  • handle で、ConverterServer へ送る前にこの文字列を仮のマークドテキストとして同期的に設定します。応答が届くと正式なマークドテキストで置き換わります
  • キーイベントの応答が得られなかったときは、仮のマークドテキストを消します
  • 上記のテストを追加しました

確認方法

  • swift test --filter ConverterClientEventRouterTests が通ることを確認済みです
  • Xcode でのビルドが成功することを確認済みです
  • Ghostty などのターミナルでひらがな入力を始めたとき、1 文字目のアルファベットが確定されないこと

🤖 Generated with Claude Code

shinespark and others added 15 commits October 5, 2026 01:34
本家azooKeyと同時にインストールしても衝突しないよう、アプリ・テストのバンドルID、
App Group、ConverterServerのMachサービス名、入力モードIDを変更する。
UserDefaultsのキーはupstreamとのコンフリクトを減らすため変更しない。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PRODUCT_NAMEをyuzKeyにして.app名を変え、インストール先やpkillの対象もそろえる。
@testable importが壊れないようにPRODUCT_MODULE_NAMEはazooKeyMacのまま固定する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ブランディングをyuzKeyに変更する
新しいSwiftPMはresource bundleをContents/Info.plistつきで生成する。直下にもInfo.plistを
置くとbundleの構造が不正になり、archive時のcodesignが失敗していた。
また、前回のビルドで置いたファイルが残らないよう、コピー前に埋め込み先を削除する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…undle

ConverterServerのresource bundleに署名できない問題を直す
設定の「キーボード配列」に「候補選択キー」を追加し、1〜9とaoeuidhtnを切り替えられるようにする。
aoeuidhtnを選ぶと、候補選択中は修飾キーなしのa/o/e/u/i/d/h/t/nで1〜9番目の候補を確定し、
候補ウィンドウの番号表示もそれらの文字に変える。数字キーは候補を確定せず入力を続ける。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
候補選択キーの設定にasdfghjklを追加する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
キーボードのホーム段で候補を選べるようにする
group.接頭辞のApp Groupはプロビジョニングプロファイルでの許可が必要だが、自動署名で作られる
ワイルドカードのプロファイルは許可しないため、設定を読み書きできず、ConverterServerも
起動を拒否されていた。macOSではTeam ID接頭辞のApp Groupならプロファイルが要らない。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
同梱のllama.cppがmacOS 27のMetalで初期化に失敗し、Zenzaiのモデルを読み込んだ時点で
ConverterServerがabortしていた。GPUを使わないZenzaiCPUトレイトにして、Metalを初期化しないようにする。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
App GroupをTeam ID接頭辞の識別子に変更する
ZenzaiをCPUで推論するZenzaiCPUトレイトに切り替える
ConverterServerの応答は非同期のため、handleが返る時点ではマークドテキストが
空のままになる。Ghosttyなどはその間に生のキーをアプリへ送るため、ひらがな入力の
1文字目のアルファベットが確定されていた。入力開始キーでは入力文字を仮の
マークドテキストとして同期的に設定する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@shinespark

Copy link
Copy Markdown
Author

Opened against the wrong repository by mistake. Sorry for the noise.

@shinespark shinespark closed this Oct 4, 2026
@shinespark
shinespark deleted the fix/provisional-marked-text branch October 4, 2026 18:11
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