diff --git a/src/tui/tui.test.ts b/src/tui/tui.test.ts index 5a573090239..b9d41065472 100644 --- a/src/tui/tui.test.ts +++ b/src/tui/tui.test.ts @@ -210,6 +210,14 @@ describe("createBackspaceDeduper", () => { expect(dedupe("\x7f")).toBe("\x7f"); }); + it("treats ASCII BS as backspace when it is the first event", () => { + const { dedupe, advance } = createTimedDedupe(); + + expect(dedupe("\x08")).toBe("\x08"); + advance(1); + expect(dedupe("\x7f")).toBe(""); + }); + it("never suppresses non-backspace keys", () => { const dedupe = createBackspaceDeduper(); expect(dedupe("a")).toBe("a"); diff --git a/src/tui/tui.ts b/src/tui/tui.ts index a36a78bcd45..a382d3b0765 100644 --- a/src/tui/tui.ts +++ b/src/tui/tui.ts @@ -209,7 +209,7 @@ export function createBackspaceDeduper(params?: { dedupeWindowMs?: number; now?: let lastBackspaceAt = -1; return (data: string): string => { - if (!matchesKey(data, Key.backspace)) { + if (data !== "\x08" && !matchesKey(data, Key.backspace)) { return data; } const ts = now();