Skills and practical guidance for Garou, a Kitty Graphics Protocol based TUI image viewer.
最終更新: 2026-04-06 実装状態: v1.0.1 準備中(高速化最優先フェーズ)
crossterm で raw mode / alternate screen / cursor 制御を行う。KeyEventKind::Press のみ処理し、キーリピート/リリースを無視して多重入力を防ぐ。q/Esc 終了、h/l/←/→ で画像移動、j/k/↑/↓ でサイドバー選択、Enter で決定/展開切替。o/O 外部アプリ起動、r 画像リフレッシュ、R フルリフレッシュ、Alt+S サイドバー表示切替、b/B ヘッダー/ステータス表示切替。a=T,f=100,C=1 でカーソルを動かさず PNG を送信する。描画前に 、後で 。SavePositionRestorePositionrefresh_image 時は a=d で既存画像を削除し再アップロード、配置のみ変化時は a=p を使って再配置する。term_width, term_height を取得 → max_display_width = max(term_width-2, 1) → available_height = term_height - header領域 → width_limit_by_height = available_height * aspect * cell_ratio → display_width = min(max_display_width, width_limit_by_height) → display_height = display_width / (aspect * cell_ratio)。max(1, ...) を徹底する。setting.toml(プロジェクト直下)を読み込む。display.sidebar_size, display.preview_debounce, cache.lru_size, cache.max_bytes, cache.prefetch_size, image.diff_mode, image.extensions)。full_refresh 時のみ全面クリア)。通常は差分方針で更新する。preview_debounce)と LRU キャッシュ、近傍先読み(prefetch_size)で連続移動の待ち時間を抑える。All(常時再送)/Full(全バイト比較)/Half(間引き比較)を用途に応じて切替える。dirty_ratio による 2段階フォールバック(差分タイル上書き / フルフレーム送信)を前提に設計する。image クレートでリサイズし、payload サイズを先に削減する。skip_step で比較密度を調整する。smol ベースの非同期経路へ切り出し、UI スレッド停止を回避する。a=q) を用いた背圧制御を導入し、フレーム送出の詰まりを抑える。a=T、kitty: a=f 検証)。SavePosition → Kitty 画像送信 → RestorePosition → flush。KeyEventKind::Press のみ判定。インデックスは 0..len-1 でラップ。cargo fmtcargo checkq/Esc/h/l/←/→/j/k/↑/↓/Enter/o/r/R/Alt+S/b の入力確認README.mdREADME/5W1H.mdREADME/要件.mdREFACTORING_ROADMAP.md — v1.0.0 完成後の改善計画AGENTS.mdagents/Rust.md