macos: remove the ability to bind fn/globe

This was recently introduced a few days ago. Unfortunately, this doesn't
work as expected. The "function" modifier is not actually the fn key
but used by macOS to represent a variety of "functional" key presses.
This breaks other bindings such as #2411.

I can't find a source on the internet that reliably tells me how we
can detect fn key presses, but I do find a number of sources that tell
us we can't.
This commit is contained in:
Mitchell Hashimoto
2024-10-07 14:34:38 -10:00
parent 3e3c666244
commit ed2cd6d436
9 changed files with 13 additions and 42 deletions

View File

@@ -133,7 +133,6 @@ fn prettyPrint(alloc: Allocator, keybinds: Config.Keybinds) !u8 {
const ctrl_style: vaxis.Style = .{ .fg = .{ .index = 2 } };
const alt_style: vaxis.Style = .{ .fg = .{ .index = 3 } };
const shift_style: vaxis.Style = .{ .fg = .{ .index = 4 } };
const fn_style: vaxis.Style = .{ .fg = .{ .index = 5 } };
var longest_col: usize = 0;
@@ -143,10 +142,6 @@ fn prettyPrint(alloc: Allocator, keybinds: Config.Keybinds) !u8 {
var result: vaxis.Window.PrintResult = .{ .col = 0, .row = 0, .overflow = false };
const trigger = bind.trigger;
if (trigger.mods.function) {
result = try win.printSegment(.{ .text = "fn ", .style = fn_style }, .{ .col_offset = result.col });
result = try win.printSegment(.{ .text = " + " }, .{ .col_offset = result.col });
}
if (trigger.mods.super) {
result = try win.printSegment(.{ .text = "super", .style = super_style }, .{ .col_offset = result.col });
result = try win.printSegment(.{ .text = " + " }, .{ .col_offset = result.col });

View File

@@ -670,22 +670,13 @@ class: ?[:0]const u8 = null,
/// translated by any system keyboard layouts. Example: "ctrl+physical:a"
///
/// Valid modifiers are `shift`, `ctrl` (alias: `control`), `alt` (alias: `opt`,
/// `option`), `super` (alias: `cmd`, `command`), and `function` (alias: `fn`,
/// `globe`). You may use the modifier or the alias. When debugging keybinds,
/// the non-aliased modifier will always be used in output.
/// `option`), and `super` (alias: `cmd`, `command`). You may use the modifier
/// or the alias. When debugging keybinds, the non-aliased modifier will always
/// be used in output.
///
/// Some notes about the `function` modifier:
///
/// * It is only available on macOS.
/// * It is used by many system shortcuts and Ghostty is not able to
/// override these shortcuts. If a system shortcut is triggered, the
/// system shortcut will take precedence.
/// * If you have multiple keyboard layouts active and don't press the
/// combination fast enough, macOS will switch to the next keyboard
/// layout.
/// * Menu items on macOS cannot be bound to the `function` modifier,
/// so this modifier will work with Ghostty but will not be visible
/// in the menu.
/// Note that the fn or "globe" key on keyboards are not supported as a
/// modifier. This is a limitation of the operating systems and GUI toolkits
/// that Ghostty uses.
///
/// You may also specify multiple triggers separated by `>` to require a
/// sequence of triggers to activate the action. For example,

View File

@@ -901,8 +901,6 @@ pub const Trigger = struct {
.{ "opt", "alt" },
.{ "option", "alt" },
.{ "control", "ctrl" },
.{ "fn", "function" },
.{ "globe", "function" },
};
inline for (alias_mods) |pair| {
if (std.mem.eql(u8, part, pair[0])) {

View File

@@ -35,8 +35,6 @@ pub fn encode(
self: *const KeyEncoder,
buf: []u8,
) ![]const u8 {
// log.debug("encode {}", .{self.*});
if (self.kitty_flags.int() != 0) return try self.kitty(buf);
return try self.legacy(buf);
}

View File

@@ -89,11 +89,10 @@ pub const Mods = packed struct(Mods.Backing) {
ctrl: bool = false,
alt: bool = false,
super: bool = false,
function: bool = false,
caps_lock: bool = false,
num_lock: bool = false,
sides: side = .{},
_padding: u5 = 0,
_padding: u6 = 0,
/// Tracks the side that is active for any given modifier. Note
/// that this doesn't confirm a modifier is pressed; you must check
@@ -131,7 +130,6 @@ pub const Mods = packed struct(Mods.Backing) {
.ctrl = self.ctrl,
.alt = self.alt,
.super = self.super,
.function = self.function,
};
}