feat: 学習履歴のsurface最大文字数制限とCtrl+Delでの履歴削除を追加#64
Merged
Conversation
Mozcの実装を参考に学習履歴まわりを拡張する。 - 変換結果(surface)が max_surface_chars(既定50文字)を超える確定は 学習しない。ライブ変換の文全体確定で1文まるごとのエントリが キャッシュを圧迫するのを防ぐ(Mozc: kMaxStringLength相当) - 変換中に学習候補を選択して Ctrl+Del でそのエントリを履歴から削除 (Mozc: DeleteSelectedCandidate。ClearHistoryEntry + ConvertCancel と 同じく完全一致で削除して入力状態に戻る) - 学習候補の選択中はauxテキスト(候補ウィンドウのフッター)に 「Ctrl+Delで履歴から削除」を表示(Mozc: FillFooter と同文言) - いずれも config.toml の [learning] で設定可能 (max_surface_chars = 50) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Macキーボードの「delete」はBackspace(XK_BackSpace)なので、 Ctrl+Delete(forward delete)に加えて Ctrl+Backspace でも 学習履歴を削除できるようにする。素のBackspaceは従来どおり 変換キャンセル - 削除成功時、Mozcは ConvertCancel で候補ウィンドウが一瞬閉じて 再表示されるが、karukanはウィンドウを開いたまま該当候補だけを リストからその場で取り除く(選択位置は維持、再推論なし)。 リストが空になった場合のみMozc同様キャンセルにフォールバック Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
実際に押すキーはどちらのOSでもBackspace位置のキー (macOSの「delete」キーの実体もBackspace)なので、 forward deleteと紛らわしいMozc流の「Ctrl+Del」表記をやめて 「Ctrl+Backspaceで履歴から削除」に統一する。 Ctrl+Delete(forward delete)のバインドは引き続き有効。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
コードレビューで見つかった学習履歴削除まわりの不具合を修正。 - 削除後に候補をその場で消すのをやめ、mozcのcancel-and-reconvertと 同様に変換を作り直す。これによりモデル/辞書/フォールバックも出す 表層(dedupで隠れていた分)が通常候補として復活する - 履歴削除を接頭辞対応(remove_suggestion)にし、同一表層のprefix双子を まとめて削除。次変換での復活を防ぐ - Ctrl+Delete/Ctrl+Backspaceは、選択が学習候補でなければ何もしない (mozcのDoNothing)に統一。キャンセルは素のBackspace/Escapeが担う - Ctrl+Alt+Delete/Backspaceは履歴を消さずアプリへ素通り - 入力中(Composing)のサジェスト窓でもCtrl+Backspaceで先頭の学習候補を 削除できるようにし、文字が消える不具合を修正 - max_surface_charsの設定→キャッシュ配線に回帰テストを追加 あわせて候補生成のマッピング共通化などのクリーンアップを実施。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
togatoga
force-pushed
the
feat/learning-max-surface-ctrl-delete
branch
4 times, most recently
from
July 18, 2026 07:59
47ece15 to
4b373ad
Compare
機能変更なしのリファクタリング(-41行)。 - Candidateのsource_label/from_learningを廃止し、CandidateSource自体を source: Option<CandidateSource>として保持。ラベルと削除可否は読み出し 時に導出(source_label()/is_deletable())し、2つの派生値が食い違う 余地をなくす。enumはcore/candidate.rsへ移動 - 学習キャッシュの上限2種をLearningConfigにまとめ、new/loadの引数に。 set_max_surface_charsセッターを廃止し、設定値の適用漏れを型で防ぐ - 削除方式の作り直し化で不要になったCandidateList::remove_selectedと LearningCache::remove(exact一致版)を削除 - CLAUDE.md/READMEの履歴削除の記述を現仕様(作り直し・prefix双子削除・ 非学習候補はDoNothing・サジェスト窓対応)に同期 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
togatoga
force-pushed
the
feat/learning-max-surface-ctrl-delete
branch
from
July 18, 2026 08:01
4b373ad to
eb159b2
Compare
入力中(Composing)の Ctrl+Backspace によるサジェスト先頭の学習候補 削除を撤回し、従来どおりの文字削除に戻す。削除ヒントが表示されず 押す動機のない場面で、文字を消す意図のキーが不可逆な履歴削除に 化けるのを避ける。履歴削除は変換候補リストで学習候補を選択して Ctrl+Backspace の一本道のみとする。 あわせて README / default.toml の学習まわりの記述をユーザー視点に 整理(内部用語・実装挙動の説明を削除)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
学習履歴まわりの2機能を追加します。
max_surface_chars(既定50文字)を超える変換結果は学習しません。ライブ変換で文全体を確定するたびに1文まるごとがエントリになり学習キャッシュを圧迫するのを防ぎます。読みの長さは制限しません。Ctrl+Backspace(macOSでは Ctrl+delete。Ctrl+Deleteでも可)を押すと、そのエントリを学習履歴から削除できます。学習候補の選択中は候補ウィンドウのフッターに「Ctrl+Backspaceで履歴から削除」と表示して削除できることを明示します。挙動の要点
Backspace/Escape)。Ctrl+Alt 付きはアプリへ素通しします実装
LearningCacheに surface 上限ゲートとremove_suggestion()(接頭辞違いの読みを含む削除)を追加。上限2種はLearningConfigにまとめてコンストラクタで受け取り、後付けセッターを持たないCandidateがsource: Option<CandidateSource>を保持し、auxラベルと削除可否を読み出し時に導出(source_labelフィールドとfrom_learningフラグは持たない)。変換状態の Ctrl+Backspace / Ctrl+Delete ハンドラ、auxフッター注釈、[learning] max_surface_chars設定の配線XK_BackSpace/ forward delete(117)→XK_Delete変換と Ctrl 修飾の伝搬が既にあり、fcitx5 もControlMaskがそのまま流れる。ワイヤプロトコル変更なし(protocol_version据え置き)テスト
cargo test --workspace全パス(engine 164+15+28 / im 240 / fcitx5 / cli)🤖 Generated with Claude Code