mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 15:56:13 +03:00
Merge pull request #558 from mitchellh/kitty-del
input: 0x7F is a control character, use helper
This commit is contained in:
@ -115,7 +115,7 @@ fn kitty(
|
||||
// the real world issue is usually control characters.
|
||||
const view = try std.unicode.Utf8View.init(self.event.utf8);
|
||||
var it = view.iterator();
|
||||
while (it.nextCodepoint()) |cp| if (cp < 0x20) break :plain_text;
|
||||
while (it.nextCodepoint()) |cp| if (isControl(cp)) break :plain_text;
|
||||
|
||||
return try copyToBuf(buf, self.event.utf8);
|
||||
}
|
||||
@ -147,7 +147,7 @@ fn kitty(
|
||||
var it = view.iterator();
|
||||
const cp = it.nextCodepoint() orelse break :alternates;
|
||||
if (it.nextCodepoint() != null) break :alternates;
|
||||
if (cp != seq.key and cp >= 0x20 and cp != 0x7F) {
|
||||
if (cp != seq.key and !isControl(cp)) {
|
||||
seq.alternates = &.{cp};
|
||||
}
|
||||
}
|
||||
@ -415,6 +415,11 @@ fn ctrlSeq(keyval: key.Key, mods: key.Mods) ?u8 {
|
||||
};
|
||||
}
|
||||
|
||||
/// Returns true if this is an ASCII control character, matches libc implementation.
|
||||
fn isControl(cp: u21) bool {
|
||||
return cp < 0x20 or cp == 0x7F;
|
||||
}
|
||||
|
||||
/// This is the bitmask for fixterm CSI u modifiers.
|
||||
const CsiUMods = packed struct(u3) {
|
||||
shift: bool = false,
|
||||
@ -592,7 +597,7 @@ const KittySequence = struct {
|
||||
var count: usize = 0;
|
||||
while (it.nextCodepoint()) |cp| {
|
||||
// If the codepoint is non-printable ASCII character, skip.
|
||||
if (cp < 0x20 or cp == 0x7F) continue;
|
||||
if (isControl(cp)) continue;
|
||||
|
||||
// We need to add our ";". We need to add two if we didn't emit
|
||||
// the modifier section. We only do this initially.
|
||||
@ -814,6 +819,18 @@ test "kitty: enter, backspace, tab" {
|
||||
}
|
||||
}
|
||||
|
||||
test "kitty: delete" {
|
||||
var buf: [128]u8 = undefined;
|
||||
{
|
||||
var enc: KeyEncoder = .{
|
||||
.event = .{ .key = .delete, .mods = .{}, .utf8 = "\x7F" },
|
||||
.kitty_flags = .{ .disambiguate = true },
|
||||
};
|
||||
const actual = try enc.kitty(&buf);
|
||||
try testing.expectEqualStrings("\x1b[3~", actual);
|
||||
}
|
||||
}
|
||||
|
||||
test "kitty: composing with no modifier" {
|
||||
var buf: [128]u8 = undefined;
|
||||
var enc: KeyEncoder = .{
|
||||
|
Reference in New Issue
Block a user