mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-16 08:46:08 +03:00
input: add test for backspace change
This commit is contained in:
@ -245,10 +245,6 @@ fn legacy(
|
|||||||
// If we're in a dead key state then we never emit a sequence.
|
// If we're in a dead key state then we never emit a sequence.
|
||||||
if (self.event.composing) return "";
|
if (self.event.composing) return "";
|
||||||
|
|
||||||
// When pressed backspace and have UTF-8 text, do not emit sequence.
|
|
||||||
// This prevents backspace emitted twice on macOS with korean input method.
|
|
||||||
if (self.event.key == .backspace and self.event.utf8.len > 0) return "";
|
|
||||||
|
|
||||||
// If we match a PC style function key then that is our result.
|
// If we match a PC style function key then that is our result.
|
||||||
if (pcStyleFunctionKey(
|
if (pcStyleFunctionKey(
|
||||||
self.event.key,
|
self.event.key,
|
||||||
@ -258,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);
|
||||||
@ -1648,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 = .{
|
||||||
|
Reference in New Issue
Block a user