-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
270 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
From 1635e04d3643dd4caa0c7c2043b585c6d7e4705f Mon Sep 17 00:00:00 2001 | ||
From: Rizqi Nur Assyaufi <[email protected]> | ||
Date: Mon, 18 Jul 2022 01:15:45 +0800 | ||
Subject: [PATCH] [st][patch][font2] Add patch for st-0.8.5 | ||
|
||
--- | ||
config.def.h | 6 +++ | ||
x.c | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ | ||
2 files changed, 107 insertions(+) | ||
|
||
diff --git a/config.def.h b/config.def.h | ||
index 91ab8ca..717b2f0 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 8a16faa..220fc4f 100644 | ||
--- a/x.c | ||
+++ b/x.c | ||
@@ -157,6 +157,8 @@ static void xhints(void); | ||
static int xloadcolor(int, const char *, Color *); | ||
static int xloadfont(Font *, FcPattern *); | ||
static void xloadfonts(const char *, double); | ||
+static int xloadsparefont(FcPattern *, int); | ||
+static void xloadsparefonts(void); | ||
static void xunloadfont(Font *); | ||
static void xunloadfonts(void); | ||
static void xsetenv(void); | ||
@@ -306,6 +308,7 @@ zoomabs(const Arg *arg) | ||
{ | ||
xunloadfonts(); | ||
xloadfonts(usedfont, arg->f); | ||
+ xloadsparefonts(); | ||
cresize(0, 0); | ||
redraw(); | ||
xhints(); | ||
@@ -1034,6 +1037,101 @@ xloadfonts(const 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) | ||
{ | ||
@@ -1131,6 +1229,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.37.1 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters