From e7c11f7d133180447ff0d96b9a92efc3f67b93a8 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 24 Aug 2023 21:24:41 -0700 Subject: [PATCH] input: kitty should not encode modifier-only key unless "report all" --- src/input/KeyEncoder.zig | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/input/KeyEncoder.zig b/src/input/KeyEncoder.zig index 0bcb198fa..cc0b129ff 100644 --- a/src/input/KeyEncoder.zig +++ b/src/input/KeyEncoder.zig @@ -123,6 +123,10 @@ fn kitty( } const entry = entry_ orelse return ""; + + // If this is just a modifier we require "report all" to send the sequence. + if (entry.modifier and !self.kitty_flags.report_all) return ""; + const seq: KittySequence = seq: { var seq: KittySequence = .{ .key = entry.code, @@ -802,7 +806,7 @@ test "kitty: composing with modifier" { .mods = .{ .shift = true }, .composing = true, }, - .kitty_flags = .{ .disambiguate = true }, + .kitty_flags = .{ .disambiguate = true, .report_all = true }, }; const actual = try enc.kitty(&buf); @@ -883,6 +887,38 @@ test "kitty: shift+tab" { try testing.expectEqualStrings("\x1b[9;2u", actual); } +test "kitty: left shift" { + var buf: [128]u8 = undefined; + var enc: KeyEncoder = .{ + .event = .{ + .key = .left_shift, + .mods = .{}, + .utf8 = "", + }, + + .kitty_flags = .{ .disambiguate = true, .report_alternates = true }, + }; + + const actual = try enc.kitty(&buf); + try testing.expectEqualStrings("", actual); +} + +test "kitty: left shift with report all" { + var buf: [128]u8 = undefined; + var enc: KeyEncoder = .{ + .event = .{ + .key = .left_shift, + .mods = .{}, + .utf8 = "", + }, + + .kitty_flags = .{ .disambiguate = true, .report_all = true }, + }; + + const actual = try enc.kitty(&buf); + try testing.expectEqualStrings("\x1b[57441u", actual); +} + test "legacy: ctrl+alt+c" { var buf: [128]u8 = undefined; var enc: KeyEncoder = .{