authorgravatar for 102943475+aoright@users.noreply.github.comaoright <102943475+aoright@users.noreply.github.com> 2026-08-15 20:02:24+08:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-08-15 12:02:24+00:00
logb0de3857775b7d1407372cde031326e15a9d4119
treeb3e748f84ba0621ae872d24cc2ebb50ebdb20069
parentc7b14a8666dc44ee426f8d139e0493af9fe4b6db
signature Signed by PGP key B5690EEEBB952194

fix(web): support Shift+Insert terminal paste (#5982)


2 files changed, 21 insertions(+), 1 deletions(-)

apps/web/src/terminal/ghostty/surface.test.ts+16
...@@ -253,6 +253,22 @@ describe("isTerminalPasteShortcut", () => {...@@ -253,6 +253,22 @@ describe("isTerminalPasteShortcut", () => {
253 true,253 true,
254 );254 );
255 });255 });
256
257 it("supports the conventional Shift+Insert paste shortcut", () => {
258 expect(isTerminalPasteShortcut(event({ key: "Insert", shiftKey: true }), "Linux x86_64")).toBe(
259 true,
260 );
261 expect(isTerminalPasteShortcut(event({ key: "Insert" }), "Linux x86_64")).toBe(false);
262 expect(
263 isTerminalPasteShortcut(
264 event({ key: "Insert", ctrlKey: true, shiftKey: true }),
265 "Linux x86_64",
266 ),
267 ).toBe(false);
268 expect(isTerminalPasteShortcut(event({ key: "Insert", shiftKey: true }), "MacIntel")).toBe(
269 false,
270 );
271 });
256});272});
257273
258describe("isTerminalCompositionCommitInput", () => {274describe("isTerminalCompositionCommitInput", () => {
apps/web/src/terminal/ghostty/surface.ts+5-1
...@@ -340,7 +340,11 @@ export function isTerminalPasteShortcut(...@@ -340,7 +340,11 @@ export function isTerminalPasteShortcut(
340 event: Pick<KeyboardEvent, "ctrlKey" | "key" | "metaKey" | "shiftKey">,340 event: Pick<KeyboardEvent, "ctrlKey" | "key" | "metaKey" | "shiftKey">,
341 platform = navigator.platform,341 platform = navigator.platform,
342) {342) {
343 if (event.key.toLowerCase() !== "v") return false;343 const key = event.key.toLowerCase();
344 if (key === "insert" && !isMacPlatform(platform)) {
345 return event.shiftKey && !event.ctrlKey && !event.metaKey;
346 }
347 if (key !== "v") return false;
344 return isMacPlatform(platform) ? event.metaKey : event.ctrlKey && event.shiftKey;348 return isMacPlatform(platform) ? event.metaKey : event.ctrlKey && event.shiftKey;
345}349}
346350