From 14ad67f639b8cbb4d062eb3556879b7f9f008164 Mon Sep 17 00:00:00 2001 From: Von Random Date: Tue, 2 Apr 2019 19:13:41 +0300 Subject: [PATCH 01/10] actually properly use the original disable-bold-italic-fonts patch, apparently I have been doing it wrong --- config.h | 3 +- st-disable-bold-italic-fonts.patch | 67 ++++++++++++++++++------------ 2 files changed, 43 insertions(+), 27 deletions(-) diff --git a/config.h b/config.h index 5171250..16415c8 100644 --- a/config.h +++ b/config.h @@ -9,8 +9,9 @@ static char *font = "xos4 Terminus:bold:pixelsize=14"; static int borderpx = 1; /* disable bold and italic font styles */ -int disablebold = 1; +int disablebold = 0; int disableitalic = 1; +int disableroman = 1; /* * What program is execed by st depends of these precedence rules: diff --git a/st-disable-bold-italic-fonts.patch b/st-disable-bold-italic-fonts.patch index a19584e..026dbe8 100644 --- a/st-disable-bold-italic-fonts.patch +++ b/st-disable-bold-italic-fonts.patch @@ -1,45 +1,60 @@ +# based on Alex Kozadaev's st-disable-bold-italic-fonts.diff +# https://st.suckless.org/patches/disable_bold_italic_fonts/ + +diff --git a/config.def.h b/config.def.h +index 482901e..50a4896 100644 --- a/config.def.h +++ b/config.def.h -@@ -8,6 +8,10 @@ +@@ -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"; - static int borderpx = 2; - -+/* disable bold and italic font styles */ ++ ++/* disable bold, italic and roman fonts globally */ +int disablebold = 0; +int disableitalic = 0; ++int disableroman = 0; + + static int borderpx = 2; + /* - * What program is execed by st depends of these precedence rules: - * 1: program passed with -e +diff --git a/x.c b/x.c +index 5828a3b..ad65501 100644 --- a/x.c +++ b/x.c -@@ -240,6 +240,10 @@ static char *opt_title = NULL; +@@ -244,6 +244,11 @@ static char *opt_title = NULL; static int oldbutton = 3; /* button event on startup: 3 = release */ +/* declared in config.h */ +extern int disablebold; +extern int disableitalic; ++extern int disableroman; + void clipcopy(const Arg *dummy) { -@@ -1152,13 +1156,15 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x - frcflags = FRC_NORMAL; - runewidth = win.cw * ((mode & ATTR_WIDE) ? 2.0f : 1.0f); - if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { -- font = &dc.ibfont; -+ if (!disableitalic && !disablebold) font = &dc.ibfont; -+ if (disableitalic && !disablebold) font = &dc.bfont; -+ if (!disableitalic && disablebold) font = &dc.ifont; - frcflags = FRC_ITALICBOLD; - } else if (mode & ATTR_ITALIC) { -- font = &dc.ifont; -+ if (!disableitalic) font = &dc.ifont; - frcflags = FRC_ITALIC; - } else if (mode & ATTR_BOLD) { -- font = &dc.bfont; -+ if (!disablebold) font = &dc.bfont; - frcflags = FRC_BOLD; - } - yp = winy + font->ascent; +@@ -960,17 +965,20 @@ xloadfonts(char *fontstr, double fontsize) + win.ch = ceilf(dc.font.height * chscale); + + FcPatternDel(pattern, FC_SLANT); +- FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); ++ if (!disableitalic) ++ FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); + if (xloadfont(&dc.ifont, pattern)) + die("can't open font %s\n", fontstr); + + FcPatternDel(pattern, FC_WEIGHT); +- FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); ++ if (!disablebold) ++ FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); + if (xloadfont(&dc.ibfont, pattern)) + die("can't open font %s\n", fontstr); + + FcPatternDel(pattern, FC_SLANT); +- FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN); ++ if (!disableroman) ++ FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN); + if (xloadfont(&dc.bfont, pattern)) + die("can't open font %s\n", fontstr); + From 6b4a15026e1dca2d315f2bd40be23b2a1d73c99c Mon Sep 17 00:00:00 2001 From: Von Random Date: Thu, 4 Apr 2019 15:31:30 +0300 Subject: [PATCH 02/10] get rid of boxdraw, fix readme --- README.md | 3 +- makest | 1 - st-boxdraw_v2-0.8.2.diff | 598 --------------------------------------- 3 files changed, 1 insertion(+), 601 deletions(-) delete mode 100644 st-boxdraw_v2-0.8.2.diff diff --git a/README.md b/README.md index 8b7bb8d..173290a 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,9 @@ st-patches A personal set of st configuration and patches because why the fuck not. Includes: -* [st-boxdraw_v2-0.8.2.diff](https://st.suckless.org/patches/boxdraw/) - draw beautiful pseudo graphic lines instead of whatever your font provides * st-bright-bold-text.patch - make non-colored bold text brigh * st-clipboard.patch - copy to both selection and clipboard, paste from clipboard, based on [st-clipboard-0.8.2.diff](https://st.suckless.org/patches/clipboard/), with right click to copy from clipboard -* st-disable-bold-italic-fonts.patch - actually disable bold, italic or bold italic font styles +* st-disable-bold-italic-fonts.patch - disable bold, italic or bold italic font styles, based on [st-disable-bold-italic-fonts.diff](https://st.suckless.org/patches/disable_bold_italic_fonts/) * st-disable-intensity-styles.patch - disable so called "intensity styles", do not make colored bold text bright * makest - a simple script to apply all the patches and build st * config.h - my config diff --git a/makest b/makest index 5b479af..36c0892 100755 --- a/makest +++ b/makest @@ -4,7 +4,6 @@ ST_REPO=https://git.suckless.org/st ST_SRC=$PWD/st ST_CFG=$PWD/config.h PATCHLIST=( - st-boxdraw_v2-0.8.2.diff st-bright-bold-text.patch st-clipboard.patch st-disable-bold-italic-fonts.patch diff --git a/st-boxdraw_v2-0.8.2.diff b/st-boxdraw_v2-0.8.2.diff deleted file mode 100644 index 196818c..0000000 --- a/st-boxdraw_v2-0.8.2.diff +++ /dev/null @@ -1,598 +0,0 @@ -From 318ae7fe1bd614cb937c8f43d855a1c2e8e93fd4 Mon Sep 17 00:00:00 2001 -From: "Avi Halachmi (:avih)" -Date: Wed, 26 Dec 2018 14:51:45 +0200 -Subject: [PATCH] boxdraw_v2: custom render lines/blocks/braille for perfect - alignment - -It seems impossible to ensure that blocks and line drawing glyphs -align without visible gaps for all combinations of arbitrary font, -size and width/height scale factor. - -This commit adds options to render most of the lines/blocks and -braille codepoints without using the font such that they align -perfectly regardless of font, size or other configuration values. - -Supported codepoints are U+2500 - U+259F except dashes/diagonals, -and U28XX. - -The lines/blocks data is stored as 16-bit values at boxdraw_data.h - -boxdraw/braille are independent, disabled by default at config[.def].h ---- - Makefile | 3 +- - boxdraw.c | 194 ++++++++++++++++++++++++++++++++++++++++++++ - boxdraw_data.h | 214 +++++++++++++++++++++++++++++++++++++++++++++++++ - config.def.h | 12 +++ - st.c | 3 + - st.h | 10 +++ - x.c | 21 +++-- - 7 files changed, 451 insertions(+), 6 deletions(-) - create mode 100644 boxdraw.c - create mode 100644 boxdraw_data.h - -diff --git a/Makefile b/Makefile -index 470ac86..6dfa212 100644 ---- a/Makefile -+++ b/Makefile -@@ -4,7 +4,7 @@ - - include config.mk - --SRC = st.c x.c -+SRC = st.c x.c boxdraw.c - OBJ = $(SRC:.c=.o) - - all: options st -@@ -23,6 +23,7 @@ config.h: - - st.o: config.h st.h win.h - x.o: arg.h config.h st.h win.h -+boxdraw.o: config.h st.h boxdraw_data.h - - $(OBJ): config.h config.mk - -diff --git a/boxdraw.c b/boxdraw.c -new file mode 100644 -index 0000000..28a92d0 ---- /dev/null -+++ b/boxdraw.c -@@ -0,0 +1,194 @@ -+/* -+ * Copyright 2018 Avi Halachmi (:avih) avihpit@yahoo.com https://github.com/avih -+ * MIT/X Consortium License -+ */ -+ -+#include -+#include "st.h" -+#include "boxdraw_data.h" -+ -+/* Rounded non-negative integers division of n / d */ -+#define DIV(n, d) (((n) + (d) / 2) / (d)) -+ -+static Display *xdpy; -+static Colormap xcmap; -+static XftDraw *xd; -+static Visual *xvis; -+ -+static void drawbox(int, int, int, int, XftColor *, XftColor *, ushort); -+static void drawboxlines(int, int, int, int, XftColor *, ushort); -+ -+/* public API */ -+ -+void -+boxdraw_xinit(Display *dpy, Colormap cmap, XftDraw *draw, Visual *vis) -+{ -+ xdpy = dpy; xcmap = cmap; xd = draw, xvis = vis; -+} -+ -+int -+isboxdraw(Rune u) -+{ -+ Rune block = u & ~0xff; -+ return (boxdraw && block == 0x2500 && boxdata[(uint8_t)u]) || -+ (boxdraw_braille && block == 0x2800); -+} -+ -+/* the "index" is actually the entire shape data encoded as ushort */ -+ushort -+boxdrawindex(const Glyph *g) -+{ -+ if (boxdraw_braille && (g->u & ~0xff) == 0x2800) -+ return BRL | (uint8_t)g->u; -+ if (boxdraw_bold && (g->mode & ATTR_BOLD)) -+ return BDB | boxdata[(uint8_t)g->u]; -+ return boxdata[(uint8_t)g->u]; -+} -+ -+void -+drawboxes(int x, int y, int cw, int ch, XftColor *fg, XftColor *bg, -+ const XftGlyphFontSpec *specs, int len) -+{ -+ for ( ; len-- > 0; x += cw, specs++) -+ drawbox(x, y, cw, ch, fg, bg, (ushort)specs->glyph); -+} -+ -+/* implementation */ -+ -+void -+drawbox(int x, int y, int w, int h, XftColor *fg, XftColor *bg, ushort bd) -+{ -+ ushort cat = bd & ~(BDB | 0xff); /* mask out bold and data */ -+ if (bd & (BDL | BDA)) { -+ /* lines (light/double/heavy/arcs) */ -+ drawboxlines(x, y, w, h, fg, bd); -+ -+ } else if (cat == BBD) { -+ /* lower (8-X)/8 block */ -+ int d = DIV((uint8_t)bd * h, 8); -+ XftDrawRect(xd, fg, x, y + d, w, h - d); -+ -+ } else if (cat == BBU) { -+ /* upper X/8 block */ -+ XftDrawRect(xd, fg, x, y, w, DIV((uint8_t)bd * h, 8)); -+ -+ } else if (cat == BBL) { -+ /* left X/8 block */ -+ XftDrawRect(xd, fg, x, y, DIV((uint8_t)bd * w, 8), h); -+ -+ } else if (cat == BBR) { -+ /* right (8-X)/8 block */ -+ int d = DIV((uint8_t)bd * w, 8); -+ XftDrawRect(xd, fg, x + d, y, w - d, h); -+ -+ } else if (cat == BBQ) { -+ /* Quadrants */ -+ int w2 = DIV(w, 2), h2 = DIV(h, 2); -+ if (bd & TL) -+ XftDrawRect(xd, fg, x, y, w2, h2); -+ if (bd & TR) -+ XftDrawRect(xd, fg, x + w2, y, w - w2, h2); -+ if (bd & BL) -+ XftDrawRect(xd, fg, x, y + h2, w2, h - h2); -+ if (bd & BR) -+ XftDrawRect(xd, fg, x + w2, y + h2, w - w2, h - h2); -+ -+ } else if (bd & BBS) { -+ /* Shades - data is 1/2/3 for 25%/50%/75% alpha, respectively */ -+ int d = (uint8_t)bd; -+ XftColor xfc; -+ XRenderColor xrc = { .alpha = 0xffff }; -+ -+ xrc.red = DIV(fg->color.red * d + bg->color.red * (4 - d), 4); -+ xrc.green = DIV(fg->color.green * d + bg->color.green * (4 - d), 4); -+ xrc.blue = DIV(fg->color.blue * d + bg->color.blue * (4 - d), 4); -+ -+ XftColorAllocValue(xdpy, xvis, xcmap, &xrc, &xfc); -+ XftDrawRect(xd, &xfc, x, y, w, h); -+ XftColorFree(xdpy, xvis, xcmap, &xfc); -+ -+ } else if (cat == BRL) { -+ /* braille, each data bit corresponds to one dot at 2x4 grid */ -+ int w1 = DIV(w, 2); -+ int h1 = DIV(h, 4), h2 = DIV(h, 2), h3 = DIV(3 * h, 4); -+ -+ if (bd & 1) XftDrawRect(xd, fg, x, y, w1, h1); -+ if (bd & 2) XftDrawRect(xd, fg, x, y + h1, w1, h2 - h1); -+ if (bd & 4) XftDrawRect(xd, fg, x, y + h2, w1, h3 - h2); -+ if (bd & 8) XftDrawRect(xd, fg, x + w1, y, w - w1, h1); -+ if (bd & 16) XftDrawRect(xd, fg, x + w1, y + h1, w - w1, h2 - h1); -+ if (bd & 32) XftDrawRect(xd, fg, x + w1, y + h2, w - w1, h3 - h2); -+ if (bd & 64) XftDrawRect(xd, fg, x, y + h3, w1, h - h3); -+ if (bd & 128) XftDrawRect(xd, fg, x + w1, y + h3, w - w1, h - h3); -+ -+ } -+} -+ -+void -+drawboxlines(int x, int y, int w, int h, XftColor *fg, ushort bd) -+{ -+ /* s: stem thickness. width/8 roughly matches underscore thickness. */ -+ /* We draw bold as 1.5 * normal-stem and at least 1px thicker. */ -+ /* doubles draw at least 3px, even when w or h < 3. bold needs 6px. */ -+ int mwh = MIN(w, h); -+ int base_s = MAX(1, DIV(mwh, 8)); -+ int bold = (bd & BDB) && mwh >= 6; /* possibly ignore boldness */ -+ int s = bold ? MAX(base_s + 1, DIV(3 * base_s, 2)) : base_s; -+ int w2 = DIV(w - s, 2), h2 = DIV(h - s, 2); -+ /* the s-by-s square (x + w2, y + h2, s, s) is the center texel. */ -+ /* The base length (per direction till edge) includes this square. */ -+ -+ int light = bd & (LL | LU | LR | LD); -+ int double_ = bd & (DL | DU | DR | DD); -+ -+ if (light) { -+ /* d: additional (negative) length to not-draw the center */ -+ /* texel - at arcs and avoid drawing inside (some) doubles */ -+ int arc = bd & BDA; -+ int multi_light = light & (light - 1); -+ int multi_double = double_ & (double_ - 1); -+ /* light crosses double only at DH+LV, DV+LH (ref. shapes) */ -+ int d = arc || (multi_double && !multi_light) ? -s : 0; -+ -+ if (bd & LL) -+ XftDrawRect(xd, fg, x, y + h2, w2 + s + d, s); -+ if (bd & LU) -+ XftDrawRect(xd, fg, x + w2, y, s, h2 + s + d); -+ if (bd & LR) -+ XftDrawRect(xd, fg, x + w2 - d, y + h2, w - w2 + d, s); -+ if (bd & LD) -+ XftDrawRect(xd, fg, x + w2, y + h2 - d, s, h - h2 + d); -+ } -+ -+ /* double lines - also align with light to form heavy when combined */ -+ if (double_) { -+ /* -+ * going clockwise, for each double-ray: p is additional length -+ * to the single-ray nearer to the previous direction, and n to -+ * the next. p and n adjust from the base length to lengths -+ * which consider other doubles - shorter to avoid intersections -+ * (p, n), or longer to draw the far-corner texel (n). -+ */ -+ int dl = bd & DL, du = bd & DU, dr = bd & DR, dd = bd & DD; -+ if (dl) { -+ int p = dd ? -s : 0, n = du ? -s : dd ? s : 0; -+ XftDrawRect(xd, fg, x, y + h2 + s, w2 + s + p, s); -+ XftDrawRect(xd, fg, x, y + h2 - s, w2 + s + n, s); -+ } -+ if (du) { -+ int p = dl ? -s : 0, n = dr ? -s : dl ? s : 0; -+ XftDrawRect(xd, fg, x + w2 - s, y, s, h2 + s + p); -+ XftDrawRect(xd, fg, x + w2 + s, y, s, h2 + s + n); -+ } -+ if (dr) { -+ int p = du ? -s : 0, n = dd ? -s : du ? s : 0; -+ XftDrawRect(xd, fg, x + w2 - p, y + h2 - s, w - w2 + p, s); -+ XftDrawRect(xd, fg, x + w2 - n, y + h2 + s, w - w2 + n, s); -+ } -+ if (dd) { -+ int p = dr ? -s : 0, n = dl ? -s : dr ? s : 0; -+ XftDrawRect(xd, fg, x + w2 + s, y + h2 - p, s, h - h2 + p); -+ XftDrawRect(xd, fg, x + w2 - s, y + h2 - n, s, h - h2 + n); -+ } -+ } -+} -diff --git a/boxdraw_data.h b/boxdraw_data.h -new file mode 100644 -index 0000000..7890500 ---- /dev/null -+++ b/boxdraw_data.h -@@ -0,0 +1,214 @@ -+/* -+ * Copyright 2018 Avi Halachmi (:avih) avihpit@yahoo.com https://github.com/avih -+ * MIT/X Consortium License -+ */ -+ -+/* -+ * U+25XX codepoints data -+ * -+ * References: -+ * http://www.unicode.org/charts/PDF/U2500.pdf -+ * http://www.unicode.org/charts/PDF/U2580.pdf -+ * -+ * Test page: -+ * https://github.com/GNOME/vte/blob/master/doc/boxes.txt -+ */ -+ -+/* Each shape is encoded as 16-bits. Higher bits are category, lower are data */ -+/* Categories (mutually exclusive except BDB): */ -+/* For convenience, BDL/BDA/BBS/BDB are 1 bit each, the rest are enums */ -+#define BDL (1<<8) /* Box Draw Lines (light/double/heavy) */ -+#define BDA (1<<9) /* Box Draw Arc (light) */ -+ -+#define BBD (1<<10) /* Box Block Down (lower) X/8 */ -+#define BBL (2<<10) /* Box Block Left X/8 */ -+#define BBU (3<<10) /* Box Block Upper X/8 */ -+#define BBR (4<<10) /* Box Block Right X/8 */ -+#define BBQ (5<<10) /* Box Block Quadrants */ -+#define BRL (6<<10) /* Box Braille (data is lower byte of U28XX) */ -+ -+#define BBS (1<<14) /* Box Block Shades */ -+#define BDB (1<<15) /* Box Draw is Bold */ -+ -+/* (BDL/BDA) Light/Double/Heavy x Left/Up/Right/Down/Horizontal/Vertical */ -+/* Heavy is light+double (literally drawing light+double align to form heavy) */ -+#define LL (1<<0) -+#define LU (1<<1) -+#define LR (1<<2) -+#define LD (1<<3) -+#define LH (LL+LR) -+#define LV (LU+LD) -+ -+#define DL (1<<4) -+#define DU (1<<5) -+#define DR (1<<6) -+#define DD (1<<7) -+#define DH (DL+DR) -+#define DV (DU+DD) -+ -+#define HL (LL+DL) -+#define HU (LU+DU) -+#define HR (LR+DR) -+#define HD (LD+DD) -+#define HH (HL+HR) -+#define HV (HU+HD) -+ -+/* (BBQ) Quadrants Top/Bottom x Left/Right */ -+#define TL (1<<0) -+#define TR (1<<1) -+#define BL (1<<2) -+#define BR (1<<3) -+ -+/* Data for U+2500 - U+259F except dashes/diagonals */ -+static const unsigned short boxdata[256] = { -+ /* light lines */ -+ [0x00] = BDL + LH, /* light horizontal */ -+ [0x02] = BDL + LV, /* light vertical */ -+ [0x0c] = BDL + LD + LR, /* light down and right */ -+ [0x10] = BDL + LD + LL, /* light down and left */ -+ [0x14] = BDL + LU + LR, /* light up and right */ -+ [0x18] = BDL + LU + LL, /* light up and left */ -+ [0x1c] = BDL + LV + LR, /* light vertical and right */ -+ [0x24] = BDL + LV + LL, /* light vertical and left */ -+ [0x2c] = BDL + LH + LD, /* light horizontal and down */ -+ [0x34] = BDL + LH + LU, /* light horizontal and up */ -+ [0x3c] = BDL + LV + LH, /* light vertical and horizontal */ -+ [0x74] = BDL + LL, /* light left */ -+ [0x75] = BDL + LU, /* light up */ -+ [0x76] = BDL + LR, /* light right */ -+ [0x77] = BDL + LD, /* light down */ -+ -+ /* heavy [+light] lines */ -+ [0x01] = BDL + HH, -+ [0x03] = BDL + HV, -+ [0x0d] = BDL + HR + LD, -+ [0x0e] = BDL + HD + LR, -+ [0x0f] = BDL + HD + HR, -+ [0x11] = BDL + HL + LD, -+ [0x12] = BDL + HD + LL, -+ [0x13] = BDL + HD + HL, -+ [0x15] = BDL + HR + LU, -+ [0x16] = BDL + HU + LR, -+ [0x17] = BDL + HU + HR, -+ [0x19] = BDL + HL + LU, -+ [0x1a] = BDL + HU + LL, -+ [0x1b] = BDL + HU + HL, -+ [0x1d] = BDL + HR + LV, -+ [0x1e] = BDL + HU + LD + LR, -+ [0x1f] = BDL + HD + LR + LU, -+ [0x20] = BDL + HV + LR, -+ [0x21] = BDL + HU + HR + LD, -+ [0x22] = BDL + HD + HR + LU, -+ [0x23] = BDL + HV + HR, -+ [0x25] = BDL + HL + LV, -+ [0x26] = BDL + HU + LD + LL, -+ [0x27] = BDL + HD + LU + LL, -+ [0x28] = BDL + HV + LL, -+ [0x29] = BDL + HU + HL + LD, -+ [0x2a] = BDL + HD + HL + LU, -+ [0x2b] = BDL + HV + HL, -+ [0x2d] = BDL + HL + LD + LR, -+ [0x2e] = BDL + HR + LL + LD, -+ [0x2f] = BDL + HH + LD, -+ [0x30] = BDL + HD + LH, -+ [0x31] = BDL + HD + HL + LR, -+ [0x32] = BDL + HR + HD + LL, -+ [0x33] = BDL + HH + HD, -+ [0x35] = BDL + HL + LU + LR, -+ [0x36] = BDL + HR + LU + LL, -+ [0x37] = BDL + HH + LU, -+ [0x38] = BDL + HU + LH, -+ [0x39] = BDL + HU + HL + LR, -+ [0x3a] = BDL + HU + HR + LL, -+ [0x3b] = BDL + HH + HU, -+ [0x3d] = BDL + HL + LV + LR, -+ [0x3e] = BDL + HR + LV + LL, -+ [0x3f] = BDL + HH + LV, -+ [0x40] = BDL + HU + LH + LD, -+ [0x41] = BDL + HD + LH + LU, -+ [0x42] = BDL + HV + LH, -+ [0x43] = BDL + HU + HL + LD + LR, -+ [0x44] = BDL + HU + HR + LD + LL, -+ [0x45] = BDL + HD + HL + LU + LR, -+ [0x46] = BDL + HD + HR + LU + LL, -+ [0x47] = BDL + HH + HU + LD, -+ [0x48] = BDL + HH + HD + LU, -+ [0x49] = BDL + HV + HL + LR, -+ [0x4a] = BDL + HV + HR + LL, -+ [0x4b] = BDL + HV + HH, -+ [0x78] = BDL + HL, -+ [0x79] = BDL + HU, -+ [0x7a] = BDL + HR, -+ [0x7b] = BDL + HD, -+ [0x7c] = BDL + HR + LL, -+ [0x7d] = BDL + HD + LU, -+ [0x7e] = BDL + HL + LR, -+ [0x7f] = BDL + HU + LD, -+ -+ /* double [+light] lines */ -+ [0x50] = BDL + DH, -+ [0x51] = BDL + DV, -+ [0x52] = BDL + DR + LD, -+ [0x53] = BDL + DD + LR, -+ [0x54] = BDL + DR + DD, -+ [0x55] = BDL + DL + LD, -+ [0x56] = BDL + DD + LL, -+ [0x57] = BDL + DL + DD, -+ [0x58] = BDL + DR + LU, -+ [0x59] = BDL + DU + LR, -+ [0x5a] = BDL + DU + DR, -+ [0x5b] = BDL + DL + LU, -+ [0x5c] = BDL + DU + LL, -+ [0x5d] = BDL + DL + DU, -+ [0x5e] = BDL + DR + LV, -+ [0x5f] = BDL + DV + LR, -+ [0x60] = BDL + DV + DR, -+ [0x61] = BDL + DL + LV, -+ [0x62] = BDL + DV + LL, -+ [0x63] = BDL + DV + DL, -+ [0x64] = BDL + DH + LD, -+ [0x65] = BDL + DD + LH, -+ [0x66] = BDL + DD + DH, -+ [0x67] = BDL + DH + LU, -+ [0x68] = BDL + DU + LH, -+ [0x69] = BDL + DH + DU, -+ [0x6a] = BDL + DH + LV, -+ [0x6b] = BDL + DV + LH, -+ [0x6c] = BDL + DH + DV, -+ -+ /* (light) arcs */ -+ [0x6d] = BDA + LD + LR, -+ [0x6e] = BDA + LD + LL, -+ [0x6f] = BDA + LU + LL, -+ [0x70] = BDA + LU + LR, -+ -+ /* Lower (Down) X/8 block (data is 8 - X) */ -+ [0x81] = BBD + 7, [0x82] = BBD + 6, [0x83] = BBD + 5, [0x84] = BBD + 4, -+ [0x85] = BBD + 3, [0x86] = BBD + 2, [0x87] = BBD + 1, [0x88] = BBD + 0, -+ -+ /* Left X/8 block (data is X) */ -+ [0x89] = BBL + 7, [0x8a] = BBL + 6, [0x8b] = BBL + 5, [0x8c] = BBL + 4, -+ [0x8d] = BBL + 3, [0x8e] = BBL + 2, [0x8f] = BBL + 1, -+ -+ /* upper 1/2 (4/8), 1/8 block (X), right 1/2, 1/8 block (8-X) */ -+ [0x80] = BBU + 4, [0x94] = BBU + 1, -+ [0x90] = BBR + 4, [0x95] = BBR + 7, -+ -+ /* Quadrants */ -+ [0x96] = BBQ + BL, -+ [0x97] = BBQ + BR, -+ [0x98] = BBQ + TL, -+ [0x99] = BBQ + TL + BL + BR, -+ [0x9a] = BBQ + TL + BR, -+ [0x9b] = BBQ + TL + TR + BL, -+ [0x9c] = BBQ + TL + TR + BR, -+ [0x9d] = BBQ + TR, -+ [0x9e] = BBQ + BL + TR, -+ [0x9f] = BBQ + BL + TR + BR, -+ -+ /* Shades, data is an alpha value in 25% units (1/4, 1/2, 3/4) */ -+ [0x91] = BBS + 1, [0x92] = BBS + 2, [0x93] = BBS + 3, -+ -+ /* U+2504 - U+250B, U+254C - U+254F: unsupported (dashes) */ -+ /* U+2571 - U+2573: unsupported (diagonals) */ -+}; -diff --git a/config.def.h b/config.def.h -index 0e01717..e3654a9 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -56,6 +56,18 @@ static unsigned int blinktimeout = 800; - */ - static unsigned int cursorthickness = 2; - -+/* -+ * 1: render most of the lines/blocks characters without using the font for -+ * perfect alignment between cells (U2500 - U259F except dashes/diagonals). -+ * Bold affects lines thickness if boxdraw_bold is not 0. Italic is ignored. -+ * 0: disable (render all U25XX glyphs normally from the font). -+ */ -+const int boxdraw = 0; -+const int boxdraw_bold = 0; -+ -+/* braille (U28XX): 1: render as adjacent "pixels", 0: use font */ -+const int boxdraw_braille = 0; -+ - /* - * bell volume. It must be a value between -100 and 100. Use 0 for disabling - * it -diff --git a/st.c b/st.c -index b8e6077..d65f722 100644 ---- a/st.c -+++ b/st.c -@@ -1230,6 +1230,9 @@ tsetchar(Rune u, Glyph *attr, int x, int y) - term.dirty[y] = 1; - term.line[y][x] = *attr; - term.line[y][x].u = u; -+ -+ if (isboxdraw(u)) -+ term.line[y][x].mode |= ATTR_BOXDRAW; - } - - void -diff --git a/st.h b/st.h -index 38c61c4..9275632 100644 ---- a/st.h -+++ b/st.h -@@ -33,6 +33,7 @@ enum glyph_attribute { - ATTR_WRAP = 1 << 8, - ATTR_WIDE = 1 << 9, - ATTR_WDUMMY = 1 << 10, -+ ATTR_BOXDRAW = 1 << 11, - ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT, - }; - -@@ -110,6 +111,14 @@ void *xmalloc(size_t); - void *xrealloc(void *, size_t); - char *xstrdup(char *); - -+int isboxdraw(Rune); -+ushort boxdrawindex(const Glyph *); -+#ifdef XFT_VERSION -+/* only exposed to x.c, otherwise we'll need Xft.h for the types */ -+void boxdraw_xinit(Display *, Colormap, XftDraw *, Visual *); -+void drawboxes(int, int, int, int, XftColor *, XftColor *, const XftGlyphFontSpec *, int); -+#endif -+ - /* config.h globals */ - extern char *utmp; - extern char *stty_args; -@@ -120,3 +129,4 @@ extern char *termname; - extern unsigned int tabspaces; - extern unsigned int defaultfg; - extern unsigned int defaultbg; -+extern const int boxdraw, boxdraw_bold, boxdraw_braille; -diff --git a/x.c b/x.c -index 0422421..c740bed 100644 ---- a/x.c -+++ b/x.c -@@ -1118,6 +1118,8 @@ xinit(int cols, int rows) - xsel.xtarget = XInternAtom(xw.dpy, "UTF8_STRING", 0); - if (xsel.xtarget == None) - xsel.xtarget = XA_STRING; -+ -+ boxdraw_xinit(xw.dpy, xw.cmap, xw.draw, xw.vis); - } - - int -@@ -1164,8 +1166,13 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x - yp = winy + font->ascent; - } - -- /* Lookup character index with default font. */ -- glyphidx = XftCharIndex(xw.dpy, font->match, rune); -+ if (mode & ATTR_BOXDRAW) { -+ /* minor shoehorning: boxdraw uses only this ushort */ -+ glyphidx = boxdrawindex(&glyphs[i]); -+ } else { -+ /* Lookup character index with default font. */ -+ glyphidx = XftCharIndex(xw.dpy, font->match, rune); -+ } - if (glyphidx) { - specs[numspecs].font = font->match; - specs[numspecs].glyph = glyphidx; -@@ -1372,8 +1379,12 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i - r.width = width; - XftDrawSetClipRectangles(xw.draw, winx, winy, &r, 1); - -- /* Render the glyphs. */ -- XftDrawGlyphFontSpec(xw.draw, fg, specs, len); -+ if (base.mode & ATTR_BOXDRAW) { -+ drawboxes(winx, winy, width / len, win.ch, fg, bg, specs, len); -+ } else { -+ /* Render the glyphs. */ -+ XftDrawGlyphFontSpec(xw.draw, fg, specs, len); -+ } - - /* Render underline and strikethrough. */ - if (base.mode & ATTR_UNDERLINE) { -@@ -1416,7 +1427,7 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) - /* - * Select the right color for the right mode. - */ -- g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE; -+ g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE|ATTR_BOXDRAW; - - if (IS_SET(MODE_REVERSE)) { - g.mode |= ATTR_REVERSE; --- -2.17.1 - From 0d88911a9b9230abce8465132505b107d7e02860 Mon Sep 17 00:00:00 2001 From: Von Random Date: Wed, 17 Apr 2019 12:47:05 +0300 Subject: [PATCH 03/10] st-direct terminfo patch addition, doing truecolor escape sequences ncurses-way --- makest | 1 + st-direct-terminfo.patch | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 st-direct-terminfo.patch diff --git a/makest b/makest index 36c0892..9a8d881 100755 --- a/makest +++ b/makest @@ -6,6 +6,7 @@ ST_CFG=$PWD/config.h PATCHLIST=( st-bright-bold-text.patch st-clipboard.patch + st-direct-terminfo.patch st-disable-bold-italic-fonts.patch st-disable-intensity-styles.patch ) diff --git a/st-direct-terminfo.patch b/st-direct-terminfo.patch new file mode 100644 index 0000000..978d877 --- /dev/null +++ b/st-direct-terminfo.patch @@ -0,0 +1,19 @@ +diff --git a/st.info b/st.info +index 52fc617..5a024c2 100644 +--- a/st.info ++++ b/st.info +@@ -205,6 +205,14 @@ st-256color| simpleterm with 256 colors, + setab=\E[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m, + setaf=\E[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m, + ++st-direct| simpleterm with full color, ++ use=st, ++ ccc, ++ rgb, ++ oc=\E]104\007, ++ setab=\E[48;%?%p1%{16}%<%t5;%p1%d%e2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m, ++ setaf=\E[38;%?%p1%{16}%<%t5;%p1%d%e2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%d%;m, ++ + st-meta| simpleterm with meta key, + use=st, + km, From 89e4ee144e9fcf44dd7adb84e19df9c5712d56ec Mon Sep 17 00:00:00 2001 From: Von Random Date: Fri, 19 Apr 2019 15:08:04 +0300 Subject: [PATCH 04/10] Revert "actually properly use the original disable-bold-italic-fonts patch, apparently I have been doing it wrong" This reverts commit 14ad67f639b8cbb4d062eb3556879b7f9f008164. --- config.h | 3 +- st-disable-bold-italic-fonts.patch | 69 ++++++++++++------------------ 2 files changed, 28 insertions(+), 44 deletions(-) diff --git a/config.h b/config.h index 16415c8..5171250 100644 --- a/config.h +++ b/config.h @@ -9,9 +9,8 @@ static char *font = "xos4 Terminus:bold:pixelsize=14"; static int borderpx = 1; /* disable bold and italic font styles */ -int disablebold = 0; +int disablebold = 1; int disableitalic = 1; -int disableroman = 1; /* * What program is execed by st depends of these precedence rules: diff --git a/st-disable-bold-italic-fonts.patch b/st-disable-bold-italic-fonts.patch index 026dbe8..a19584e 100644 --- a/st-disable-bold-italic-fonts.patch +++ b/st-disable-bold-italic-fonts.patch @@ -1,60 +1,45 @@ -# based on Alex Kozadaev's st-disable-bold-italic-fonts.diff -# https://st.suckless.org/patches/disable_bold_italic_fonts/ - -diff --git a/config.def.h b/config.def.h -index 482901e..50a4896 100644 --- a/config.def.h +++ b/config.def.h -@@ -6,6 +6,12 @@ - * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html - */ +@@ -8,6 +8,10 @@ static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; -+ -+/* disable bold, italic and roman fonts globally */ -+int disablebold = 0; -+int disableitalic = 0; -+int disableroman = 0; -+ static int borderpx = 2; ++/* disable bold and italic font styles */ ++int disablebold = 0; ++int disableitalic = 0; ++ /* -diff --git a/x.c b/x.c -index 5828a3b..ad65501 100644 + * What program is execed by st depends of these precedence rules: + * 1: program passed with -e --- a/x.c +++ b/x.c -@@ -244,6 +244,11 @@ static char *opt_title = NULL; +@@ -240,6 +240,10 @@ static char *opt_title = NULL; static int oldbutton = 3; /* button event on startup: 3 = release */ +/* declared in config.h */ +extern int disablebold; +extern int disableitalic; -+extern int disableroman; + void clipcopy(const Arg *dummy) { -@@ -960,17 +965,20 @@ xloadfonts(char *fontstr, double fontsize) - win.ch = ceilf(dc.font.height * chscale); - - FcPatternDel(pattern, FC_SLANT); -- FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); -+ if (!disableitalic) -+ FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC); - if (xloadfont(&dc.ifont, pattern)) - die("can't open font %s\n", fontstr); - - FcPatternDel(pattern, FC_WEIGHT); -- FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); -+ if (!disablebold) -+ FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD); - if (xloadfont(&dc.ibfont, pattern)) - die("can't open font %s\n", fontstr); - - FcPatternDel(pattern, FC_SLANT); -- FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN); -+ if (!disableroman) -+ FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN); - if (xloadfont(&dc.bfont, pattern)) - die("can't open font %s\n", fontstr); - +@@ -1152,13 +1156,15 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x + frcflags = FRC_NORMAL; + runewidth = win.cw * ((mode & ATTR_WIDE) ? 2.0f : 1.0f); + if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { +- font = &dc.ibfont; ++ if (!disableitalic && !disablebold) font = &dc.ibfont; ++ if (disableitalic && !disablebold) font = &dc.bfont; ++ if (!disableitalic && disablebold) font = &dc.ifont; + frcflags = FRC_ITALICBOLD; + } else if (mode & ATTR_ITALIC) { +- font = &dc.ifont; ++ if (!disableitalic) font = &dc.ifont; + frcflags = FRC_ITALIC; + } else if (mode & ATTR_BOLD) { +- font = &dc.bfont; ++ if (!disablebold) font = &dc.bfont; + frcflags = FRC_BOLD; + } + yp = winy + font->ascent; From 0003366d84e3012c31414ec5949a24ed05a15f5a Mon Sep 17 00:00:00 2001 From: Von Random Date: Fri, 19 Apr 2019 15:12:15 +0300 Subject: [PATCH 05/10] README: remove reference to the unused patch after reverting it --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 173290a..ee88f76 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A personal set of st configuration and patches because why the fuck not. Includes: * st-bright-bold-text.patch - make non-colored bold text brigh * st-clipboard.patch - copy to both selection and clipboard, paste from clipboard, based on [st-clipboard-0.8.2.diff](https://st.suckless.org/patches/clipboard/), with right click to copy from clipboard -* st-disable-bold-italic-fonts.patch - disable bold, italic or bold italic font styles, based on [st-disable-bold-italic-fonts.diff](https://st.suckless.org/patches/disable_bold_italic_fonts/) +* st-disable-bold-italic-fonts.patch - disable bold, italic or bold italic font styles, custom way * st-disable-intensity-styles.patch - disable so called "intensity styles", do not make colored bold text bright * makest - a simple script to apply all the patches and build st * config.h - my config From 2ecdab50ad7ae646e7e7825a4a145658bc329150 Mon Sep 17 00:00:00 2001 From: Von Random Date: Tue, 23 Apr 2019 02:33:35 +0300 Subject: [PATCH 06/10] config: do not use st-bold-italic-fonts patch; st-bright-bold-text: 39 should not clear bright color on bold; st-disable-bold-italic-fonts, st-disable-intensity-styles: fix offsets --- config.h | 6 ++--- makest | 2 +- st-bright-bold-text.patch | 35 ++++++++++++++++++++---------- st-disable-bold-italic-fonts.patch | 6 +++-- st-disable-intensity-styles.patch | 2 +- 5 files changed, 33 insertions(+), 18 deletions(-) diff --git a/config.h b/config.h index 5171250..9ec1ed4 100644 --- a/config.h +++ b/config.h @@ -9,8 +9,8 @@ static char *font = "xos4 Terminus:bold:pixelsize=14"; static int borderpx = 1; /* disable bold and italic font styles */ -int disablebold = 1; -int disableitalic = 1; +// int disablebold = 1; +// int disableitalic = 1; /* * What program is execed by st depends of these precedence rules: @@ -79,7 +79,7 @@ const int boxdraw_braille = 0; static int bellvolume = 0; /* default TERM value */ -char *termname = "st-256color"; +char *termname = "st-direct"; /* * spaces per tab diff --git a/makest b/makest index 9a8d881..e0c04de 100755 --- a/makest +++ b/makest @@ -7,7 +7,7 @@ PATCHLIST=( st-bright-bold-text.patch st-clipboard.patch st-direct-terminfo.patch - st-disable-bold-italic-fonts.patch + # st-disable-bold-italic-fonts.patch st-disable-intensity-styles.patch ) MAKE_OPTS=( diff --git a/st-bright-bold-text.patch b/st-bright-bold-text.patch index 0640f07..e18a758 100644 --- a/st-bright-bold-text.patch +++ b/st-bright-bold-text.patch @@ -12,13 +12,19 @@ unsigned int defaultbg = 0; static unsigned int defaultcs = 256; static unsigned int defaultrcs = 257; +diff --git a/st.c b/st.c +index ede7ae6..e67ef3b 100644 --- a/st.c +++ b/st.c -@@ -1378,9 +1378,12 @@ tsetattr(int *attr, int l) - ATTR_STRUCK ); - term.c.attr.fg = defaultfg; - term.c.attr.bg = defaultbg; +@@ -1351,6 +1351,7 @@ tsetattr(int *attr, int l) + for (i = 0; i < l; i++) { + switch (attr[i]) { + case 0: + term.c.attr.colored = 0; + term.c.attr.mode &= ~( + ATTR_BOLD | + ATTR_FAINT | +@@ -1365,6 +1366,8 @@ tsetattr(int *attr, int l) break; case 1: term.c.attr.mode |= ATTR_BOLD; @@ -27,35 +33,42 @@ break; case 2: term.c.attr.mode |= ATTR_FAINT; -@@ -1427,11 +1430,14 @@ tsetattr(int *attr, int l) +@@ -1411,11 +1414,18 @@ tsetattr(int *attr, int l) term.c.attr.mode &= ~ATTR_STRUCK; break; case 38: - if ((idx = tdefcolor(attr, &i, l)) >= 0) + if ((idx = tdefcolor(attr, &i, l)) >= 0) { - term.c.attr.fg = idx; + term.c.attr.colored = 1; + term.c.attr.fg = idx; + } break; case 39: - term.c.attr.fg = defaultfg; +- term.c.attr.fg = defaultfg; + term.c.attr.colored = 0; ++ if (term.c.attr.mode & ATTR_BOLD) { ++ term.c.attr.fg = defaultbd; ++ } else { ++ term.c.attr.fg = defaultfg; ++ } break; case 48: if ((idx = tdefcolor(attr, &i, l)) >= 0) -@@ -1443,10 +1449,12 @@ tsetattr(int *attr, int l) +@@ -1426,10 +1436,12 @@ tsetattr(int *attr, int l) + break; default: if (BETWEEN(attr[i], 30, 37)) { - term.c.attr.fg = attr[i] - 30; + term.c.attr.colored = 1; + term.c.attr.fg = attr[i] - 30; } else if (BETWEEN(attr[i], 40, 47)) { term.c.attr.bg = attr[i] - 40; } else if (BETWEEN(attr[i], 90, 97)) { - term.c.attr.fg = attr[i] - 90 + 8; + term.c.attr.colored = 1; + term.c.attr.fg = attr[i] - 90 + 8; } else if (BETWEEN(attr[i], 100, 107)) { term.c.attr.bg = attr[i] - 100 + 8; - } else { +diff --git a/st.h b/st.h +index 4da3051..06de8ac 100644 --- a/st.h +++ b/st.h @@ -65,6 +65,7 @@ typedef struct { diff --git a/st-disable-bold-italic-fonts.patch b/st-disable-bold-italic-fonts.patch index a19584e..e7fa6e3 100644 --- a/st-disable-bold-italic-fonts.patch +++ b/st-disable-bold-italic-fonts.patch @@ -11,9 +11,11 @@ /* * What program is execed by st depends of these precedence rules: * 1: program passed with -e +diff --git a/x.c b/x.c +index 5828a3b..c433c58 100644 --- a/x.c +++ b/x.c -@@ -240,6 +240,10 @@ static char *opt_title = NULL; +@@ -244,6 +244,10 @@ static char *opt_title = NULL; static int oldbutton = 3; /* button event on startup: 3 = release */ @@ -24,7 +26,7 @@ void clipcopy(const Arg *dummy) { -@@ -1152,13 +1156,15 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x +@@ -1177,13 +1181,15 @@ xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x frcflags = FRC_NORMAL; runewidth = win.cw * ((mode & ATTR_WIDE) ? 2.0f : 1.0f); if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { diff --git a/st-disable-intensity-styles.patch b/st-disable-intensity-styles.patch index 8b158b7..7be92fc 100644 --- a/st-disable-intensity-styles.patch +++ b/st-disable-intensity-styles.patch @@ -1,6 +1,6 @@ --- a/x.c +++ b/x.c -@@ -1296,10 +1296,6 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i +@@ -1318,10 +1318,6 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i bg = &dc.col[base.bg]; } From d7626859f850c9842c70e82c3c78aebf4720034d Mon Sep 17 00:00:00 2001 From: Von Random Date: Tue, 23 Apr 2019 02:40:17 +0300 Subject: [PATCH 07/10] st-bright-bold-text: 22 should also clear bright --- st-bright-bold-text.patch | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/st-bright-bold-text.patch b/st-bright-bold-text.patch index e18a758..2ab3fc9 100644 --- a/st-bright-bold-text.patch +++ b/st-bright-bold-text.patch @@ -13,7 +13,7 @@ static unsigned int defaultcs = 256; static unsigned int defaultrcs = 257; diff --git a/st.c b/st.c -index ede7ae6..e67ef3b 100644 +index ede7ae6..6e3fabe 100644 --- a/st.c +++ b/st.c @@ -1351,6 +1351,7 @@ tsetattr(int *attr, int l) @@ -24,16 +24,27 @@ index ede7ae6..e67ef3b 100644 term.c.attr.mode &= ~( ATTR_BOLD | ATTR_FAINT | -@@ -1365,6 +1366,8 @@ tsetattr(int *attr, int l) +@@ -1365,6 +1366,9 @@ tsetattr(int *attr, int l) break; case 1: term.c.attr.mode |= ATTR_BOLD; -+ if (!term.c.attr.colored) ++ if (!term.c.attr.colored) { + term.c.attr.fg = defaultbd; ++ } break; case 2: term.c.attr.mode |= ATTR_FAINT; -@@ -1411,11 +1414,18 @@ tsetattr(int *attr, int l) +@@ -1391,6 +1395,9 @@ tsetattr(int *attr, int l) + break; + case 22: + term.c.attr.mode &= ~(ATTR_BOLD | ATTR_FAINT); ++ if (!term.c.attr.colored) { ++ term.c.attr.fg = defaultfg; ++ } + break; + case 23: + term.c.attr.mode &= ~ATTR_ITALIC; +@@ -1411,11 +1418,18 @@ tsetattr(int *attr, int l) term.c.attr.mode &= ~ATTR_STRUCK; break; case 38: @@ -54,7 +65,7 @@ index ede7ae6..e67ef3b 100644 break; case 48: if ((idx = tdefcolor(attr, &i, l)) >= 0) -@@ -1426,10 +1436,12 @@ tsetattr(int *attr, int l) +@@ -1426,10 +1440,12 @@ tsetattr(int *attr, int l) break; default: if (BETWEEN(attr[i], 30, 37)) { From 074c40762deb771f8c0fa72605a00b134d0206b3 Mon Sep 17 00:00:00 2001 From: Von Random Date: Tue, 23 Apr 2019 13:43:38 +0300 Subject: [PATCH 08/10] st-bright-bold-text: small style fix --- st-bright-bold-text.patch | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/st-bright-bold-text.patch b/st-bright-bold-text.patch index 2ab3fc9..6e4313e 100644 --- a/st-bright-bold-text.patch +++ b/st-bright-bold-text.patch @@ -24,27 +24,25 @@ index ede7ae6..6e3fabe 100644 term.c.attr.mode &= ~( ATTR_BOLD | ATTR_FAINT | -@@ -1365,6 +1366,9 @@ tsetattr(int *attr, int l) +@@ -1365,6 +1366,8 @@ tsetattr(int *attr, int l) break; case 1: term.c.attr.mode |= ATTR_BOLD; -+ if (!term.c.attr.colored) { ++ if (!term.c.attr.colored) + term.c.attr.fg = defaultbd; -+ } break; case 2: term.c.attr.mode |= ATTR_FAINT; -@@ -1391,6 +1395,9 @@ tsetattr(int *attr, int l) +@@ -1391,6 +1395,8 @@ tsetattr(int *attr, int l) break; case 22: term.c.attr.mode &= ~(ATTR_BOLD | ATTR_FAINT); -+ if (!term.c.attr.colored) { ++ if (!term.c.attr.colored) + term.c.attr.fg = defaultfg; -+ } break; case 23: term.c.attr.mode &= ~ATTR_ITALIC; -@@ -1411,11 +1418,18 @@ tsetattr(int *attr, int l) +@@ -1411,11 +1416,17 @@ tsetattr(int *attr, int l) term.c.attr.mode &= ~ATTR_STRUCK; break; case 38: @@ -57,15 +55,14 @@ index ede7ae6..6e3fabe 100644 case 39: - term.c.attr.fg = defaultfg; + term.c.attr.colored = 0; -+ if (term.c.attr.mode & ATTR_BOLD) { ++ if (term.c.attr.mode & ATTR_BOLD) + term.c.attr.fg = defaultbd; -+ } else { ++ else + term.c.attr.fg = defaultfg; -+ } break; case 48: if ((idx = tdefcolor(attr, &i, l)) >= 0) -@@ -1426,10 +1440,12 @@ tsetattr(int *attr, int l) +@@ -1426,10 +1437,12 @@ tsetattr(int *attr, int l) break; default: if (BETWEEN(attr[i], 30, 37)) { From 8f10256cbb4656900fb5461b2d88fe3b967d0a0d Mon Sep 17 00:00:00 2001 From: Von Random Date: Thu, 16 May 2019 13:44:43 +0300 Subject: [PATCH 09/10] config: get rid of unused options, back to st-256color termcap; makest: cleanup --- config.h | 6 +----- makest | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/config.h b/config.h index 9ec1ed4..a3192bb 100644 --- a/config.h +++ b/config.h @@ -8,10 +8,6 @@ static char *font = "xos4 Terminus:bold:pixelsize=14"; static int borderpx = 1; -/* disable bold and italic font styles */ -// int disablebold = 1; -// int disableitalic = 1; - /* * What program is execed by st depends of these precedence rules: * 1: program passed with -e @@ -79,7 +75,7 @@ const int boxdraw_braille = 0; static int bellvolume = 0; /* default TERM value */ -char *termname = "st-direct"; +char *termname = "st-256color"; /* * spaces per tab diff --git a/makest b/makest index e0c04de..208c593 100755 --- a/makest +++ b/makest @@ -7,7 +7,6 @@ PATCHLIST=( st-bright-bold-text.patch st-clipboard.patch st-direct-terminfo.patch - # st-disable-bold-italic-fonts.patch st-disable-intensity-styles.patch ) MAKE_OPTS=( From 3f1574d934965326d70e3467bca3e60fec57eba9 Mon Sep 17 00:00:00 2001 From: Von Random Date: Mon, 28 Sep 2020 12:10:22 +0300 Subject: [PATCH 10/10] config: update to match current upstream (0.8.4); makest: remove unused patches --- config.h | 66 +++++++++++++++++++++++++++----------------------------- makest | 3 --- 2 files changed, 32 insertions(+), 37 deletions(-) diff --git a/config.h b/config.h index a3192bb..1e05341 100644 --- a/config.h +++ b/config.h @@ -5,19 +5,21 @@ * * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html */ -static char *font = "xos4 Terminus:bold:pixelsize=14"; -static int borderpx = 1; +static char *font = "Fantasque Sans Mono:size=12"; +static int borderpx = 3; /* * What program is execed by st depends of these precedence rules: * 1: program passed with -e - * 2: utmp option + * 2: scroll and/or utmp * 3: SHELL environment variable * 4: value of shell in /etc/passwd * 5: value of shell in config.h */ static char *shell = "/bin/sh"; char *utmp = NULL; +/* scroll program: to enable use a string like "scroll" */ +char *scroll = NULL; char *stty_args = "stty raw pass8 nl -echo -iexten -cstopb 38400"; /* identification sequence returned in DA and DECID */ @@ -32,7 +34,7 @@ static float chscale = 1.0; * * More advanced example: L" `'\"()[]{}" */ -wchar_t *worddelimiters = L" `'\"()[]{};|"; +wchar_t *worddelimiters = L" `'\"()[]{};|│"; /* selection timeouts (in milliseconds) */ static unsigned int doubleclicktimeout = 300; @@ -41,9 +43,18 @@ static unsigned int tripleclicktimeout = 600; /* alt screens */ int allowaltscreen = 1; -/* frames per second st should at maximum draw to the screen */ -static unsigned int xfps = 300; -static unsigned int actionfps = 150; +/* allow certain non-interactive (insecure) window operations such as: + setting the clipboard text */ +int allowwindowops = 0; + +/* + * draw latency range in ms - from new content/keypress/etc until drawing. + * within this range, st draws when content stops arriving (idle). mostly it's + * near minlatency, but it waits longer for slow updates to avoid partial draw. + * low minlatency will tear/flicker more, as it can "detect" idle too early. + */ +static double minlatency = 8; +static double maxlatency = 33; /* * blinking timeout (set to 0 to disable blinking) for the terminal blinking @@ -56,18 +67,6 @@ static unsigned int blinktimeout = 0; */ static unsigned int cursorthickness = 1; -/* - * 1: render most of the lines/blocks characters without using the font for - * perfect alignment between cells (U2500 - U259F except dashes/diagonals). - * Bold affects lines thickness if boxdraw_bold is not 0. Italic is ignored. - * 0: disable (render all U25XX glyphs normally from the font). - */ -const int boxdraw = 1; -const int boxdraw_bold = 0; - -/* braille (U28XX): 1: render as adjacent "pixels", 0: use font */ -const int boxdraw_braille = 0; - /* * bell volume. It must be a value between -100 and 100. Use 0 for disabling * it @@ -133,7 +132,7 @@ unsigned int defaultbg = 8; /* solarized light */ unsigned int defaultfg = 11; -unsigned int defaultbd = 0; +//unsigned int defaultbd = 0; unsigned int defaultbg = 15; static unsigned int defaultcs = 9; @@ -168,14 +167,24 @@ static unsigned int mousebg = 0; */ static unsigned int defaultattr = 11; +/* + * Force mouse select/shortcuts while mask is active (when MODE_MOUSE is set). + * Note that if you want to use ShiftMask with selmasks, set this to an other + * modifier, set to 0 to not use it. + */ +static uint forcemousemod = ShiftMask; + /* * Internal mouse shortcuts. * Beware that overloading Button1 will disable the selection. */ static MouseShortcut mshortcuts[] = { - /* button mask string */ - { Button4, XK_ANY_MOD, "\031" }, - { Button5, XK_ANY_MOD, "\005" }, + /* mask button function argument release */ + { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, + { ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} }, + { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, + { ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} }, + { XK_ANY_MOD, Button5, ttysend, {.s = "\005"} }, }; /* Internal keyboard shortcuts. */ @@ -213,10 +222,6 @@ static Shortcut shortcuts[] = { * * 0: no value * * > 0: cursor application mode enabled * * < 0: cursor application mode disabled - * crlf value - * * 0: no value - * * > 0: crlf mode is enabled - * * < 0: crlf mode is disabled * * Be careful with the order of the definitions because st searches in * this table sequentially, so any XK_ANY_MOD must be in the last @@ -235,13 +240,6 @@ static KeySym mappedkeys[] = { -1 }; */ static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; -/* - * Override mouse-select while mask is active (when MODE_MOUSE is set). - * Note that if you want to use ShiftMask with selmasks, set this to an other - * modifier, set to 0 to not use it. - */ -static uint forceselmod = ShiftMask; - /* * This is the huge key array which defines all compatibility to the Linux * world. Please decide about changes wisely. diff --git a/makest b/makest index 208c593..e4a1ea3 100755 --- a/makest +++ b/makest @@ -4,9 +4,6 @@ ST_REPO=https://git.suckless.org/st ST_SRC=$PWD/st ST_CFG=$PWD/config.h PATCHLIST=( - st-bright-bold-text.patch - st-clipboard.patch - st-direct-terminfo.patch st-disable-intensity-styles.patch ) MAKE_OPTS=(