mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-08-31 08:13:11 +03:00
fix(tui): preserve shell after Ctrl+C (#5502)
This commit is contained in:
+4
-2
@@ -2379,7 +2379,7 @@ describe("NanobotTui layout", () => {
|
|||||||
expect(exited).toEqual(["chat"])
|
expect(exited).toEqual(["chat"])
|
||||||
})
|
})
|
||||||
|
|
||||||
test("exits immediately when Ctrl+C is pressed on an idle empty composer", async () => {
|
test("exits after Ctrl+C input dispatch completes on an idle empty composer", async () => {
|
||||||
setup = await createRenderer({ width: 72, height: 20, screenMode: "alternate-screen" })
|
setup = await createRenderer({ width: 72, height: 20, screenMode: "alternate-screen" })
|
||||||
let closed = false
|
let closed = false
|
||||||
const transport = client()
|
const transport = client()
|
||||||
@@ -2393,7 +2393,9 @@ describe("NanobotTui layout", () => {
|
|||||||
|
|
||||||
setup.mockInput.pressCtrlC()
|
setup.mockInput.pressCtrlC()
|
||||||
|
|
||||||
expect(closed).toBe(true)
|
expect(closed).toBe(false)
|
||||||
|
expect(setup.renderer.isDestroyed).toBe(false)
|
||||||
|
await waitUntil(() => closed)
|
||||||
expect(setup.renderer.isDestroyed).toBe(true)
|
expect(setup.renderer.isDestroyed).toBe(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -1653,7 +1653,10 @@ export class NanobotTui {
|
|||||||
this.clearComposer()
|
this.clearComposer()
|
||||||
this.status.content = this.readyStatus()
|
this.status.content = this.readyStatus()
|
||||||
} else {
|
} else {
|
||||||
this.quit()
|
// Finish dispatching the raw ETX before destroy() restores terminal input.
|
||||||
|
// Releasing the terminal from inside this callback can leak the same Ctrl+C
|
||||||
|
// to the parent shell on Windows terminals.
|
||||||
|
setTimeout(() => this.quit(), 0)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user