Skip to content

feat(list): list TUI のメニューを Esc 単独でも中止可能に (i31)#44

Merged
takemi-ohama merged 1 commit into
mainfrom
feat/list-tui-esc-cancel-i31
Jun 9, 2026
Merged

feat(list): list TUI のメニューを Esc 単独でも中止可能に (i31)#44
takemi-ohama merged 1 commit into
mainfrom
feat/list-tui-esc-cancel-i31

Conversation

@takemi-ohama

Copy link
Copy Markdown
Contributor

概要

devbase list の対話メニュー (questionary) を Esc 単独押下でも中止できるようにする。
従来は中止操作が Ctrl-C / Ctrl-Q のみで、Esc では何も起きなかった。

questionary 2.x の select は Ctrl-C / Ctrl-Q しか中止キーに割り当てていないため、
生成済み Question.application.key_bindings に Escape ハンドラを後付けする
ヘルパー _with_escape_cancel() を追加し、プロジェクト選択メニュー (_show_menu) と
running 操作選択メニュー (_show_action_menu) の両方に適用した。

関連 Issue

  • Closes #

変更点

  • _with_escape_cancel() を追加し、_show_menu / _show_action_menu の両 select に Esc 中止を後付け
  • Esc は矢印キー等のエスケープシーケンス (\x1b[A 等) の先頭バイトでもあるため eager=False で登録し、prompt_toolkit のフラッシュ待ちで単独 Esc のみを拾う (矢印キー移動と非衝突)
  • Ctrl-C と同じく KeyboardInterrupt で抜けるため ask() は従来どおり None (=中止) を返し、呼び出し側の中止フローはそのまま機能する
  • プロンプト案内文を「Ctrl-C 中止」→「Esc・Ctrl-C 中止」に更新

動作確認

  • uv run pytest 全 462 passed / 1 skipped (既存スキップ)
  • Esc 中止バインドの登録 (Escape / eager=False / KeyboardInterrupt 退出) を単体テストで検証
  • _show_menu / _show_action_menu が実際に Esc 中止を仕込むことを配線テストで検証
  • 実機で list メニュー上の Esc 中止 / 矢印キー移動が両立することを手動確認

補足

  • 単独 Esc 押下時は prompt_toolkit のフラッシュ待ち (既定 ~0.5秒) の遅延が入るが、これはターミナル UI で Esc 単独を扱う際の標準的な挙動。

questionary 2.x の select は Ctrl-C / Ctrl-Q しか中止に割り当てないため、
生成済み Question.application.key_bindings に Escape ハンドラを後付けする
_with_escape_cancel() を追加し、プロジェクト選択 (_show_menu) と running
操作選択 (_show_action_menu) の両メニューに適用する。

- Esc は矢印キー等のエスケープシーケンス先頭でもあるため eager=False で登録し、
  prompt_toolkit のフラッシュ待ちで単独 Esc のみを拾う (矢印キーと非衝突)
- Ctrl-C と同じく KeyboardInterrupt で抜けるので ask() は None (中止) を返す
- プロンプト案内を「Ctrl-C 中止」→「Esc・Ctrl-C 中止」に更新

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@takemi-ohama takemi-ohama merged commit a4cbc2b into main Jun 9, 2026
5 checks passed
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