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,