Skip to content

feat(settings): dynamic の表示時間に 5 段階の簡単設定を用意する - #46

Merged
limit7412 merged 2 commits into
masterfrom
claude/issue-45-plan-f7bvki
Sep 1, 2026
Merged

feat(settings): dynamic の表示時間に 5 段階の簡単設定を用意する#46
limit7412 merged 2 commits into
masterfrom
claude/issue-45-plan-f7bvki

Conversation

@limit7412

Copy link
Copy Markdown
Owner

closes #45

背景

dynamic モードの表示時間は 4 つの係数(basereading_speedminmax)で決まる。
表示時間を少し変えたいだけの利用者に、読字速度とクランプ範囲を個別に決めさせるのは重い。

変更

既定の通知設定タブへ「dynamic: 簡単設定」を足し、最短から最長までの 5 段階を選べるようにした。

  • 段階を選ぶと 4 つの係数がまとめて入り、係数の入力欄は編集できなくなる。
  • カスタムに戻すと入力欄が有効になり、今までどおり係数ごとに編集できる。
  • timeout_modefixed のときは、係数欄と同じく簡単設定も無効になる。
  • 開いたときは係数から段階を引き直し、どれとも一致しない係数はカスタムとして表示する。

各段階が入れる係数は次のとおりである。

  • 最短base 0.0、reading_speed 100.0、min 1.0、max 3.0
  • 短めbase 1.0、reading_speed 40.0、min 2.0、max 8.0
  • 標準base 2.0、reading_speed 12.0、min 3.0、max 15.0
  • 長めbase 3.0、reading_speed 9.0、min 5.0、max 20.0
  • 最長base 4.0、reading_speed 6.0、min 8.0、max 30.0

標準は Defaults の既定値と同じにしてある。
係数を触っていない利用者に、選んだ覚えのないプリセットを表示しないためである。

最短を fixed の既定に合わせたこと

最短は、テスト通知が fixed の既定と同じ 1 秒になるところを起点にしてある。
「テスト通知を送る」で今の見え方と比べながら、そこから段階を上げて決められる。

テスト通知の文字数(ja で 35 文字、en で 78 文字)では base + 文字数 / reading_speed が 1.0 を下回り、min でそこまで持ち上がる。
そのため、この 1 秒は ja と en のどちらでも変わらない。
最短の reading_speed は読字速度ではなく、1 秒延ばすのに要る文字数である。
視界を塞がないことを優先する段階なので、実際に読み切れる速度より大きく取ってある。

辞書の文言を伸ばすと文字数が増え、min から浮いて 1 秒でなくなる。
起点が黙ってずれないよう、両ロケールのテスト通知を MessageBuilder に通して 1 秒になることを spec で確かめる。

設定ファイルのスキーマは変えていない

書かれるのは段階の名前ではなく係数の実値である。
名前を持たせると、rules の係数ごとの上書きを解決する経路が名前と実値の 2 通りになり、どちらが勝つかを決めなければならなくなる。

アプリ別ルールタブの上書き行は簡単設定の対象外とした。
あちらは係数単位の部分上書きであり、4 つ組であるプリセットとの対応が取れない。

確かめたこと

  • crystal tool format --check src spec
  • crystal spec(248 examples, 0 failures)
  • crystal build --cross-compile --target x86_64-pc-windows-msvc src/main.cr(設定ウィンドウの型検査)

追加した spec は次のとおりである。

  • 標準が Defaults の既定値と一致する
  • どの文字数でも段階の順に表示時間が長くなる
  • 係数の組から段階の名前を引ける/一致しない係数では名前を返さない
  • どの段階も保存の検証を通る
  • 最短のプリセットが、ja と en の両方でテスト通知を 1 秒で出す

実機の画面の動きは Windows でしか確かめられないため、未確認である。

🤖 Generated with Claude Code

https://claude.ai/code/session_01Bzwo9brhbZyAyjVuzEj1mb


Generated by Claude Code

dynamic の表示時間は 4 つの係数で決まる。
表示時間を少し変えたいだけの利用者に、読字速度とクランプ範囲を個別に決めさせるのは重い。

既定の通知設定タブへ簡単設定の選択肢を足し、最短から最長までの 5 段階を選べるようにする。
段階を選ぶと 4 つの係数がまとめて入り、係数の入力欄は編集できなくなる。
カスタムに戻すと入力欄が有効になり、今までどおり係数ごとに編集できる。

最短はテスト通知が fixed の既定と同じ 1 秒になるところを起点にしてある。
「テスト通知を送る」で今の見え方と比べながら、そこから段階を上げて決められる。
テスト通知の文字数では min まで持ち上がるため、この 1 秒は ja と en のどちらでも変わらない。
辞書の文言を伸ばして起点がずれたときに気付けるよう、両ロケールを spec で確かめる。

設定ファイルへ書くのは段階の名前ではなく係数の実値であり、スキーマは変えない。
名前を持たせると、rules の係数ごとの上書きを解決する経路が名前と実値の 2 通りになる。
画面は開いたときに係数から段階を引き直し、どれとも一致しないものをカスタムとして扱う。

アプリ別ルールタブの上書き行は対象外とする。
あちらは係数単位の部分上書きであり、4 つ組であるプリセットとの対応が取れない。

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bzwo9brhbZyAyjVuzEj1mb
各段階が入れる係数と、最短が fixed の既定に合わせてあることを書く。
設定ファイルには段階の名前ではなく係数の実値が入るため、
手で書いた係数がどの段階とも一致しないときにカスタムとして表示されることも添える。

Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bzwo9brhbZyAyjVuzEj1mb
@limit7412
limit7412 marked this pull request as ready for review September 1, 2026 16:25
@limit7412
limit7412 merged commit 0fc470d into master Sep 1, 2026
3 checks passed
@limit7412
limit7412 deleted the claude/issue-45-plan-f7bvki branch September 1, 2026 17:16
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.

通知の表示時間に関して、dynamic用に簡単設定モードを用意する

2 participants