sites

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit f73625cb287b6d059248cc67736d891d8b93ac68
parent 90b3fb22a8b2a627d582d4350e2fa673d4295739
Author: fanboimsft <fanboimsft@icloud.com>
Date:   Thu, 21 Dec 2017 23:13:20 +0700

alpha patch for latest git version

Diffstat:
Mst.suckless.org/patches/alpha/index.md | 1+
Ast.suckless.org/patches/alpha/st-alpha-20171221-0ac685f.diff | 734+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 735 insertions(+), 0 deletions(-)

diff --git a/st.suckless.org/patches/alpha/index.md b/st.suckless.org/patches/alpha/index.md @@ -26,6 +26,7 @@ Download * [st-alpha-0.7.diff](st-alpha-0.7.diff) * [st-alpha-20160727-308bfbf.diff](st-alpha-20160727-308bfbf.diff) * [st-alpha-20170509-5a10aca.diff](st-alpha-20170509-5a10aca.diff) + * [st-alpha-20171221-0ac685f.diff](st-alpha-20171221-0ac685f.diff) Authors ------- diff --git a/st.suckless.org/patches/alpha/st-alpha-20171221-0ac685f.diff b/st.suckless.org/patches/alpha/st-alpha-20171221-0ac685f.diff @@ -0,0 +1,734 @@ +From e854e434b8fab67499406303717b78dec4d4822d Mon Sep 17 00:00:00 2001 +From: fanboimsft <fanboimsft@icloud.com> +Date: Thu, 21 Dec 2017 23:01:57 +0700 +Subject: [PATCH] alpha patch to latest git version + +--- + config.def.h | 6 +- + config.h | 470 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + config.mk | 4 +- + config.mk.orig | 28 ++++ + st.h | 1 + + win.h | 4 + + x.c | 71 ++++++++- + 7 files changed, 573 insertions(+), 11 deletions(-) + create mode 100644 config.h + create mode 100644 config.mk.orig + +diff --git a/config.def.h b/config.def.h +index 877afab..0e423b1 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -82,6 +82,9 @@ char termname[] = "st-256color"; + */ + static unsigned int tabspaces = 8; + ++/* bg opacity */ ++unsigned int alpha = 0xcc; ++ + /* Terminal colors (16 first used in escape sequence) */ + const char *colorname[] = { + /* 8 normal colors */ +@@ -109,6 +112,7 @@ const char *colorname[] = { + /* more colors can be added after 255 to use with DefaultXX */ + "#cccccc", + "#555555", ++ "black", + }; + + +@@ -117,7 +121,7 @@ const char *colorname[] = { + * foreground, background, cursor, reverse cursor + */ + unsigned int defaultfg = 7; +-unsigned int defaultbg = 0; ++unsigned int defaultbg = 257; + unsigned int defaultcs = 256; + unsigned int defaultrcs = 257; + +diff --git a/config.h b/config.h +new file mode 100644 +index 0000000..0e423b1 +--- /dev/null ++++ b/config.h +@@ -0,0 +1,470 @@ ++/* See LICENSE file for copyright and license details. */ ++ ++/* ++ * appearance ++ * ++ * font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html ++ */ ++char font[] = "Liberation Mono:pixelsize=12:antialias=true:autohint=true"; ++int borderpx = 2; ++ ++/* ++ * What program is execed by st depends of these precedence rules: ++ * 1: program passed with -e ++ * 2: utmp option ++ * 3: SHELL environment variable ++ * 4: value of shell in /etc/passwd ++ * 5: value of shell in config.h ++ */ ++static char shell[] = "/bin/sh"; ++static char *utmp = NULL; ++static char stty_args[] = "stty raw pass8 nl -echo -iexten -cstopb 38400"; ++ ++/* identification sequence returned in DA and DECID */ ++static char vtiden[] = "\033[?6c"; ++ ++/* Kerning / character bounding-box multipliers */ ++float cwscale = 1.0; ++float chscale = 1.0; ++ ++/* ++ * word delimiter string ++ * ++ * More advanced example: " `'\"()[]{}" ++ */ ++static char worddelimiters[] = " "; ++ ++/* selection timeouts (in milliseconds) */ ++unsigned int doubleclicktimeout = 300; ++unsigned int tripleclicktimeout = 600; ++ ++/* alt screens */ ++int allowaltscreen = 1; ++ ++/* frames per second st should at maximum draw to the screen */ ++unsigned int xfps = 120; ++unsigned int actionfps = 30; ++ ++/* ++ * blinking timeout (set to 0 to disable blinking) for the terminal blinking ++ * attribute. ++ */ ++unsigned int blinktimeout = 800; ++ ++/* ++ * thickness of underline and bar cursors ++ */ ++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 ++ */ ++static unsigned int tabspaces = 8; ++ ++/* bg opacity */ ++unsigned int alpha = 0xcc; ++ ++/* Terminal colors (16 first used in escape sequence) */ ++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", ++ "black", ++}; ++ ++ ++/* ++ * Default colors (colorname index) ++ * foreground, background, cursor, reverse cursor ++ */ ++unsigned int defaultfg = 7; ++unsigned int defaultbg = 257; ++unsigned int defaultcs = 256; ++unsigned int defaultrcs = 257; ++ ++/* ++ * Default shape of cursor ++ * 2: Block ("█") ++ * 4: Underline ("_") ++ * 6: Bar ("|") ++ * 7: Snowman ("☃") ++ */ ++unsigned int cursorshape = 2; ++ ++/* ++ * Default columns and rows numbers ++ */ ++ ++unsigned int cols = 80; ++unsigned int rows = 24; ++ ++/* ++ * Default colour and shape of the mouse cursor ++ */ ++unsigned int mouseshape = XC_xterm; ++unsigned int mousefg = 7; ++unsigned int mousebg = 0; ++ ++/* ++ * Color used to display font attributes when fontconfig selected a font which ++ * doesn't match the ones requested. ++ */ ++unsigned int defaultattr = 11; ++ ++/* ++ * Internal mouse shortcuts. ++ * Beware that overloading Button1 will disable the selection. ++ */ ++MouseShortcut mshortcuts[] = { ++ /* button mask string */ ++ { Button4, XK_ANY_MOD, "\031" }, ++ { Button5, XK_ANY_MOD, "\005" }, ++}; ++ ++/* Internal keyboard shortcuts. */ ++#define MODKEY Mod1Mask ++#define TERMMOD (ControlMask|ShiftMask) ++ ++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} }, ++ { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, ++ { TERMMOD, XK_I, iso14755, {.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 ++ * crlf value ++ * * 0: no value ++ * * > 0: crlf mode is enabled ++ * * < 0: crlf mode is disabled ++ * ++ * Be careful with the order of the definitions because st searches in ++ * this table sequentially, so any XK_ANY_MOD must be in the last ++ * 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; ++ ++/* ++ * Override mouse-select while mask is active (when MODE_MOUSE is set). ++ * Note that if you want to use ShiftMask with selmasks, set this to an other ++ * modifier, set to 0 to not use it. ++ */ ++uint forceselmod = ShiftMask; ++ ++/* ++ * 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 crlf */ ++ { XK_KP_Home, ShiftMask, "\033[2J", 0, -1, 0}, ++ { XK_KP_Home, ShiftMask, "\033[1;2H", 0, +1, 0}, ++ { XK_KP_Home, XK_ANY_MOD, "\033[H", 0, -1, 0}, ++ { XK_KP_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0}, ++ { XK_KP_Up, XK_ANY_MOD, "\033Ox", +1, 0, 0}, ++ { XK_KP_Up, XK_ANY_MOD, "\033[A", 0, -1, 0}, ++ { XK_KP_Up, XK_ANY_MOD, "\033OA", 0, +1, 0}, ++ { XK_KP_Down, XK_ANY_MOD, "\033Or", +1, 0, 0}, ++ { XK_KP_Down, XK_ANY_MOD, "\033[B", 0, -1, 0}, ++ { XK_KP_Down, XK_ANY_MOD, "\033OB", 0, +1, 0}, ++ { XK_KP_Left, XK_ANY_MOD, "\033Ot", +1, 0, 0}, ++ { XK_KP_Left, XK_ANY_MOD, "\033[D", 0, -1, 0}, ++ { XK_KP_Left, XK_ANY_MOD, "\033OD", 0, +1, 0}, ++ { XK_KP_Right, XK_ANY_MOD, "\033Ov", +1, 0, 0}, ++ { XK_KP_Right, XK_ANY_MOD, "\033[C", 0, -1, 0}, ++ { XK_KP_Right, XK_ANY_MOD, "\033OC", 0, +1, 0}, ++ { XK_KP_Prior, ShiftMask, "\033[5;2~", 0, 0, 0}, ++ { XK_KP_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0}, ++ { XK_KP_Begin, XK_ANY_MOD, "\033[E", 0, 0, 0}, ++ { XK_KP_End, ControlMask, "\033[J", -1, 0, 0}, ++ { XK_KP_End, ControlMask, "\033[1;5F", +1, 0, 0}, ++ { XK_KP_End, ShiftMask, "\033[K", -1, 0, 0}, ++ { XK_KP_End, ShiftMask, "\033[1;2F", +1, 0, 0}, ++ { XK_KP_End, XK_ANY_MOD, "\033[4~", 0, 0, 0}, ++ { XK_KP_Next, ShiftMask, "\033[6;2~", 0, 0, 0}, ++ { XK_KP_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0}, ++ { XK_KP_Insert, ShiftMask, "\033[2;2~", +1, 0, 0}, ++ { XK_KP_Insert, ShiftMask, "\033[4l", -1, 0, 0}, ++ { XK_KP_Insert, ControlMask, "\033[L", -1, 0, 0}, ++ { XK_KP_Insert, ControlMask, "\033[2;5~", +1, 0, 0}, ++ { XK_KP_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0}, ++ { XK_KP_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0}, ++ { XK_KP_Delete, ControlMask, "\033[M", -1, 0, 0}, ++ { XK_KP_Delete, ControlMask, "\033[3;5~", +1, 0, 0}, ++ { XK_KP_Delete, ShiftMask, "\033[2K", -1, 0, 0}, ++ { XK_KP_Delete, ShiftMask, "\033[3;2~", +1, 0, 0}, ++ { XK_KP_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0}, ++ { XK_KP_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0}, ++ { XK_KP_Multiply, XK_ANY_MOD, "\033Oj", +2, 0, 0}, ++ { XK_KP_Add, XK_ANY_MOD, "\033Ok", +2, 0, 0}, ++ { XK_KP_Enter, XK_ANY_MOD, "\033OM", +2, 0, 0}, ++ { XK_KP_Enter, XK_ANY_MOD, "\r", -1, 0, -1}, ++ { XK_KP_Enter, XK_ANY_MOD, "\r\n", -1, 0, +1}, ++ { XK_KP_Subtract, XK_ANY_MOD, "\033Om", +2, 0, 0}, ++ { XK_KP_Decimal, XK_ANY_MOD, "\033On", +2, 0, 0}, ++ { XK_KP_Divide, XK_ANY_MOD, "\033Oo", +2, 0, 0}, ++ { XK_KP_0, XK_ANY_MOD, "\033Op", +2, 0, 0}, ++ { XK_KP_1, XK_ANY_MOD, "\033Oq", +2, 0, 0}, ++ { XK_KP_2, XK_ANY_MOD, "\033Or", +2, 0, 0}, ++ { XK_KP_3, XK_ANY_MOD, "\033Os", +2, 0, 0}, ++ { XK_KP_4, XK_ANY_MOD, "\033Ot", +2, 0, 0}, ++ { XK_KP_5, XK_ANY_MOD, "\033Ou", +2, 0, 0}, ++ { XK_KP_6, XK_ANY_MOD, "\033Ov", +2, 0, 0}, ++ { XK_KP_7, XK_ANY_MOD, "\033Ow", +2, 0, 0}, ++ { XK_KP_8, XK_ANY_MOD, "\033Ox", +2, 0, 0}, ++ { XK_KP_9, XK_ANY_MOD, "\033Oy", +2, 0, 0}, ++ { XK_Up, ShiftMask, "\033[1;2A", 0, 0, 0}, ++ { XK_Up, Mod1Mask, "\033[1;3A", 0, 0, 0}, ++ { XK_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0, 0}, ++ { XK_Up, ControlMask, "\033[1;5A", 0, 0, 0}, ++ { XK_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0, 0}, ++ { XK_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0, 0}, ++ { XK_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0, 0}, ++ { XK_Up, XK_ANY_MOD, "\033[A", 0, -1, 0}, ++ { XK_Up, XK_ANY_MOD, "\033OA", 0, +1, 0}, ++ { XK_Down, ShiftMask, "\033[1;2B", 0, 0, 0}, ++ { XK_Down, Mod1Mask, "\033[1;3B", 0, 0, 0}, ++ { XK_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0, 0}, ++ { XK_Down, ControlMask, "\033[1;5B", 0, 0, 0}, ++ { XK_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0, 0}, ++ { XK_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0, 0}, ++ { XK_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0, 0}, ++ { XK_Down, XK_ANY_MOD, "\033[B", 0, -1, 0}, ++ { XK_Down, XK_ANY_MOD, "\033OB", 0, +1, 0}, ++ { XK_Left, ShiftMask, "\033[1;2D", 0, 0, 0}, ++ { XK_Left, Mod1Mask, "\033[1;3D", 0, 0, 0}, ++ { XK_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0, 0}, ++ { XK_Left, ControlMask, "\033[1;5D", 0, 0, 0}, ++ { XK_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0, 0}, ++ { XK_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0, 0}, ++ { XK_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0, 0}, ++ { XK_Left, XK_ANY_MOD, "\033[D", 0, -1, 0}, ++ { XK_Left, XK_ANY_MOD, "\033OD", 0, +1, 0}, ++ { XK_Right, ShiftMask, "\033[1;2C", 0, 0, 0}, ++ { XK_Right, Mod1Mask, "\033[1;3C", 0, 0, 0}, ++ { XK_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0, 0}, ++ { XK_Right, ControlMask, "\033[1;5C", 0, 0, 0}, ++ { XK_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0, 0}, ++ { XK_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0, 0}, ++ { XK_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0, 0}, ++ { XK_Right, XK_ANY_MOD, "\033[C", 0, -1, 0}, ++ { XK_Right, XK_ANY_MOD, "\033OC", 0, +1, 0}, ++ { XK_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0, 0}, ++ { XK_Return, Mod1Mask, "\033\r", 0, 0, -1}, ++ { XK_Return, Mod1Mask, "\033\r\n", 0, 0, +1}, ++ { XK_Return, XK_ANY_MOD, "\r", 0, 0, -1}, ++ { XK_Return, XK_ANY_MOD, "\r\n", 0, 0, +1}, ++ { XK_Insert, ShiftMask, "\033[4l", -1, 0, 0}, ++ { XK_Insert, ShiftMask, "\033[2;2~", +1, 0, 0}, ++ { XK_Insert, ControlMask, "\033[L", -1, 0, 0}, ++ { XK_Insert, ControlMask, "\033[2;5~", +1, 0, 0}, ++ { XK_Insert, XK_ANY_MOD, "\033[4h", -1, 0, 0}, ++ { XK_Insert, XK_ANY_MOD, "\033[2~", +1, 0, 0}, ++ { XK_Delete, ControlMask, "\033[M", -1, 0, 0}, ++ { XK_Delete, ControlMask, "\033[3;5~", +1, 0, 0}, ++ { XK_Delete, ShiftMask, "\033[2K", -1, 0, 0}, ++ { XK_Delete, ShiftMask, "\033[3;2~", +1, 0, 0}, ++ { XK_Delete, XK_ANY_MOD, "\033[P", -1, 0, 0}, ++ { XK_Delete, XK_ANY_MOD, "\033[3~", +1, 0, 0}, ++ { XK_BackSpace, XK_NO_MOD, "\177", 0, 0, 0}, ++ { XK_BackSpace, Mod1Mask, "\033\177", 0, 0, 0}, ++ { XK_Home, ShiftMask, "\033[2J", 0, -1, 0}, ++ { XK_Home, ShiftMask, "\033[1;2H", 0, +1, 0}, ++ { XK_Home, XK_ANY_MOD, "\033[H", 0, -1, 0}, ++ { XK_Home, XK_ANY_MOD, "\033[1~", 0, +1, 0}, ++ { XK_End, ControlMask, "\033[J", -1, 0, 0}, ++ { XK_End, ControlMask, "\033[1;5F", +1, 0, 0}, ++ { XK_End, ShiftMask, "\033[K", -1, 0, 0}, ++ { XK_End, ShiftMask, "\033[1;2F", +1, 0, 0}, ++ { XK_End, XK_ANY_MOD, "\033[4~", 0, 0, 0}, ++ { XK_Prior, ControlMask, "\033[5;5~", 0, 0, 0}, ++ { XK_Prior, ShiftMask, "\033[5;2~", 0, 0, 0}, ++ { XK_Prior, XK_ANY_MOD, "\033[5~", 0, 0, 0}, ++ { XK_Next, ControlMask, "\033[6;5~", 0, 0, 0}, ++ { XK_Next, ShiftMask, "\033[6;2~", 0, 0, 0}, ++ { XK_Next, XK_ANY_MOD, "\033[6~", 0, 0, 0}, ++ { XK_F1, XK_NO_MOD, "\033OP" , 0, 0, 0}, ++ { XK_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0, 0}, ++ { XK_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0, 0}, ++ { XK_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0, 0}, ++ { XK_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0, 0}, ++ { XK_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0, 0}, ++ { XK_F2, XK_NO_MOD, "\033OQ" , 0, 0, 0}, ++ { XK_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0, 0}, ++ { XK_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0, 0}, ++ { XK_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0, 0}, ++ { XK_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0, 0}, ++ { XK_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0, 0}, ++ { XK_F3, XK_NO_MOD, "\033OR" , 0, 0, 0}, ++ { XK_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0, 0}, ++ { XK_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0, 0}, ++ { XK_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0, 0}, ++ { XK_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0, 0}, ++ { XK_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0, 0}, ++ { XK_F4, XK_NO_MOD, "\033OS" , 0, 0, 0}, ++ { XK_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0, 0}, ++ { XK_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0, 0}, ++ { XK_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0, 0}, ++ { XK_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0, 0}, ++ { XK_F5, XK_NO_MOD, "\033[15~", 0, 0, 0}, ++ { XK_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0, 0}, ++ { XK_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0, 0}, ++ { XK_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0, 0}, ++ { XK_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0, 0}, ++ { XK_F6, XK_NO_MOD, "\033[17~", 0, 0, 0}, ++ { XK_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0, 0}, ++ { XK_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0, 0}, ++ { XK_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0, 0}, ++ { XK_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0, 0}, ++ { XK_F7, XK_NO_MOD, "\033[18~", 0, 0, 0}, ++ { XK_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0, 0}, ++ { XK_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0, 0}, ++ { XK_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0, 0}, ++ { XK_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0, 0}, ++ { XK_F8, XK_NO_MOD, "\033[19~", 0, 0, 0}, ++ { XK_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0, 0}, ++ { XK_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0, 0}, ++ { XK_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0, 0}, ++ { XK_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0, 0}, ++ { XK_F9, XK_NO_MOD, "\033[20~", 0, 0, 0}, ++ { XK_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0, 0}, ++ { XK_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0, 0}, ++ { XK_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0, 0}, ++ { XK_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0, 0}, ++ { XK_F10, XK_NO_MOD, "\033[21~", 0, 0, 0}, ++ { XK_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0, 0}, ++ { XK_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0, 0}, ++ { XK_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0, 0}, ++ { XK_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0, 0}, ++ { XK_F11, XK_NO_MOD, "\033[23~", 0, 0, 0}, ++ { XK_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0, 0}, ++ { XK_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0, 0}, ++ { XK_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0, 0}, ++ { XK_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0, 0}, ++ { XK_F12, XK_NO_MOD, "\033[24~", 0, 0, 0}, ++ { XK_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0, 0}, ++ { XK_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0, 0}, ++ { XK_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0, 0}, ++ { XK_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0, 0}, ++ { XK_F13, XK_NO_MOD, "\033[1;2P", 0, 0, 0}, ++ { XK_F14, XK_NO_MOD, "\033[1;2Q", 0, 0, 0}, ++ { XK_F15, XK_NO_MOD, "\033[1;2R", 0, 0, 0}, ++ { XK_F16, XK_NO_MOD, "\033[1;2S", 0, 0, 0}, ++ { XK_F17, XK_NO_MOD, "\033[15;2~", 0, 0, 0}, ++ { XK_F18, XK_NO_MOD, "\033[17;2~", 0, 0, 0}, ++ { XK_F19, XK_NO_MOD, "\033[18;2~", 0, 0, 0}, ++ { XK_F20, XK_NO_MOD, "\033[19;2~", 0, 0, 0}, ++ { XK_F21, XK_NO_MOD, "\033[20;2~", 0, 0, 0}, ++ { XK_F22, XK_NO_MOD, "\033[21;2~", 0, 0, 0}, ++ { XK_F23, XK_NO_MOD, "\033[23;2~", 0, 0, 0}, ++ { XK_F24, XK_NO_MOD, "\033[24;2~", 0, 0, 0}, ++ { XK_F25, XK_NO_MOD, "\033[1;5P", 0, 0, 0}, ++ { XK_F26, XK_NO_MOD, "\033[1;5Q", 0, 0, 0}, ++ { XK_F27, XK_NO_MOD, "\033[1;5R", 0, 0, 0}, ++ { XK_F28, XK_NO_MOD, "\033[1;5S", 0, 0, 0}, ++ { XK_F29, XK_NO_MOD, "\033[15;5~", 0, 0, 0}, ++ { XK_F30, XK_NO_MOD, "\033[17;5~", 0, 0, 0}, ++ { XK_F31, XK_NO_MOD, "\033[18;5~", 0, 0, 0}, ++ { XK_F32, XK_NO_MOD, "\033[19;5~", 0, 0, 0}, ++ { XK_F33, XK_NO_MOD, "\033[20;5~", 0, 0, 0}, ++ { XK_F34, XK_NO_MOD, "\033[21;5~", 0, 0, 0}, ++ { XK_F35, XK_NO_MOD, "\033[23;5~", 0, 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. ++ */ ++uint selmasks[] = { ++ [SEL_RECTANGULAR] = Mod1Mask, ++}; ++ ++/* ++ * Printable characters in ASCII, used to estimate the advance width ++ * of single wide characters. ++ */ ++char ascii_printable[] = ++ " !\"#$%&'()*+,-./0123456789:;<=>?" ++ "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" ++ "`abcdefghijklmnopqrstuvwxyz{|}~"; ++ +diff --git a/config.mk b/config.mk +index 0aceec4..d2421f8 100644 +--- a/config.mk ++++ b/config.mk +@@ -11,10 +11,10 @@ X11INC = /usr/X11R6/include + X11LIB = /usr/X11R6/lib + + # includes and libs +-INCS = -I$(X11INC) \ ++INCS = -I. -I/usr/include -I${X11INC} \ + `pkg-config --cflags fontconfig` \ + `pkg-config --cflags freetype2` +-LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \ ++LIBS = -L/usr/lib -lc -L${X11LIB} -lm -lrt -lX11 -lutil -lXft -lXrender\ + `pkg-config --libs fontconfig` \ + `pkg-config --libs freetype2` + +diff --git a/config.mk.orig b/config.mk.orig +new file mode 100644 +index 0000000..0aceec4 +--- /dev/null ++++ b/config.mk.orig +@@ -0,0 +1,28 @@ ++# st version ++VERSION = 0.7 ++ ++# Customize below to fit your system ++ ++# paths ++PREFIX = /usr/local ++MANPREFIX = $(PREFIX)/share/man ++ ++X11INC = /usr/X11R6/include ++X11LIB = /usr/X11R6/lib ++ ++# includes and libs ++INCS = -I$(X11INC) \ ++ `pkg-config --cflags fontconfig` \ ++ `pkg-config --cflags freetype2` ++LIBS = -L$(X11LIB) -lm -lrt -lX11 -lutil -lXft \ ++ `pkg-config --libs fontconfig` \ ++ `pkg-config --libs freetype2` ++ ++# flags ++CPPFLAGS = -DVERSION=\"$(VERSION)\" -D_XOPEN_SOURCE=600 ++STCFLAGS = $(INCS) $(CPPFLAGS) $(CFLAGS) ++STLDFLAGS = $(LIBS) $(LDFLAGS) ++ ++# compiler and linker ++# CC = c99 ++ +diff --git a/st.h b/st.h +index 44d4938..180fdba 100644 +--- a/st.h ++++ b/st.h +@@ -251,6 +251,7 @@ extern unsigned int blinktimeout; + extern char termname[]; + extern const char *colorname[]; + extern size_t colornamelen; ++extern unsigned int alpha; + extern unsigned int defaultfg; + extern unsigned int defaultbg; + extern unsigned int defaultcs; +diff --git a/win.h b/win.h +index 428111c..05e8482 100644 +--- a/win.h ++++ b/win.h +@@ -5,6 +5,10 @@ + #define XK_NO_MOD 0 + #define XK_SWITCH_MOD (1<<13) + ++/* alpha */ ++#define OPAQUE 0Xff ++#define USE_ARGB (alpha != OPAQUE && opt_embed == NULL) ++ + typedef XftGlyphFontSpec GlyphFontSpec; + + void draw(void); +diff --git a/x.c b/x.c +index 191e5dc..0e12ab9 100644 +--- a/x.c ++++ b/x.c +@@ -49,6 +49,7 @@ typedef struct { + XSetWindowAttributes attrs; + int scr; + int isfixed; /* is fixed geometry? */ ++ int depth; /* bit depth */ + int l, t; /* left and top offset */ + int gm; /* geometry mask */ + } XWindow; +@@ -562,7 +563,7 @@ xresize(int col, int row) + + XFreePixmap(xw.dpy, xw.buf); + xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, +- DefaultDepth(xw.dpy, xw.scr)); ++ xw.depth); + XftDrawChange(xw.draw, xw.buf); + xclear(0, 0, win.w, win.h); + } +@@ -619,6 +620,13 @@ xloadcols(void) + else + die("Could not allocate color %d\n", i); + } ++ ++ /* set alpha value of bg color */ ++ if (USE_ARGB) { ++ dc.col[defaultbg].color.alpha = (0xffff * alpha) / OPAQUE; ++ dc.col[defaultbg].pixel &= 0x00111111; ++ dc.col[defaultbg].pixel |= alpha << 24; ++ } + loaded = 1; + } + +@@ -640,6 +648,17 @@ xsetcolorname(int x, const char *name) + return 0; + } + ++void ++xtermclear(int col1, int row1, int col2, int row2) ++{ ++ XftDrawRect(xw.draw, ++ &dc.col[IS_SET(MODE_REVERSE) ? defaultfg : defaultbg], ++ borderpx + col1 * win.cw, ++ borderpx + row1 * win.ch, ++ (col2-col1+1) * win.cw, ++ (row2-row1+1) * win.ch); ++} ++ + /* + * Absolute coordinates. + */ +@@ -879,7 +898,40 @@ xinit(void) + if (!(xw.dpy = XOpenDisplay(NULL))) + die("Can't open display\n"); + xw.scr = XDefaultScreen(xw.dpy); +- xw.vis = XDefaultVisual(xw.dpy, xw.scr); ++ xw.depth = (USE_ARGB) ? 32: XDefaultDepth(xw.dpy, xw.scr); ++ if (!USE_ARGB) ++ xw.vis = XDefaultVisual(xw.dpy, xw.scr); ++ else { ++ XVisualInfo *vis; ++ XRenderPictFormat *fmt; ++ int nvi; ++ int i; ++ ++ XVisualInfo tpl = { ++ .screen = xw.scr, ++ .depth = 32, ++ .class = TrueColor ++ }; ++ ++ vis = XGetVisualInfo(xw.dpy, ++ VisualScreenMask | VisualDepthMask | VisualClassMask, ++ &tpl, &nvi); ++ xw.vis = NULL; ++ for (i = 0; i < nvi; i++) { ++ fmt = XRenderFindVisualFormat(xw.dpy, vis[i].visual); ++ if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) { ++ xw.vis = vis[i].visual; ++ break; ++ } ++ } ++ ++ XFree(vis); ++ ++ if (!xw.vis) { ++ fprintf(stderr, "Couldn't find ARGB visual.\n"); ++ exit(1); ++ } ++ } + + /* font */ + if (!FcInit()) +@@ -889,7 +941,11 @@ xinit(void) + xloadfonts(usedfont, 0); + + /* colors */ +- xw.cmap = XDefaultColormap(xw.dpy, xw.scr); ++ if (!USE_ARGB) ++ xw.cmap = XDefaultColormap(xw.dpy, xw.scr); ++ else ++ xw.cmap = XCreateColormap(xw.dpy, XRootWindow(xw.dpy, xw.scr), ++ xw.vis, None); + xloadcols(); + + /* adjust fixed window geometry */ +@@ -912,16 +968,15 @@ xinit(void) + if (!(opt_embed && (parent = strtol(opt_embed, NULL, 0)))) + parent = XRootWindow(xw.dpy, xw.scr); + xw.win = XCreateWindow(xw.dpy, parent, xw.l, xw.t, +- win.w, win.h, 0, XDefaultDepth(xw.dpy, xw.scr), InputOutput, ++ win.w, win.h, 0, xw.depth, InputOutput, + xw.vis, CWBackPixel | CWBorderPixel | CWBitGravity + | CWEventMask | CWColormap, &xw.attrs); + + memset(&gcvalues, 0, sizeof(gcvalues)); + gcvalues.graphics_exposures = False; +- dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures, +- &gcvalues); +- xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, +- DefaultDepth(xw.dpy, xw.scr)); ++ xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h, xw.depth); ++ dc.gc = XCreateGC(xw.dpy, (USE_ARGB) ? xw.buf: parent, ++ GCGraphicsExposures, &gcvalues); + XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel); + XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, win.w, win.h); + +-- +2.15.0 +