diff options
| author | sinanmohd <pcmsinan@gmail.com> | 2021-06-29 11:19:56 +0530 | 
|---|---|---|
| committer | sinanmohd <pcmsinan@gmail.com> | 2021-06-29 11:19:56 +0530 | 
| commit | fe0a3d6bb9f8f1c0b1431aa268bcbb1e1ef40a80 (patch) | |
| tree | af0437a09cfb091b97ae2f9ccedd06499ffcd637 | |
| parent | e82bc2c613a94cf7d4e65c89ee2f0f6227dd7775 (diff) | |
font2
| -rw-r--r-- | README.md | 3 | ||||
| -rw-r--r-- | config.def.h | 11 | ||||
| -rw-r--r-- | x.c | 101 | 
3 files changed, 112 insertions, 3 deletions
| @@ -1,4 +1,4 @@ -# st: Simple Terminal  +# st: Simple Terminal  st is a simple terminal implementation for X @@ -8,3 +8,4 @@ st is a simple terminal implementation for X  - [alpha](https://st.suckless.org/patches/alpha/st-alpha-0.8.2.diff).  - [st-scrollback](https://st.suckless.org/patches/scrollback/st-scrollback-20201205-4ef0cbd.diff).  - [st-scrollback-mouse](https://st.suckless.org/patches/scrollback/st-scrollback-mouse-20191024-a2c479c.diff). +- [font2](https://st.suckless.org/patches/font2/st-font2-20190416-ba72400.diff). diff --git a/config.def.h b/config.def.h index cd1ae8b..2891521 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 = "JetBrains Mono:pixelsize=12:antialias=true:autohint=true"; +/* Spare fonts */ +static char *font2[] = { +	"JetBrainsMono Nerd Font Mono:pixelsize=12:antialias=true:autohint=true", +/*	"Hack Nerd Font Mono:pixelsize=11:antialias=true:autohint=true", */ +}; +  static int borderpx = 2;  /* @@ -113,7 +119,7 @@ static const char *colorname[] = {  	"red",  	"green",  	"yellow", -	"#5c5cff", +	"#6071a9",  	"magenta",  	"cyan",  	"white", @@ -123,7 +129,7 @@ static const char *colorname[] = {  	/* more colors can be added after 255 to use with DefaultXX */  	"#cccccc",  	"#555555", -	"black", +	"#22212f",  }; @@ -478,3 +484,4 @@ static char ascii_printable[] =  	" !\"#$%&'()*+,-./0123456789:;<=>?"  	"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"  	"`abcdefghijklmnopqrstuvwxyz{|}~"; + @@ -159,6 +159,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); @@ -309,6 +311,7 @@ zoomabs(const Arg *arg)  {  	xunloadfonts();  	xloadfonts(usedfont, arg->f); +	xloadsparefonts();  	cresize(0, 0);  	redraw();  	xhints(); @@ -1032,6 +1035,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)  { @@ -1141,6 +1239,9 @@ xinit(int cols, int rows)  	usedfont = (opt_font == NULL)? font : opt_font;  	xloadfonts(usedfont, 0); +	/* spare fonts */ +	xloadsparefonts(); +  	/* colors */  	xw.cmap = XCreateColormap(xw.dpy, parent, xw.vis, None);  	xloadcols(); | 
