diff --git a/include/ghostty.h b/include/ghostty.h index 354da33d0..42cfc5a42 100644 --- a/include/ghostty.h +++ b/include/ghostty.h @@ -88,13 +88,12 @@ typedef enum { GHOSTTY_MODS_CTRL = 1 << 1, GHOSTTY_MODS_ALT = 1 << 2, GHOSTTY_MODS_SUPER = 1 << 3, - GHOSTTY_MODS_FN = 1 << 4, - GHOSTTY_MODS_CAPS = 1 << 5, - GHOSTTY_MODS_NUM = 1 << 6, - GHOSTTY_MODS_SHIFT_RIGHT = 1 << 7, - GHOSTTY_MODS_CTRL_RIGHT = 1 << 8, - GHOSTTY_MODS_ALT_RIGHT = 1 << 9, - GHOSTTY_MODS_SUPER_RIGHT = 1 << 10, + GHOSTTY_MODS_CAPS = 1 << 4, + GHOSTTY_MODS_NUM = 1 << 5, + GHOSTTY_MODS_SHIFT_RIGHT = 1 << 6, + GHOSTTY_MODS_CTRL_RIGHT = 1 << 7, + GHOSTTY_MODS_ALT_RIGHT = 1 << 8, + GHOSTTY_MODS_SUPER_RIGHT = 1 << 9, } ghostty_input_mods_e; typedef enum { diff --git a/macos/Sources/App/macOS/AppDelegate.swift b/macos/Sources/App/macOS/AppDelegate.swift index d6af4d296..8c1f392d6 100644 --- a/macos/Sources/App/macOS/AppDelegate.swift +++ b/macos/Sources/App/macOS/AppDelegate.swift @@ -354,11 +354,6 @@ class AppDelegate: NSObject, return } - if (equiv.modifiers.contains(.function)) { - // NSMenuItem key equivalent cannot contain function modifiers. - return - } - menu.keyEquivalent = equiv.key menu.keyEquivalentModifierMask = equiv.modifiers } diff --git a/macos/Sources/Ghostty/Ghostty.Input.swift b/macos/Sources/Ghostty/Ghostty.Input.swift index 89013cab8..d7fd96f12 100644 --- a/macos/Sources/Ghostty/Ghostty.Input.swift +++ b/macos/Sources/Ghostty/Ghostty.Input.swift @@ -14,7 +14,6 @@ extension Ghostty { if (mods.rawValue & GHOSTTY_MODS_CTRL.rawValue != 0) { flags.insert(.control) } if (mods.rawValue & GHOSTTY_MODS_ALT.rawValue != 0) { flags.insert(.option) } if (mods.rawValue & GHOSTTY_MODS_SUPER.rawValue != 0) { flags.insert(.command) } - if (mods.rawValue & GHOSTTY_MODS_FN.rawValue != 0) { flags.insert(.function) } return flags } @@ -26,7 +25,6 @@ extension Ghostty { if (flags.contains(.control)) { mods |= GHOSTTY_MODS_CTRL.rawValue } if (flags.contains(.option)) { mods |= GHOSTTY_MODS_ALT.rawValue } if (flags.contains(.command)) { mods |= GHOSTTY_MODS_SUPER.rawValue } - if (flags.contains(.function)) { mods |= GHOSTTY_MODS_FN.rawValue } if (flags.contains(.capsLock)) { mods |= GHOSTTY_MODS_CAPS.rawValue } // Handle sided input. We can't tell that both are pressed in the diff --git a/macos/Sources/Ghostty/SurfaceView_AppKit.swift b/macos/Sources/Ghostty/SurfaceView_AppKit.swift index 8148118fb..d64c2fead 100644 --- a/macos/Sources/Ghostty/SurfaceView_AppKit.swift +++ b/macos/Sources/Ghostty/SurfaceView_AppKit.swift @@ -743,7 +743,6 @@ extension Ghostty { case 0x3B, 0x3E: mod = GHOSTTY_MODS_CTRL.rawValue case 0x3A, 0x3D: mod = GHOSTTY_MODS_ALT.rawValue case 0x37, 0x36: mod = GHOSTTY_MODS_SUPER.rawValue - case 0x3F: mod = GHOSTTY_MODS_FN.rawValue default: return } diff --git a/src/cli/list_keybinds.zig b/src/cli/list_keybinds.zig index 5cfaeef02..9e734d1ec 100644 --- a/src/cli/list_keybinds.zig +++ b/src/cli/list_keybinds.zig @@ -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 }); diff --git a/src/config/Config.zig b/src/config/Config.zig index a4b1e0a21..b8a8b43ac 100644 --- a/src/config/Config.zig +++ b/src/config/Config.zig @@ -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, diff --git a/src/input/Binding.zig b/src/input/Binding.zig index 1d0e26b9e..dead84c9f 100644 --- a/src/input/Binding.zig +++ b/src/input/Binding.zig @@ -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])) { diff --git a/src/input/KeyEncoder.zig b/src/input/KeyEncoder.zig index 9236eacec..25d85e78d 100644 --- a/src/input/KeyEncoder.zig +++ b/src/input/KeyEncoder.zig @@ -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); } diff --git a/src/input/key.zig b/src/input/key.zig index 30e61334f..8fc7c6f20 100644 --- a/src/input/key.zig +++ b/src/input/key.zig @@ -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, }; }