diff --git a/packages/native/src/embedded-terminal/ghostty.zig b/packages/native/src/embedded-terminal/ghostty.zig index f6700c13..84e03ab4 100644 --- a/packages/native/src/embedded-terminal/ghostty.zig +++ b/packages/native/src/embedded-terminal/ghostty.zig @@ -50,6 +50,7 @@ pub const Mouse = struct { } }; +pub const KeyEncodeOptions = vt.input.KeyEncodeOptions; pub const MouseEncodeOptions = vt.input.MouseEncodeOptions; pub const encodeKey = vt.input.encodeKey; pub const encodeMouse = vt.input.encodeMouse; diff --git a/packages/native/src/embedded-terminal/main.zig b/packages/native/src/embedded-terminal/main.zig index 8eb9e8e5..5c3f1e52 100644 --- a/packages/native/src/embedded-terminal/main.zig +++ b/packages/native/src/embedded-terminal/main.zig @@ -212,7 +212,10 @@ pub const EmbeddedTerminal = struct { pub fn encodeKey(self: *EmbeddedTerminal, key: ghostty.Key) Error![]u8 { var output: std.Io.Writer.Allocating = .init(self.allocator); errdefer output.deinit(); - ghostty.encodeKey(&output.writer, key.event(), .fromTerminal(&self.terminal)) catch return error.OutOfMemory; + var options: ghostty.KeyEncodeOptions = .fromTerminal(&self.terminal); + // The host terminal has already applied its Option setting, so an Alt bit here means Alt. + options.macos_option_as_alt = .true; + ghostty.encodeKey(&output.writer, key.event(), options) catch return error.OutOfMemory; return output.toOwnedSlice(); }