Skip to content

fix: m(全件既読)の挙動を Space 送り読みフローに揃える#30

Open
hideack wants to merge 1 commit into
mainfrom
fix/mark-all-read-space-flow
Open

fix: m(全件既読)の挙動を Space 送り読みフローに揃える#30
hideack wants to merge 1 commit into
mainfrom
fix/mark-all-read-space-flow

Conversation

@hideack

@hideack hideack commented Jun 21, 2026

Copy link
Copy Markdown
Owner

背景

操作ログ(keylog.jsonl)の分析中に、m(フィード全件既読)の直後に space を押したときの挙動に違和感があるとの指摘があり調査した。

実測でも m の過半(30/58)は content ペインで押されており、その直後の space が期待どおりに連鎖しないケースが再現する。

原因

m ハンドラの「次フィードへ進む」処理が、通常の Space 送り読み(advanceSpaceReading)と別ロジックになっていた。

  • 次フィードを feedList.refresh() のカーソル都合で決めていた(送り読みの getNextFeedWithUnread とは別の並び順)
  • firstUnread ではなく entry[0]プレビューするだけで、既読化も setKeepVisibleFeed も行わない
  • フォーカスを変えないため、content ペインで m を押した直後の space
    • 短い記事 → nextUnread() が index 1 から探索し先頭(最新)の未読をスキップ
    • 長い記事 → 開いてもいない・既読化もされていないプレビューをスクロールし、先頭記事が未読のまま残る

修正

m を送り読みフローに統一した。

  1. markAllAsRead()
  2. getNextFeedWithUnread(currentFeedId) で「現フィードより後の未読フィード」を決定(refresh() 前に呼ぶ)
  3. setKeepVisibleFeed を次フィードへ差し替えてから refresh()(既読化したフィードが確実に消える)
  4. 次フィードへ移動 → firstUnread()openSelectedEntry() で開いて既読化 → focus = content
  5. 未読フィードが尽きたら focus = feedNo more unread を表示

これで m 直後の space が通常の送り読みとまったく同じ連鎖で次の記事へ進む。

確認

  • npx tsc --noEmit(ui.ts に新規エラーなし。既存の neo-blessed 由来 / crawler の警告は対象外)
  • 手元で TUI 動作確認(mspace の連鎖)

🤖 Generated with Claude Code

`m` の次フィードへの進み方が Space 送り読み(advanceSpaceReading)と
別ロジックになっており、`m` 直後の `space` が期待どおり連鎖しなかった。

- 次フィードを feedList.refresh() のカーソル都合で決めていた
  (送り読みの getNextFeedWithUnread とは別の並び順)
- firstUnread ではなく entry[0] をプレビューするだけで、既読化も
  setKeepVisibleFeed も行わない
- フォーカスを変えないため、content ペインで m を押した直後の space が
  最初の未読をスキップ、または未開封プレビューをスクロールしてしまう

m を送り読みフローに統一:
markAllAsRead → getNextFeedWithUnread(refresh 前に決定)→ keepVisible 差し替え
→ refresh → 次フィードの firstUnread を openSelectedEntry で開いて focus=content。
未読フィードが尽きたら focus=feed で "No more unread" を表示。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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