st-font2-20190326-f64c2f8.diff - sites - public wiki contents of suckless.org
(HTM) git clone git://git.suckless.org/sites
(DIR) Log
(DIR) Files
(DIR) Refs
---
st-font2-20190326-f64c2f8.diff (3760B)
---
1 From f64c2f83a2e3ee349fe11100526110dfdf47067a Mon Sep 17 00:00:00 2001
2 From: Kirill Bugaev <kirill.bugaev87@gmail.com>
3 Date: Wed, 27 Mar 2019 01:28:56 +0800
4 Subject: [PATCH] Some glyphs can be not present in font defined by default.
5 For this glyphs st uses font-config and try to find them in font cache first.
6 This patch append font defined in `font2` variable to the beginning of font
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.html
20 */
21 static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true";
22 +static char *font2 = "Roboto Mono for Powerline:pixelsize=12:antialias=true:autohint=true";
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, match);
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_ITALIC);
77 + match = FcFontMatch(NULL, fontpattern, &result);
78 + if ( match )
79 + frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
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_BOLD);
88 + match = FcFontMatch(NULL, fontpattern, &result);
89 + if ( match )
90 + frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
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_ROMAN);
99 + match = FcFontMatch(NULL, fontpattern, &result);
100 + if ( match )
101 + frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
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