Read one key press from *fd*, decoding arrow-key escape sequences. Reads at the file-descriptor level (``os.read``) — ``sys.stdin`` is buffered and its readahead would consume escape-sequence bytes behind ``select``'s back.
(fd: int)
| 158 | |
| 159 | |
| 160 | def _read_menu_key(fd: int) -> str: |
| 161 | """Read one key press from *fd*, decoding arrow-key escape sequences. |
| 162 | |
| 163 | Reads at the file-descriptor level (``os.read``) — ``sys.stdin`` is |
| 164 | buffered and its readahead would consume escape-sequence bytes behind |
| 165 | ``select``'s back. |
| 166 | """ |
| 167 | data = os.read(fd, 1) |
| 168 | if data != b"\x1b": |
| 169 | return data.decode("utf-8", errors="ignore") |
| 170 | if not select.select([fd], [], [], 0.05)[0]: |
| 171 | return "\x1b" |
| 172 | if os.read(fd, 1) != b"[": |
| 173 | return "\x1b" |
| 174 | if not select.select([fd], [], [], 0.05)[0]: |
| 175 | return "\x1b" |
| 176 | return "\x1b[" + os.read(fd, 1).decode("utf-8", errors="ignore") |
| 177 | |
| 178 | |
| 179 | def _prompt_choice_interactive( |
no test coverage detected