mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-08-02 14:57:31 +03:00
Merge remote-tracking branch 'upstream/main' into titlebar-unzoom-button
This commit is contained in:
@ -529,6 +529,13 @@ $ sudo apt install libgtk-4-dev libadwaita-1-dev git
|
||||
> Ubuntu 23.10 is 6.5.0 which has a bug which
|
||||
> [causes zig to fail its hash check for packages](https://github.com/ziglang/zig/issues/17282).
|
||||
|
||||
> [!WARNING]
|
||||
>
|
||||
> GTK 4.14 on Wayland has a bug which may cause an immediate crash.
|
||||
> There is an [open issue](https://gitlab.gnome.org/GNOME/gtk/-/issues/6589/note_2072039)
|
||||
> to track this GTK bug. You can workaround this issue by running ghostty with
|
||||
> `GDK_DEBUG=gl-disable-gles ghostty`
|
||||
|
||||
On Arch Linux, use
|
||||
|
||||
```
|
||||
|
@ -374,8 +374,10 @@ class AppDelegate: NSObject,
|
||||
syncMenuShortcuts()
|
||||
terminalManager.relabelAllTabs()
|
||||
|
||||
// Config could change window appearance
|
||||
syncAppearance()
|
||||
// Config could change window appearance. We wrap this in an async queue because when
|
||||
// this is called as part of application launch it can deadlock with an internal
|
||||
// AppKit mutex on the appearance.
|
||||
DispatchQueue.main.async { self.syncAppearance() }
|
||||
|
||||
// Update all of our windows
|
||||
terminalManager.windows.forEach { window in
|
||||
|
@ -254,20 +254,23 @@ fn legacy(
|
||||
self.ignore_keypad_with_numlock,
|
||||
self.modify_other_keys_state_2,
|
||||
)) |sequence| pc_style: {
|
||||
// If we're pressing enter or escape and have UTF-8 text, we probably
|
||||
// are clearing a dead key state. This happens specifically on macOS.
|
||||
// "Clearing" a dead key state may or may not commit the dead key
|
||||
// state; this differs by language:
|
||||
// If we have UTF-8 text, then we never emit PC style function
|
||||
// keys. Many function keys (escape, enter, backspace) have
|
||||
// a specific meaning when dead keys are active and so we don't
|
||||
// want to send that to the terminal. Examples:
|
||||
//
|
||||
// - Japanese clears and does not write the characters.
|
||||
// - Korean clears and writes the characters.
|
||||
// - Japanese: escape clears the dead key state
|
||||
// - 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.key == .enter or
|
||||
self.event.key == .escape) and
|
||||
self.event.utf8.len > 0)
|
||||
{
|
||||
break :pc_style;
|
||||
if (self.event.utf8.len > 0) {
|
||||
switch (self.event.key) {
|
||||
else => {},
|
||||
.enter,
|
||||
.escape,
|
||||
.backspace,
|
||||
=> break :pc_style,
|
||||
}
|
||||
}
|
||||
|
||||
return copyToBuf(buf, sequence);
|
||||
@ -1644,6 +1647,20 @@ test "kitty: keypad number" {
|
||||
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)" {
|
||||
var buf: [128]u8 = undefined;
|
||||
var enc: KeyEncoder = .{
|
||||
|
Reference in New Issue
Block a user