Merge pull request #1659 from aca/aca-escape

input: do not emit sequence on <BS> when their's UTF-8 text
This commit is contained in:
Mitchell Hashimoto
2024-04-05 08:25:39 -07:00
committed by GitHub

View File

@ -254,20 +254,23 @@ fn legacy(
self.ignore_keypad_with_numlock, self.ignore_keypad_with_numlock,
self.modify_other_keys_state_2, self.modify_other_keys_state_2,
)) |sequence| pc_style: { )) |sequence| pc_style: {
// If we're pressing enter or escape and have UTF-8 text, we probably // If we have UTF-8 text, then we never emit PC style function
// are clearing a dead key state. This happens specifically on macOS. // keys. Many function keys (escape, enter, backspace) have
// "Clearing" a dead key state may or may not commit the dead key // a specific meaning when dead keys are active and so we don't
// state; this differs by language: // want to send that to the terminal. Examples:
// //
// - Japanese clears and does not write the characters. // - Japanese: escape clears the dead key state
// - Korean clears and writes the characters. // - Korean: escape commits the dead key state
// - Korean: backspace should delete a single preedit char
// //
// We have a unit test for this. if (self.event.utf8.len > 0) {
if ((self.event.key == .enter or switch (self.event.key) {
self.event.key == .escape) and else => {},
self.event.utf8.len > 0) .enter,
{ .escape,
break :pc_style; .backspace,
=> break :pc_style,
}
} }
return copyToBuf(buf, sequence); return copyToBuf(buf, sequence);
@ -1644,6 +1647,20 @@ test "kitty: keypad number" {
try testing.expectEqualStrings("[57400;;49u", actual[1..]); try testing.expectEqualStrings("[57400;;49u", actual[1..]);
} }
test "legacy: backspace with utf8 (dead key state)" {
var buf: [128]u8 = undefined;
var enc: KeyEncoder = .{
.event = .{
.key = .backspace,
.utf8 = "A",
.unshifted_codepoint = 0x0D,
},
};
const actual = try enc.legacy(&buf);
try testing.expectEqualStrings("A", actual);
}
test "legacy: enter with utf8 (dead key state)" { test "legacy: enter with utf8 (dead key state)" {
var buf: [128]u8 = undefined; var buf: [128]u8 = undefined;
var enc: KeyEncoder = .{ var enc: KeyEncoder = .{