Skip to content

fix: ターミナルで最初の1文字が二重に入力される問題を修正 - #358

Open
shiina-archelon wants to merge 1 commit into
azooKey:mainfrom
shiina-archelon:fix/terminal-first-char-duplication
Open

fix: ターミナルで最初の1文字が二重に入力される問題を修正#358
shiina-archelon wants to merge 1 commit into
azooKey:mainfrom
shiina-archelon:fix/terminal-first-char-duplication

Conversation

@shiina-archelon

Copy link
Copy Markdown

Closes #357

修正

未確定文字列が無い状態で文字キーが押されたら、変換結果を待たずに、押された文字をそのまま暫定の未確定文字列として表示する。変換結果が届いたら本来の内容に置き換える。

  • ConverterClientEventRouter.provisionalMarkedText(event:context:) を追加。暫定の未確定文字列を表示するかどうか、表示するなら何を表示するかをここで判定する
  • azooKeyMacInputController は、変換結果が返るまでに押された文字を暫定の未確定文字列として表示し (通常は 1 文字。結果より先に次のキーが来たときだけ 2 文字以上になる)、結果が届いた refreshMarkedText() で本来の内容に置き換える。入力元のアプリが切り替わる deactivateServer でも暫定の文字列は捨てる
  • refreshMarkedText() から setMarkedText(_:) を分け、暫定と本番で同じ経路を使う

注意点

暫定の未確定文字列には押されたキーの文字をそのまま使うため、変換結果が届くまでの 30〜110ms のあいだ、本来と違う文字が見えることがある。

  • かな入力: r を押すと下線付きの r が一瞬見えてから になる
  • 英字モード (英数キーで切り替わる方): 確定される a が一瞬だけ下線付きで見える
  • 全角スペース: 半角スペースが一瞬見えてから全角になる

確認

  • Core swift test 72 件 passした
    • provisionalMarkedText の判定にテストを 5 件追加した
  • swiftlint --strict pass
  • iTerm2 で b が 1 文字だけ入るか、かな入力 (JIS) で r になるか、Alfred など通常の text view でも問題ないかチェックした

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.

bug: ターミナルで最初の1文字が二重に入力される(ConverterServer 非同期化以降)

1 participant