python / python/cpython

PyREPL: ESC key in isearch mode has ambiguous prefix delay

未關閉
#154,730 0 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

stdlib topic-repl type-bug
主要語言
Python
星號
77.2k
分支
36k
PR 合併指標
PR 指標待擷取

描述

Bug report

Bug description:

This issue was noted from #145398. A bare Esc press in isearch mode (Ctrl-R) does not exit search. Instead, the first Esc appears to do nothing, only after pressing Esc a second time does isearch end.

To reproduce:

  1. Press Ctrl-R in PyREPL to enter isearch.
  2. Press Esc once to exit isearch.
  • Expected: isearch ends immediately.
  • Actual: nothing happens. Press Esc again, isearch ends.

This is because BaseEventQueue.push() treats \x1b (ESC) as a prefix of longer escape sequences (arrows, function keys, etc.). When a single Esc is received, the event queue holds it and waits for the next byte to decide whether it’s a standalone Esc or the start of a longer sequence. If no further byte arrives, the Esc event is never delivered, and isearch remains active.

Apart from isearch mode, this behavior affects normal mode as well, where Esc also has a delay before it is recognized.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Windows

Linked PRs
  • gh-154731

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

從 BaseEventQueue.push() 以及 Lib/_pyrepl/unix_eventqueue.py 和 Lib/_pyrepl/windows_eventqueue.py 中的轉義序列定義開始。在進行變更之前,檢查相關 PR gh-154731 和現有的 PyREPL 事件處理。完成的標準是:單獨的 Esc 會立即退出 isearch,並且在一般模式下無需目前的延遲即可被識別。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
cli
Issue 類型
缺陷
難度
3/5
預估耗時
1-2 天
活躍度
停滯
描述清晰度
描述清楚
新手友好度
25/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。