diff --git a/macos/Sources/Features/Terminal/TerminalController.swift b/macos/Sources/Features/Terminal/TerminalController.swift index 81b86a215..3589e1a7b 100644 --- a/macos/Sources/Features/Terminal/TerminalController.swift +++ b/macos/Sources/Features/Terminal/TerminalController.swift @@ -118,7 +118,8 @@ class TerminalController: NSWindowController, NSWindowDelegate, /// Update the accessory view of each tab according to the keyboard /// shortcut that activates it (if any). This is called when the key window - /// changes and when a window is closed. + /// changes, when a window is closed, and when tabs are reordered + /// with the mouse. func relabelTabs() { // Reset this to false. It'll be set back to true later. tabListenForFrame = false @@ -128,12 +129,20 @@ class TerminalController: NSWindowController, NSWindowDelegate, // We only listen for frame changes if we have more than 1 window, // otherwise the accessory view doesn't matter. tabListenForFrame = windows.count > 1 + + for (tab, window) in zip(1..., windows) { + // We need to clear any windows beyond this because they have had + // a keyEquivalent set previously. + guard tab <= 9 else { + window.keyEquivalent = "" + continue + } - for (index, window) in windows.enumerated().prefix(9) { - let action = "goto_tab:\(index + 1)" - + let action = "goto_tab:\(tab)" if let equiv = ghostty.config.keyEquivalent(for: action) { window.keyEquivalent = "\(equiv)" + } else { + window.keyEquivalent = "" } } } diff --git a/pkg/fontconfig/common.zig b/pkg/fontconfig/common.zig index fea613423..cdafd1e95 100644 --- a/pkg/fontconfig/common.zig +++ b/pkg/fontconfig/common.zig @@ -23,6 +23,13 @@ pub const Slant = enum(c_uint) { oblique = c.FC_SLANT_OBLIQUE, }; +pub const Spacing = enum(c_uint) { + proportional = c.FC_PROPORTIONAL, + dual = c.FC_DUAL, + mono = c.FC_MONO, + charcell = c.FC_CHARCELL, +}; + pub const Property = enum { family, style, diff --git a/src/font/discovery.zig b/src/font/discovery.zig index c9176adc6..aea5a31ef 100644 --- a/src/font/discovery.zig +++ b/src/font/discovery.zig @@ -139,6 +139,15 @@ pub const Descriptor = struct { false, )); + // For fontconfig, we always add monospace in the pattern. Since + // fontconfig sorts by closeness to the pattern, this doesn't fully + // exclude non-monospace but helps prefer it. + assert(pat.add( + .spacing, + .{ .integer = @intFromEnum(fontconfig.Spacing.mono) }, + false, + )); + return pat; } @@ -277,7 +286,7 @@ pub const Fontconfig = struct { if (res.result != .match) return error.FontConfigFailed; errdefer res.fs.destroy(); - return DiscoverIterator{ + return .{ .config = self.fc_config, .pattern = pat, .set = res.fs,