Commit 5665370
authored
fix(tui): recover Windows shell UI from mid-session console blanking (#192)
* fix(tui): recover Windows shell UI from mid-session console blanking
The Windows shell UI could go blank mid-session (transcript and input box
gone until terminal restart). Two mechanisms, both fixed:
- Child processes attached to the interactive console: Shell-tool,
background-task, and shell-escape spawns now pass CREATE_NO_WINDOW so a
child touching the console via the Win32 console API (cls, Clear-Host,
SetConsoleMode) cannot corrupt the TUI. Kill semantics are unchanged
(TerminateProcess; no CTRL_BREAK usage anywhere).
- prompt_toolkit's differential renderer diffing against a stale frame
after the real screen diverged (ConPTY resize rewrap, terminal replay,
half-completed teardown erase): the prompt renderer state is now reset
after terminal geometry changes and failed scrollback handoffs so the
next redraw is absolute.
Also corrects the sync_output docstring: Windows10_Output delegates
_buffer to its vt100 output, so DEC-2026 marks ARE installed on
VT-capable Windows consoles (safe: WT expires after 100ms, xterm.js 5s).
* fix(tui): address review — Ctrl+L hard repaint, spawn-flag test coverage
- Add an explicit Ctrl+L binding (pins prompt_toolkit's default clear-screen)
with a contained-failure handler, list it in /help shortcuts and
docs/en/reference/keyboard.md.
- Add spawn-flag tests for the background worker child and the `!` foreground
shell command (CREATE_NO_WINDOW on Windows), plus hard-repaint tests.
- Reviewed e2e cancellation failure: test_shell_cancel_running_command_kills_
process_and_recovers passes outside the sandboxed test runner and on CI;
the local failure was sandbox interference with PTY signal delivery.
* refactor(host): centralize Windows console-detach creationflags
The CREATE_NEW_PROCESS_GROUP | CREATE_NO_WINDOW computation was
duplicated across four subprocess spawn sites, and had already drifted:
local.py used a 0x00000200 fallback for CREATE_NEW_PROCESS_GROUP while
manager.py/worker.py used 0. Extract a shared
windows_console_detach_flags() helper so the fallback constants and
console-detachment logic can't diverge again.1 parent 29174c3 commit 5665370
17 files changed
Lines changed: 398 additions & 7 deletions
File tree
- docs/en/reference
- packages/pythinker-host
- src/pythinker_host
- tests
- src/pythinker_code
- background
- ui/shell
- visualize
- tests
- background
- ui_and_conv
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
18 | 24 | | |
19 | 25 | | |
20 | 26 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | 6 | | |
8 | 7 | | |
9 | 8 | | |
| |||
30 | 29 | | |
31 | 30 | | |
32 | 31 | | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
| |||
198 | 198 | | |
199 | 199 | | |
200 | 200 | | |
201 | | - | |
202 | | - | |
203 | | - | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
204 | 207 | | |
205 | 208 | | |
206 | 209 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
257 | 257 | | |
258 | 258 | | |
259 | 259 | | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
17 | 18 | | |
| |||
243 | 244 | | |
244 | 245 | | |
245 | 246 | | |
246 | | - | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
247 | 251 | | |
248 | 252 | | |
249 | 253 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
| 12 | + | |
| 13 | + | |
12 | 14 | | |
13 | 15 | | |
14 | 16 | | |
| |||
185 | 187 | | |
186 | 188 | | |
187 | 189 | | |
188 | | - | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
189 | 194 | | |
190 | 195 | | |
191 | 196 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
24 | 25 | | |
25 | 26 | | |
26 | 27 | | |
| 28 | + | |
27 | 29 | | |
28 | 30 | | |
29 | 31 | | |
| |||
1271 | 1273 | | |
1272 | 1274 | | |
1273 | 1275 | | |
| 1276 | + | |
| 1277 | + | |
| 1278 | + | |
| 1279 | + | |
| 1280 | + | |
| 1281 | + | |
| 1282 | + | |
| 1283 | + | |
1274 | 1284 | | |
1275 | 1285 | | |
1276 | 1286 | | |
1277 | 1287 | | |
1278 | 1288 | | |
| 1289 | + | |
1279 | 1290 | | |
1280 | 1291 | | |
1281 | 1292 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2554 | 2554 | | |
2555 | 2555 | | |
2556 | 2556 | | |
| 2557 | + | |
| 2558 | + | |
| 2559 | + | |
| 2560 | + | |
| 2561 | + | |
2557 | 2562 | | |
2558 | 2563 | | |
2559 | 2564 | | |
| |||
3092 | 3097 | | |
3093 | 3098 | | |
3094 | 3099 | | |
| 3100 | + | |
| 3101 | + | |
| 3102 | + | |
| 3103 | + | |
| 3104 | + | |
| 3105 | + | |
| 3106 | + | |
| 3107 | + | |
| 3108 | + | |
| 3109 | + | |
| 3110 | + | |
| 3111 | + | |
| 3112 | + | |
| 3113 | + | |
| 3114 | + | |
3095 | 3115 | | |
3096 | 3116 | | |
3097 | 3117 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
81 | 81 | | |
82 | 82 | | |
83 | 83 | | |
| 84 | + | |
84 | 85 | | |
85 | 86 | | |
86 | 87 | | |
| |||
0 commit comments