fix(tui): detect Apple Terminal Shift+Enter

This commit is contained in:
Armin Ronacher
2026-05-23 15:09:01 +02:00
parent 4a98f748bb
commit c5181a266e
10 changed files with 204 additions and 3 deletions

View File

@@ -1,6 +1,45 @@
import assert from "node:assert";
import { describe, it } from "node:test";
import { ProcessTerminal } from "../src/terminal.ts";
import { isNativeModifierPressed } from "../src/native-modifiers.ts";
import { normalizeAppleTerminalInput, ProcessTerminal } from "../src/terminal.ts";
function withEnv(name: string, value: string | undefined, fn: () => void): void {
const previous = process.env[name];
if (value === undefined) delete process.env[name];
else process.env[name] = value;
try {
fn();
} finally {
if (previous === undefined) delete process.env[name];
else process.env[name] = previous;
}
}
describe("normalizeAppleTerminalInput", () => {
it("rewrites Apple Terminal Return to CSI-u Shift+Enter when Shift is pressed", () => {
assert.equal(normalizeAppleTerminalInput("\r", true, true), "\x1b[13;2u");
});
it("leaves Apple Terminal Return unchanged when Shift is not pressed", () => {
assert.equal(normalizeAppleTerminalInput("\r", true, false), "\r");
});
it("leaves non-Apple Terminal Return unchanged when Shift is pressed", () => {
assert.equal(normalizeAppleTerminalInput("\r", false, true), "\r");
});
it("leaves non-Return input unchanged", () => {
assert.equal(normalizeAppleTerminalInput("\x1b[13;2u", true, true), "\x1b[13;2u");
assert.equal(normalizeAppleTerminalInput("a", true, true), "a");
});
it("treats native helper failure as Shift not pressed", () => {
withEnv("PI_TUI_DISABLE_NATIVE_MODIFIERS", "1", () => {
assert.equal(isNativeModifierPressed("shift"), false);
assert.equal(normalizeAppleTerminalInput("\r", true, isNativeModifierPressed("shift")), "\r");
});
});
});
describe("ProcessTerminal dimensions", () => {
it("falls back to COLUMNS and LINES before default dimensions", () => {