From e701d1649939d08e58f1e084d7088f5323ad54f3 Mon Sep 17 00:00:00 2001 From: murat Date: Tue, 14 Jan 2025 00:06:14 +0300 Subject: [PATCH] gruvbox theme patch --- config.def.h | 52 ++-- config.def.h.orig | 474 +++++++++++++++++++++++++++++ patches/st-gruvbox-dark-0.8.2.diff | 70 +++++ st | Bin 105568 -> 101472 bytes x.o | Bin 75600 -> 73552 bytes 5 files changed, 566 insertions(+), 30 deletions(-) create mode 100644 config.def.h.orig create mode 100644 patches/st-gruvbox-dark-0.8.2.diff diff --git a/config.def.h b/config.def.h index 2cd740a..01f5efc 100644 --- a/config.def.h +++ b/config.def.h @@ -95,43 +95,35 @@ 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 */ + [0] = "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f */ + [1] = "#cc241d", /* red */ + [2] = "#98971a", /* green */ + [3] = "#d79921", /* yellow */ + [4] = "#458588", /* blue */ + [5] = "#b16286", /* magenta */ + [6] = "#689d6a", /* cyan */ + [7] = "#a89984", /* white */ - /* 8 bright colors */ - "gray50", - "red", - "green", - "yellow", - "#5c5cff", - "magenta", - "cyan", - "white", - - [255] = 0, - - /* more colors can be added after 255 to use with DefaultXX */ - "#cccccc", - "#555555", - "gray90", /* default foreground colour */ - "black", /* default background colour */ + /* 8 bright colors */ + [8] = "#928374", /* black */ + [9] = "#fb4934", /* red */ + [10] = "#b8bb26", /* green */ + [11] = "#fabd2f", /* yellow */ + [12] = "#83a598", /* blue */ + [13] = "#d3869b", /* magenta */ + [14] = "#8ec07c", /* cyan */ + [15] = "#ebdbb2", /* white */ }; /* * Default colors (colorname index) - * foreground, background, cursor, reverse cursor + * foreground, background, cursor */ -unsigned int defaultfg = 258; -unsigned int defaultbg = 259; -unsigned int defaultcs = 256; +unsigned int defaultfg = 15; +unsigned int defaultbg = 0; +unsigned int defaultcs = 15; static unsigned int defaultrcs = 257; /* diff --git a/config.def.h.orig b/config.def.h.orig new file mode 100644 index 0000000..2cd740a --- /dev/null +++ b/config.def.h.orig @@ -0,0 +1,474 @@ +/* See LICENSE file for copyright and license details. */ + +/* + * appearance + * + * 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; + +/* + * What program is execed by st depends of these precedence rules: + * 1: program passed with -e + * 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 */ +char *vtiden = "\033[?6c"; + +/* Kerning / character bounding-box multipliers */ +static float cwscale = 1.0; +static float chscale = 1.0; + +/* + * word delimiter string + * + * More advanced example: L" `'\"()[]{}" + */ +wchar_t *worddelimiters = L" "; + +/* selection timeouts (in milliseconds) */ +static unsigned int doubleclicktimeout = 300; +static unsigned int tripleclicktimeout = 600; + +/* alt screens */ +int allowaltscreen = 1; + +/* 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 = 2; +static double maxlatency = 33; + +/* + * blinking timeout (set to 0 to disable blinking) for the terminal blinking + * attribute. + */ +static unsigned int blinktimeout = 800; + +/* + * thickness of underline and bar cursors + */ +static unsigned int cursorthickness = 2; + +/* + * bell volume. It must be a value between -100 and 100. Use 0 for disabling + * it + */ +static int bellvolume = 0; + +/* default TERM value */ +char *termname = "st-256color"; + +/* + * spaces per tab + * + * When you are changing this value, don't forget to adapt the »it« value in + * the st.info and appropriately install the st.info in the environment where + * you use this st version. + * + * it#$tabspaces, + * + * Secondly make sure your kernel is not expanding tabs. When running `stty + * -a` »tab0« should appear. You can tell the terminal to not expand tabs by + * running following command: + * + * stty tabs + */ +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 bright colors */ + "gray50", + "red", + "green", + "yellow", + "#5c5cff", + "magenta", + "cyan", + "white", + + [255] = 0, + + /* 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 + */ +unsigned int defaultfg = 258; +unsigned int defaultbg = 259; +unsigned int defaultcs = 256; +static unsigned int defaultrcs = 257; + +/* + * Default shape of cursor + * 2: Block ("█") + * 4: Underline ("_") + * 6: Bar ("|") + * 7: Snowman ("☃") + */ +static unsigned int cursorshape = 2; + +/* + * Default columns and rows numbers + */ + +static unsigned int cols = 80; +static unsigned int rows = 24; + +/* + * Default colour and shape of the mouse cursor + */ +static unsigned int mouseshape = XC_xterm; +static unsigned int mousefg = 7; +static unsigned int mousebg = 0; + +/* + * Color used to display font attributes when fontconfig selected a font which + * doesn't match the ones requested. + */ +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[] = { + /* 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) + +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} }, +}; + +/* + * Special keys (change & recompile st.info accordingly) + * + * Mask value: + * * Use XK_ANY_MOD to match the key no matter modifiers state + * * Use XK_NO_MOD to match the key alone (no modifiers) + * appkey value: + * * 0: no value + * * > 0: keypad application mode enabled + * * = 2: term.numlock = 1 + * * < 0: keypad application mode disabled + * appcursor value: + * * 0: no value + * * > 0: cursor application mode enabled + * * < 0: cursor application mode 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 + * position for a key. + */ + +/* + * 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 }; + +/* + * 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; + +/* + * 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}, +}; + +/* + * Selection types' masks. + * Use the same masks as usual. + * Button1Mask is always unset, to make masks match between ButtonPress. + * ButtonRelease and MotionNotify. + * If no match is found, regular selection is used. + */ +static uint selmasks[] = { + [SEL_RECTANGULAR] = Mod1Mask, +}; + +/* + * Printable characters in ASCII, used to estimate the advance width + * of single wide characters. + */ +static char ascii_printable[] = + " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "`abcdefghijklmnopqrstuvwxyz{|}~"; diff --git a/patches/st-gruvbox-dark-0.8.2.diff b/patches/st-gruvbox-dark-0.8.2.diff new file mode 100644 index 0000000..c8390f0 --- /dev/null +++ b/patches/st-gruvbox-dark-0.8.2.diff @@ -0,0 +1,70 @@ +diff --git a/config.def.h b/config.def.h +index 877afab..6a1699f 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -84,41 +84,35 @@ static 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 bright colors */ +- "gray50", +- "red", +- "green", +- "yellow", +- "#5c5cff", +- "magenta", +- "cyan", +- "white", +- +- [255] = 0, +- +- /* more colors can be added after 255 to use with DefaultXX */ +- "#cccccc", +- "#555555", +-}; + ++ /* 8 normal colors */ ++ [0] = "#282828", /* hard contrast: #1d2021 / soft contrast: #32302f */ ++ [1] = "#cc241d", /* red */ ++ [2] = "#98971a", /* green */ ++ [3] = "#d79921", /* yellow */ ++ [4] = "#458588", /* blue */ ++ [5] = "#b16286", /* magenta */ ++ [6] = "#689d6a", /* cyan */ ++ [7] = "#a89984", /* white */ ++ ++ /* 8 bright colors */ ++ [8] = "#928374", /* black */ ++ [9] = "#fb4934", /* red */ ++ [10] = "#b8bb26", /* green */ ++ [11] = "#fabd2f", /* yellow */ ++ [12] = "#83a598", /* blue */ ++ [13] = "#d3869b", /* magenta */ ++ [14] = "#8ec07c", /* cyan */ ++ [15] = "#ebdbb2", /* white */ ++}; + + /* + * Default colors (colorname index) +- * foreground, background, cursor, reverse cursor ++ * foreground, background, cursor + */ +-unsigned int defaultfg = 7; +-unsigned int defaultbg = 0; +-static unsigned int defaultcs = 256; ++unsigned int defaultfg = 15; ++unsigned int defaultbg = 0; ++static unsigned int defaultcs = 15; + static unsigned int defaultrcs = 257; + + /* diff --git a/st b/st index 42af17bd70dc978a0d84c99260cfd178ee3a0eef..a8893e69955884ff2d4a57094d9718b8d6a58bc0 100755 GIT binary patch delta 13481 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 SYic-WHZH4%F$(dSV)j3P#Qo_2