From 429a9c4b5bfbc074e0e664d5e15a221ccbf770d0 Mon Sep 17 00:00:00 2001 From: Santiago Lo Coco Date: Thu, 19 Aug 2021 17:33:28 -0300 Subject: [PATCH] Added anysize, font2, newterm (orphan) patches --- config.def.h | 4 + config.h | 471 ------------------ .../st-meta-vim-full-20200607-9ba7ecf.diff | 0 patches/st-anysize-0.8.1.diff | 152 ++++++ patches/st-font2-20190326-f64c2f8.diff | 126 +++++ .../st-newterm-orphan-20210712-4536f46.diff | 105 ++++ st | Bin 102184 -> 0 bytes st.c | 37 +- st.h | 1 + st.o | Bin 77056 -> 0 bytes x.c | 122 ++++- x.o | Bin 74704 -> 0 bytes 12 files changed, 519 insertions(+), 499 deletions(-) delete mode 100644 config.h rename patches/{ => notapplied}/st-meta-vim-full-20200607-9ba7ecf.diff (100%) create mode 100644 patches/st-anysize-0.8.1.diff create mode 100644 patches/st-font2-20190326-f64c2f8.diff create mode 100644 patches/st-newterm-orphan-20210712-4536f46.diff delete mode 100755 st delete mode 100644 st.o delete mode 100644 x.o diff --git a/config.def.h b/config.def.h index 024cf8b..1e3e90c 100644 --- a/config.def.h +++ b/config.def.h @@ -6,7 +6,10 @@ * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html */ //static char *font = "MesloLGS NF:pixelsize=16"; +//static const char *font2[] = { "Noto Emoji:pixelsize=12:antialias=true:autohint=true" }; static char *font = "Fira Code:pixelsize=16:antialias=true:autohint=true"; +//static char *font2 = "";//"JoyPixels:pixelsize=16:antialias=true:autohint=true"; +static char *font2 = "Noto Emoji:pixelsize=16:antialias=true:autohint=true"; static int borderpx = 2; /* @@ -196,6 +199,7 @@ static Shortcut shortcuts[] = { { TERMMOD, XK_Y, selpaste, {.i = 0} }, { ShiftMask, XK_Insert, selpaste, {.i = 0} }, { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + { TERMMOD, XK_Return, newterm, {.i = 0} }, { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, }; diff --git a/config.h b/config.h deleted file mode 100644 index 024cf8b..0000000 --- a/config.h +++ /dev/null @@ -1,471 +0,0 @@ -/* See LICENSE file for copyright and license details. */ - -/* - * appearance - * - * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html - */ -//static char *font = "MesloLGS NF:pixelsize=16"; -static char *font = "Fira Code:pixelsize=16: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 = 8; -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 */ - [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 - */ -unsigned int defaultfg = 15; -unsigned int defaultbg = 0; -static unsigned int defaultcs = 15; -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. - * Button2: Click with the mouse wheel! For pasting! - */ -const unsigned int mousescrollincrement = 3; -static MouseShortcut mshortcuts[] = { - /* mask button function argument release */ - { XK_ANY_MOD, Button4, kscrollup, {.i = mousescrollincrement} }, - { XK_ANY_MOD, Button5, kscrolldown, {.i = mousescrollincrement} }, - { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 }, - { XK_ANY_MOD, Button4, ttysend, {.s = "\031"} }, - { 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} }, - { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, - { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, -}; - -/* - * 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-meta-vim-full-20200607-9ba7ecf.diff b/patches/notapplied/st-meta-vim-full-20200607-9ba7ecf.diff similarity index 100% rename from patches/st-meta-vim-full-20200607-9ba7ecf.diff rename to patches/notapplied/st-meta-vim-full-20200607-9ba7ecf.diff diff --git a/patches/st-anysize-0.8.1.diff b/patches/st-anysize-0.8.1.diff new file mode 100644 index 0000000..1eaf2ba --- /dev/null +++ b/patches/st-anysize-0.8.1.diff @@ -0,0 +1,152 @@ +diff --git a/x.c b/x.c +index 00cb6b1..8f87c0f 100644 +--- a/x.c ++++ b/x.c +@@ -78,6 +78,7 @@ typedef XftGlyphFontSpec GlyphFontSpec; + typedef struct { + int tw, th; /* tty width and height */ + int w, h; /* window width and height */ ++ int hborderpx, vborderpx; + int ch; /* char height */ + int cw; /* char width */ + int mode; /* window state/mode flags */ +@@ -311,7 +312,7 @@ zoomreset(const Arg *arg) + int + evcol(XEvent *e) + { +- int x = e->xbutton.x - borderpx; ++ int x = e->xbutton.x - win.hborderpx; + LIMIT(x, 0, win.tw - 1); + return x / win.cw; + } +@@ -319,7 +320,7 @@ evcol(XEvent *e) + int + evrow(XEvent *e) + { +- int y = e->xbutton.y - borderpx; ++ int y = e->xbutton.y - win.vborderpx; + LIMIT(y, 0, win.th - 1); + return y / win.ch; + } +@@ -675,6 +676,9 @@ cresize(int width, int height) + col = MAX(1, col); + row = MAX(1, row); + ++ win.hborderpx = (win.w - col * win.cw) / 2; ++ win.vborderpx = (win.h - row * win.ch) / 2; ++ + tresize(col, row); + xresize(col, row); + ttyresize(win.tw, win.th); +@@ -793,8 +797,8 @@ xhints(void) + sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize; + sizeh->height = win.h; + sizeh->width = win.w; +- sizeh->height_inc = win.ch; +- sizeh->width_inc = win.cw; ++ sizeh->height_inc = 1; ++ sizeh->width_inc = 1; + sizeh->base_height = 2 * borderpx; + sizeh->base_width = 2 * borderpx; + sizeh->min_height = win.ch + 2 * borderpx; +@@ -1022,8 +1026,8 @@ xinit(int cols, int rows) + xloadcols(); + + /* adjust fixed window geometry */ +- win.w = 2 * borderpx + cols * win.cw; +- win.h = 2 * borderpx + rows * win.ch; ++ win.w = 2 * win.hborderpx + cols * win.cw; ++ win.h = 2 * win.vborderpx + rows * win.ch; + if (xw.gm & XNegative) + xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2; + if (xw.gm & YNegative) +@@ -1123,7 +1127,7 @@ xinit(int cols, int rows) + 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; ++ float winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, xp, yp; + ushort mode, prevmode = USHRT_MAX; + Font *font = &dc.font; + int frcflags = FRC_NORMAL; +@@ -1259,7 +1263,7 @@ void + 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, ++ int winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, + width = charlen * win.cw; + Color *fg, *bg, *temp, revfg, revbg, truefg, truebg; + XRenderColor colfg, colbg; +@@ -1349,17 +1353,17 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i + + /* Intelligent cleaning up of the borders. */ + if (x == 0) { +- xclear(0, (y == 0)? 0 : winy, borderpx, ++ xclear(0, (y == 0)? 0 : winy, win.vborderpx, + winy + win.ch + +- ((winy + win.ch >= borderpx + win.th)? win.h : 0)); ++ ((winy + win.ch >= win.vborderpx + win.th)? win.h : 0)); + } +- if (winx + width >= borderpx + win.tw) { ++ if (winx + width >= win.hborderpx + win.tw) { + xclear(winx + width, (y == 0)? 0 : winy, win.w, +- ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch))); ++ ((winy + win.ch >= win.vborderpx + win.th)? win.h : (winy + win.ch))); + } + if (y == 0) +- xclear(winx, 0, winx + width, borderpx); +- if (winy + win.ch >= borderpx + win.th) ++ xclear(winx, 0, winx + width, win.hborderpx); ++ if (winy + win.ch >= win.vborderpx + win.th) + xclear(winx, winy + win.ch, winx + width, win.h); + + /* Clean up the region we want to draw to. */ +@@ -1452,35 +1456,35 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) + case 3: /* Blinking Underline */ + case 4: /* Steady Underline */ + XftDrawRect(xw.draw, &drawcol, +- borderpx + cx * win.cw, +- borderpx + (cy + 1) * win.ch - \ ++ win.hborderpx + cx * win.cw, ++ win.vborderpx + (cy + 1) * win.ch - \ + cursorthickness, + win.cw, cursorthickness); + break; + case 5: /* Blinking bar */ + case 6: /* Steady bar */ + XftDrawRect(xw.draw, &drawcol, +- borderpx + cx * win.cw, +- borderpx + cy * win.ch, ++ win.hborderpx + cx * win.cw, ++ win.vborderpx + cy * win.ch, + cursorthickness, win.ch); + break; + } + } else { + XftDrawRect(xw.draw, &drawcol, +- borderpx + cx * win.cw, +- borderpx + cy * win.ch, ++ win.hborderpx + cx * win.cw, ++ win.vborderpx + cy * win.ch, + win.cw - 1, 1); + XftDrawRect(xw.draw, &drawcol, +- borderpx + cx * win.cw, +- borderpx + cy * win.ch, ++ win.hborderpx + cx * win.cw, ++ win.vborderpx + cy * win.ch, + 1, win.ch - 1); + XftDrawRect(xw.draw, &drawcol, +- borderpx + (cx + 1) * win.cw - 1, +- borderpx + cy * win.ch, ++ win.hborderpx + (cx + 1) * win.cw - 1, ++ win.vborderpx + cy * win.ch, + 1, win.ch - 1); + XftDrawRect(xw.draw, &drawcol, +- borderpx + cx * win.cw, +- borderpx + (cy + 1) * win.ch - 1, ++ win.hborderpx + cx * win.cw, ++ win.vborderpx + (cy + 1) * win.ch - 1, + win.cw, 1); + } + } diff --git a/patches/st-font2-20190326-f64c2f8.diff b/patches/st-font2-20190326-f64c2f8.diff new file mode 100644 index 0000000..fdb6efe --- /dev/null +++ b/patches/st-font2-20190326-f64c2f8.diff @@ -0,0 +1,126 @@ +From f64c2f83a2e3ee349fe11100526110dfdf47067a Mon Sep 17 00:00:00 2001 +From: Kirill Bugaev +Date: Wed, 27 Mar 2019 01:28:56 +0800 +Subject: [PATCH] Some glyphs can be not present in font defined by default. + For this glyphs st uses font-config and try to find them in font cache first. + This patch append font defined in `font2` variable to the beginning of font + cache. So it will be used as spare font. + +--- + config.def.h | 1 + + x.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 67 insertions(+) + +diff --git a/config.def.h b/config.def.h +index 482901e..88eee0f 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -6,6 +6,7 @@ + * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html + */ + static char *font = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; ++static char *font2 = "Roboto Mono for Powerline:pixelsize=12:antialias=true:autohint=true"; + static int borderpx = 2; + + /* +diff --git a/x.c b/x.c +index 5828a3b..052b10b 100644 +--- a/x.c ++++ b/x.c +@@ -149,6 +149,7 @@ static void xhints(void); + static int xloadcolor(int, const char *, Color *); + static int xloadfont(Font *, FcPattern *); + static void xloadfonts(char *, double); ++static void xloadsparefont(); + static void xunloadfont(Font *); + static void xunloadfonts(void); + static void xsetenv(void); +@@ -296,6 +297,7 @@ zoomabs(const Arg *arg) + { + xunloadfonts(); + xloadfonts(usedfont, arg->f); ++ xloadsparefont(); + cresize(0, 0); + redraw(); + xhints(); +@@ -977,6 +979,67 @@ xloadfonts(char *fontstr, double fontsize) + FcPatternDestroy(pattern); + } + ++void ++xloadsparefont() ++{ ++ FcPattern *fontpattern, *match; ++ FcResult result; ++ ++ /* add font2 to font cache as first 4 entries */ ++ if ( font2[0] == '-' ) ++ fontpattern = XftXlfdParse(font2, False, False); ++ else ++ fontpattern = FcNameParse((FcChar8 *)font2); ++ if ( fontpattern ) { ++ /* Allocate memory for the new cache entries. */ ++ frccap += 4; ++ frc = xrealloc(frc, frccap * sizeof(Fontcache)); ++ /* add Normal */ ++ match = FcFontMatch(NULL, fontpattern, &result); ++ if ( match ) ++ frc[frclen].font = XftFontOpenPattern(xw.dpy, match); ++ if ( frc[frclen].font ) { ++ frc[frclen].flags = FRC_NORMAL; ++ frclen++; ++ } else ++ FcPatternDestroy(match); ++ /* add Italic */ ++ FcPatternDel(fontpattern, FC_SLANT); ++ FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ITALIC); ++ match = FcFontMatch(NULL, fontpattern, &result); ++ if ( match ) ++ frc[frclen].font = XftFontOpenPattern(xw.dpy, match); ++ if ( frc[frclen].font ) { ++ frc[frclen].flags = FRC_ITALIC; ++ frclen++; ++ } else ++ FcPatternDestroy(match); ++ /* add Italic Bold */ ++ FcPatternDel(fontpattern, FC_WEIGHT); ++ FcPatternAddInteger(fontpattern, FC_WEIGHT, FC_WEIGHT_BOLD); ++ match = FcFontMatch(NULL, fontpattern, &result); ++ if ( match ) ++ frc[frclen].font = XftFontOpenPattern(xw.dpy, match); ++ if ( frc[frclen].font ) { ++ frc[frclen].flags = FRC_ITALICBOLD; ++ frclen++; ++ } else ++ FcPatternDestroy(match); ++ /* add Bold */ ++ FcPatternDel(fontpattern, FC_SLANT); ++ FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ROMAN); ++ match = FcFontMatch(NULL, fontpattern, &result); ++ if ( match ) ++ frc[frclen].font = XftFontOpenPattern(xw.dpy, match); ++ if ( frc[frclen].font ) { ++ frc[frclen].flags = FRC_BOLD; ++ frclen++; ++ } else ++ FcPatternDestroy(match); ++ FcPatternDestroy(fontpattern); ++ } ++} ++ + void + xunloadfont(Font *f) + { +@@ -1057,6 +1120,9 @@ xinit(int cols, int rows) + usedfont = (opt_font == NULL)? font : opt_font; + xloadfonts(usedfont, 0); + ++ /* spare font (font2) */ ++ xloadsparefont(); ++ + /* colors */ + xw.cmap = XDefaultColormap(xw.dpy, xw.scr); + xloadcols(); +-- +2.21.0 + diff --git a/patches/st-newterm-orphan-20210712-4536f46.diff b/patches/st-newterm-orphan-20210712-4536f46.diff new file mode 100644 index 0000000..06540fe --- /dev/null +++ b/patches/st-newterm-orphan-20210712-4536f46.diff @@ -0,0 +1,105 @@ +From e6ac257f362f8b879b62225bedca9e8aafef4f3b Mon Sep 17 00:00:00 2001 +From: bakkeby +Date: Mon, 12 Jul 2021 09:35:04 +0200 +Subject: [PATCH] Add shortcut to spawn new terminal in the current dir + +Ctrl-Shift-Return now creates a new ST terminal, whose CWD is the same +as the parent st's CWD. + +This version of the patch does a double fork, a technique commonly used +by daemons to spawn orphan processes. + +This solution is specific to the swallow patch for dwm which traverses +the process tree to determine if the new window is a decendant of a +terminal window, in which case the new window should take the place of +the terminal window. + +The way the original newterm patch worked the new st terminal would be +a direct decendant of the parent st terminal process, which could lead +to the wrong terminal window being swallowed. + +The double fork method avoids this by leaving all new st terminals as +orphans, i.e. they will have no parent process. +--- + config.def.h | 1 + + st.c | 32 ++++++++++++++++++++++++++++++++ + st.h | 1 + + 3 files changed, 34 insertions(+) + +diff --git a/config.def.h b/config.def.h +index 6f05dce..9029e8d 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -199,6 +199,7 @@ static Shortcut shortcuts[] = { + { TERMMOD, XK_Y, selpaste, {.i = 0} }, + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, ++ { TERMMOD, XK_Return, newterm, {.i = 0} }, + }; + + /* +diff --git a/st.c b/st.c +index ebdf360..cb79bc0 100644 +--- a/st.c ++++ b/st.c +@@ -153,6 +153,7 @@ typedef struct { + } STREscape; + + static void execsh(char *, char **); ++static char *getcwd_by_pid(pid_t pid); + static void stty(char **); + static void sigchld(int); + static void ttywriteraw(const char *, size_t); +@@ -1060,6 +1061,37 @@ tswapscreen(void) + tfulldirt(); + } + ++void ++newterm(const Arg* a) ++{ ++ int res; ++ switch (fork()) { ++ case -1: ++ die("fork failed: %s\n", strerror(errno)); ++ break; ++ case 0: ++ switch (fork()) { ++ case -1: ++ die("fork failed: %s\n", strerror(errno)); ++ break; ++ case 0: ++ res = chdir(getcwd_by_pid(pid)); ++ execlp("st", "./st", NULL); ++ break; ++ default: ++ exit(0); ++ } ++ default: ++ wait(NULL); ++ } ++} ++ ++static char *getcwd_by_pid(pid_t pid) { ++ char buf[32]; ++ snprintf(buf, sizeof buf, "/proc/%d/cwd", pid); ++ return realpath(buf, NULL); ++} ++ + void + tscrolldown(int orig, int n) + { +diff --git a/st.h b/st.h +index fa2eddf..b13399b 100644 +--- a/st.h ++++ b/st.h +@@ -81,6 +81,7 @@ void die(const char *, ...); + void redraw(void); + void draw(void); + ++void newterm(const Arg *); + void printscreen(const Arg *); + void printsel(const Arg *); + void sendbreak(const Arg *); +-- +2.32.0 + diff --git a/st b/st deleted file mode 100755 index 76815bb56e8712bc5148cc179d8dab6706486c13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102184 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 Y6#Y~2D;$wKlh0Z%InUAw=x(+D3v)yBYybcN diff --git a/st.c b/st.c index 62f95c0..e913cc1 100644 --- a/st.c +++ b/st.c @@ -160,6 +160,7 @@ typedef struct { } STREscape; static void execsh(char *, char **); +static char *getcwd_by_pid(pid_t pid); static void stty(char **); static void sigchld(int); static void ttywriteraw(const char *, size_t); @@ -191,8 +192,8 @@ static void tnewline(int); static void tputtab(int); static void tputc(Rune); static void treset(void); -static void tscrollup(int, int); -static void tscrolldown(int, int); +static void tscrollup(int, int, int); +static void tscrolldown(int, int, int); static void tsetattr(const int *, int); static void tsetchar(Rune, const Glyph *, int, int); static void tsetdirt(int, int); @@ -1108,6 +1109,38 @@ kscrollup(const Arg* a) } } +void +newterm(const Arg* a) +{ + int res; + switch (fork()) { + case -1: + die("fork failed: %s\n", strerror(errno)); + break; + case 0: + switch (fork()) { + case -1: + die("fork failed: %s\n", strerror(errno)); + break; + case 0: + res = chdir(getcwd_by_pid(pid)); + execlp("st", "./st", NULL); + break; + default: + exit(0); + } + default: + wait(NULL); + } +} + +static char *getcwd_by_pid(pid_t pid) { + char buf[32]; + snprintf(buf, sizeof buf, "/proc/%d/cwd", pid); + return realpath(buf, NULL); +} + + void tscrolldown(int orig, int n, int copyhist) { diff --git a/st.h b/st.h index 9d04b66..d2dcd61 100644 --- a/st.h +++ b/st.h @@ -83,6 +83,7 @@ void draw(void); void kscrolldown(const Arg *); void kscrollup(const Arg *); +void newterm(const Arg *); void printscreen(const Arg *); void printsel(const Arg *); void sendbreak(const Arg *); diff --git a/st.o b/st.o deleted file mode 100644 index b9aa6d9b92c11f817af4bc821d9801314bba5e9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77056 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 z 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 B;u`<} diff --git a/x.c b/x.c index 503b1b0..b196f8e 100644 --- a/x.c +++ b/x.c @@ -82,6 +82,7 @@ typedef XftGlyphFontSpec GlyphFontSpec; typedef struct { int tw, th; /* tty width and height */ int w, h; /* window width and height */ + int hborderpx, vborderpx; int ch; /* char height */ int cw; /* char width */ int mode; /* window state/mode flags */ @@ -158,6 +159,7 @@ static void xhints(void); static int xloadcolor(int, const char *, Color *); static int xloadfont(Font *, FcPattern *); static void xloadfonts(const char *, double); +static void xloadsparefont(); static void xunloadfont(Font *); static void xunloadfonts(void); static void xsetenv(void); @@ -307,6 +309,7 @@ zoomabs(const Arg *arg) { xunloadfonts(); xloadfonts(usedfont, arg->f); + xloadsparefont(); cresize(0, 0); redraw(); xhints(); @@ -332,7 +335,7 @@ ttysend(const Arg *arg) int evcol(XEvent *e) { - int x = e->xbutton.x - borderpx; + int x = e->xbutton.x - win.hborderpx; LIMIT(x, 0, win.tw - 1); return x / win.cw; } @@ -340,7 +343,7 @@ evcol(XEvent *e) int evrow(XEvent *e) { - int y = e->xbutton.y - borderpx; + int y = e->xbutton.y - win.vborderpx; LIMIT(y, 0, win.th - 1); return y / win.ch; } @@ -725,6 +728,9 @@ cresize(int width, int height) col = MAX(1, col); row = MAX(1, row); + win.hborderpx = (win.w - col * win.cw) / 2; + win.vborderpx = (win.h - row * win.ch) / 2; + tresize(col, row); xresize(col, row); ttyresize(win.tw, win.th); @@ -842,8 +848,8 @@ xhints(void) sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize; sizeh->height = win.h; sizeh->width = win.w; - sizeh->height_inc = win.ch; - sizeh->width_inc = win.cw; + sizeh->height_inc = 1; + sizeh->width_inc = 1; sizeh->base_height = 2 * borderpx; sizeh->base_width = 2 * borderpx; sizeh->min_height = win.ch + 2 * borderpx; @@ -1023,6 +1029,67 @@ xloadfonts(const char *fontstr, double fontsize) FcPatternDestroy(pattern); } +void +xloadsparefont() +{ + FcPattern *fontpattern, *match; + FcResult result; + + /* add font2 to font cache as first 4 entries */ + if ( font2[0] == '-' ) + fontpattern = XftXlfdParse(font2, False, False); + else + fontpattern = FcNameParse((FcChar8 *)font2); + if ( fontpattern ) { + /* Allocate memory for the new cache entries. */ + frccap += 4; + frc = xrealloc(frc, frccap * sizeof(Fontcache)); + /* add Normal */ + match = FcFontMatch(NULL, fontpattern, &result); + if ( match ) + frc[frclen].font = XftFontOpenPattern(xw.dpy, match); + if ( frc[frclen].font ) { + frc[frclen].flags = FRC_NORMAL; + frclen++; + } else + FcPatternDestroy(match); + /* add Italic */ + FcPatternDel(fontpattern, FC_SLANT); + FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ITALIC); + match = FcFontMatch(NULL, fontpattern, &result); + if ( match ) + frc[frclen].font = XftFontOpenPattern(xw.dpy, match); + if ( frc[frclen].font ) { + frc[frclen].flags = FRC_ITALIC; + frclen++; + } else + FcPatternDestroy(match); + /* add Italic Bold */ + FcPatternDel(fontpattern, FC_WEIGHT); + FcPatternAddInteger(fontpattern, FC_WEIGHT, FC_WEIGHT_BOLD); + match = FcFontMatch(NULL, fontpattern, &result); + if ( match ) + frc[frclen].font = XftFontOpenPattern(xw.dpy, match); + if ( frc[frclen].font ) { + frc[frclen].flags = FRC_ITALICBOLD; + frclen++; + } else + FcPatternDestroy(match); + /* add Bold */ + FcPatternDel(fontpattern, FC_SLANT); + FcPatternAddInteger(fontpattern, FC_SLANT, FC_SLANT_ROMAN); + match = FcFontMatch(NULL, fontpattern, &result); + if ( match ) + frc[frclen].font = XftFontOpenPattern(xw.dpy, match); + if ( frc[frclen].font ) { + frc[frclen].flags = FRC_BOLD; + frclen++; + } else + FcPatternDestroy(match); + FcPatternDestroy(fontpattern); + } +} + void xunloadfont(Font *f) { @@ -1120,13 +1187,16 @@ xinit(int cols, int rows) usedfont = (opt_font == NULL)? font : opt_font; xloadfonts(usedfont, 0); + /* spare font (font2) */ + xloadsparefont(); + /* colors */ xw.cmap = XDefaultColormap(xw.dpy, xw.scr); xloadcols(); /* adjust fixed window geometry */ - win.w = 2 * borderpx + cols * win.cw; - win.h = 2 * borderpx + rows * win.ch; + win.w = 2 * win.hborderpx + cols * win.cw; + win.h = 2 * win.vborderpx + rows * win.ch; if (xw.gm & XNegative) xw.l += DisplayWidth(xw.dpy, xw.scr) - win.w - 2; if (xw.gm & YNegative) @@ -1215,7 +1285,7 @@ xinit(int cols, int rows) 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; + float winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, xp, yp; ushort mode, prevmode = USHRT_MAX; Font *font = &dc.font; int frcflags = FRC_NORMAL; @@ -1348,7 +1418,7 @@ void 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, + int winx = win.hborderpx + x * win.cw, winy = win.vborderpx + y * win.ch, width = charlen * win.cw; Color *fg, *bg, *temp, revfg, revbg, truefg, truebg; XRenderColor colfg, colbg; @@ -1438,17 +1508,17 @@ xdrawglyphfontspecs(const XftGlyphFontSpec *specs, Glyph base, int len, int x, i /* Intelligent cleaning up of the borders. */ if (x == 0) { - xclear(0, (y == 0)? 0 : winy, borderpx, + xclear(0, (y == 0)? 0 : winy, win.vborderpx, winy + win.ch + - ((winy + win.ch >= borderpx + win.th)? win.h : 0)); + ((winy + win.ch >= win.vborderpx + win.th)? win.h : 0)); } - if (winx + width >= borderpx + win.tw) { + if (winx + width >= win.hborderpx + win.tw) { xclear(winx + width, (y == 0)? 0 : winy, win.w, - ((winy + win.ch >= borderpx + win.th)? win.h : (winy + win.ch))); + ((winy + win.ch >= win.vborderpx + win.th)? win.h : (winy + win.ch))); } if (y == 0) - xclear(winx, 0, winx + width, borderpx); - if (winy + win.ch >= borderpx + win.th) + xclear(winx, 0, winx + width, win.hborderpx); + if (winy + win.ch >= win.vborderpx + win.th) xclear(winx, winy + win.ch, winx + width, win.h); /* Clean up the region we want to draw to. */ @@ -1542,35 +1612,35 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og) case 3: /* Blinking Underline */ case 4: /* Steady Underline */ XftDrawRect(xw.draw, &drawcol, - borderpx + cx * win.cw, - borderpx + (cy + 1) * win.ch - \ + win.hborderpx + cx * win.cw, + win.vborderpx + (cy + 1) * win.ch - \ cursorthickness, win.cw, cursorthickness); break; case 5: /* Blinking bar */ case 6: /* Steady bar */ XftDrawRect(xw.draw, &drawcol, - borderpx + cx * win.cw, - borderpx + cy * win.ch, + win.hborderpx + cx * win.cw, + win.vborderpx + cy * win.ch, cursorthickness, win.ch); break; } } else { XftDrawRect(xw.draw, &drawcol, - borderpx + cx * win.cw, - borderpx + cy * win.ch, + win.hborderpx + cx * win.cw, + win.vborderpx + cy * win.ch, win.cw - 1, 1); XftDrawRect(xw.draw, &drawcol, - borderpx + cx * win.cw, - borderpx + cy * win.ch, + win.hborderpx + cx * win.cw, + win.vborderpx + cy * win.ch, 1, win.ch - 1); XftDrawRect(xw.draw, &drawcol, - borderpx + (cx + 1) * win.cw - 1, - borderpx + cy * win.ch, + win.hborderpx + (cx + 1) * win.cw - 1, + win.vborderpx + cy * win.ch, 1, win.ch - 1); XftDrawRect(xw.draw, &drawcol, - borderpx + cx * win.cw, - borderpx + (cy + 1) * win.ch - 1, + win.hborderpx + cx * win.cw, + win.vborderpx + (cy + 1) * win.ch - 1, win.cw, 1); } } diff --git a/x.o b/x.o deleted file mode 100644 index e0230b79b257cff9e4b6cf48254446fbaef20a1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74704 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