diff options
| author | Romain Gonçalves <me@rgoncalves.se> | 2024-05-12 21:19:02 +0200 | 
|---|---|---|
| committer | Romain Gonçalves <me@rgoncalves.se> | 2024-05-12 21:20:51 +0200 | 
| commit | 568edcf51d216dfe1e387a7038cd191761ab299f (patch) | |
| tree | e62e703c57b09051d8b07a0afbac78647116c80d /patches | |
| parent | b9d62df040a41a3b192a71932beaea5bd2136c62 (diff) | |
| download | st-568edcf51d216dfe1e387a7038cd191761ab299f.tar.gz | |
Diffstat (limited to 'patches')
| -rw-r--r-- | patches/st-font2-20190416-ba72400.diff | 167 | 
1 files changed, 167 insertions, 0 deletions
| diff --git a/patches/st-font2-20190416-ba72400.diff b/patches/st-font2-20190416-ba72400.diff new file mode 100644 index 0000000..c7a2950 --- /dev/null +++ b/patches/st-font2-20190416-ba72400.diff @@ -0,0 +1,167 @@ +From ba724004c6a368e452114f7dc147a9978fe0f3b4 Mon Sep 17 00:00:00 2001 +From: Kirill Bugaev <kirill.bugaev87@gmail.com> +Date: Tue, 16 Apr 2019 04:31:30 +0800 +Subject: [PATCH] This patch allows to add spare font besides default. Some + glyphs can be not present in default font. For this glyphs st uses + font-config and try to find them in font cache first. This patch append fonts + defined in font2 variable to the beginning of font cache. So they will be + used first for glyphs that absent in default font. + +--- + config.def.h |   6 +++ + x.c          | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 107 insertions(+) + +diff --git a/config.def.h b/config.def.h +index 482901e..676719e 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -6,6 +6,12 @@ +  * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html +  */ + static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; ++/* Spare fonts */ ++static char *font2[] = { ++/*	"Inconsolata for Powerline:pixelsize=12:antialias=true:autohint=true", */ ++/*	"Hack Nerd Font Mono:pixelsize=11:antialias=true:autohint=true", */ ++}; ++ + static int borderpx = 2; +  + /* +diff --git a/x.c b/x.c +index 5828a3b..d37e59d 100644 +--- a/x.c ++++ b/x.c +@@ -149,6 +149,8 @@ static void xhints(void); + static int xloadcolor(int, const char *, Color *); + static int xloadfont(Font *, FcPattern *); + static void xloadfonts(char *, double); ++static int xloadsparefont(FcPattern *, int); ++static void xloadsparefonts(void); + static void xunloadfont(Font *); + static void xunloadfonts(void); + static void xsetenv(void); +@@ -296,6 +298,7 @@ zoomabs(const Arg *arg) + { + 	xunloadfonts(); + 	xloadfonts(usedfont, arg->f); ++	xloadsparefonts(); + 	cresize(0, 0); + 	redraw(); + 	xhints(); +@@ -977,6 +980,101 @@ xloadfonts(char *fontstr, double fontsize) + 	FcPatternDestroy(pattern); + } +  ++int ++xloadsparefont(FcPattern *pattern, int flags) ++{ ++	FcPattern *match; ++	FcResult result; ++	 ++	match = FcFontMatch(NULL, pattern, &result); ++	if (!match) { ++		return 1; ++	} ++ ++	if (!(frc[frclen].font = XftFontOpenPattern(xw.dpy, match))) { ++		FcPatternDestroy(match); ++		return 1; ++	} ++ ++	frc[frclen].flags = flags; ++	/* Believe U+0000 glyph will present in each default font */ ++	frc[frclen].unicodep = 0; ++	frclen++; ++ ++	return 0; ++} ++ ++void ++xloadsparefonts(void) ++{ ++	FcPattern *pattern; ++	double sizeshift, fontval; ++	int fc; ++	char **fp; ++ ++	if (frclen != 0) ++		die("can't embed spare fonts. cache isn't empty"); ++ ++	/* Calculate count of spare fonts */ ++	fc = sizeof(font2) / sizeof(*font2); ++	if (fc == 0) ++		return; ++ ++	/* Allocate memory for cache entries. */ ++	if (frccap < 4 * fc) { ++		frccap += 4 * fc - frccap; ++		frc = xrealloc(frc, frccap * sizeof(Fontcache)); ++	} ++ ++	for (fp = font2; fp - font2 < fc; ++fp) { ++	 ++		if (**fp == '-') ++			pattern = XftXlfdParse(*fp, False, False); ++		else ++			pattern = FcNameParse((FcChar8 *)*fp); ++	 ++		if (!pattern) ++			die("can't open spare font %s\n", *fp); ++	   		 ++		if (defaultfontsize > 0) { ++			sizeshift = usedfontsize - defaultfontsize; ++			if (sizeshift != 0 && ++					FcPatternGetDouble(pattern, FC_PIXEL_SIZE, 0, &fontval) == ++					FcResultMatch) {	 ++				fontval += sizeshift; ++				FcPatternDel(pattern, FC_PIXEL_SIZE); ++				FcPatternDel(pattern, FC_SIZE); ++				FcPatternAddDouble(pattern, FC_PIXEL_SIZE, fontval); ++			} ++		} ++	 ++		FcPatternAddBool(pattern, FC_SCALABLE, 1); ++	 ++		FcConfigSubstitute(NULL, pattern, FcMatchPattern); ++		XftDefaultSubstitute(xw.dpy, xw.scr, pattern); ++	 ++		if (xloadsparefont(pattern, FRC_NORMAL)) ++			die("can't open spare font %s\n", *fp); ++	 ++		FcPatternDel(pattern, FC_SLANT); ++		FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); ++		if (xloadsparefont(pattern, FRC_ITALIC)) ++			die("can't open spare font %s\n", *fp); ++			 ++		FcPatternDel(pattern, FC_WEIGHT); ++		FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); ++		if (xloadsparefont(pattern, FRC_ITALICBOLD)) ++			die("can't open spare font %s\n", *fp); ++	 ++		FcPatternDel(pattern, FC_SLANT); ++		FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN); ++		if (xloadsparefont(pattern, FRC_BOLD)) ++			die("can't open spare font %s\n", *fp); ++	 ++		FcPatternDestroy(pattern); ++	} ++} ++ + void + xunloadfont(Font *f) + { +@@ -1057,6 +1155,9 @@ xinit(int cols, int rows) + 	usedfont = (opt_font == NULL)? font : opt_font; + 	xloadfonts(usedfont, 0); +  ++	/* spare fonts */ ++	xloadsparefonts(); ++ + 	/* colors */ + 	xw.cmap = XDefaultColormap(xw.dpy, xw.scr); + 	xloadcols(); +--  +2.21.0 + |