From 1369487bb8c30586e336ecd45fdc2991faf3b544 Mon Sep 17 00:00:00 2001 From: Sam Hoffman Date: Thu, 1 Jan 2026 13:46:17 -0500 Subject: [PATCH] Revert "patch: ligatures-scrollback-ringbuffer" This reverts commit ab0590b48a1cdfb9b148ee06ded95cc51fa62a70. --- Makefile | 5 +- config.h | 529 +++++++------- config.mk | 11 +- hb.c | 136 ---- hb.h | 15 - st | Bin 120772 -> 108600 bytes ...-scrollback-ringbuffer-20251007-0.9.3.diff | 651 ------------------ st.c | 3 +- st.h | 3 +- st.o | Bin 112580 -> 83304 bytes win.h | 2 +- x.c | 261 ++++--- x.c.orig | 6 +- x.o | Bin 99372 -> 75920 bytes 14 files changed, 399 insertions(+), 1223 deletions(-) delete mode 100644 hb.c delete mode 100644 hb.h delete mode 100644 st-ligatures-scrollback-ringbuffer-20251007-0.9.3.diff diff --git a/Makefile b/Makefile index dfcea0f..15db421 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ include config.mk -SRC = st.c x.c hb.c +SRC = st.c x.c OBJ = $(SRC:.c=.o) all: st @@ -16,8 +16,7 @@ config.h: $(CC) $(STCFLAGS) -c $< st.o: config.h st.h win.h -x.o: arg.h config.h st.h win.h hb.h -hb.o: st.h +x.o: arg.h config.h st.h win.h $(OBJ): config.h config.mk diff --git a/config.h b/config.h index a9dec6a..8b25d40 100644 --- a/config.h +++ b/config.h @@ -5,8 +5,7 @@ * * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html */ -static char *font = - "JetBrainsMono Nerd Font:pixelsize=18:antialias=true:autohint=true"; +static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; static int borderpx = 2; /* @@ -96,35 +95,36 @@ unsigned int tabspaces = 8; /* Terminal colors (16 first used in escape sequence) */ static const char *colorname[] = { - /* 8 normal colors */ - "black", - "red3", - "green3", - "yellow3", - "blue2", - "magenta3", - "cyan3", - "gray90", + /* 8 normal colors */ + "black", + "red3", + "green3", + "yellow3", + "blue2", + "magenta3", + "cyan3", + "gray90", - /* 8 bright colors */ - "gray50", - "red", - "green", - "yellow", - "#5c5cff", - "magenta", - "cyan", - "white", + /* 8 bright colors */ + "gray50", + "red", + "green", + "yellow", + "#5c5cff", + "magenta", + "cyan", + "white", - [255] = 0, + [255] = 0, - /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", - "gray90", /* default foreground colour */ - "black", /* default background colour */ + /* more colors can be added after 255 to use with DefaultXX */ + "#cccccc", + "#555555", + "gray90", /* default foreground colour */ + "black", /* default background colour */ }; + /* * Default colors (colorname index) * foreground, background, cursor, reverse cursor @@ -175,34 +175,34 @@ static uint forcemousemod = ShiftMask; * Beware that overloading Button1 will disable the selection. */ static MouseShortcut mshortcuts[] = { - /* 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"}}, + /* 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. */ #define MODKEY Mod1Mask -#define TERMMOD (ControlMask | ShiftMask) +#define TERMMOD (ControlMask|ShiftMask) static Shortcut shortcuts[] = { - /* mask keysym function argument */ - {XK_ANY_MOD, XK_Break, sendbreak, {.i = 0}}, - {ControlMask, XK_Print, toggleprinter, {.i = 0}}, - {ShiftMask, XK_Print, printscreen, {.i = 0}}, - {XK_ANY_MOD, XK_Print, printsel, {.i = 0}}, - {TERMMOD, XK_Prior, zoom, {.f = +1}}, - {TERMMOD, XK_Next, zoom, {.f = -1}}, - {TERMMOD, XK_Home, zoomreset, {.f = 0}}, - {TERMMOD, XK_C, clipcopy, {.i = 0}}, - {TERMMOD, XK_V, clippaste, {.i = 0}}, - {TERMMOD, XK_Y, selpaste, {.i = 0}}, - {ShiftMask, XK_Insert, selpaste, {.i = 0}}, - {TERMMOD, XK_Num_Lock, numlock, {.i = 0}}, - {ShiftMask, XK_Page_Up, kscrollup, {.i = -1}}, - {ShiftMask, XK_Page_Down, kscrolldown, {.i = -1}}, + /* mask keysym function argument */ + { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, + { ControlMask, XK_Print, toggleprinter, {.i = 0} }, + { ShiftMask, XK_Print, printscreen, {.i = 0} }, + { XK_ANY_MOD, XK_Print, printsel, {.i = 0} }, + { TERMMOD, XK_Prior, zoom, {.f = +1} }, + { TERMMOD, XK_Next, zoom, {.f = -1} }, + { TERMMOD, XK_Home, zoomreset, {.f = 0} }, + { TERMMOD, XK_C, clipcopy, {.i = 0} }, + { TERMMOD, XK_V, clippaste, {.i = 0} }, + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, + { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, }; /* @@ -230,229 +230,229 @@ static Shortcut shortcuts[] = { * If you want keys other than the X11 function keys (0xFD00 - 0xFFFF) * to be mapped below, add them to this array. */ -static KeySym mappedkeys[] = {-1}; +static KeySym mappedkeys[] = { -1 }; /* * State bits to ignore when matching key or button events. By default, * numlock (Mod2Mask) and keyboard layout (XK_SWITCH_MOD) are ignored. */ -static uint ignoremod = Mod2Mask | XK_SWITCH_MOD; +static uint ignoremod = Mod2Mask|XK_SWITCH_MOD; /* * This is the huge key array which defines all compatibility to the Linux * world. Please decide about changes wisely. */ static Key key[] = { - /* keysym mask string appkey appcursor */ - {XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, - {XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, - {XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, - {XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - {XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, - {XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, - {XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, - {XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, - {XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, - {XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, - {XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, - {XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, - {XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, - {XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, - {XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, - {XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, - {XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, - {XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - {XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, - {XK_KP_End, ControlMask, "\033[J", -1, 0}, - {XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, - {XK_KP_End, ShiftMask, "\033[K", -1, 0}, - {XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, - {XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, - {XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, - {XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - {XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, - {XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, - {XK_KP_Insert, ControlMask, "\033[L", -1, 0}, - {XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, - {XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - {XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - {XK_KP_Delete, ControlMask, "\033[M", -1, 0}, - {XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, - {XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, - {XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, - {XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - {XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - {XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, - {XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, - {XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, - {XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, - {XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, - {XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, - {XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, - {XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, - {XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, - {XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, - {XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, - {XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, - {XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, - {XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, - {XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, - {XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, - {XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, - {XK_Up, ShiftMask, "\033[1;2A", 0, 0}, - {XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, - {XK_Up, ShiftMask | Mod1Mask, "\033[1;4A", 0, 0}, - {XK_Up, ControlMask, "\033[1;5A", 0, 0}, - {XK_Up, ShiftMask | ControlMask, "\033[1;6A", 0, 0}, - {XK_Up, ControlMask | Mod1Mask, "\033[1;7A", 0, 0}, - {XK_Up, ShiftMask | ControlMask | Mod1Mask, "\033[1;8A", 0, 0}, - {XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, - {XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, - {XK_Down, ShiftMask, "\033[1;2B", 0, 0}, - {XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, - {XK_Down, ShiftMask | Mod1Mask, "\033[1;4B", 0, 0}, - {XK_Down, ControlMask, "\033[1;5B", 0, 0}, - {XK_Down, ShiftMask | ControlMask, "\033[1;6B", 0, 0}, - {XK_Down, ControlMask | Mod1Mask, "\033[1;7B", 0, 0}, - {XK_Down, ShiftMask | ControlMask | Mod1Mask, "\033[1;8B", 0, 0}, - {XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, - {XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, - {XK_Left, ShiftMask, "\033[1;2D", 0, 0}, - {XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, - {XK_Left, ShiftMask | Mod1Mask, "\033[1;4D", 0, 0}, - {XK_Left, ControlMask, "\033[1;5D", 0, 0}, - {XK_Left, ShiftMask | ControlMask, "\033[1;6D", 0, 0}, - {XK_Left, ControlMask | Mod1Mask, "\033[1;7D", 0, 0}, - {XK_Left, ShiftMask | ControlMask | Mod1Mask, "\033[1;8D", 0, 0}, - {XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, - {XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, - {XK_Right, ShiftMask, "\033[1;2C", 0, 0}, - {XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, - {XK_Right, ShiftMask | Mod1Mask, "\033[1;4C", 0, 0}, - {XK_Right, ControlMask, "\033[1;5C", 0, 0}, - {XK_Right, ShiftMask | ControlMask, "\033[1;6C", 0, 0}, - {XK_Right, ControlMask | Mod1Mask, "\033[1;7C", 0, 0}, - {XK_Right, ShiftMask | ControlMask | Mod1Mask, "\033[1;8C", 0, 0}, - {XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, - {XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, - {XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, - {XK_Return, Mod1Mask, "\033\r", 0, 0}, - {XK_Return, XK_ANY_MOD, "\r", 0, 0}, - {XK_Insert, ShiftMask, "\033[4l", -1, 0}, - {XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, - {XK_Insert, ControlMask, "\033[L", -1, 0}, - {XK_Insert, ControlMask, "\033[2;5~", +1, 0}, - {XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, - {XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, - {XK_Delete, ControlMask, "\033[M", -1, 0}, - {XK_Delete, ControlMask, "\033[3;5~", +1, 0}, - {XK_Delete, ShiftMask, "\033[2K", -1, 0}, - {XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, - {XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, - {XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, - {XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, - {XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, - {XK_Home, ShiftMask, "\033[2J", 0, -1}, - {XK_Home, ShiftMask, "\033[1;2H", 0, +1}, - {XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, - {XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, - {XK_End, ControlMask, "\033[J", -1, 0}, - {XK_End, ControlMask, "\033[1;5F", +1, 0}, - {XK_End, ShiftMask, "\033[K", -1, 0}, - {XK_End, ShiftMask, "\033[1;2F", +1, 0}, - {XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, - {XK_Prior, ControlMask, "\033[5;5~", 0, 0}, - {XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, - {XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, - {XK_Next, ControlMask, "\033[6;5~", 0, 0}, - {XK_Next, ShiftMask, "\033[6;2~", 0, 0}, - {XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, - {XK_F1, XK_NO_MOD, "\033OP", 0, 0}, - {XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, - {XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, - {XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, - {XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, - {XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, - {XK_F2, XK_NO_MOD, "\033OQ", 0, 0}, - {XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, - {XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, - {XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, - {XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, - {XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, - {XK_F3, XK_NO_MOD, "\033OR", 0, 0}, - {XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, - {XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, - {XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, - {XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, - {XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, - {XK_F4, XK_NO_MOD, "\033OS", 0, 0}, - {XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, - {XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, - {XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, - {XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, - {XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, - {XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, - {XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, - {XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, - {XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, - {XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, - {XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, - {XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, - {XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, - {XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, - {XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, - {XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, - {XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, - {XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, - {XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, - {XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, - {XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, - {XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, - {XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, - {XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, - {XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, - {XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, - {XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, - {XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, - {XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, - {XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, - {XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, - {XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, - {XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, - {XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, - {XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, - {XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, - {XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, - {XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, - {XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, - {XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, - {XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, - {XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, - {XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, - {XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, - {XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, - {XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, - {XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, - {XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, - {XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, - {XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, - {XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, - {XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, - {XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, - {XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, - {XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, - {XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, - {XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, - {XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, - {XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, - {XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, - {XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, - {XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, - {XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, - {XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, - {XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, - {XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, - {XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, + /* keysym mask string appkey appcursor */ + { XK_KP_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0}, + { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0}, + { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0}, + { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0}, + { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0}, + { XK_KP_End, ControlMask, "\033[J", -1, 0}, + { XK_KP_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_KP_End, ShiftMask, "\033[K", -1, 0}, + { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[L", -1, 0}, + { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_KP_Delete, ControlMask, "\033[M", -1, 0}, + { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0}, + { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0}, + { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0}, + { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0}, + { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0}, + { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0}, + { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0}, + { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0}, + { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0}, + { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0}, + { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0}, + { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0}, + { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0}, + { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0}, + { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0}, + { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0}, + { XK_Up, ShiftMask, "\033[1;2A", 0, 0}, + { XK_Up, Mod1Mask, "\033[1;3A", 0, 0}, + { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0}, + { XK_Up, ControlMask, "\033[1;5A", 0, 0}, + { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0}, + { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0}, + { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0}, + { XK_Up, XK_ANY_MOD, "\033[A", 0, -1}, + { XK_Up, XK_ANY_MOD, "\033OA", 0, +1}, + { XK_Down, ShiftMask, "\033[1;2B", 0, 0}, + { XK_Down, Mod1Mask, "\033[1;3B", 0, 0}, + { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0}, + { XK_Down, ControlMask, "\033[1;5B", 0, 0}, + { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0}, + { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0}, + { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0}, + { XK_Down, XK_ANY_MOD, "\033[B", 0, -1}, + { XK_Down, XK_ANY_MOD, "\033OB", 0, +1}, + { XK_Left, ShiftMask, "\033[1;2D", 0, 0}, + { XK_Left, Mod1Mask, "\033[1;3D", 0, 0}, + { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0}, + { XK_Left, ControlMask, "\033[1;5D", 0, 0}, + { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0}, + { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0}, + { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0}, + { XK_Left, XK_ANY_MOD, "\033[D", 0, -1}, + { XK_Left, XK_ANY_MOD, "\033OD", 0, +1}, + { XK_Right, ShiftMask, "\033[1;2C", 0, 0}, + { XK_Right, Mod1Mask, "\033[1;3C", 0, 0}, + { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0}, + { XK_Right, ControlMask, "\033[1;5C", 0, 0}, + { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0}, + { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0}, + { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0}, + { XK_Right, XK_ANY_MOD, "\033[C", 0, -1}, + { XK_Right, XK_ANY_MOD, "\033OC", 0, +1}, + { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0}, + { XK_Return, Mod1Mask, "\033\r", 0, 0}, + { XK_Return, XK_ANY_MOD, "\r", 0, 0}, + { XK_Insert, ShiftMask, "\033[4l", -1, 0}, + { XK_Insert, ShiftMask, "\033[2;2~", +1, 0}, + { XK_Insert, ControlMask, "\033[L", -1, 0}, + { XK_Insert, ControlMask, "\033[2;5~", +1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0}, + { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0}, + { XK_Delete, ControlMask, "\033[M", -1, 0}, + { XK_Delete, ControlMask, "\033[3;5~", +1, 0}, + { XK_Delete, ShiftMask, "\033[2K", -1, 0}, + { XK_Delete, ShiftMask, "\033[3;2~", +1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0}, + { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0}, + { XK_BackSpace, XK_NO_MOD, "\177", 0, 0}, + { XK_BackSpace, Mod1Mask, "\033\177", 0, 0}, + { XK_Home, ShiftMask, "\033[2J", 0, -1}, + { XK_Home, ShiftMask, "\033[1;2H", 0, +1}, + { XK_Home, XK_ANY_MOD, "\033[H", 0, -1}, + { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1}, + { XK_End, ControlMask, "\033[J", -1, 0}, + { XK_End, ControlMask, "\033[1;5F", +1, 0}, + { XK_End, ShiftMask, "\033[K", -1, 0}, + { XK_End, ShiftMask, "\033[1;2F", +1, 0}, + { XK_End, XK_ANY_MOD, "\033[4~", 0, 0}, + { XK_Prior, ControlMask, "\033[5;5~", 0, 0}, + { XK_Prior, ShiftMask, "\033[5;2~", 0, 0}, + { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0}, + { XK_Next, ControlMask, "\033[6;5~", 0, 0}, + { XK_Next, ShiftMask, "\033[6;2~", 0, 0}, + { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0}, + { XK_F1, XK_NO_MOD, "\033OP" , 0, 0}, + { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0}, + { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0}, + { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0}, + { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0}, + { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0}, + { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0}, + { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0}, + { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0}, + { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0}, + { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0}, + { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0}, + { XK_F3, XK_NO_MOD, "\033OR" , 0, 0}, + { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0}, + { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0}, + { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0}, + { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0}, + { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0}, + { XK_F4, XK_NO_MOD, "\033OS" , 0, 0}, + { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0}, + { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0}, + { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0}, + { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0}, + { XK_F5, XK_NO_MOD, "\033[15~", 0, 0}, + { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0}, + { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0}, + { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0}, + { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0}, + { XK_F6, XK_NO_MOD, "\033[17~", 0, 0}, + { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0}, + { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0}, + { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0}, + { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0}, + { XK_F7, XK_NO_MOD, "\033[18~", 0, 0}, + { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0}, + { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0}, + { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0}, + { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0}, + { XK_F8, XK_NO_MOD, "\033[19~", 0, 0}, + { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0}, + { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0}, + { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0}, + { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0}, + { XK_F9, XK_NO_MOD, "\033[20~", 0, 0}, + { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0}, + { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0}, + { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0}, + { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0}, + { XK_F10, XK_NO_MOD, "\033[21~", 0, 0}, + { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0}, + { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0}, + { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0}, + { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0}, + { XK_F11, XK_NO_MOD, "\033[23~", 0, 0}, + { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0}, + { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0}, + { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0}, + { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0}, + { XK_F12, XK_NO_MOD, "\033[24~", 0, 0}, + { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0}, + { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0}, + { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0}, + { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0}, + { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0}, + { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0}, + { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0}, + { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0}, + { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0}, + { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0}, + { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0}, + { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0}, + { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0}, + { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0}, + { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0}, + { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0}, + { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0}, + { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0}, + { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0}, + { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0}, + { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0}, + { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0}, + { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0}, + { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0}, + { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0}, + { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0}, + { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 0}, }; /* @@ -463,13 +463,14 @@ static Key key[] = { * If no match is found, regular selection is used. */ static uint selmasks[] = { - [SEL_RECTANGULAR] = Mod1Mask, + [SEL_RECTANGULAR] = Mod1Mask, }; /* * Printable characters in ASCII, used to estimate the advance width * of single wide characters. */ -static char ascii_printable[] = " !\"#$%&'()*+,-./0123456789:;<=>?" - "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" - "`abcdefghijklmnopqrstuvwxyz{|}~"; +static char ascii_printable[] = + " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "`abcdefghijklmnopqrstuvwxyz{|}~"; diff --git a/config.mk b/config.mk index 704184b..2fc854e 100644 --- a/config.mk +++ b/config.mk @@ -15,12 +15,10 @@ PKG_CONFIG = pkg-config # includes and libs INCS = -I$(X11INC) \ `$(PKG_CONFIG) --cflags fontconfig` \ - `$(PKG_CONFIG) --cflags freetype2` \ - `$(PKG_CONFIG) --cflags harfbuzz` + `$(PKG_CONFIG) --cflags freetype2` LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \ `$(PKG_CONFIG) --libs fontconfig` \ - `$(PKG_CONFIG) --libs freetype2` \ - `$(PKG_CONFIG) --libs harfbuzz` + `$(PKG_CONFIG) --libs freetype2` # flags STCPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600 @@ -31,9 +29,8 @@ STLDFLAGS = $(LIBS) $(LDFLAGS) #CPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600 -D_BSD_SOURCE #LIBS = -L$(X11LIB) -lm -lX11 -lutil -lXft \ # `$(PKG_CONFIG) --libs fontconfig` \ -# `$(PKG_CONFIG) --libs freetype2` \ -# `$(PKG_CONFIG) --libs harfbuzz` +# `$(PKG_CONFIG) --libs freetype2` #MANPREFIX = ${PREFIX}/man # compiler and linker -CC = tcc +# CC = c99 diff --git a/hb.c b/hb.c deleted file mode 100644 index 1a7a7c7..0000000 --- a/hb.c +++ /dev/null @@ -1,136 +0,0 @@ -// clang-format off -#include -#include -#include -#include -#include -#include -#include - -#include "st.h" -#include "hb.h" -// clang-format on - -#define FEATURE(c1, c2, c3, c4) \ - {.tag = HB_TAG(c1, c2, c3, c4), \ - .value = 1, \ - .start = HB_FEATURE_GLOBAL_START, \ - .end = HB_FEATURE_GLOBAL_END} -#define BUFFER_STEP 256 - -hb_font_t *hbfindfont(XftFont *match); - -typedef struct { - XftFont *match; - hb_font_t *font; -} HbFontMatch; - -typedef struct { - size_t capacity; - HbFontMatch *fonts; -} HbFontCache; - -static HbFontCache hbfontcache = {0, NULL}; - -typedef struct { - size_t capacity; - Rune *runes; -} RuneBuffer; - -static RuneBuffer hbrunebuffer = {0, NULL}; - -/* - * Poplulate the array with a list of font features, wrapped in FEATURE macro, - * e. g. - * FEATURE('c', 'a', 'l', 't'), FEATURE('d', 'l', 'i', 'g') - */ -hb_feature_t features[] = {FEATURE('c', 'a', 'l', 't'), - FEATURE('d', 'l', 'i', 'g') - -}; - -void hbunloadfonts() { - for (int i = 0; i < hbfontcache.capacity; i++) { - hb_font_destroy(hbfontcache.fonts[i].font); - XftUnlockFace(hbfontcache.fonts[i].match); - } - - if (hbfontcache.fonts != NULL) { - free(hbfontcache.fonts); - hbfontcache.fonts = NULL; - } - hbfontcache.capacity = 0; -} - -hb_font_t *hbfindfont(XftFont *match) { - for (int i = 0; i < hbfontcache.capacity; i++) { - if (hbfontcache.fonts[i].match == match) - return hbfontcache.fonts[i].font; - } - - /* Font not found in cache, caching it now. */ - hbfontcache.fonts = realloc(hbfontcache.fonts, - sizeof(HbFontMatch) * (hbfontcache.capacity + 1)); - FT_Face face = XftLockFace(match); - hb_font_t *font = hb_ft_font_create(face, NULL); - if (font == NULL) - die("Failed to load Harfbuzz font."); - - hbfontcache.fonts[hbfontcache.capacity].match = match; - hbfontcache.fonts[hbfontcache.capacity].font = font; - hbfontcache.capacity += 1; - - return font; -} - -void hbtransform(HbTransformData *data, XftFont *xfont, const Glyph *glyphs, - int start, int length) { - ushort mode = USHRT_MAX; - unsigned int glyph_count; - int rune_idx, glyph_idx, end = start + length; - - hb_font_t *font = hbfindfont(xfont); - if (font == NULL) - return; - - hb_buffer_t *buffer = hb_buffer_create(); - hb_buffer_set_direction(buffer, HB_DIRECTION_LTR); - hb_buffer_set_cluster_level(buffer, - HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); - - /* Resize the buffer if required length is larger. */ - if (hbrunebuffer.capacity < length) { - hbrunebuffer.capacity = (length / BUFFER_STEP + 1) * BUFFER_STEP; - hbrunebuffer.runes = - realloc(hbrunebuffer.runes, hbrunebuffer.capacity * sizeof(Rune)); - } - - /* Fill buffer with codepoints. */ - for (rune_idx = 0, glyph_idx = start; glyph_idx < end; - glyph_idx++, rune_idx++) { - hbrunebuffer.runes[rune_idx] = glyphs[glyph_idx].u; - mode = glyphs[glyph_idx].mode; - if (mode & ATTR_WDUMMY) - hbrunebuffer.runes[rune_idx] = 0x0020; - } - hb_buffer_add_codepoints(buffer, hbrunebuffer.runes, length, 0, length); - - /* Shape the segment. */ - hb_shape(font, buffer, features, sizeof(features) / sizeof(hb_feature_t)); - - /* Get new glyph info. */ - hb_glyph_info_t *info = hb_buffer_get_glyph_infos(buffer, &glyph_count); - hb_glyph_position_t *pos = - hb_buffer_get_glyph_positions(buffer, &glyph_count); - - /* Fill the output. */ - data->buffer = buffer; - data->glyphs = info; - data->positions = pos; - data->count = glyph_count; -} - -void hbcleanup(HbTransformData *data) { - hb_buffer_destroy(data->buffer); - memset(data, 0, sizeof(HbTransformData)); -} diff --git a/hb.h b/hb.h deleted file mode 100644 index 96e808b..0000000 --- a/hb.h +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include - -typedef struct { - hb_buffer_t *buffer; - hb_glyph_info_t *glyphs; - hb_glyph_position_t *positions; - unsigned int count; -} HbTransformData; - -void hbunloadfonts(); -void hbtransform(HbTransformData *, XftFont *, const Glyph *, int, int); -void hbcleanup(HbTransformData *); - diff --git a/st b/st index b2515a0852ddc711a78d909f38df29ce12801056..cda195825ba929bab65b29d40654386561579141 100755 GIT binary patch literal 108600 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 HO(gywIQ*7e diff --git a/st-ligatures-scrollback-ringbuffer-20251007-0.9.3.diff b/st-ligatures-scrollback-ringbuffer-20251007-0.9.3.diff deleted file mode 100644 index 32aea22..0000000 --- a/st-ligatures-scrollback-ringbuffer-20251007-0.9.3.diff +++ /dev/null @@ -1,651 +0,0 @@ -diff --git a/Makefile b/Makefile -index 15db421..dfcea0f 100644 ---- a/Makefile -+++ b/Makefile -@@ -3,9 +3,9 @@ - .POSIX: - - include config.mk - --SRC = st.c x.c -+SRC = st.c x.c hb.c - OBJ = $(SRC:.c=.o) - - all: st - -@@ -15,9 +15,10 @@ config.h: - .c.o: - $(CC) $(STCFLAGS) -c $< - - st.o: config.h st.h win.h --x.o: arg.h config.h st.h win.h -+x.o: arg.h config.h st.h win.h hb.h -+hb.o: st.h - - $(OBJ): config.h config.mk - - st: $(OBJ) -diff --git a/config.mk b/config.mk -index 2fc854e..ec69d1a 100644 ---- a/config.mk -+++ b/config.mk -@@ -14,12 +14,14 @@ PKG_CONFIG = pkg-config - - # includes and libs - INCS = -I$(X11INC) \ - `$(PKG_CONFIG) --cflags fontconfig` \ -- `$(PKG_CONFIG) --cflags freetype2` -+ `$(PKG_CONFIG) --cflags freetype2` \ -+ `$(PKG_CONFIG) --cflags harfbuzz` - LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \ - `$(PKG_CONFIG) --libs fontconfig` \ -- `$(PKG_CONFIG) --libs freetype2` -+ `$(PKG_CONFIG) --libs freetype2` \ -+ `$(PKG_CONFIG) --libs harfbuzz` - - # flags - STCPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600 - STCFLAGS = $(INCS) $(STCPPFLAGS) $(CPPFLAGS) $(CFLAGS) -@@ -28,9 +30,10 @@ STLDFLAGS = $(LIBS) $(LDFLAGS) - # OpenBSD: - #CPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600 -D_BSD_SOURCE - #LIBS = -L$(X11LIB) -lm -lX11 -lutil -lXft \ - # `$(PKG_CONFIG) --libs fontconfig` \ --# `$(PKG_CONFIG) --libs freetype2` -+# `$(PKG_CONFIG) --libs freetype2` \ -+# `$(PKG_CONFIG) --libs harfbuzz` - #MANPREFIX = ${PREFIX}/man - - # compiler and linker - # CC = c99 -diff --git a/hb.c b/hb.c -new file mode 100644 -index 0000000..99412c8 ---- /dev/null -+++ b/hb.c -@@ -0,0 +1,125 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "st.h" -+#include "hb.h" -+ -+#define FEATURE(c1,c2,c3,c4) { .tag = HB_TAG(c1,c2,c3,c4), .value = 1, .start = HB_FEATURE_GLOBAL_START, .end = HB_FEATURE_GLOBAL_END } -+#define BUFFER_STEP 256 -+ -+hb_font_t *hbfindfont(XftFont *match); -+ -+typedef struct { -+ XftFont *match; -+ hb_font_t *font; -+} HbFontMatch; -+ -+typedef struct { -+ size_t capacity; -+ HbFontMatch *fonts; -+} HbFontCache; -+ -+static HbFontCache hbfontcache = { 0, NULL }; -+ -+typedef struct { -+ size_t capacity; -+ Rune *runes; -+} RuneBuffer; -+ -+static RuneBuffer hbrunebuffer = { 0, NULL }; -+ -+/* -+ * Poplulate the array with a list of font features, wrapped in FEATURE macro, -+ * e. g. -+ * FEATURE('c', 'a', 'l', 't'), FEATURE('d', 'l', 'i', 'g') -+ */ -+hb_feature_t features[] = { }; -+ -+void -+hbunloadfonts() -+{ -+ for (int i = 0; i < hbfontcache.capacity; i++) { -+ hb_font_destroy(hbfontcache.fonts[i].font); -+ XftUnlockFace(hbfontcache.fonts[i].match); -+ } -+ -+ if (hbfontcache.fonts != NULL) { -+ free(hbfontcache.fonts); -+ hbfontcache.fonts = NULL; -+ } -+ hbfontcache.capacity = 0; -+} -+ -+hb_font_t * -+hbfindfont(XftFont *match) -+{ -+ for (int i = 0; i < hbfontcache.capacity; i++) { -+ if (hbfontcache.fonts[i].match == match) -+ return hbfontcache.fonts[i].font; -+ } -+ -+ /* Font not found in cache, caching it now. */ -+ hbfontcache.fonts = realloc(hbfontcache.fonts, sizeof(HbFontMatch) * (hbfontcache.capacity + 1)); -+ FT_Face face = XftLockFace(match); -+ hb_font_t *font = hb_ft_font_create(face, NULL); -+ if (font == NULL) -+ die("Failed to load Harfbuzz font."); -+ -+ hbfontcache.fonts[hbfontcache.capacity].match = match; -+ hbfontcache.fonts[hbfontcache.capacity].font = font; -+ hbfontcache.capacity += 1; -+ -+ return font; -+} -+ -+void hbtransform(HbTransformData *data, XftFont *xfont, const Glyph *glyphs, int start, int length) { -+ ushort mode = USHRT_MAX; -+ unsigned int glyph_count; -+ int rune_idx, glyph_idx, end = start + length; -+ -+ hb_font_t *font = hbfindfont(xfont); -+ if (font == NULL) -+ return; -+ -+ hb_buffer_t *buffer = hb_buffer_create(); -+ hb_buffer_set_direction(buffer, HB_DIRECTION_LTR); -+ hb_buffer_set_cluster_level(buffer, HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); -+ -+ /* Resize the buffer if required length is larger. */ -+ if (hbrunebuffer.capacity < length) { -+ hbrunebuffer.capacity = (length / BUFFER_STEP + 1) * BUFFER_STEP; -+ hbrunebuffer.runes = realloc(hbrunebuffer.runes, hbrunebuffer.capacity * sizeof(Rune)); -+ } -+ -+ /* Fill buffer with codepoints. */ -+ for (rune_idx = 0, glyph_idx = start; glyph_idx < end; glyph_idx++, rune_idx++) { -+ hbrunebuffer.runes[rune_idx] = glyphs[glyph_idx].u; -+ mode = glyphs[glyph_idx].mode; -+ if (mode & ATTR_WDUMMY) -+ hbrunebuffer.runes[rune_idx] = 0x0020; -+ } -+ hb_buffer_add_codepoints(buffer, hbrunebuffer.runes, length, 0, length); -+ -+ /* Shape the segment. */ -+ hb_shape(font, buffer, features, sizeof(features)/sizeof(hb_feature_t)); -+ -+ /* Get new glyph info. */ -+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos(buffer, &glyph_count); -+ hb_glyph_position_t *pos = hb_buffer_get_glyph_positions(buffer, &glyph_count); -+ -+ /* Fill the output. */ -+ data->buffer = buffer; -+ data->glyphs = info; -+ data->positions = pos; -+ data->count = glyph_count; -+} -+ -+void hbcleanup(HbTransformData *data) { -+ hb_buffer_destroy(data->buffer); -+ memset(data, 0, sizeof(HbTransformData)); -+} -diff --git a/hb.h b/hb.h -new file mode 100644 -index 0000000..96e808b ---- /dev/null -+++ b/hb.h -@@ -0,0 +1,15 @@ -+#include -+#include -+#include -+ -+typedef struct { -+ hb_buffer_t *buffer; -+ hb_glyph_info_t *glyphs; -+ hb_glyph_position_t *positions; -+ unsigned int count; -+} HbTransformData; -+ -+void hbunloadfonts(); -+void hbtransform(HbTransformData *, XftFont *, const Glyph *, int, int); -+void hbcleanup(HbTransformData *); -+ -diff --git a/st.c b/st.c -index 0074ec7..fc916e9 100644 ---- a/st.c -+++ b/st.c -@@ -2803,9 +2803,10 @@ draw(void) - - drawregion(0, 0, term.col, term.row); - if (TSCREEN.off == 0) - xdrawcursor(cx, term.c.y, TLINE(term.c.y)[cx], -- term.ocx, term.ocy, TLINE(term.ocy)[term.ocx]); -+ term.ocx, term.ocy, TLINE(term.ocy)[term.ocx], -+ TLINE(term.ocy), term.col); - term.ocx = cx; - term.ocy = term.c.y; - xfinishdraw(); - if (ocx != term.ocx || ocy != term.ocy) -diff --git a/st.h b/st.h -index 3cea73b..709a369 100644 ---- a/st.h -+++ b/st.h -@@ -10,9 +10,10 @@ - #define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) - #define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d)) - #define DEFAULT(a, b) (a) = (a) ? (a) : (b) - #define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) --#define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || \ -+#define ATTRCMP(a, b) (((a).mode & (~ATTR_WRAP)) != ((b).mode & (~ATTR_WRAP)) || \ -+ (a).fg != (b).fg || \ - (a).bg != (b).bg) - #define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 + \ - (t1.tv_nsec-t2.tv_nsec)/1E6) - #define MODBIT(x, set, bit) ((set) ? ((x) |= (bit)) : ((x) &= ~(bit))) -diff --git a/win.h b/win.h -index 6de960d..94679e4 100644 ---- a/win.h -+++ b/win.h -@@ -24,9 +24,9 @@ enum win_mode { - }; - - void xbell(void); - void xclipcopy(void); --void xdrawcursor(int, int, Glyph, int, int, Glyph); -+void xdrawcursor(int, int, Glyph, int, int, Glyph, Line, int); - void xdrawline(Line, int, int, int); - void xfinishdraw(void); - void xloadcols(void); - int xsetcolorname(int, const char *); -diff --git a/x.c b/x.c -index 1e4bdf5..f8372ba 100644 ---- a/x.c -+++ b/x.c -@@ -18,8 +18,9 @@ - char *argv0; - #include "arg.h" - #include "st.h" - #include "win.h" -+#include "hb.h" - - /* types used in config.h */ - typedef struct { - uint mod; -@@ -142,10 +143,11 @@ typedef struct { - GC gc; - } DC; - - static inline ushort sixd_to_16bit(int); -+static void xresetfontsettings(ushort mode, Font **font, int *frcflags); - static int xmakeglyphfontspecs(XftGlyphFontSpec *, const Glyph *, int, int, int); --static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int); -+static void xdrawglyphfontspecs(const XftGlyphFontSpec *, Glyph, int, int, int, int); - static void xdrawglyph(Glyph, int, int); - static void xclear(int, int, int, int); - static int xgeommasktogravity(int); - static int ximopen(Display *); -@@ -758,9 +760,9 @@ xresize(int col, int row) - XftDrawChange(xw.draw, xw.buf); - xclear(0, 0, win.w, win.h); - - /* resize to new width */ -- xw.specbuf = xrealloc(xw.specbuf, col * sizeof(GlyphFontSpec)); -+ xw.specbuf = xrealloc(xw.specbuf, col * sizeof(GlyphFontSpec) * 4); - } - - ushort - sixd_to_16bit(int x) -@@ -1063,8 +1065,11 @@ xunloadfont(Font *f) - - void - xunloadfonts(void) - { -+ /* Clear Harfbuzz font cache. */ -+ hbunloadfonts(); -+ - /* Free the loaded fonts in the font cache. */ - while (frclen > 0) - XftFontClose(xw.dpy, frc[--frclen].font); - -@@ -1189,9 +1194,9 @@ xinit(int cols, int rows) - XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel); - XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); - - /* font spec buffer */ -- xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec)); -+ xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec) * 4); - - /* Xft rendering context */ - xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap); - -@@ -1243,144 +1248,155 @@ xinit(int cols, int rows) - if (xsel.xtarget == None) - xsel.xtarget = XA_STRING; - } - -+void -+xresetfontsettings(ushort mode, Font **font, int *frcflags) -+{ -+ *font = &dc.font; -+ if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { -+ *font = &dc.ibfont; -+ *frcflags = FRC_ITALICBOLD; -+ } else if (mode & ATTR_ITALIC) { -+ *font = &dc.ifont; -+ *frcflags = FRC_ITALIC; -+ } else if (mode & ATTR_BOLD) { -+ *font = &dc.bfont; -+ *frcflags = FRC_BOLD; -+ } -+} -+ - int - xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x, int y) - { - float winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, xp, yp; -- ushort mode, prevmode = USHRT_MAX; -+ ushort mode = glyphs[0].mode & ~ATTR_WRAP; - Font *font = &dc.font; - int frcflags = FRC_NORMAL; -- float runewidth = win.cw; -+ float runewidth = win.cw * ((glyphs[0].mode & ATTR_WIDE) ? 2.0f : 1.0f); - Rune rune; - FT_UInt glyphidx; - FcResult fcres; - FcPattern *fcpattern, *fontpattern; - FcFontSet *fcsets[] = { NULL }; - FcCharSet *fccharset; -- int i, f, numspecs = 0; -+ int f, code_idx, numspecs = 0; -+ float cluster_xp = xp, cluster_yp = yp; -+ HbTransformData shaped = { 0 }; - -- for (i = 0, xp = winx, yp = winy + font->ascent; i < len; ++i) { -- /* Fetch rune and mode for current glyph. */ -- rune = glyphs[i].u; -- mode = glyphs[i].mode; -+ /* Initial values. */ -+ xresetfontsettings(mode, &font, &frcflags); - -- /* Skip dummy wide-character spacing. */ -- if (mode == ATTR_WDUMMY) -+ /* Shape the segment. */ -+ hbtransform(&shaped, font->match, glyphs, 0, len); -+ xp = winx; yp = winy + font->ascent; -+ cluster_xp = xp; cluster_yp = yp; -+ -+ for (code_idx = 0; code_idx < shaped.count; code_idx++) { -+ int idx = shaped.glyphs[code_idx].cluster; -+ -+ if (glyphs[idx].mode & ATTR_WDUMMY) - continue; - -- /* Determine font for glyph if different from previous glyph. */ -- if (prevmode != mode) { -- prevmode = mode; -- font = &dc.font; -- frcflags = FRC_NORMAL; -- runewidth = win.cw * ((mode & ATTR_WIDE) ? 2.0f : 1.0f); -- if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { -- font = &dc.ibfont; -- frcflags = FRC_ITALICBOLD; -- } else if (mode & ATTR_ITALIC) { -- font = &dc.ifont; -- frcflags = FRC_ITALIC; -- } else if (mode & ATTR_BOLD) { -- font = &dc.bfont; -- frcflags = FRC_BOLD; -- } -- yp = winy + font->ascent; -+ /* Advance the drawing cursor if we've moved to a new cluster */ -+ if (code_idx > 0 && (idx != shaped.glyphs[code_idx - 1].cluster)) { -+ xp += runewidth * (idx - shaped.glyphs[code_idx - 1].cluster); -+ cluster_xp = xp; -+ cluster_yp = yp; - } - -- /* Lookup character index with default font. */ -- glyphidx = XftCharIndex(xw.dpy, font->match, rune); -- if (glyphidx) { -+ if (shaped.glyphs[code_idx].codepoint != 0) { -+ /* If symbol is found, put it into the specs. */ - specs[numspecs].font = font->match; -- specs[numspecs].glyph = glyphidx; -- specs[numspecs].x = (short)xp; -- specs[numspecs].y = (short)yp; -- xp += runewidth; -+ specs[numspecs].glyph = shaped.glyphs[code_idx].codepoint; -+ specs[numspecs].x = cluster_xp + (short)(shaped.positions[code_idx].x_offset / 64.); -+ specs[numspecs].y = cluster_yp - (short)(shaped.positions[code_idx].y_offset / 64.); -+ cluster_xp += shaped.positions[code_idx].x_advance / 64.; -+ cluster_yp += shaped.positions[code_idx].y_advance / 64.; - numspecs++; -- continue; -- } -- -- /* Fallback on font cache, search the font cache for match. */ -- for (f = 0; f < frclen; f++) { -- glyphidx = XftCharIndex(xw.dpy, frc[f].font, rune); -- /* Everything correct. */ -- if (glyphidx && frc[f].flags == frcflags) -- break; -- /* We got a default font for a not found glyph. */ -- if (!glyphidx && frc[f].flags == frcflags -- && frc[f].unicodep == rune) { -- break; -+ } else { -+ /* If it's not found, try to fetch it through the font cache. */ -+ rune = glyphs[idx].u; -+ for (f = 0; f < frclen; f++) { -+ glyphidx = XftCharIndex(xw.dpy, frc[f].font, rune); -+ /* Everything correct. */ -+ if (glyphidx && frc[f].flags == frcflags) -+ break; -+ /* We got a default font for a not found glyph. */ -+ if (!glyphidx && frc[f].flags == frcflags -+ && frc[f].unicodep == rune) { -+ break; -+ } - } -- } -- -- /* Nothing was found. Use fontconfig to find matching font. */ -- if (f >= frclen) { -- if (!font->set) -- font->set = FcFontSort(0, font->pattern, -- 1, 0, &fcres); -- fcsets[0] = font->set; - -- /* -- * Nothing was found in the cache. Now use -- * some dozen of Fontconfig calls to get the -- * font for one single character. -- * -- * Xft and fontconfig are design failures. -- */ -- fcpattern = FcPatternDuplicate(font->pattern); -- fccharset = FcCharSetCreate(); -- -- FcCharSetAddChar(fccharset, rune); -- FcPatternAddCharSet(fcpattern, FC_CHARSET, -- fccharset); -- FcPatternAddBool(fcpattern, FC_SCALABLE, 1); -- -- FcConfigSubstitute(0, fcpattern, -- FcMatchPattern); -- FcDefaultSubstitute(fcpattern); -- -- fontpattern = FcFontSetMatch(0, fcsets, 1, -- fcpattern, &fcres); -- -- /* Allocate memory for the new cache entry. */ -- if (frclen >= frccap) { -- frccap += 16; -- frc = xrealloc(frc, frccap * sizeof(Fontcache)); -+ /* Nothing was found. Use fontconfig to find matching font. */ -+ if (f >= frclen) { -+ if (!font->set) -+ font->set = FcFontSort(0, font->pattern, -+ 1, 0, &fcres); -+ fcsets[0] = font->set; -+ -+ /* -+ * Nothing was found in the cache. Now use -+ * some dozen of Fontconfig calls to get the -+ * font for one single character. -+ * -+ * Xft and fontconfig are design failures. -+ */ -+ fcpattern = FcPatternDuplicate(font->pattern); -+ fccharset = FcCharSetCreate(); -+ -+ FcCharSetAddChar(fccharset, rune); -+ FcPatternAddCharSet(fcpattern, FC_CHARSET, -+ fccharset); -+ FcPatternAddBool(fcpattern, FC_SCALABLE, 1); -+ -+ FcConfigSubstitute(0, fcpattern, -+ FcMatchPattern); -+ FcDefaultSubstitute(fcpattern); -+ -+ fontpattern = FcFontSetMatch(0, fcsets, 1, -+ fcpattern, &fcres); -+ -+ /* Allocate memory for the new cache entry. */ -+ if (frclen >= frccap) { -+ frccap += 16; -+ frc = xrealloc(frc, frccap * sizeof(Fontcache)); -+ } -+ -+ frc[frclen].font = XftFontOpenPattern(xw.dpy, -+ fontpattern); -+ if (!frc[frclen].font) -+ die("XftFontOpenPattern failed seeking fallback font: %s\n", -+ strerror(errno)); -+ frc[frclen].flags = frcflags; -+ frc[frclen].unicodep = rune; -+ -+ glyphidx = XftCharIndex(xw.dpy, frc[frclen].font, rune); -+ -+ f = frclen; -+ frclen++; -+ -+ FcPatternDestroy(fcpattern); -+ FcCharSetDestroy(fccharset); - } - -- frc[frclen].font = XftFontOpenPattern(xw.dpy, -- fontpattern); -- if (!frc[frclen].font) -- die("XftFontOpenPattern failed seeking fallback font: %s\n", -- strerror(errno)); -- frc[frclen].flags = frcflags; -- frc[frclen].unicodep = rune; -- -- glyphidx = XftCharIndex(xw.dpy, frc[frclen].font, rune); -- -- f = frclen; -- frclen++; -- -- FcPatternDestroy(fcpattern); -- FcCharSetDestroy(fccharset); -+ specs[numspecs].font = frc[f].font; -+ specs[numspecs].glyph = glyphidx; -+ specs[numspecs].x = (short)xp; -+ specs[numspecs].y = (short)yp; -+ numspecs++; - } -- -- specs[numspecs].font = frc[f].font; -- specs[numspecs].glyph = glyphidx; -- specs[numspecs].x = (short)xp; -- specs[numspecs].y = (short)yp; -- xp += runewidth; -- numspecs++; - } - -+ /* Cleanup and get ready for next segment. */ -+ hbcleanup(&shaped); - return numspecs; - } - - void --xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y) -+xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y, int charlen) - { -- int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1); - int winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, - width = charlen * win.cw; - Color *fg, *bg, *temp, revfg, revbg, truefg, truebg; - XRenderColor colfg, colbg; -@@ -1514,23 +1530,26 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i - void - xdrawglyph(Glyph g, int x, int y) - { - int numspecs; -- XftGlyphFontSpec spec; -+ XftGlyphFontSpec *specs = xw.specbuf; - -- numspecs = xmakeglyphfontspecs(&spec, &g, 1, x, y); -- xdrawglyphfontspecs(&spec, g, numspecs, x, y); -+ numspecs = xmakeglyphfontspecs(specs, &g, 1, x, y); -+ xdrawglyphfontspecs(specs, g, numspecs, x, y, (g.mode & ATTR_WIDE) ? 2 : 1); - } - - void --xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) -+xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og, Line line, int len) - { - Color drawcol; - - /* remove the old cursor */ - if (selected(ox, oy)) - og.mode ^= ATTR_REVERSE; -- xdrawglyph(og, ox, oy); -+ -+ /* Redraw the line where cursor was previously. -+ * It will restore the ligatures broken by the cursor. */ -+ xdrawline(line, 0, oy, len); - - if (IS_SET(MODE_HIDE)) - return; - -@@ -1662,30 +1681,30 @@ xdrawline(Line line, int x1, int y1, int x2) - int i, x, ox, numspecs; - Glyph base, new; - XftGlyphFontSpec *specs = xw.specbuf; - -- numspecs = xmakeglyphfontspecs(specs, &line[x1], x2 - x1, x1, y1); - i = ox = 0; -- for (x = x1; x < x2 && i < numspecs; x++) { -+ for (x = x1; x < x2; x++) { - new = line[x]; - if (new.mode == ATTR_WDUMMY) - continue; - if (selected(x, y1)) - new.mode ^= ATTR_REVERSE; -- if (i > 0 && ATTRCMP(base, new)) { -- xdrawglyphfontspecs(specs, base, i, ox, y1); -- specs += i; -- numspecs -= i; -+ if ((i > 0) && ATTRCMP(base, new)) { -+ numspecs = xmakeglyphfontspecs(specs, &line[ox], x - ox, ox, y1); -+ xdrawglyphfontspecs(specs, base, numspecs, ox, y1, x - ox); - i = 0; - } - if (i == 0) { - ox = x; - base = new; - } - i++; - } -- if (i > 0) -- xdrawglyphfontspecs(specs, base, i, ox, y1); -+ if (i > 0) { -+ numspecs = xmakeglyphfontspecs(specs, &line[ox], x2 - ox, ox, y1); -+ xdrawglyphfontspecs(specs, base, numspecs, ox, y1, x2 - ox); -+ } - } - - void - xfinishdraw(void) diff --git a/st.c b/st.c index 8a3ca0f..af45169 100644 --- a/st.c +++ b/st.c @@ -2805,8 +2805,7 @@ draw(void) drawregion(0, 0, term.col, term.row); if (TSCREEN.off == 0) xdrawcursor(cx, term.c.y, TLINE(term.c.y)[cx], - term.ocx, term.ocy, TLINE(term.ocy)[term.ocx], - TLINE(term.ocy), term.col); + term.ocx, term.ocy, TLINE(term.ocy)[term.ocx]); term.ocx = cx; term.ocy = term.c.y; xfinishdraw(); diff --git a/st.h b/st.h index 709a369..3cea73b 100644 --- a/st.h +++ b/st.h @@ -11,8 +11,7 @@ #define DIVCEIL(n, d) (((n) + ((d) - 1)) / (d)) #define DEFAULT(a, b) (a) = (a) ? (a) : (b) #define LIMIT(x, a, b) (x) = (x) < (a) ? (a) : (x) > (b) ? (b) : (x) -#define ATTRCMP(a, b) (((a).mode & (~ATTR_WRAP)) != ((b).mode & (~ATTR_WRAP)) || \ - (a).fg != (b).fg || \ +#define ATTRCMP(a, b) ((a).mode != (b).mode || (a).fg != (b).fg || \ (a).bg != (b).bg) #define TIMEDIFF(t1, t2) ((t1.tv_sec-t2.tv_sec)*1000 + \ (t1.tv_nsec-t2.tv_nsec)/1E6) diff --git a/st.o b/st.o index 3bb5b102cb4cd361af6e6a2354763dfb85c81a9f..a6cb30901d5d4f48c0035247f6cc2d0d89e0c1a8 100644 GIT binary patch literal 83304 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 literal 112580 zcmeEv34B!5_5Vvm4Tugdb*~O83a+dIuDC=8CGNED7?J={NH7Eis}-0DFouA8-Hq0& zwOX~c8kbt)8kbt!X-hRK+KizZTUvt~|L-~XoHut)<{_cBzn}k~?~|Fl_kG`c?z!il zyWjWb;^Hw!6c!W&dK3f)1=%Y_gW&MrWYJL!j|zGPJ%h1{^!tg~D+U5eq%Z1Bq^EZz z(qr2a^~G(8ba5;HPj&{exj!TZ(9!89@DHSC>We{tc1-$}Hj)SSQruXYAa+Af$6lJ* zMS>;jOO_@Ew17pj!7S-W6f`H&B^~Y8189BjNzo+EvY?3*ud+K>Zr#4Ps}L($kBFbm zL7-WpVSVuEP80oix1n^`NGQ23H735!Zy>(TuJQdR6LlOXIVTT09{zH55TuKcxHgxd z7?Id2WSPt%@Cujm;-*AH@e(p#eQ{Il@zAX4;-?Z#>O07`C5e$Ov3Z-2n0oM&ojqc6 zolqrZR&X48$!?UD;M@d`RnkV1k{3Hk(JIja&dw9Av}xEm$v_|zWAx; z)(sE>V#anR3Z73FKLD?#6u`r53hGN9=-Heuc?$Zrun|(BcOHsp+JAx@+31ad;!cr{ z`jV&EjA9}9zjz&t5N2~9B5Nrkw|W==9|;Z&Un@!^SFImQRs+p2ooIwMBb`O)ayc%MaV7`{?yTQTRenva5d#%``b{GvR%sk(ySLE zR=-@JrkGyba7|44nbh497_<#rm+WmCCZ*dLJAV~eNe1o4;9XC4Mqh4vFkP$Ey-Qe&#TAY z?eq&}Zkdmj=>@duKzwD^!&mI_Lf_t_0CBM)?X+B_sT|<*a1Y$2BQfZe#HXJmlApoD z_N424cbh`?fF)U9bCR0d3KI`g^mHU*_cm*V0!d4~cw42B>Wn>Jlw5__2BRuN)e`Ck z-D3|f&UysQnJ#|qYZ*(vmhs}(GFs}3UrTnbj-`4d4XAqPyp9^XOamo~N?2Oc)e0^= zw|?xBTblRcbwx)5R;@NwT#E z`Q%lc5oL=L4^w?c2j^>8R`Zh|@yJhvMfQnA@`>K;fhDc=y$V|Dx#CE^(}R5As^-{( z&r#X%!#*E|MQM1VPkpZe-40Z=E-@j{wV$p^l)aK@es?|2bM%4=;O{7xC2jS^E2&0? zQIL%&18r3IC7XN19x6a#hAVT?FM_SW%#3vZ30t_koZHa#s4e2LI;y2e_~O;bhW6)i z+9j8?`^c3F*J6^%)ERK6U9&{+;x;|$bSHY*;a{?3kpZ1kq*PO(kxs1y`-_(9P|;Cf zhAlMpbJNIdrg9ZWXPJ>u7QV}7+6I8$FNoDqHO3lbwjh%D3swc1M$r3$z5uRld zvBcJEK}brw@HBZfslBhH4VF5!dHr_6%KmWjM4nH94MwGsDX;4XKK* znA6)+D66_ykM#^?d@Vn7)_)-qm(I0Us=NFqsu*eDCA~s_grnmxE^S}K(flZsHsc4O zZ8Ve9#b4CpkG+K4h_jrghL`ApLE%M12q^BzDo5R8v3E%)F*apJXUJGc-DCFP_Vw9_nHnz$ z3*}gRp@*}KY%FzF=mL(`3sSfB*F_te>^LyhWHc7f{0-$;Z0A`g5#8*eP3WlSo@nyj z9@JsF3Z2|nsKH2=H089FFNeLDm(fP_uJ2P{Q1C?e;z~9n(130SDq5GAiqaT=mE4C` z?Y{b+Ic;E5LfXI*bk1GVh{mrdQSdSXEQUcA*SpT#USwTdqLYU(#Z5GUfDt2CD!kS|Xf9Dz%G{*%k z7!B1IFLw^8{R|`~J$AWBY0V?0m86i+%mwJfB7SbNw{odr9hN%P(k06>u6NjqK@%cM z7fS>6pX)TC`&`nrE?t@bxlWTfOnu2RH{^l0(2xfmIrNlh*nGZSw!lwYa!VsR8S7LUUn5Z%#v#j!X1^0)@JF5XI@bui zh8ZOkq`Ej2M;bPvyGZ>x4pU#Um@2!GPsCE3i~Zb>18KQ3t{ZHSB%m);i5c!b41+b=?8)s)7-iwkVSe0U2&qrj4;3u|$iq4v{Z^<&!# zUdA-gU%FQXle|934-4{#vUPrQSm)EYp!d4e!~ctFd{>PoGZ^vE%*C3EF=zE<7@TIV zq*5!DXqYE%#Fr_+Jk9g5hI8}h&FlHC95DjreEmP!6n8&kuB42i*)g#&1~#c4pRQh= zL{Bf3rm}~7LD)|kGba5MeAc2k) z21CfHaIAxC%=VyEk;4S(;uZDy(@ycCDL^xH1vK4^IX4hcWQ$j5=K&2oHyzu7Lk^Ig zlj&%pt}JFqn$e@zWTGE?Fu5Z~_MdA+pk7JKx2usxrqIlWGktCWPmc{p+siX^zcU~8 zT1u!Z16g%8s$AD7aZ81nub-=)}zRB`c^gB_HMaX7Sdx0&jL9 zjb80{P8^jBC9Pc=i0`8?->H+6yP0(PXSX>`}~jtEij!wyPB(l$O+5yunep ziqp~lbH8d_zN9T%Qv3+wf5}T`w6f`)1y_HQ3$9yPBVwb@Q zxed!EILR#^CSjM_DgTWY?kg6oCySl{b~7h&ZX=ZG%q4Ab0Dyb?JQR;6k~WHxzX1Nl$3sG*ll z#>w5N1E!x;H+jJe|(jrvr#S~2)l_OkYx&~Eob7v8kg1rq$-4e8` zzW-#S$WUz~5*HU>X}7tP7snUw9O7#X&yqB0p}7X4-QarAE3=yVx}_hZTAhs+3oGGs zBWtXB=5a-w<6d>06x`c*<%o%f2EIX?sv6pe(iBkRg(Felz){lntGXq0i>g$*pX0S_QeFH~EV{`Nd)|67#R~N49 z=&C7>2fr2b`4|c}!665}q}In1;4Rh%y7nJfv1;2sLg_l=dwe)VAz=Y!WU; zxz$xRlgV7V-A5J^VOrO+q@KZDm;1?B`KhZ{6e))faxxhU7FH2T;o$_ZoA`9V4UDPg3;cS(-4!lJzmF+sCB;m@OjgE^Ljf zNI_Q{kz%wXB1?0+uok1%Mhn_U2nkVTUkX;XigC&EYAUC5rY982HgluXi~Wly{RdMzI;s%L`ZQf&n_dxH|kkY7RO(qQL;N$ zq`tslar8E9MHs(a{P<)aNVr|i8N)ike6|@S|PhzDdpVcI7KtG zfy&bo$#quDdS*_8nW6O#UNO85b4BcuFVdvZ!zjzn8^XdFC&|v17}S~_AqhZ_1Vq7+ z81MvUM$k`j+g`cGrEW{s^R#ip*f^eOZi{1;H1h#MN^ZEcXr7}Nh>0Uu*1_EUkyciV zn^$O@iuEO5U|EQ@Wtq@HbT`F=Bf;d92J0Lk!5lyqSx6NJm8|^9=9F^h)!WJ&nmgRi zi$z}u;C+}lWs`3QBeTiZ$4TZee1*myNM`hELR2rz+=o=*WF=esFhXNj?L&lp52{Dh z#!Ba=oL5bq!)SfO7RaMS~PN}dx%tGy(O z>Rj&jvy1vFAq!i@tXn=@&OK^{UDP6Y= zr}g}e6!eKDM?(1wuUIok6PSELyH7b>eFFu-Z2EeMf|i_3tnJvMR@Xr{({+opF;F3_ zucPlSF%ZZx&JiZ?+{$YP&Dh#>uP z;#F9d@6sGr&t@cwsMuZ`C7BcS4M^s6K0tA?2CozF1bGIiBaC zFnecx13N1EfJusoSErFF1bU-HUr$#DqYUP$gVS|wWML}!T%TrK>31jC`m36Yq@6PRy$=~>VNIN&h*$7Y?JI>SK36f65Br-K0~Ty z;c2BTJgsd1Q@3nDt5j0Hu}`J|eegnR-Xum@@ZxPN9TX#Nbdnf5B*qTJh$e@HV6_#E z9g2$EUyAmuZwoi`ytsg7E8uCW_GUzj%CWnqcQffQNM<86YOG@y51=ilaNulp;PpAk zaGkVohNq?318JhY2znt1uO@NE6Q+TZAs&Ti%Mx8Bn?fbaZwJ)H*5>*DD&ql)Pxs;cN)#x>O6Z2!%_>-DSA z(1ngbT~2WV?6Ty2nuwHLSEJ40a`os6M%`K2uxq)4Fxk8Xbx51GM@UnDqwt&g-^`Cm zKE;Kt$kdWCb$};Ds&0DI!pZMgpeKCBpgDKMf_X)^0M2q(PuNO@zrE6;~V}3Z$ccw1K|24+~k)#84u(<(V zYj%1pT#TA*7pD`_1G5%)Cep=?uuG#e4_0B&HPTTg7J+H=*_zUAHG)WaYyop=Yzdh$ zL}O0{b2J|QqFmr;+*~1hP-Z!*E2kXIP^>XdG*Crk+)YO=i8WjXqZz}Z!_ZxovpTtY zqI&{3os^4-bYZ3zy^Tx^Lo1nEbHdZt^K!XPjh54;ObXAr1l$Kq$+L(j~bMak&|ln^4Kn zG7Jsts7+-J(C^h}s<2}#+aq4cc16tj`zZ8*%bcQqV8^Lox#Sg9Izy6 z>wjBL&1bj%Z>syOx@#hKnzavvPQ7k=?^d9k?fzJNr;TB>;7)T5ya$H7ho4Q$JQY?% zYd)B^rKT9qq6}mG%mz238O3S0=eFd+>oJK zo*|a#(t-JJ-kr(y#yQ!JN_J!ByWKKVezO16XO|~NXxt68S z)uWb-ohXT>fyhxh@bGO*LKZnNahzP-8@mR%JJF}$>ZZg7jOxEOa z-&J0i6ZrqsK;Knf+&98nOY({6uEuwj*S%gFmgixXJe60sDkWYM>2}4GHvsxsIgLW@ zBqI8t^)#3+!QiA@zMoArnz3{rNgXd@p@k}V85=3Fg`OVbDsI7)9QM*Ugw`nP%M$voYuOlnSBC{_*|A@@0UX|cx{gf* z^=z;ZP_o3mYRnsx@z5^2pD`Sk@yLTmW*DDgWQJ#*^N!4P*u#ro`cyPVX5sp}zq<9J zljGeDhiP$tnC6B(^ln&!yE>sX5O|v&F*9-OW}zXXZe8)-S{7nmUX6z-Lbtd~ua8{e zzv*mEVQ6H>ukhnt0h!xLJwIl8s?6ydN?9~Ji_sv~?J5vb7eLdn;DBr>#TNDNiY=gr zE=`OJY0IipknEGYfk9V%T^L$K#h=Ddw;lMhQzW}z-HCGBg~H9cNHz^KTn_L(&b17E zbDs0UDlI?r*xcC~XHb6cp>S59%*f>+~-lKD4wV@sLGRs+lpVPS&h zxu>!LwNY1>A<9A&7kPh5oBUsaqU0omNgf5F&T8?~e*cA$E4u4wK-OW$%m3Ww0A2jX zj5IAMb519)JP}q2@{)|YAHkmdn6g_rns*Lo1Tz1}v3dMLVwzn!#63&Il_l*gt1sY3 zcT%*UjXb3bff`+Z%PRKm!h7Au&wAuv_DMlhAW+M_uV`uZDTLXr0rr7#`8b&)X$zZb zawB>v4LzTT;+qq?DUKVo`={$I^gP__vsYuqYywvQCpa0o0zwwQhmfjyjmm$aHYw^w zWp9N-R%3$!qM`=^Sd9$0e8>r!L`<9qEEK zmlm2+=90G=TL6zapnKBB_3MjNDN|vkSN|+@_dEE0E4OO6-}+5e4U|c=Q7~T>(?(l~ z@;&g;*5yGB(l=60_a6A*7ry1yhhN;9PoLH<`n1+_Ve3wR7zY0qY}`waeGR6@Ofx#s z&OsI(NxP}3R-k^hdx_rCb~wn=Xm^LVEyEMy&I1=cfv_TAnFv@00o}16UhC;%3-@9# zbJuvTsTWl!cy%yoMBOoZVE`8!u2?7*zCyuTjIKbD>kV>$gRXm<>mJ;lnc(g}97kx( z;?N`1^kUL=e=zDb{-uR3MK-6HjYMS5Do!UXO1X!kyzO>eI}d1C!;?{L)^PVAB+&B- z9U_-jy0V>uwH)~7%_x6T!R|`o0Nf;ftD4hr>W-RIIQYuY#rV-Vs}3 z^su)d>x?wxD{rUFsm^gH+Y+*AkSXDUBMnKPBJbrpJS1IALsGFJ{26cer||lS@qf*S z#C2o~xaULI>HVD#VOM6p7diendqvLQ~oNwgqW*N9c zr@m+gx!${fYD~Q9AoDOfj;PW3UJrCK(3My~gG0hl z3ehtzUQ*B9DjkNe;d$oFou0J9+?e>C@fy>5UGLHB8J!kg@4*@5Ub={TbFM|5S3(ti zaVuUdg_GDk>R`+5W$2O3+naAM)7v{{Z!e|WF}}T2ZqIey^QCwK2u&Z?AFWjVL?%1u zg+Up5Y7nY4xAvLcf>UhpUe^3hQBSlyOM9Y}FV8g4WP&84@ZUBxy*)RS#%(NYmuom~ zfBE;f7VQL$96Oi7zsH4pv4uxPFuLyo+eApB{9m4#7jd`y@z76e$=efu0T)lM!mE>S zr7mTpM=UjuPu7p6W?=FnGZR;s^az`PIH@HQ4(vfxFXN9NW^ULO zZAh2R&1l!8)xtQ%y%MDmo1kM4af5>q8KRirhT{oW@bMU=Ym9O)Gf!lLC0hz4Oy+JM zEmZVsAMK&&EFUdW^lTsPqv%OK8dvlnA04G=|13JYWfp9tH)7cv$<{9vU4=(2CH=|P z&lP>oM?Y2c_dfcuq7V7#+lt=eqrX$MK8wz7y*O*_Obu?JpmE{l$so8s#?xWn0i!nR z(Jr6~DH_UgreqF4D3ei{{_7;^?_3G8RL%0tTfo+&Q|7l!Fdo&k1F1+)3@&1Kw;o47 zQ`IlFs4pkPgvGtK9VBh#s4cp$YAAeEgm#^!u|>N?+-o}( z0}PRWM?OwdIiYNsQTgtZWzJcH{PL{)BlCr)jw{@zb*-B|9vWpnC0U4itJtE8aY`o* zAL9Kc$46;$#W2}xTbDBeizRvXsK)tj$!KRw5b zXf)T4c|AmvEZqR@2hE4TqwuQ4#Te!kx3yzn@0LcsLS;&KGMA#d;g?Yee!%U{&P!*xa7Y`rDj8=W><~S zGD&&#u-2~xLp(ud5CUfQ%!a;_eyR}DVNJ7emy?9mL5XC2&~l<}+IlgQa=~Dfgv=)T z1vU~(bh7e?EYdi$Aun6IkghwPW9T2cc0jeyA7e19i>^CzjPWk`hKy4)k+bZT`4~_W z&7~UrO`>YAfy#hen^_E4bBg>l!(Vvp*_l>;+)Gzmowf3anMq>U&;4mQH}k|(KRl`H z2-up-GbedB=30O92HQ{*J>o&`RXHSzJ(#?n`k>n&$+ASaf?E?V=x)t$Ez*>E2!RlJ zfwkMsz%$q3iwmB-NPDfT^vqeL3tm08du-8lP?=5|wxfz~)rPS}H1?pAh9y)d(%ZiR zzJ=O+1S6=;KjIVA=I`?fYV&1$f^H~R&q=@8tJ?W|a|E2dY6YJk%;$gO^IucPnZ9PP`jmlN`MekB-4RUOiqEg* z^R4-O5OZAq?#K9R@XuK47!o#tzGNiRmMNsn8icQ=QAma<0ozbkxcWckRX{C;c`BtZ z{Yt47vLs-gAFxlJfFJt-UAMzIq93p*Pry(8fK{YDRrKBVx1ppf{0;W`2TYS(1sD35 zPvALU@d+GaZ}ycfVyQE6lDV9|Zd>Iwy`vx{^E6(w7BO_?Qp&~8wIVyAWs>4gD>z)< zvM;kj(!p!@q4Z0gxCuK3a;FfBP%*)nUCe6_1mw6y$W{yQ#T$(QmQx&G< z?C|DU;mu_0+mf?mvY5WwI5Q%Pk>PmoNu9Z$QU=iv_}s%M$h%+i2}(V!{JS-fyOBXz z!_~Pd7p`OdM{h9=%GpI@8D7uoGWp`tbEYS)Ko*Ji4AsL72PQ~l?bzy~tyR*>Sj}(xUt!$sMYvY=4ZGsnF>`t-OVTCb z&-!K^YT!C(5N7i~ieR*f)Eu#|`U&MpLwX~YyG2cy__IHW9EOu=V>|;iI?TW9%2=jA zUTX3orl=_$>9LEk^2TxSEOm~*cwMbbM^+l@rG-(wH?d8qv^t7@`HZw{HY}yBn3IIG(bOcj9@LDuwqh0w-8CHjz7Z*JBaZItB16Gj5m-{^n^1Z$@HKTz*Cu#wnVIEtYN7j`xCT0sp$foDGe>jHErH+{0a+JMgeQZ=BZ*kUFZf3@4~s1t%*bJ}hV%YOoOmoXo%3K6rc@D8vh$Ew>S#VW z6wL=I@%rBhJ{;p}4pEGeF`pa}OYQY9x^*PxXK|9bn~9@isl^=GQL)rYJ~=v;nuCTa z**PYb`WGfalbt28R0YrI9v4d$v92e^Qv30(lVYg_ILVA-VH0DEe!vP(j5Tb|k)0Y# zZO$Ri!kQH$rI-VNdn7x@$5LDKNm(q_%tgFHP&C81M+<6NOBJTRVccF*TvJ$L`=W7zrjp@*X8V13{L{=!r?N8m*cqwOl;bw zpRRU4TRn=r0;Pt2Xdxjr3T>N2hadaO#giA~Ca#m6y<&CbmthqWc8n>A_cIllg&G1s zudsF@PS+6It!;?iT?iW9%E&End?8CSZ4(k?C>RN zIUYz-$VWWGIFF{c1mkz~&?_S=(vPF_DZ$u@t#FG6FUi779XZ+B?q)Dtb-{sTxtFI6 zC9swl?@!#NPkI*WABX@8cJQ&d!Ff zch%a-Sw!_tV3i8_A-}~)?+)cFsp~lHnZAUo*&-`B?haB)@zP_mR_1neyh8omLnLjz zus}vdS$viknrV(;4u`0v5MD&Q*3LRmn7WaW8m>L}NHmn(=eC*N$qwKg>rSbzmpj*R z32^nVtZMrKkyf-CNK!F}a}_*SHPn`NjSDZ{#d0nc29#Z@J#flhN>6F$Ufcw@`YY?6 zJUQl6+JL&OWUckYS~F0`=2*-549ypZurxs2okLf|jp<-fP6n%eDA7G-j0JbbZ7qeY z7FV@+$|bDDd~T};ntRg7^i$1{R~<;k|HHM-cQOv~pAY!Aridbg`XjKQ5XImFj`LS8qZ zE(urFy<>|G$9b}|cdX$-?nI#*@}w^6XLM0N;9HmnUd;WgUb^7EQ7knJw=%BJIy9F0 zltZA`_G>1hYxWX%#HwSdr}<WB9shwH= znX%L#85tK#E#Z@M5Tkmg?}%Qh$QpvPGOYKxJLoE3I7kQ6TotUUNyiV*fIzK)p0_LR z;3xKU8IxXyE!8(3J8NKv<(RuX>W1G$aw_3fn^?lfdjUjPy5x)Gs{LcBZAldUco*^k z%Npdjs3f^}+0p*0+;NMi^avy04*Q=@`S}HzYS_enV^F zk)yEl%N^~whcMc=#JfT)xu&^bOZ&8h( z6Aybh_cgTLaLr7Y;QV7T9F%|2?s(D~g@ROZ&1fhW?H)T1Hv?l zH9fIGT6{}ijqF}Y+vXY1)kWCB)IiSY-Ec3|=e*~p2=hw`eWF9RK(!)E+E7ck(vY7Y zEhd1Lx8t$YsV*nO`}1f8#NQ&-2YHJvQY?dB*X4eD8JA1BkEV`68^f1UDdhXkE7~7R zaBm3`xq#+6ap(|~BraR_w@GLkL4Gmd3p5?{nH6f}?oRGcpwPBLGy(LKp=gJ9zeBr~?N7G< zqy4hXxh@JKHB^XboX_R8L5$hm17|MkV!6-nj+e$|?%KzS=LuG}w;}GH>;x2gFU?##IR$m?{clu4QAN83MjbVFE=UoV$W!;y2)FR~~+CbqQysT;X}A z!ui>UPRS2dyJY8xSlz_{)GodgHB7(_ll5;4u>-M%-qt`HO@-LOKGH!Rj5;4LP+Xal zt|syXH;~ZBqS~KtzqyNtXJ~6m({cEkk6#fxi!P{>Nf#&51^G8!96=Xn$OVo3Fm2K~ zyYo^yOFf2$adzj8eEue%-^AyS^ZCtu{xh7jdvFP-(DH;mc}tLNkssR#6^sKV>t%j} zz7H3BEvK1c8dbYsw0{l!+W)Zay9i zR&GAJm6|lSDZ|KTo+VGXrkz)B&OS9Ene*$}+ za(i3ar^x)AWZZ@?N?vHaTLqZiIS*0A7VUu;<-B1$JR#Y+d2G>q+@h0)p^R*#W3G*2 z4QKG62(Gma-@<}RA3nkU=!tv_JL*>PPzpQh-qOL>Zn%}%8d1}@Ewv33H;$$L$@e#j zr7mD37E7JWC!5Ank5GsYSh?A(=pp!?-O1+-v<)uViG9^>d3xJe>I6oxui8zcUyMav zAhSDXQP@-s3A>hs&0(OFZzlPCET5AK9|oEIM1BS0d7966=JQMVd@DY$=ktyDd;y=+gZZ;N8~FSmIM4hU zr?Wd3F+f|>wS@1;foMF3^$5l<=kv$;{0ct*6$!Wwr?Wfh+ij$j^9K5jf!Uq35|1%5 zpI^=A7xDQ|`21WxzlP5%`21QvKLzI*moe8fuz+vgz~{60+|@lZ`P|h#Q~2D~J*7D3 zx<`to&LwuOY~F$M2uXJ!aw*8X6PBi=ZWD7iTD%+5fVms@;)Y))9D1#wm>5Ye);*3F zhhYEQ>Z8bAx}axqBO4-SLmm0+H3ml919}MO<}F zwX9X-Ldg6#YM}!Woa?RZmu^mH<7vf&3*Jkd17=pE$nh#PH5E9g3YP_C-uLg|M)uAN zbSDR)iaj^<9YECO`cOl|b7M|&J?`-tRwM8$YR};ps`IXWQIp_iv#A@$zcEZ+#eGsV z`A^bCPK%La#V%8xTOe8r!i%i)A(2iRs7^?B4%Z5Jc&vdoA16C^j-@t4*`a5VQd{v! ze^i2eG9Z>3%_qCZQlt1}k63CrPBOc4&=Io3we!GOs*%MX6ieODCs>gk$|0~KdohJr z$?%yP{h6@_+Rn_YtyeM;Q(gBnf<@Ff7&$GLI*F0fW2tL7IA*~bfMo9AE6jkoRZuLc zzQ-Xj6*h%KVDjw(KEdSMxfEhLLU6`~^}#3@hB_ad!FUD`1D$y^bBd8tvUA7S+`)Q| z7Jya|+1G?eV|VaocXHh`7rU37pM;zC(WQfwi(_-B$FJ@&io2*Z;g7rXi&wHfXoJzM z%_M-zI0-k^H_`KqCz{*hAfXG$!FP1QmBBNwtL42=$oGKy$lS$9w#L~VX+%VWIbIOT zH{?=!52o)={!GfF89vO##qHy8Jx3Es+q;;9R+9AbO(SL#)6CnMsG`qjxfNd@cbR#P zrLlspuAwCc7bbxRn&-G#50;U57}-n*zkF*hmz$%CU^$^Tw_+*UF$KwXX~JoTocm#n zY9e}t0rtvZyAqc;uE%f%G@P&(Y8W&j{k+BS1IeaTsh4if_tY-NP+M@a)raPBT7C=( zetRO8L#_D-SMHn^VpS;$F8^g)nLwohWsw4`*WG(DRF$Mv*S2 z2>duUmsHg7*oF-Gu{ks-^7P>9jlVL@8)V~mN!}D(8jY#5^4LRF=l66^Iuxm-|?%t27WQ!cZ2s8W~Kh@G7RvGN)tmjNCsBv4+yu@^!+qkmiHmc-Gy z{lc4OXzvCdpKDc{Iq#c9-l1=MbI@2oC_1h5&|K`HqS?=(UB*MmML7+qO8L(6pRP)j zy^?5t7ccigb%U8QeH*vyIpndtE9Do3B?d2^)1NA&dB1YHp-&wnxO;yK`=Z;Oj2{si zy8`nYJa)u$jk$Fn>mew(k`uZ` zlYH#LEVYl8^HoHT)g46c$8s?Wa&-uW*ex3({%{-@ybef}L|g^Dw|>%c^IrL zjpKQk9<&Tq%Jn^t!o|!tBK#^tlXqHWwa6PVyL1m}35FgP?v@wgt$6quN^WBO_H3;@ zn8La?tblXJoy(iV=)va(Dq8v`vHFtb^h}HQCNbCa(wrW>1PnzR4Lf>NG{-o0nJet{ zh;#NC6LdSJpaTs%IoYnKZhCSnuU|qiZ%@gQ?yYyWO1Bol+Sme*A_OM_6%f>yPIfDI zvRzLS=jdd6JxS&zISH-WldP4?)>$}V!TlYQY`qw->f>2VtumTU!!5nY>?b_z9!${y z3tpA%#GKJidXD)e*DG&Lc8s#JxEhq9Vm(F?NOwLb!R*;sI7&(D7_4}3awniG-V{e1 z+?QT?6Q1fd0s#{%ON~7z3Xf3bHZZ1u5gifM|GH9Nd#znmL=ub?O6sI%Gll_DpyelsIUS{rD zcBNr3+lpAS)c{K?BJD8qjBc7}$qz1L^idF7upQsTs0Zh6z||qY3%ziJyTxMAMs7|G5~Tt47G3x3Lx8`23z=3aSiW4oMh_? z&ejz)cQ0FC(5^F)hd1(8(O+;vx)S_AZW)4Jv=+YY4~_wMTa3JGLf$pGW*Q|u^m%v? z7aK#bM^Z!r(CX5)#kg%*tYg1GAe9t&6Cfvk51ly>Je<7VzVS36VsY2 zn~R}~EjX6-=qf3jt(<^$%vJUXlo0I?pmgVY_{gqVo!`UBMX9pN`egfy5S-vzXgzIy z*mF73FwGJ*gA%)Yk<*P`qmJ;h+;S3SQ&lBfD#Mb|eG^V17t-Vvetq&#>9Qr(iW=tr zLUKjtsT$nZ9zG~F?0^=%pKa$kQLd`UY3S+6tmI-Wk<+w?tD#V+=hCnnIk?0<(_V)z zUC{oj)D+0n=GH>E=MvXUQN$WyRv{7$Ny$Aa<7m(x6}p|gehDv{rHk7C2w_?O6OUXL zBK-8$1NFrZASse0f1ChR3?#z`ZX?6i4O(Ek5Pj33P8Z%D$e?TdsMm*5)#}9gZ`Yut zM$8SM_tu+Qm~X{PZkJL?m!2hcxf(i=eC=7vo&)MxYQuvZ*A`5Ax2}&S<;}az7DoHS zxwn?4qk*Q>4)vSj#iFo3RjS;`qq#!+hdv4QfZ(Q-b6&fIpkaM%fAQPj@Z9I>Q8>95*_<&QKHkU{}l-(x6{zUyx*B_3d4Z?1+l+WJ!P_`__zl;ceTu>;3U<|H%RF?)rZ zyl6!~bZHZv)B2m8gXXG$TVSmnn)QVGkX)75V-qVqHB`STB#chK>Il>?8uo>3iF{NAQe{^6gjWDeD(H;F`eI~JaM5|@}c`0n^WXn}!;xC ze|lxPv&Q+8s^g_K74ezX(+}EjyW+HGy0g~6N8hAPbfL;kmG_e z#~yjiAtlAZ*b|FS5Mtt3T+{vF{L;$W%BqR+3Dq_6sg>pNev``M6G|&5S4cEvlPV{d z$17%3)>f3q&#$bV6rWaGT04DOykB{*z}>8^sF_k(RZ4{N=@s$X>iD$EiB+YOnNnF* zR$Wt5QC5p^wKL;WOKVD}R3HR0Iv0pfuBe&_@wL^}@yXRy6MF@RRZpK>UbS0oybKP( z!Gpbm;+h(0T0OO*inQ)GZ9j4ux{Ob*tg49b)^FNwIr`JBsfgH56ViH44p3QLRy#R< z(&%FkJMplSPC6y$UYTkEzl3ROs;9)KO{$nY+2z8WWxk6 zL*xDXl@I780rrcJhqY=Zj*pjBPez9I?>Bu<{tFrFD00F?Cy?CF*KOj28S&EE+8Q`r ze0tS6Rn_NLg@p2o38m8~*CGXLVC|>D;!|rX&x1F|kxBa?@yMzv)#VlJ%`V0)buB1m z(<p5?tvNWNhwrmm{ zT?|R-uAWvll)i%P&geI-U-|wp^L`YZKKpbz*)SNoe?Wq(Ysk;y=c7bdP$H|i-~&M- zr&d=@tAH<8F+M@OIjF6fUR73FTUlKduP!T_4qqtG#*SiCF|nq4dR2KazO?KdIR$H4 zbxoL%%Bu59C!<~&UplQ~-=V#NgS*_(q`5-S^}fsRvk&Z7zGr;ufmGc4S52QhIcqBw z5U;96F(iF7=e>-AXOP|dl|>jH_fGF6wac`Ms&cAb#-qreBN!EF!jL1?(`%6Dbr3ywN7f2skKhw-=zJb^I16Z)FGq{~r)3Jl^?IP-)EE-3&9}a< zV`ssSlZO6I;qS#bO`^I(W1{VHEJyf?j}ZI|gCD@SfH>!lC;lHUxL)i3F@n?1MmlIq z7ajEAM?tV2s!Vq%ekv{taYql@TTaJ$_z-_6Uj>26yG!sxG$^8rZ3VsnSHRAY4 z;vJ0tl&(`8Oc#74gnw<3yS`oUGQm%f1Z^l;I#uvriGkWgUQ%#g!35U7r@Qfz;EA}q z{-dOuHY2k>_)o_s?qBes;Pmc7Iu!p{@acj}@`6pE7s>gN;F64Bd%;OBI+Wj6@U-FY zD)?mvA0jwC3PFeZ+epE0GV%`={5Hcc7X0T1uLe%}*moBve;>JjvG9K>*Kv0{p!Eq# zFWHq2TCSs`UhsCocXn`anaDq`p99G5bTkT|>_-PJLep`N-~$AYGa3Ys2tHcy%>{o+ z@Y4mCe?hC@X9~c}pa}Dk;L`-xcnjbcl&*z>YdP&LI6Z_z2aQkZ=qEV6sEm&7-M?T6 z<0vdrUV^y0F`V(j5Z2p=iJU)(oE=2YXyBAD;~#K9Ke>O3;5Sl5hhvlost`H!7!n=0 zvdb>W^VLQQ9pGR>``uvpkC*#=D{R^HJ{11YEE;#*i3Gx44 z>VSU;{<`4LQ^kv;R`mZ&@Ock9{8INX*b?_i&VdIxps(Qc27SUGJi`H%;#Y?Xe&V4H ze@rUMV+7yoA%`C>a!wI^^9c_4HT0lkg5a^^-1QwIXR6>kj&t~2_b-?!_|F9YRP;#; zeuLQI2g1Kx@b||%U~h@{df){}nbsp6BIl=!uNRCI9xnO#x!?yHoZgm0`FM!Ie3tnRIX9Yjr;J+7qtl;8y!K;GPj|9+xOFsT6_-O`zTkvrPe_!x2 zgSQJl(cqs5evZLE6}(z-`4@aCIQ={h9g44qikIv&T>#Md=qdP2gU1BF$l%`-e73>2 z6THsgeFaY&d^f@A6_9kOK6?pHKjYxzLj=Fd;3EaU*5C&Vext#Q1;54MM+^QlgC8&W z&kg=V!S6Bn8G_$$@G`-FWAIABA2xWk;J-Eabitbimw&;J1b@o#XA4e`rqQ8%dX9kn z;RS=!!X(v8&r~}8;Zgvu6};DEhf}*w$L)e2Smmy@A4flsMRG1N_>+RaDfqq;|L=j5 zJ}=4jASW((Rq)k1C_ zO5xWFe^&?p&gIf~!p@KeMNmjI`9Z6S7)f5D}KZ=-+<7F=y`>GlTq3BHq&^Qhodf6$@g z=%EsdcTa;qEBGLT|6cHY1;_L$AFl$ZeEjo5cdg@?WrD{RIee7ZZI#G5P~`M;w}aJ! zk2mqIkBCUmiGoYE1se%|j^MkAoJ|G4TyQA{!B&D_CAgSB_`cv*3%;w!*;(+%1gCK< z9Rmb^QE=@y?jv}s;PNjRCODNRI#mDtfs@^iz0BdAa=%#kylnxuXc3o=qXnmOMu+03 z3BFozT=G$h6Ow=APu%r8g5N3p4Pb9Nw7maP@Ert~>xSu5-Mrg}=Y>9}}Yb&mqEp zTlmw3Pfy{Io=b$UF(PM<;2#Pu)ewGJh2$3oonl8VFAD|# zLU3I2LF0DP=VOVtui!TWr}WNmbij>*-zj*%TO1(&g5L=Ki~v)lV6+H6b46k#q9nj@UyCREkS_V8$L30c?gCE|D7*^1qsKx$yq|C<0#) zfnUWqW~6p>LJlu*|F0GNV|N)$mH)RgE*IXvdl@eX#z}b9lZH9@()FS6Kaq@GDzfOI z#(exeBJfd+7X;_Pu5|3}{sqSij#VH&elGZ_fQQN4m-Wr)=V` zhX{Tp{_7ar-ErU4kI1M0T_WcJso1EWLC5_OeA*nDPyXTv{&Nxd>k;^}2%O#+o=^YJ zf#=hw5dNDFr+Kn`ayE~^_l&@gj*x#+1b=)4UKxR(AAw&DJYTwQkKoh%OTP3jj=-N~ zydW61oAU!5-@F#V|8oTXK?J@s0$&w@(~sQc(|@xFeCr6Denc;yoIMyX2wvIUrFRPa ziH?IJ_%xqRz@g(VU zpYX}=>G-AK*9~*mJq2F|JfHu35P^3@;62dJp zJ+qVGXCCBmo#)$E@VyRk_^x8-IgC5Z|K1Yv^69f<1U?9OK08d0z;B3A>>Ii&h1U@f9{?!runfJx~+ zeX&!J`lEDg#JD^6zqgFQcZ$IGj=+aAUJ%^g;-qh-ksMG~J!J~kJ9)>&K>=<5piK|~ zR=TkmI<4Yd?CikWC7)GRPbd${rj+9wyGw%UwG+nAtgWE`Q%a|u!~ZL*+~tg52Jf2) z-1iK(CrGvi1!MLeIVc!64lAQo)#I>Nh!>?fB3jrE$}1~^8M1RocMwsS!NCl-g@~xw zNkrHXif=@DMHyE0y;D_e1TR=)0|4K{O0Ck|Dbw6)HbjiWrkpb9RaQH5YQ?zmq!|{& zX{j4GDNgKa5nx<-<;2R`X=JL(s><4+mNu-=Z2;I)Q&USPWs@sPYv`n^x&{Wo-jJXc z>&fMn?smnDTC7cTh^o@5^dDPKuqJlzADP5O(H6G7STW6Vnk*dN?*h1YhS`Es?H0hmDN;Fo(#K8 znMzWj7~LKoOvmN{Cg5rWK_l@sXy8C7DDa?xgBTjj-$VF&D7#J-_5;Cy(`HUPZ=BmV z#5$cfH5kVV0xO#|8A-%OC2}DWOj->ZxG#SXN4jcf^4GZ1nu*gG96{=pO`XXXBLfJp zt(Za=g9Zjud38NNpsI@V85=|yRfaUtW+6rf2Wlh=GbDiL4CcGoO2mYr0c|4U(_ul` ze6=@aNfna$TEba+tf937ueoiH_2z#_@X(K}DJ#-z^PQbRQN{)(s+*Z6X*iP#b*S= zj;AVc*^l_VqH5ao8Y&Tx$MUhK1lvuN0~r(z-$(s|?PFx=+M3#Gq>*$lCFPM&+ISJ1 zR|}^bH;_%jo`#)!WFB(mL4(Y%}F(jgpb2z%)e4m*Uy4&ksvIP4G( zJA}gy;jlwE>`)Fnl*10?utPcQP!2nk!w%)JLpkhF4m*^?4&$)HIP5SEJB-5)@W^HjKdD&u){d)zHkGSdXzCvJ@%(etEj0RKe@E(oWQ?u)^$uhpTOH{DE<3#-1~Ce z`*Pg-a@_k4W5crJ5N%(o;LE3@n2^0CTj`W`N1>YaPNr64a}k<_YT7vz(00!AOD9th z@(z;4N!fP;_5^z8|<+KfFyAEf&4j)cxpuvLwV^h^QHq1C&^PZ?+2I{`hR>Rr)!`b>HIO-7` z^$51!2)5n`j$s7HFoI(k!O0ylf*d!S+>sm}t(p|NvT2kcv{+y{KZkEua!P6|Yq8ge zOk7!3jcr?W#a4BD2&<<~7r z(&r*)MY#$e#C7;!s>7+_M6Qq7doWkxg9lP#2M;9Kg9lP#2Xloy7!@+O&XBZ)%59&j zML$5#iHdrU+na)o02Up&Q~BT*ENoTFj_wcLDCTT@zvd<)LQ2eDFf z2NtS#u+St|`WBCyF#!$yv`G%1Q8@*kREvtAuY;gi`cW8m@ZKxD!;Ozy zJp6f_D=ym+c;5O24}Zqvzv$sQzeK|`n#xf*?|b~;d-$d@4kCU2;NiP?xF7Gn9`46W z`-ehv zPjJ%5kC)ct>9Bh4v3?e(wG5T7>xsng?cw)(d>_~OJ&NX4kAEe`rF0Pf8a^t&H^y~z z5dIuKiVyT~T5C}JK*32L8iOc)LIi(Y1ivM!_0 zgR4G2F}UW}jRud4oZAhq>uPr!d>7&0FF3_VdvG#G6`bU5i;v1#pDG0$%2&K!1U^J?lH=#sL59BzOAUe}4IUT#ID@O6rx;w*HQwMN zCa5yF%0J)Ws?UXjlm5Q_`Tdl@)D9|tVT7EU4X*LtXK4JXPm)R|0;v4pVt~(?L5ce%Aap=NA8#~Kteks0@!Bx(t2G{g%WpL$x z-{2~Lpuv^DzrmG%h`}|zM;cu1Tw-vw^H~x2IR;lb=Neqh7@Ti#JuA@Ahbk*ZT52yB8`Bes2{Vy`O`tt%0 zC;5#M!A&0S_Xi#{xX^>A4X*b5qrueJ$;^K*l1y0)c36b_qTdmCKkA8c^d=Qx9F zyrl+LIW-1XeeUvb-)=7%ocxH6KO4M}QS^;PAjzPQ^0zd&^7k{i@{cyS@~aK5{83~D*Ld3u-sr>!y=5^^ z<*5GOGr00c8eI9u8(jI*4X*sT23P)F23P*023P*u23P)Id2oWR{dy@OxTaU-Og6a6 znQn09Uu$sX-*0f`zix2le_(Ls_mTpodMbZAgDd}FgDd|hf?GelRdC|@et0|$R&i*& z?kWhbHF%@k_^rV;-ai;z`JWnG`9-pTs_`m+PlGG}K!Yp4)ZogmF}U)tHn{SiG1cNJop~01Zi@}xuw854ChQXEpnZcF6ku-3cF6HlIaOIzF z@Ia2AcsR9#%5OHfTn2A@IK{0;n}?Geao6A@gKImr84bE{P<+qfqxljSoMe+6w z9BXjppJj06^N-Hvk$;EBCwppt;BkXXvlzVS;l6!346gdDGPvsVed_Guu<0FU@J40@ z!6^n;`DYtk`3nuM{F@D~{3i{r{0}_b_qSd$Kp_2nyY(};`r-Z_PGR&I?cpRx?RdL<^R>-%Kw|eHQs+2T$ z{GzN@J3KEqrR(<|{)XVhClf0FJ;5#iLyu2;sFeSAkN=*BpWPQ1ILOY+@lpPdBk%mK;-GYWfRE}^DLC07?&0Tp{J(nm43AGyshn96{COUqPL;nX zf`6aK-`V3o>haq=e3{4J#l!y^!T-|Z_w)Eg6d4Y(k1u~O!3%-!ijV3)B7%RU;FRwf zkAIRUXEzTY7a?b+hkxktuZY0!iNK$Yz~70$KaapSA>-m8`?TYucG%9tS9tg#f|K2- zZCCynkN-ChKf}ZQdZ60F{qjC5LjENlKERWIohQey2O2%TuV;sc@9xR@GD6NkawZ&< z-aYWq^d2a94`6=0M|rq!xAB6L|9s@hnd0$Z^YHnCQ@ne5_*EX?kN5Tn`Hy@2k3BiZ zk<;TK{rz}r1gCiS#z)h8vB&r0ZT4_q{#H~NaFF~Cd{oYEf|LAxJbWLI|A~j6{%jc=)ps`0Jh=-_QT*;l7{if*_@7kSD)a ze_Y@oKk?h~xZq^Zf8wL*I?}^^{YwNV`5Sut(>%Vf=M)e3^_=U;8SKfq+T;8FaGS^X z4mZ@V|Sw&);DWkZ@Q%2MA8~ z{}Lb7^9T=b_3)!T`~?p`!^8c2sTQ2#9pUjW^!R?h%<=fX{tXfM^%3~bJlwa>eS%YZ zM|%1^?D740pNhbrkHA|!+>bZo;lBKydqN2uWFMcuh2W&8KaMN+_!OoQA37R5zMrlu zBKW`Z`1>Ke=KDWA{{9~RWduLI7sc+%?`r&4Ikg_{%fE^`4LGbHJ`jO_9D#2_or64b zMn~Yc2u}9I<1C?`_j>pXxTX3(6@f4F@E1M)O2H{z2Y7e^buw^JyuP1rD7dx5t`YdH z5%@ix{1(Ka`geHv7aqO`btZ7wc#n#}Q-YKJzMShk+_&4WJlwa>^PcejzmyI8-0yZ*K5LW(5JBGT_7V z69!lQWP_{xw87O5_ZnQ~ylQZj^SQyDc0q6gHHtWh=g((W2(J1!5(!7z;41$C+b^WxN5!J+Z0{M`*+>uA9tf)meguTM7oM&Vy*aFu_f!Bze}5%Pa+`13{n zV+KzN{*))@5MXMb&piAC4=t`RVN=xZ3S*W(C3V23P;7i;%NGaGQ_Uc(|XBi#<8MKmS>9)kov)L7hb$7T?+6 zYPUlS?m}Z*aqehO}=NW_dMi@HYH26>l2QliL;n4J|oWX+A^+ujO zhkN*;xTpFbW#lyC9vvq};3s=>e7ntv;Q!3v8t?rEZ{%2m;B|v*x|SPU<*YEc%IQPO z;js4E)8LKF3WDPduJMjDxW+rt;3}uy;40^4gDd|@gDd|HgDd|lgDXEaD&RxYtNbAb zSN`D!SNjhq{t*x>RA{C$Hr z3cn{+;y4QBqxx)S@J1rx*w^67KgQsV%npJYgDXF2aOK}&aOF1{T=~lkuKd*oSN_h2 zJH>2z_cXZjPcpd5pKNgDUutmW-(qm(KW%X3zhQ9Ye`avy?@5IO2VEbDkNWvRf@^x! zPf84~{3!-+ge*EPGq}ckoxvNKjra8%T={PpT=}0FT=^Rv;RLGw%HPM}${%HL<(C^= z`3nuM{9hSd`Hvc0`EMIs`JWnG`P)$@;m~v`e@}xqG7IgI!IfWXaOKw-T={nzT=_2= zT>0-9T=_i{PBE+hwgy-JK?Ya(#~NJu(+sZsl);sMr@@u~rool}xxtm+dvw5urc3!l z4X*rRgDbz%;L5+i;L5+r;L5+(;L3m1;L6|qsDKZv|1kzv{tpeV@_%G-r{4Wiz{JuvAd}z9qf3(4sUu|&Z&oH?1Z!oy>A27J`ml|C88G|c-<1qmr zR{tFguKYs{uJS7kuKcvYm4B1LmH&*vmH(!}mH)ZHmEXH0;6u};{DB5n{vifeeucr6 zf2F~d-(+y*KWA{|e`0Xu7akMvVfEkD;L0CvaFu_W!IeMR;L5+$;L87!Ij@( zaOH1tY`}-6OZj~buKdvkSAMC%m0xFY<=<%Va;HY{hTz1bs#p6P9~!>)PdYvRwjRId zaZVt~p)P~U878=l`e|LqK} z{DTdy^2Zxo`Ew1f{Ob*_{3i{r{MQVw{7!=_zvmAEJ~Um*-^<|2Kgi(9A8&BwUuJOS z|Hk0Tf5za-|H$CVUu|&Z@BG7n4^5ZyhZR z@?$5n`e8kw^0zj)@((b$@=r3j@@E)a`DueI{~m)Y|8avW|6PMCzxOEtADS=9A82sp zk2JXQ&oH?1ryE@P*BV^;cNtvyFBx3zx|#q3Kfot_D~BQ3hB3ID;#Hp23xW zjlq@wn8B6*dxI~K8eI8*HMsIS z4X*s{PY?LebSZx?gDd}dgDZcQ!IgiT!Igi%!Il5I!IhsexbinWBjCg8Kgi%WI9hP9 z!OI0d#^B1IDmdxk_n*&;;9u_Xw?!DO_wMs>zyJJ#CucqIw-$Z=awZnxT-`De!2>enH z_vPQ@;Us5!(evjK_`L?-Mfi_I;EN5e@}Kc=(&rkH^O}eI`uxemef`@!ocOBGM;`9W z|H8w4e&IN$0C9c!F~P0dB|6GL=8u@KYlH zW{*!xH_HFD$EP$X{=C5xlxQ698(e>X<#U7U@5>aP#lhHSzWmKCUf_7!T3q%M{y=b& zu?e`U=c9(NdOj0@zh>|vNmslSf^pC##i4ReHTW3eml|BtJIUgr|J4RB5jnr|aDo=# zL&vKI*L+_gIO%u@K5B=e@f0dMj#D|?8eHYc%sc>hi z&t$prso*5%FZgJ@vnS;8MQm_Y1pZtE{+9@R(}}tAHQs&^_$d+ilnDG%gEzY9f(Hyv z>87K_;Ejw1!3u*b|4V}_zwaa$Q0=Vz!3J0U4-BsS8w{@b^@_n&&c6(0$u;ShnpV{lDxM+DwO9G>D$;G=%Kr{J0{jd!rYQ*xu& z;L1PR;L4v8f&VB1PZ?b0UvBV5x$&UEDSdSO&ftxV2Els9b!oE^v^Y ze}s?fdAQ&`fxYG7KNOtg{L{k+O~nNcl0$8R%GqCVE9ZE@t(>2FaxU`Z+!G;ZafF-$ z&qZJyq|cA>QGJdS-0E|x;8vfXd2%lHF?*i z$ndrOO?iBOfA|8!pC$2LV{p~y)(HHU5qMJs{!|41QUv~|2z+@2-VuR+7J+Xt%_ZF0 zzfT0deFVO11U@(dKR5zEIszXXftN<$=S1M=N8qy~@P-KdClUBhBk+47@P{MtCnNAb zMBvLJ@Gk|Y@_PY3THZIS&CPc$FFOcs%h#?E{38Xo@=rJXSuVO@k|*CUk5eP~mqp0` z$naJFqo?PlOXK~8!Ii(!dHMOnJbX4NYPW+0xAo)+g4=rXhaNu1lao3>H(r&0O$7d8 z1l}5f?h~0!g1S z_^5pb3$E#EbhKdq2>gf${MZP5mf+S7mwR|0&pvl}xNo;dBJdYI+?Vr?hx>9?M&KJz zVa7pv`f|4Oa9_^e5%@tK?#nsR!+kjuBJdwa;8#cBzl^{i5uC~w{kD$g`)3}16z(Zr zK%FxjmcNzY)=x$l+=a#*qrp}Fxq_3O6Zj}T&%+P*@RvM%l!t%d;l4eKq#`0c>pcEu zg4=qgpWvjA-_N{{I)yk0_vJq;xV6KQ2>j0x`0@yxJCTUf%I`^?%RKlN5%~8b@R1St zp%HjV1pb2ve1?b5g}$1 zJ5v~)&mS6r?-zlOiog?slWb~IG~N><_~%C8=SScdc{rs($6rYg_tSNyhZ8@A4;?oM zPTWKAQ9bYQ_`aN{Bk&g@@RvQ@*Yiye_vN>FxUXl2;8xGo9-j8}?==e-I7o&c?`E?I zb$NaX{%d--pGBy{>+xUl-DVM*mD9*qK`?NZJ5l+H?;n959)Tb0;l3RfMBq0FPUUDb zuRgy+aFX#FKB|AS;FkXfkN=g&|C8X9E?=LIBJlNRgNVcOcZ|UMc{qi6j6(;(P!IRx zJvahC#>0I%KM=s z^C6G#%XvKl|8oTXj)(ht{?)^M`G5CtU(aBUOQ6+rBf*L5%NY=X?-PL!^Kg=-_SxUV zefcK}ZuL1cf`4HIJ|_a7@8N}>J_|kE*XMS@tv(NWe3FyGhmNNV{(ysnKN?)%;4_0O zfBmFmP`n@DqyF+yX(Z;Qb1ioowP zcyEdv$4e3TYZ3ULBJlSNuKk2B1t;D8@l;WYqwi85?izvb8G#Ru!1oip2cl`fNAvwC zk1r-*MSfs#&6kP@yvpEm8C)nQJs>sV#XHCFRiAo;YrNM+;I|r_mB-gF46gE*3Eso# z^H;;yc>iT^mA~5H%HM|u4>+v+VSrpj0pLY44;+2*SQ8)JKPc> z=YEe*X;8m?$HRR;`J2I2&o3hI^{I1@L+zmH-CS^Mw;c>$jCsJecQFsP?}`5?mxW={Oo6 z^^?s#zOVnF2z+=1eqaQCgol$(s?RZkQ=CV5`kdnNeSOZ4z%PoxlM#5m;3Rv77w=CD zU-PTc;0Y-lcNtvs@flBk%9Hg}^{Ei6xUcpH= zO)YD@k3{g7M&NHn;F$<~mEaVw-;Vd7K`aiNk2^)+{Uh+bBk)lk?&ohpaMH)`&z$7( z>7JICGYqcfWun2gyd*vODacVfFEo6WbB)1OPNOGhmM7;KkH65vU-tO^ICq)H_x<*L zgOjdw6wqV=4&q*lkLurFaI($j1zG$=5BK9O^W;z%P1jt5tDUbixbmAK@W&(Yrwp$B z9`5_$NDm+7@rwl~-AR_( z?W_p?RKr(2XL$TAynOtL;p_g}`wc#Z6u@!B|Lg4RtwchT^-SqO>PCu-wGR zQy-uC{qlPk6TS_&wn&@_B{)w+7dKKPCO4G~U{N@K|{McUnXKhXhxjX2CW84&-we`JA5c z>67poMLu_v&(#T^TM|Cg$>$#OnVs-in($ej&~G9=*Ylg;n4hR;?b|I03$NQYYv7j> zZ%F%PQgHW~LHfIiPbdBYalaOW|EA!&A3qAN`>~dv>@2+B`>nyJ0rB4x??L=N;uXQ& zpU;yENuQJcDdGaKmT4$ z9^C6W#~SK6pY;4aeii8-BK>O8A4cfD!9()T7L4i@cQ%T%dx?= z{udB`#I`}6mypjtiO(iJjrd05M^gTE{3LGS{XS|9{tbg`{;h&*{_Ti&BA?#m@AC@v zzf3sh+gS49`8l2R^T~f6>A4OYh;tpb5&u>l{6omX$JLbT(=xc%XMr`;=jX&9BYu8x zt=mZQ|AO>a5$C$SN1XF)IMp_`@O&P(hJ20+uKk`AT=!Q;;@s~`o-L4`Z_s4j1;TZ4gg#RY;=j*7qiN8X5 z*7A!U3(d1}aPN`W|oqYH>8caTaAfHhQpX(An_mIyL@_8WPvoPVa zihTY^J})GE-b(oFB%h_^^LfIjx?hZ1=zQo%oUe<{366P)`Oug2>&*}Q9zMUnc#Nq<@3-pA!F^^al{H=NG#cJ}%}>g8MiRvWEOylYTkzwxs8N zJCL6JPb2-;NiPVh?d|E=ke{|w@OD-8Y^@y*1aC;lq&EyR}*-$9)J zy=z=>dhVQmS)4GzF|S$+&uu%8bA&@bTzFnm+cP@h(9aYO{c7RRzakv^FNH(j+;6%p ze7%u1)VWn~jMp_Dof7)968g2I-)P&ze=~93FQ1XmQ>5RW&^Pj%E(_!d{|>=@T>gj% z{5;WD`oxeIWjp7fa|D`Wmyo%`0Mq!-ISNJ*+`Lmv|NN#pJ`+MODPT z?>W{yRwnp+V%P@>nh$bz37G`{hO9 zm{;!w_x-~2YCCZrZ*?!0h3mP_4TA4y+#C8mM)(qY&!b~-KTi4g{mvx+SM5F2c~C+> zhV76MRN+uRo7#iRdv;o)?bu z+h2vF4x1AE1L2r&9|@0-`>dKjT(dx(<2EO&9o+NpW)1tdf#~7iTzI9MT9lIypHDgy z=lR(^;nP<*=I3bP$frU$#&v6g-x=J;`!j18@BN~O|3cvyZx#9Qc-I8i<7hqU`8e91 z(Ep3{d>m!-yxPU_-ql`_e+}Y4r1RwWi1YKGro{R04%#Gm&jcTq;1h^)Dm#VODbmk&CwSvH z(fN4Y2l}!EZ<*k2g?n8+ItKT3zJLE|Lf>6@gOZE=zi-0fe?9qcF)ilXWYNQCT7o}L z+-s3XzdOl)4f%f}dhGY=3yKXff1VDXgM~wXbb_}b?qkLGyj>H#oAUVnw?etib&uPK zd#=dmj^N&BcWbEURN}V~pOx@gMtZLSe4b0_H;gbu$E%Yx2cVE6fc}4W_ z`BFIY$>Kr|RbCYoROcf6Oa^cXwARPLSg+pK8 zzs#_}cq@z5>^R}b|Hs0iKUH`|`1A_y{q?Yh`u7z*K2Luw9R8DphkdqKIP}YfLtlSM zv83ZYLOAp-g~PwSaMb6F;67fSZ@op2^IpFMpC~+!gdPy?{diOf&r3AR-V_e~uHe4j z$r|=c6aO;F0`!*(#XQOj|u$v1RtH?*ChDC{_xJi{rNo8E;#ZW zQc~F*BmJL^A)j%g2fsPNX9y4bY(avr5{`T}CwOE3^2x&Uf8HAMX%^h?Ti+tyKDgI` z?~l$PANRsM>?6Fcz2`ANIP@cg*D2&#g>d*>CmiFQDjYs5g!?!=wkG)J3Es?a(ky)Y z_0~|g4#6=W;NMd?^1M)Zg_~OR7k+JlvkAf7_cUwhcd6*xg#IrH{x$h<{`LGzK?~#$ zpEBXdzg#%-Zz~-6_X@80UnF|$-`@$xew-`Z{XEts_>SPN_}=jb*YOSzedkhdSvFkwslmq!N1n5UV}Dfz_kQ_%%uNaX7Si*4ct4@vDIEDU zdAdj#bwfTKgKPc!B=lDZN1ewDzc%V~S8%QK648$g{nMo9@vcee-xj_kd_GM0>`Lgr z6dpEN4ZkV1K;4Qp`<+$c=(m}0=z9kDI&8Cs{W4JW@cB(}KhN|3V?HOLUzyPF5Iyqw zOgQrSx9}mc!C}u93!eXt)}TKkIO>DXi{`>B!>62l`1;dckWF}VA-q zKSen7_X|fp^M%7_gK+q46%Kv%)kVUn5A=r$hrYdV==%xBe!MBcrzH4P;plg{aP+%I zIP@P1hyHWnI3Mok50NeQi^!xi{wa{_Z6^{BGDLgN2on>8xqu<`bp}$%<^pk`` z|Cn&-Hwce(vKs4(CD(1ShU4+T;21B))j&Av+*bIc=%8D0_it5gpa1!yhfhD@@EIf= z`CJ;@{acg&7}3N32I26zJ;Co44xc=@_ghZ=K0&;by@z^M5&seCYnjHwPN1hSH#aJUP|27J`@M#Tzg$>aDt`FC zUFqR3eM?Kl5C0n(4}bYZX{q>e6!D9Q`*-dh{?f0sRQx!B_{GFeA^uC^or(7+ekSn& z#Cs7RNc=+LgNP3xKA8A0;zNj!AwHD&c;c53zn=J|#3vCSMtlnK;l%GHei`wc_z2?j zh~u8a-(Ey~6zQKNKAQMS;+GR&M|=$Nmxy0M{B`1EiEkx7j`()s6~sRwekJj&ykhA1 zimZIdz>0yz&+@UCXXS&&jmyf%T{Eg;;2?Xg7+ZQBJ9Om0ke3#VZN?3Y_u2LTTJ{vZ z9UxnGj`e5aT!Xi9j=_3OTk!4o2f(X8IJ3atx)*Eq+yD#ldXT+-*Y>quC 0) XftFontClose(xw.dpy, frc[--frclen].font); @@ -1195,7 +1190,7 @@ xinit(int cols, int rows) XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); /* font spec buffer */ - xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec) * 4); + xw.specbuf = xmalloc(cols * sizeof(GlyphFontSpec)); /* Xft rendering context */ xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap); @@ -1249,153 +1244,142 @@ xinit(int cols, int rows) xsel.xtarget = XA_STRING; } -void -xresetfontsettings(ushort mode, Font **font, int *frcflags) -{ - *font = &dc.font; - if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { - *font = &dc.ibfont; - *frcflags = FRC_ITALICBOLD; - } else if (mode & ATTR_ITALIC) { - *font = &dc.ifont; - *frcflags = FRC_ITALIC; - } else if (mode & ATTR_BOLD) { - *font = &dc.bfont; - *frcflags = FRC_BOLD; - } -} - int xmakeglyphfontspecs(XftGlyphFontSpec *specs, const Glyph *glyphs, int len, int x, int y) { float winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, xp, yp; - ushort mode = glyphs[0].mode & ~ATTR_WRAP; + ushort mode, prevmode = USHRT_MAX; Font *font = &dc.font; int frcflags = FRC_NORMAL; - float runewidth = win.cw * ((glyphs[0].mode & ATTR_WIDE) ? 2.0f : 1.0f); + float runewidth = win.cw; Rune rune; FT_UInt glyphidx; FcResult fcres; FcPattern *fcpattern, *fontpattern; FcFontSet *fcsets[] = { NULL }; FcCharSet *fccharset; - int f, code_idx, numspecs = 0; - float cluster_xp = xp, cluster_yp = yp; - HbTransformData shaped = { 0 }; + int i, f, numspecs = 0; - /* Initial values. */ - xresetfontsettings(mode, &font, &frcflags); + for (i = 0, xp = winx, yp = winy + font->ascent; i < len; ++i) { + /* Fetch rune and mode for current glyph. */ + rune = glyphs[i].u; + mode = glyphs[i].mode; - /* Shape the segment. */ - hbtransform(&shaped, font->match, glyphs, 0, len); - xp = winx; yp = winy + font->ascent; - cluster_xp = xp; cluster_yp = yp; - - for (code_idx = 0; code_idx < shaped.count; code_idx++) { - int idx = shaped.glyphs[code_idx].cluster; - - if (glyphs[idx].mode & ATTR_WDUMMY) + /* Skip dummy wide-character spacing. */ + if (mode == ATTR_WDUMMY) continue; - /* Advance the drawing cursor if we've moved to a new cluster */ - if (code_idx > 0 && (idx != shaped.glyphs[code_idx - 1].cluster)) { - xp += runewidth * (idx - shaped.glyphs[code_idx - 1].cluster); - cluster_xp = xp; - cluster_yp = yp; + /* Determine font for glyph if different from previous glyph. */ + if (prevmode != mode) { + prevmode = mode; + font = &dc.font; + frcflags = FRC_NORMAL; + runewidth = win.cw * ((mode & ATTR_WIDE) ? 2.0f : 1.0f); + if ((mode & ATTR_ITALIC) && (mode & ATTR_BOLD)) { + font = &dc.ibfont; + frcflags = FRC_ITALICBOLD; + } else if (mode & ATTR_ITALIC) { + font = &dc.ifont; + frcflags = FRC_ITALIC; + } else if (mode & ATTR_BOLD) { + font = &dc.bfont; + frcflags = FRC_BOLD; + } + yp = winy + font->ascent; } - if (shaped.glyphs[code_idx].codepoint != 0) { - /* If symbol is found, put it into the specs. */ + /* Lookup character index with default font. */ + glyphidx = XftCharIndex(xw.dpy, font->match, rune); + if (glyphidx) { specs[numspecs].font = font->match; - specs[numspecs].glyph = shaped.glyphs[code_idx].codepoint; - specs[numspecs].x = cluster_xp + (short)(shaped.positions[code_idx].x_offset / 64.); - specs[numspecs].y = cluster_yp - (short)(shaped.positions[code_idx].y_offset / 64.); - cluster_xp += shaped.positions[code_idx].x_advance / 64.; - cluster_yp += shaped.positions[code_idx].y_advance / 64.; - numspecs++; - } else { - /* If it's not found, try to fetch it through the font cache. */ - rune = glyphs[idx].u; - for (f = 0; f < frclen; f++) { - glyphidx = XftCharIndex(xw.dpy, frc[f].font, rune); - /* Everything correct. */ - if (glyphidx && frc[f].flags == frcflags) - break; - /* We got a default font for a not found glyph. */ - if (!glyphidx && frc[f].flags == frcflags - && frc[f].unicodep == rune) { - break; - } - } - - /* Nothing was found. Use fontconfig to find matching font. */ - if (f >= frclen) { - if (!font->set) - font->set = FcFontSort(0, font->pattern, - 1, 0, &fcres); - fcsets[0] = font->set; - - /* - * Nothing was found in the cache. Now use - * some dozen of Fontconfig calls to get the - * font for one single character. - * - * Xft and fontconfig are design failures. - */ - fcpattern = FcPatternDuplicate(font->pattern); - fccharset = FcCharSetCreate(); - - FcCharSetAddChar(fccharset, rune); - FcPatternAddCharSet(fcpattern, FC_CHARSET, - fccharset); - FcPatternAddBool(fcpattern, FC_SCALABLE, 1); - - FcConfigSubstitute(0, fcpattern, - FcMatchPattern); - FcDefaultSubstitute(fcpattern); - - fontpattern = FcFontSetMatch(0, fcsets, 1, - fcpattern, &fcres); - - /* Allocate memory for the new cache entry. */ - if (frclen >= frccap) { - frccap += 16; - frc = xrealloc(frc, frccap * sizeof(Fontcache)); - } - - frc[frclen].font = XftFontOpenPattern(xw.dpy, - fontpattern); - if (!frc[frclen].font) - die("XftFontOpenPattern failed seeking fallback font: %s\n", - strerror(errno)); - frc[frclen].flags = frcflags; - frc[frclen].unicodep = rune; - - glyphidx = XftCharIndex(xw.dpy, frc[frclen].font, rune); - - f = frclen; - frclen++; - - FcPatternDestroy(fcpattern); - FcCharSetDestroy(fccharset); - } - - specs[numspecs].font = frc[f].font; specs[numspecs].glyph = glyphidx; specs[numspecs].x = (short)xp; specs[numspecs].y = (short)yp; + xp += runewidth; numspecs++; + continue; } + + /* Fallback on font cache, search the font cache for match. */ + for (f = 0; f < frclen; f++) { + glyphidx = XftCharIndex(xw.dpy, frc[f].font, rune); + /* Everything correct. */ + if (glyphidx && frc[f].flags == frcflags) + break; + /* We got a default font for a not found glyph. */ + if (!glyphidx && frc[f].flags == frcflags + && frc[f].unicodep == rune) { + break; + } + } + + /* Nothing was found. Use fontconfig to find matching font. */ + if (f >= frclen) { + if (!font->set) + font->set = FcFontSort(0, font->pattern, + 1, 0, &fcres); + fcsets[0] = font->set; + + /* + * Nothing was found in the cache. Now use + * some dozen of Fontconfig calls to get the + * font for one single character. + * + * Xft and fontconfig are design failures. + */ + fcpattern = FcPatternDuplicate(font->pattern); + fccharset = FcCharSetCreate(); + + FcCharSetAddChar(fccharset, rune); + FcPatternAddCharSet(fcpattern, FC_CHARSET, + fccharset); + FcPatternAddBool(fcpattern, FC_SCALABLE, 1); + + FcConfigSubstitute(0, fcpattern, + FcMatchPattern); + FcDefaultSubstitute(fcpattern); + + fontpattern = FcFontSetMatch(0, fcsets, 1, + fcpattern, &fcres); + + /* Allocate memory for the new cache entry. */ + if (frclen >= frccap) { + frccap += 16; + frc = xrealloc(frc, frccap * sizeof(Fontcache)); + } + + frc[frclen].font = XftFontOpenPattern(xw.dpy, + fontpattern); + if (!frc[frclen].font) + die("XftFontOpenPattern failed seeking fallback font: %s\n", + strerror(errno)); + frc[frclen].flags = frcflags; + frc[frclen].unicodep = rune; + + glyphidx = XftCharIndex(xw.dpy, frc[frclen].font, rune); + + f = frclen; + frclen++; + + FcPatternDestroy(fcpattern); + FcCharSetDestroy(fccharset); + } + + specs[numspecs].font = frc[f].font; + specs[numspecs].glyph = glyphidx; + specs[numspecs].x = (short)xp; + specs[numspecs].y = (short)yp; + xp += runewidth; + numspecs++; } - /* Cleanup and get ready for next segment. */ - hbcleanup(&shaped); return numspecs; } void -xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y, int charlen) +xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, int y) { + int charlen = len * ((base.mode & ATTR_WIDE) ? 2 : 1); int winx = borderpx + x * win.cw, winy = borderpx + y * win.ch, width = charlen * win.cw; Color *fg, *bg, *temp, revfg, revbg, truefg, truebg; @@ -1527,24 +1511,21 @@ void xdrawglyph(Glyph g, int x, int y) { int numspecs; - XftGlyphFontSpec *specs = xw.specbuf; + XftGlyphFontSpec spec; - numspecs = xmakeglyphfontspecs(specs, &g, 1, x, y); - xdrawglyphfontspecs(specs, g, numspecs, x, y, (g.mode & ATTR_WIDE) ? 2 : 1); + numspecs = xmakeglyphfontspecs(&spec, &g, 1, x, y); + xdrawglyphfontspecs(&spec, g, numspecs, x, y); } void -xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og, Line line, int len) +xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) { Color drawcol; /* remove the old cursor */ if (selected(ox, oy)) og.mode ^= ATTR_REVERSE; - - /* Redraw the line where cursor was previously. - * It will restore the ligatures broken by the cursor. */ - xdrawline(line, 0, oy, len); + xdrawglyph(og, ox, oy); if (IS_SET(MODE_HIDE)) return; @@ -1678,16 +1659,18 @@ xdrawline(Line line, int x1, int y1, int x2) Glyph base, new; XftGlyphFontSpec *specs = xw.specbuf; + numspecs = xmakeglyphfontspecs(specs, &line[x1], x2 - x1, x1, y1); i = ox = 0; - for (x = x1; x < x2; x++) { + for (x = x1; x < x2 && i < numspecs; x++) { new = line[x]; if (new.mode == ATTR_WDUMMY) continue; if (selected(x, y1)) new.mode ^= ATTR_REVERSE; - if ((i > 0) && ATTRCMP(base, new)) { - numspecs = xmakeglyphfontspecs(specs, &line[ox], x - ox, ox, y1); - xdrawglyphfontspecs(specs, base, numspecs, ox, y1, x - ox); + if (i > 0 && ATTRCMP(base, new)) { + xdrawglyphfontspecs(specs, base, i, ox, y1); + specs += i; + numspecs -= i; i = 0; } if (i == 0) { @@ -1696,10 +1679,8 @@ xdrawline(Line line, int x1, int y1, int x2) } i++; } - if (i > 0) { - numspecs = xmakeglyphfontspecs(specs, &line[ox], x2 - ox, ox, y1); - xdrawglyphfontspecs(specs, base, numspecs, ox, y1, x2 - ox); - } + if (i > 0) + xdrawglyphfontspecs(specs, base, i, ox, y1); } void diff --git a/x.c.orig b/x.c.orig index 82c9002..d73152b 100644 --- a/x.c.orig +++ b/x.c.orig @@ -59,8 +59,6 @@ static void zoom(const Arg *); static void zoomabs(const Arg *); static void zoomreset(const Arg *); static void ttysend(const Arg *); -void kscrollup(const Arg *); -void kscrolldown(const Arg *); /* config.h for applying patches and the configuration. */ #include "config.h" @@ -1417,6 +1415,10 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i bg = &dc.col[base.bg]; } + /* Change basic system colors [0-7] to bright system colors [8-15] */ + if ((base.mode & ATTR_BOLD_FAINT) == ATTR_BOLD && BETWEEN(base.fg, 0, 7)) + fg = &dc.col[base.fg + 8]; + if (IS_SET(MODE_REVERSE)) { if (fg == &dc.col[defaultfg]) { fg = &dc.col[defaultbg]; diff --git a/x.o b/x.o index 230059b78bcba24ed175abcb7a183e297a001df5..f38864117201f59e42087d8b3977474df6a0ed82 100644 GIT binary patch literal 75920 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