yoi/tickets/tui-mouse-scroll.md

2.3 KiB
Raw Blame History

TUI: マウスホイールでヒストリーをスクロール

背景

TUIのヒストリービューはキー操作Shift+↑/↓、PageUp/PageDown、Ctrl+Home/End、Ctrl+[/])でスクロールできる。スクロール状態(Scroll 構造体・follow_tail・top_offsetも既に揃っており、ロジック的には外部から scroll_up/scroll_down を叩けば任意の手段でスクロール可能になっている。

一方で、現状のイベントループは TermEvent::Key / Paste / Resize のみを処理しており、マウスイベントは破棄される。crossterm のマウスキャプチャも有効化されていないため、ターミナル側にホイール入力すら届かない。

エディタ的に常駐するTUIとして、マウスホイールで直感的にヒストリーを遡れる体験を提供したい。

要件

  • フルスクリーンモード中にマウスホイールでヒストリービューをスクロールできる。
  • ホイール上方向で過去方向(scroll_up)、下方向で末尾方向(scroll_downに動く。1 notch あたりの行数は既存のキー操作Shift+↑/↓)と同じ感覚で良い。
  • マウスキャプチャの有効化はalt-screenに入っているあいだに限定し、終了時に確実に解除するpicker / spawn のインラインフェーズはネイティブのマウス挙動を保つ)。
  • クリック・ドラッグ等のホイール以外のマウスイベントは現状無視で構わないが、最低限イベントループでマッチ漏れによるエラーが出ない形にする。

完了条件

  • フルスクリーンTUIでマウスホイールを回すと、ヒストリービューが上下に動く。
  • TUIを正常終了・異常終了どちらでも、ターミナルのマウスキャプチャ状態が残らない。
  • 既存のキー操作によるスクロール挙動に変化がない。

範囲外

  • ホイール以外のマウス操作(クリックでフォーカス移動、ドラッグ選択、スクロールバー表示など)
  • picker / spawn のインラインフェーズでのマウス対応
  • ホイール感度の設定可能化

Review