st-font2-20190326-f64c2f8.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
st-font2-20190326-f64c2f8.diff (3760B) | |
--- | |
1 From f64c2f83a2e3ee349fe11100526110dfdf47067a Mon Sep 17 00:00:00 2001 | |
2 From: Kirill Bugaev <[email protected]> | |
3 Date: Wed, 27 Mar 2019 01:28:56 +0800 | |
4 Subject: [PATCH] Some glyphs can be not present in font defined by defau… | |
5 For this glyphs st uses font-config and try to find them in font cache … | |
6 This patch append font defined in `font2` variable to the beginning of … | |
7 cache. So it will be used as spare font. | |
8 | |
9 --- | |
10 config.def.h | 1 + | |
11 x.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ | |
12 2 files changed, 67 insertions(+) | |
13 | |
14 diff --git a/config.def.h b/config.def.h | |
15 index 482901e..88eee0f 100644 | |
16 --- a/config.def.h | |
17 +++ b/config.def.h | |
18 @@ -6,6 +6,7 @@ | |
19 * font: see http://freedesktop.org/software/fontconfig/fontconfig-user… | |
20 */ | |
21 static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohi… | |
22 +static char *font2 = "Roboto Mono for Powerline:pixelsize=12:antialias=… | |
23 static int borderpx = 2; | |
24 | |
25 /* | |
26 diff --git a/x.c b/x.c | |
27 index 5828a3b..052b10b 100644 | |
28 --- a/x.c | |
29 +++ b/x.c | |
30 @@ -149,6 +149,7 @@ static void xhints(void); | |
31 static int xloadcolor(int, const char *, Color *); | |
32 static int xloadfont(Font *, FcPattern *); | |
33 static void xloadfonts(char *, double); | |
34 +static void xloadsparefont(); | |
35 static void xunloadfont(Font *); | |
36 static void xunloadfonts(void); | |
37 static void xsetenv(void); | |
38 @@ -296,6 +297,7 @@ zoomabs(const Arg *arg) | |
39 { | |
40 xunloadfonts(); | |
41 xloadfonts(usedfont, arg->f); | |
42 + xloadsparefont(); | |
43 cresize(0, 0); | |
44 redraw(); | |
45 xhints(); | |
46 @@ -977,6 +979,67 @@ xloadfonts(char *fontstr, double fontsize) | |
47 FcPatternDestroy(pattern); | |
48 } | |
49 | |
50 +void | |
51 +xloadsparefont() | |
52 +{ | |
53 + FcPattern *fontpattern, *match; | |
54 + FcResult result; | |
55 + | |
56 + /* add font2 to font cache as first 4 entries */ | |
57 + if ( font2[0] == '-' ) | |
58 + fontpattern = XftXlfdParse(font2, False, False); | |
59 + else | |
60 + fontpattern = FcNameParse((FcChar8 *)font2); | |
61 + if ( fontpattern ) { | |
62 + /* Allocate memory for the new cache entries. */ | |
63 + frccap += 4; | |
64 + frc = xrealloc(frc, frccap * sizeof(Fontcache)); | |
65 + /* add Normal */ | |
66 + match = FcFontMatch(NULL, fontpattern, &result); | |
67 + if ( match ) | |
68 + frc[frclen].font = XftFontOpenPattern(xw.dpy, m… | |
69 + if ( frc[frclen].font ) { | |
70 + frc[frclen].flags = FRC_NORMAL; | |
71 + frclen++; | |
72 + } else | |
73 + FcPatternDestroy(match); | |
74 + /* add Italic */ | |
75 + FcPatternDel(fontpattern, FC_SLANT); | |
76 + FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ITA… | |
77 + match = FcFontMatch(NULL, fontpattern, &result); | |
78 + if ( match ) | |
79 + frc[frclen].font = XftFontOpenPattern(xw.dpy, m… | |
80 + if ( frc[frclen].font ) { | |
81 + frc[frclen].flags = FRC_ITALIC; | |
82 + frclen++; | |
83 + } else | |
84 + FcPatternDestroy(match); | |
85 + /* add Italic Bold */ | |
86 + FcPatternDel(fontpattern, FC_WEIGHT); | |
87 + FcPatternAddInteger(fontpattern, FC_WEIGHT, FC_WEIGHT_B… | |
88 + match = FcFontMatch(NULL, fontpattern, &result); | |
89 + if ( match ) | |
90 + frc[frclen].font = XftFontOpenPattern(xw.dpy, m… | |
91 + if ( frc[frclen].font ) { | |
92 + frc[frclen].flags = FRC_ITALICBOLD; | |
93 + frclen++; | |
94 + } else | |
95 + FcPatternDestroy(match); | |
96 + /* add Bold */ | |
97 + FcPatternDel(fontpattern, FC_SLANT); | |
98 + FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ROM… | |
99 + match = FcFontMatch(NULL, fontpattern, &result); | |
100 + if ( match ) | |
101 + frc[frclen].font = XftFontOpenPattern(xw.dpy, m… | |
102 + if ( frc[frclen].font ) { | |
103 + frc[frclen].flags = FRC_BOLD; | |
104 + frclen++; | |
105 + } else | |
106 + FcPatternDestroy(match); | |
107 + FcPatternDestroy(fontpattern); | |
108 + } | |
109 +} | |
110 + | |
111 void | |
112 xunloadfont(Font *f) | |
113 { | |
114 @@ -1057,6 +1120,9 @@ xinit(int cols, int rows) | |
115 usedfont = (opt_font == NULL)? font : opt_font; | |
116 xloadfonts(usedfont, 0); | |
117 | |
118 + /* spare font (font2) */ | |
119 + xloadsparefont(); | |
120 + | |
121 /* colors */ | |
122 xw.cmap = XDefaultColormap(xw.dpy, xw.scr); | |
123 xloadcols(); | |
124 -- | |
125 2.21.0 | |
126 |