commit e796acc6596fa257740d3f7c61853c2146183a47
Author: Kirill Bugaev <[email protected]>
Date:   Wed Mar 27 02:06:02 2019 +0800

    patch "font2" for st added

diff --git a/st.suckless.org/patches/font2/index.md 
b/st.suckless.org/patches/font2/index.md
new file mode 100644
index 00000000..acb4f59f
--- /dev/null
+++ b/st.suckless.org/patches/font2/index.md
@@ -0,0 +1,17 @@
+font2
+=====
+
+Description
+-----------
+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 font defined in
+`font2` variable to the beginning of font cache.
+
+Download
+--------
+* [st-font2-20190326-f64c2f8.diff](st-font2-20190326-f64c2f8.diff)
+
+Authors
+-------
+* Kirill Bugaev <[email protected]>
diff --git a/st.suckless.org/patches/font2/st-font2-20190326-f64c2f8.diff 
b/st.suckless.org/patches/font2/st-font2-20190326-f64c2f8.diff
new file mode 100644
index 00000000..fdb6efe8
--- /dev/null
+++ b/st.suckless.org/patches/font2/st-font2-20190326-f64c2f8.diff
@@ -0,0 +1,126 @@
+From f64c2f83a2e3ee349fe11100526110dfdf47067a Mon Sep 17 00:00:00 2001
+From: Kirill Bugaev <[email protected]>
+Date: Wed, 27 Mar 2019 01:28:56 +0800
+Subject: [PATCH] Some glyphs can be not present in font defined by default.
+ For this glyphs st uses font-config and try to find them in font cache first.
+ This patch append font defined in `font2` variable to the beginning of font
+ cache. So it will be used as spare font.
+
+---
+ config.def.h |  1 +
+ x.c          | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 67 insertions(+)
+
+diff --git a/config.def.h b/config.def.h
+index 482901e..88eee0f 100644
+--- a/config.def.h
++++ b/config.def.h
+@@ -6,6 +6,7 @@
+  * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
+  */
+ static char *font = "Liberation 
Mono:pixelsize=12:antialias=true:autohint=true";
++static char *font2 = "Roboto Mono for 
Powerline:pixelsize=12:antialias=true:autohint=true";
+ static int borderpx = 2;
+ 
+ /*
+diff --git a/x.c b/x.c
+index 5828a3b..052b10b 100644
+--- a/x.c
++++ b/x.c
+@@ -149,6 +149,7 @@ static void xhints(void);
+ static int xloadcolor(int, const char *, Color *);
+ static int xloadfont(Font *, FcPattern *);
+ static void xloadfonts(char *, double);
++static void xloadsparefont();
+ static void xunloadfont(Font *);
+ static void xunloadfonts(void);
+ static void xsetenv(void);
+@@ -296,6 +297,7 @@ zoomabs(const Arg *arg)
+ {
+       xunloadfonts();
+       xloadfonts(usedfont, arg->f);
++      xloadsparefont();
+       cresize(0, 0);
+       redraw();
+       xhints();
+@@ -977,6 +979,67 @@ xloadfonts(char *fontstr, double fontsize)
+       FcPatternDestroy(pattern);
+ }
+ 
++void
++xloadsparefont()
++{
++      FcPattern *fontpattern, *match;
++      FcResult result;
++
++      /* add font2 to font cache as first 4 entries */
++      if ( font2[0] == '-' )
++              fontpattern = XftXlfdParse(font2, False, False);
++      else
++              fontpattern = FcNameParse((FcChar8 *)font2);
++      if ( fontpattern ) {
++              /* Allocate memory for the new cache entries. */
++              frccap += 4;
++              frc = xrealloc(frc, frccap * sizeof(Fontcache));
++              /* add Normal */
++              match = FcFontMatch(NULL, fontpattern, &result);
++              if ( match ) 
++                      frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
++                      if ( frc[frclen].font ) {
++                              frc[frclen].flags = FRC_NORMAL;
++                              frclen++;
++                      } else
++                              FcPatternDestroy(match);
++              /* add Italic */
++              FcPatternDel(fontpattern, FC_SLANT);
++              FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ITALIC);
++              match = FcFontMatch(NULL, fontpattern, &result);
++              if ( match )
++                      frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
++                      if ( frc[frclen].font ) {
++                              frc[frclen].flags = FRC_ITALIC;
++                              frclen++;
++                      } else
++                              FcPatternDestroy(match);
++              /* add Italic Bold */
++              FcPatternDel(fontpattern, FC_WEIGHT);
++              FcPatternAddInteger(fontpattern, FC_WEIGHT, FC_WEIGHT_BOLD);
++              match = FcFontMatch(NULL, fontpattern, &result);
++              if ( match )
++                      frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
++                      if ( frc[frclen].font ) {
++                              frc[frclen].flags = FRC_ITALICBOLD;
++                              frclen++;
++                      } else 
++                              FcPatternDestroy(match);
++              /* add Bold */
++              FcPatternDel(fontpattern, FC_SLANT);
++              FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ROMAN);
++              match = FcFontMatch(NULL, fontpattern, &result);
++              if ( match )
++                      frc[frclen].font = XftFontOpenPattern(xw.dpy, match);
++                      if ( frc[frclen].font ) {
++                              frc[frclen].flags = FRC_BOLD;
++                              frclen++;
++                      } else 
++                              FcPatternDestroy(match);
++              FcPatternDestroy(fontpattern);
++      }
++}
++
+ void
+ xunloadfont(Font *f)
+ {
+@@ -1057,6 +1120,9 @@ xinit(int cols, int rows)
+       usedfont = (opt_font == NULL)? font : opt_font;
+       xloadfonts(usedfont, 0);
+ 
++      /* spare font (font2) */
++      xloadsparefont();
++
+       /* colors */
+       xw.cmap = XDefaultColormap(xw.dpy, xw.scr);
+       xloadcols();
+-- 
+2.21.0
+


Reply via email to