Skip to content

Commit d6dbcfd

Browse files
takemi-ohamaclaude
andauthored
feat(tui): devbase list 実行時に画面をクリアしてプロンプトを先頭行に表示 (#72)
トップ一覧の再描画前に `_clear_screen()` を呼び、表示領域とスクロール バックを消去してカーソルを先頭行へ戻す (CTRL+L 相当)。非 TTY 時は何も しない。 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 0680ea3 commit d6dbcfd

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

lib/devbase/tui/app.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,20 @@ def _route(category: str, devbase_root: Path):
6868
return module.run(devbase_root)
6969

7070

71+
def _clear_screen() -> None:
72+
"""端末をクリアしてカーソルを先頭行へ戻す。
73+
74+
トップ一覧 (メニュープロンプト) を画面の先頭行から表示するため、再描画の
75+
直前に呼ぶ。``\\033[2J`` で表示領域を消去、``\\033[3J`` でスクロールバック
76+
も消去、``\\033[H`` でカーソルを左上へ移動する。stdout が非 TTY の場合は
77+
何もしない。
78+
"""
79+
if not sys.stdout.isatty():
80+
return
81+
sys.stdout.write("\033[3J\033[2J\033[H")
82+
sys.stdout.flush()
83+
84+
7185
def _pause_for_review() -> bool:
7286
"""操作出力を読めるよう、一覧の再表示前に Enter を待つ。
7387
@@ -129,6 +143,7 @@ def _top_menu_loop(devbase_root: Path) -> int:
129143
last_rc = 0
130144
projects_dir = Path(devbase_root) / "projects"
131145
while True:
146+
_clear_screen()
132147
rows = list_projects(projects_dir)
133148
if not rows:
134149
# プロジェクト未作成でもカテゴリ操作 (env/plugin/...) は使えるため

0 commit comments

Comments
 (0)