HTTPS
https://git.nageyqma.icu/nageyqma/st.git
SSH
git@git.nageyqma.icu:nageyqma/st.git
HTTPS 链接可直接 git clone;推送代码请使用 SSH。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
/* See LICENSE file for copyright and license details. */
/*
* appearance
*
* font: see http://freedesktop.org/software/fontconfig/fontconfig-user.html
*/
//static char *font = "JetBrainsMono Nerd Font Mono:pixelsize=26:antialias=true:autohint=true";
//static char *font = "SauceCodePro Nerd Font Mono:pixelsize=26:antialias=true:autohint=true";
static char *font = "SauceCodePro Nerd Font Mono:pixelsize=26:antialias=true:autohint=true";
//static char *font = "Source Code Pro:pixelsize=26:antialias=true:autohint=true";
static int borderpx = 1;
/*
* 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 = 0.9;
/*
* 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;
/*
* 1: render most of the lines/blocks characters without using the font for
* perfect alignment between cells (U2500 - U259F except dashes/diagonals).
* Bold affects lines thickness if boxdraw_bold is not 0. Italic is ignored.
* 0: disable (render all U25XX glyphs normally from the font).
*/
const int boxdraw = 1;
const int boxdraw_bold = 1;
/* braille (U28XX): 1: render as adjacent "pixels", 0: use font */
const int boxdraw_braille = 1;
/* bg opacity */
float alpha = 0.75;
//float alpha = 0.55;
//float alpha = 0.45;
//float alpha = 0.0;
/*
* 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] = "#000000", /* black */
[1] = "#ff5555", /* red */
[2] = "#50fa7b", /* green */
[3] = "#f1fa8c", /* yellow */
[4] = "#bd93f9", /* blue */
[5] = "#ff79c6", /* magenta */
[6] = "#8be9fd", /* cyan */
[7] = "#bbbbbb", /* white */
/* 8 bright colors */
[8] = "#696969", /* black */
[9] = "#ff5555", /* red */
[10] = "#50fa7b", /* green */
[11] = "#f1fa8c", /* yellow */
[12] = "#bd93f9", /* blue */
[13] = "#ff79c6", /* magenta */
[14] = "#8be9fd", /* cyan */
[15] = "#dddddd", /* white */
/* special colors */
//[256] = "#222D31", /* background */
[256] = "#282a36", /* background */
//[256] = "#000000", /* background */
// [257] = "#B5B5B5", /* foreground */
[257] = "#BD93F9", /* foreground */
};
/*
* Default colors (colorname index)
* foreground, background, cursor, reverse cursor
*/
unsigned int defaultfg = 257;
unsigned int defaultbg = 256;
static unsigned int defaultcs = 257;
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 shape of the mouse cursor. Wayland compositors own the cursor
* theme, so this is a cursor name ("text", "default", "pointer", ...).
* The XC_* aliases in win.h cover the common X cursor names.
*/
static char *mouseshape = XC_xterm;
/*
* 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 keyboard shortcuts. */
#define MODKEY Mod1Mask
#define TERMMOD (ControlMask|ShiftMask)
/*
* Internal mouse shortcuts.
* Beware that overloading Button1 will disable the selection.
*/
static MouseShortcut mshortcuts[] = {
/* mask button function argument release */
{ MOD_ANY, Button2, selpaste, {.i = 0}, 1 },
{ MOD_NONE, Button4, kscrollup, {.i = 1} },
{ MOD_NONE, Button5, kscrolldown, {.i = 1} },
{ ControlMask, Button4, kscrollup, {.i = -1} },
{ ControlMask, Button5, kscrolldown, {.i = -1} },
};
static Shortcut shortcuts[] = {
/* mask keysym function argument */
{ MOD_ANY, XKB_KEY_Break, sendbreak, {.i = 0} },
{ ControlMask, XKB_KEY_Print, toggleprinter, {.i = 0} },
{ ShiftMask, XKB_KEY_Print, printscreen, {.i = 0} },
{ MOD_ANY, XKB_KEY_Print, printsel, {.i = 0} },
{ ControlMask, XKB_KEY_equal, zoom, {.f = +1} },
{ ControlMask, XKB_KEY_minus, zoom, {.f = -1} },
{ TERMMOD, XKB_KEY_Home, zoomreset, {.f = 0} },
{ TERMMOD, XKB_KEY_C, clipcopy, {.i = 0} },
{ TERMMOD, XKB_KEY_V, clippaste, {.i = 0} },
{ TERMMOD, XKB_KEY_Y, selpaste, {.i = 0} },
{ ShiftMask, XKB_KEY_Insert, selpaste, {.i = 0} },
{ TERMMOD, XKB_KEY_Num_Lock, numlock, {.i = 0} },
{ TERMMOD, XKB_KEY_S, keyboard_select,{.i = 0} },
};
/*
* Special keys (change & recompile st.info accordingly)
*
* Mask value:
* * Use MOD_ANY to match the key no matter modifiers state
* * Use MOD_NONE 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 MOD_ANY must be in the last
* position for a key.
*/
/*
* If you want keys other than the 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 (MOD_SWITCH) are ignored.
*/
static uint ignoremod = Mod2Mask|MOD_SWITCH;
/*
* 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 */
{ XKB_KEY_KP_Home, ShiftMask, "\033[2J", 0, -1},
{ XKB_KEY_KP_Home, ShiftMask, "\033[1;2H", 0, +1},
{ XKB_KEY_KP_Home, MOD_ANY, "\033[H", 0, -1},
{ XKB_KEY_KP_Home, MOD_ANY, "\033[1~", 0, +1},
{ XKB_KEY_KP_Up, MOD_ANY, "\033Ox", +1, 0},
{ XKB_KEY_KP_Up, MOD_ANY, "\033[A", 0, -1},
{ XKB_KEY_KP_Up, MOD_ANY, "\033OA", 0, +1},
{ XKB_KEY_KP_Down, MOD_ANY, "\033Or", +1, 0},
{ XKB_KEY_KP_Down, MOD_ANY, "\033[B", 0, -1},
{ XKB_KEY_KP_Down, MOD_ANY, "\033OB", 0, +1},
{ XKB_KEY_KP_Left, MOD_ANY, "\033Ot", +1, 0},
{ XKB_KEY_KP_Left, MOD_ANY, "\033[D", 0, -1},
{ XKB_KEY_KP_Left, MOD_ANY, "\033OD", 0, +1},
{ XKB_KEY_KP_Right, MOD_ANY, "\033Ov", +1, 0},
{ XKB_KEY_KP_Right, MOD_ANY, "\033[C", 0, -1},
{ XKB_KEY_KP_Right, MOD_ANY, "\033OC", 0, +1},
{ XKB_KEY_KP_Prior, ShiftMask, "\033[5;2~", 0, 0},
{ XKB_KEY_KP_Prior, MOD_ANY, "\033[5~", 0, 0},
{ XKB_KEY_KP_Begin, MOD_ANY, "\033[E", 0, 0},
{ XKB_KEY_KP_End, ControlMask, "\033[J", -1, 0},
{ XKB_KEY_KP_End, ControlMask, "\033[1;5F", +1, 0},
{ XKB_KEY_KP_End, ShiftMask, "\033[K", -1, 0},
{ XKB_KEY_KP_End, ShiftMask, "\033[1;2F", +1, 0},
{ XKB_KEY_KP_End, MOD_ANY, "\033[4~", 0, 0},
{ XKB_KEY_KP_Next, ShiftMask, "\033[6;2~", 0, 0},
{ XKB_KEY_KP_Next, MOD_ANY, "\033[6~", 0, 0},
{ XKB_KEY_KP_Insert, ShiftMask, "\033[2;2~", +1, 0},
{ XKB_KEY_KP_Insert, ShiftMask, "\033[4l", -1, 0},
{ XKB_KEY_KP_Insert, ControlMask, "\033[L", -1, 0},
{ XKB_KEY_KP_Insert, ControlMask, "\033[2;5~", +1, 0},
{ XKB_KEY_KP_Insert, MOD_ANY, "\033[4h", -1, 0},
{ XKB_KEY_KP_Insert, MOD_ANY, "\033[2~", +1, 0},
{ XKB_KEY_KP_Delete, ControlMask, "\033[M", -1, 0},
{ XKB_KEY_KP_Delete, ControlMask, "\033[3;5~", +1, 0},
{ XKB_KEY_KP_Delete, ShiftMask, "\033[2K", -1, 0},
{ XKB_KEY_KP_Delete, ShiftMask, "\033[3;2~", +1, 0},
{ XKB_KEY_KP_Delete, MOD_ANY, "\033[P", -1, 0},
{ XKB_KEY_KP_Delete, MOD_ANY, "\033[3~", +1, 0},
{ XKB_KEY_KP_Multiply, MOD_ANY, "\033Oj", +2, 0},
{ XKB_KEY_KP_Add, MOD_ANY, "\033Ok", +2, 0},
{ XKB_KEY_KP_Enter, MOD_ANY, "\033OM", +2, 0},
{ XKB_KEY_KP_Enter, MOD_ANY, "\r", -1, 0},
{ XKB_KEY_KP_Subtract, MOD_ANY, "\033Om", +2, 0},
{ XKB_KEY_KP_Decimal, MOD_ANY, "\033On", +2, 0},
{ XKB_KEY_KP_Divide, MOD_ANY, "\033Oo", +2, 0},
{ XKB_KEY_KP_0, MOD_ANY, "\033Op", +2, 0},
{ XKB_KEY_KP_1, MOD_ANY, "\033Oq", +2, 0},
{ XKB_KEY_KP_2, MOD_ANY, "\033Or", +2, 0},
{ XKB_KEY_KP_3, MOD_ANY, "\033Os", +2, 0},
{ XKB_KEY_KP_4, MOD_ANY, "\033Ot", +2, 0},
{ XKB_KEY_KP_5, MOD_ANY, "\033Ou", +2, 0},
{ XKB_KEY_KP_6, MOD_ANY, "\033Ov", +2, 0},
{ XKB_KEY_KP_7, MOD_ANY, "\033Ow", +2, 0},
{ XKB_KEY_KP_8, MOD_ANY, "\033Ox", +2, 0},
{ XKB_KEY_KP_9, MOD_ANY, "\033Oy", +2, 0},
{ XKB_KEY_Up, ShiftMask, "\033[1;2A", 0, 0},
{ XKB_KEY_Up, Mod1Mask, "\033[1;3A", 0, 0},
{ XKB_KEY_Up, ShiftMask|Mod1Mask,"\033[1;4A", 0, 0},
{ XKB_KEY_Up, ControlMask, "\033[1;5A", 0, 0},
{ XKB_KEY_Up, ShiftMask|ControlMask,"\033[1;6A", 0, 0},
{ XKB_KEY_Up, ControlMask|Mod1Mask,"\033[1;7A", 0, 0},
{ XKB_KEY_Up,ShiftMask|ControlMask|Mod1Mask,"\033[1;8A", 0, 0},
{ XKB_KEY_Up, MOD_ANY, "\033[A", 0, -1},
{ XKB_KEY_Up, MOD_ANY, "\033OA", 0, +1},
{ XKB_KEY_Down, ShiftMask, "\033[1;2B", 0, 0},
{ XKB_KEY_Down, Mod1Mask, "\033[1;3B", 0, 0},
{ XKB_KEY_Down, ShiftMask|Mod1Mask,"\033[1;4B", 0, 0},
{ XKB_KEY_Down, ControlMask, "\033[1;5B", 0, 0},
{ XKB_KEY_Down, ShiftMask|ControlMask,"\033[1;6B", 0, 0},
{ XKB_KEY_Down, ControlMask|Mod1Mask,"\033[1;7B", 0, 0},
{ XKB_KEY_Down,ShiftMask|ControlMask|Mod1Mask,"\033[1;8B",0, 0},
{ XKB_KEY_Down, MOD_ANY, "\033[B", 0, -1},
{ XKB_KEY_Down, MOD_ANY, "\033OB", 0, +1},
{ XKB_KEY_Left, ShiftMask, "\033[1;2D", 0, 0},
{ XKB_KEY_Left, Mod1Mask, "\033[1;3D", 0, 0},
{ XKB_KEY_Left, ShiftMask|Mod1Mask,"\033[1;4D", 0, 0},
{ XKB_KEY_Left, ControlMask, "\033[1;5D", 0, 0},
{ XKB_KEY_Left, ShiftMask|ControlMask,"\033[1;6D", 0, 0},
{ XKB_KEY_Left, ControlMask|Mod1Mask,"\033[1;7D", 0, 0},
{ XKB_KEY_Left,ShiftMask|ControlMask|Mod1Mask,"\033[1;8D",0, 0},
{ XKB_KEY_Left, MOD_ANY, "\033[D", 0, -1},
{ XKB_KEY_Left, MOD_ANY, "\033OD", 0, +1},
{ XKB_KEY_Right, ShiftMask, "\033[1;2C", 0, 0},
{ XKB_KEY_Right, Mod1Mask, "\033[1;3C", 0, 0},
{ XKB_KEY_Right, ShiftMask|Mod1Mask,"\033[1;4C", 0, 0},
{ XKB_KEY_Right, ControlMask, "\033[1;5C", 0, 0},
{ XKB_KEY_Right, ShiftMask|ControlMask,"\033[1;6C", 0, 0},
{ XKB_KEY_Right, ControlMask|Mod1Mask,"\033[1;7C", 0, 0},
{ XKB_KEY_Right,ShiftMask|ControlMask|Mod1Mask,"\033[1;8C",0, 0},
{ XKB_KEY_Right, MOD_ANY, "\033[C", 0, -1},
{ XKB_KEY_Right, MOD_ANY, "\033OC", 0, +1},
{ XKB_KEY_ISO_Left_Tab, ShiftMask, "\033[Z", 0, 0},
{ XKB_KEY_Return, Mod1Mask, "\033\r", 0, 0},
{ XKB_KEY_Return, MOD_ANY, "\r", 0, 0},
{ XKB_KEY_Insert, ShiftMask, "\033[4l", -1, 0},
{ XKB_KEY_Insert, ShiftMask, "\033[2;2~", +1, 0},
{ XKB_KEY_Insert, ControlMask, "\033[L", -1, 0},
{ XKB_KEY_Insert, ControlMask, "\033[2;5~", +1, 0},
{ XKB_KEY_Insert, MOD_ANY, "\033[4h", -1, 0},
{ XKB_KEY_Insert, MOD_ANY, "\033[2~", +1, 0},
{ XKB_KEY_Delete, ControlMask, "\033[M", -1, 0},
{ XKB_KEY_Delete, ControlMask, "\033[3;5~", +1, 0},
{ XKB_KEY_Delete, ShiftMask, "\033[2K", -1, 0},
{ XKB_KEY_Delete, ShiftMask, "\033[3;2~", +1, 0},
{ XKB_KEY_Delete, MOD_ANY, "\033[P", -1, 0},
{ XKB_KEY_Delete, MOD_ANY, "\033[3~", +1, 0},
{ XKB_KEY_BackSpace, MOD_NONE, "\177", 0, 0},
{ XKB_KEY_BackSpace, Mod1Mask, "\033\177", 0, 0},
{ XKB_KEY_Home, ShiftMask, "\033[2J", 0, -1},
{ XKB_KEY_Home, ShiftMask, "\033[1;2H", 0, +1},
{ XKB_KEY_Home, MOD_ANY, "\033[H", 0, -1},
{ XKB_KEY_Home, MOD_ANY, "\033[1~", 0, +1},
{ XKB_KEY_End, ControlMask, "\033[J", -1, 0},
{ XKB_KEY_End, ControlMask, "\033[1;5F", +1, 0},
{ XKB_KEY_End, ShiftMask, "\033[K", -1, 0},
{ XKB_KEY_End, ShiftMask, "\033[1;2F", +1, 0},
{ XKB_KEY_End, MOD_ANY, "\033[4~", 0, 0},
{ XKB_KEY_Prior, ControlMask, "\033[5;5~", 0, 0},
{ XKB_KEY_Prior, ShiftMask, "\033[5;2~", 0, 0},
{ XKB_KEY_Prior, MOD_ANY, "\033[5~", 0, 0},
{ XKB_KEY_Next, ControlMask, "\033[6;5~", 0, 0},
{ XKB_KEY_Next, ShiftMask, "\033[6;2~", 0, 0},
{ XKB_KEY_Next, MOD_ANY, "\033[6~", 0, 0},
{ XKB_KEY_F1, MOD_NONE, "\033OP" , 0, 0},
{ XKB_KEY_F1, /* F13 */ ShiftMask, "\033[1;2P", 0, 0},
{ XKB_KEY_F1, /* F25 */ ControlMask, "\033[1;5P", 0, 0},
{ XKB_KEY_F1, /* F37 */ Mod4Mask, "\033[1;6P", 0, 0},
{ XKB_KEY_F1, /* F49 */ Mod1Mask, "\033[1;3P", 0, 0},
{ XKB_KEY_F1, /* F61 */ Mod3Mask, "\033[1;4P", 0, 0},
{ XKB_KEY_F2, MOD_NONE, "\033OQ" , 0, 0},
{ XKB_KEY_F2, /* F14 */ ShiftMask, "\033[1;2Q", 0, 0},
{ XKB_KEY_F2, /* F26 */ ControlMask, "\033[1;5Q", 0, 0},
{ XKB_KEY_F2, /* F38 */ Mod4Mask, "\033[1;6Q", 0, 0},
{ XKB_KEY_F2, /* F50 */ Mod1Mask, "\033[1;3Q", 0, 0},
{ XKB_KEY_F2, /* F62 */ Mod3Mask, "\033[1;4Q", 0, 0},
{ XKB_KEY_F3, MOD_NONE, "\033OR" , 0, 0},
{ XKB_KEY_F3, /* F15 */ ShiftMask, "\033[1;2R", 0, 0},
{ XKB_KEY_F3, /* F27 */ ControlMask, "\033[1;5R", 0, 0},
{ XKB_KEY_F3, /* F39 */ Mod4Mask, "\033[1;6R", 0, 0},
{ XKB_KEY_F3, /* F51 */ Mod1Mask, "\033[1;3R", 0, 0},
{ XKB_KEY_F3, /* F63 */ Mod3Mask, "\033[1;4R", 0, 0},
{ XKB_KEY_F4, MOD_NONE, "\033OS" , 0, 0},
{ XKB_KEY_F4, /* F16 */ ShiftMask, "\033[1;2S", 0, 0},
{ XKB_KEY_F4, /* F28 */ ControlMask, "\033[1;5S", 0, 0},
{ XKB_KEY_F4, /* F40 */ Mod4Mask, "\033[1;6S", 0, 0},
{ XKB_KEY_F4, /* F52 */ Mod1Mask, "\033[1;3S", 0, 0},
{ XKB_KEY_F5, MOD_NONE, "\033[15~", 0, 0},
{ XKB_KEY_F5, /* F17 */ ShiftMask, "\033[15;2~", 0, 0},
{ XKB_KEY_F5, /* F29 */ ControlMask, "\033[15;5~", 0, 0},
{ XKB_KEY_F5, /* F41 */ Mod4Mask, "\033[15;6~", 0, 0},
{ XKB_KEY_F5, /* F53 */ Mod1Mask, "\033[15;3~", 0, 0},
{ XKB_KEY_F6, MOD_NONE, "\033[17~", 0, 0},
{ XKB_KEY_F6, /* F18 */ ShiftMask, "\033[17;2~", 0, 0},
{ XKB_KEY_F6, /* F30 */ ControlMask, "\033[17;5~", 0, 0},
{ XKB_KEY_F6, /* F42 */ Mod4Mask, "\033[17;6~", 0, 0},
{ XKB_KEY_F6, /* F54 */ Mod1Mask, "\033[17;3~", 0, 0},
{ XKB_KEY_F7, MOD_NONE, "\033[18~", 0, 0},
{ XKB_KEY_F7, /* F19 */ ShiftMask, "\033[18;2~", 0, 0},
{ XKB_KEY_F7, /* F31 */ ControlMask, "\033[18;5~", 0, 0},
{ XKB_KEY_F7, /* F43 */ Mod4Mask, "\033[18;6~", 0, 0},
{ XKB_KEY_F7, /* F55 */ Mod1Mask, "\033[18;3~", 0, 0},
{ XKB_KEY_F8, MOD_NONE, "\033[19~", 0, 0},
{ XKB_KEY_F8, /* F20 */ ShiftMask, "\033[19;2~", 0, 0},
{ XKB_KEY_F8, /* F32 */ ControlMask, "\033[19;5~", 0, 0},
{ XKB_KEY_F8, /* F44 */ Mod4Mask, "\033[19;6~", 0, 0},
{ XKB_KEY_F8, /* F56 */ Mod1Mask, "\033[19;3~", 0, 0},
{ XKB_KEY_F9, MOD_NONE, "\033[20~", 0, 0},
{ XKB_KEY_F9, /* F21 */ ShiftMask, "\033[20;2~", 0, 0},
{ XKB_KEY_F9, /* F33 */ ControlMask, "\033[20;5~", 0, 0},
{ XKB_KEY_F9, /* F45 */ Mod4Mask, "\033[20;6~", 0, 0},
{ XKB_KEY_F9, /* F57 */ Mod1Mask, "\033[20;3~", 0, 0},
{ XKB_KEY_F10, MOD_NONE, "\033[21~", 0, 0},
{ XKB_KEY_F10, /* F22 */ ShiftMask, "\033[21;2~", 0, 0},
{ XKB_KEY_F10, /* F34 */ ControlMask, "\033[21;5~", 0, 0},
{ XKB_KEY_F10, /* F46 */ Mod4Mask, "\033[21;6~", 0, 0},
{ XKB_KEY_F10, /* F58 */ Mod1Mask, "\033[21;3~", 0, 0},
{ XKB_KEY_F11, MOD_NONE, "\033[23~", 0, 0},
{ XKB_KEY_F11, /* F23 */ ShiftMask, "\033[23;2~", 0, 0},
{ XKB_KEY_F11, /* F35 */ ControlMask, "\033[23;5~", 0, 0},
{ XKB_KEY_F11, /* F47 */ Mod4Mask, "\033[23;6~", 0, 0},
{ XKB_KEY_F11, /* F59 */ Mod1Mask, "\033[23;3~", 0, 0},
{ XKB_KEY_F12, MOD_NONE, "\033[24~", 0, 0},
{ XKB_KEY_F12, /* F24 */ ShiftMask, "\033[24;2~", 0, 0},
{ XKB_KEY_F12, /* F36 */ ControlMask, "\033[24;5~", 0, 0},
{ XKB_KEY_F12, /* F48 */ Mod4Mask, "\033[24;6~", 0, 0},
{ XKB_KEY_F12, /* F60 */ Mod1Mask, "\033[24;3~", 0, 0},
{ XKB_KEY_F13, MOD_NONE, "\033[1;2P", 0, 0},
{ XKB_KEY_F14, MOD_NONE, "\033[1;2Q", 0, 0},
{ XKB_KEY_F15, MOD_NONE, "\033[1;2R", 0, 0},
{ XKB_KEY_F16, MOD_NONE, "\033[1;2S", 0, 0},
{ XKB_KEY_F17, MOD_NONE, "\033[15;2~", 0, 0},
{ XKB_KEY_F18, MOD_NONE, "\033[17;2~", 0, 0},
{ XKB_KEY_F19, MOD_NONE, "\033[18;2~", 0, 0},
{ XKB_KEY_F20, MOD_NONE, "\033[19;2~", 0, 0},
{ XKB_KEY_F21, MOD_NONE, "\033[20;2~", 0, 0},
{ XKB_KEY_F22, MOD_NONE, "\033[21;2~", 0, 0},
{ XKB_KEY_F23, MOD_NONE, "\033[23;2~", 0, 0},
{ XKB_KEY_F24, MOD_NONE, "\033[24;2~", 0, 0},
{ XKB_KEY_F25, MOD_NONE, "\033[1;5P", 0, 0},
{ XKB_KEY_F26, MOD_NONE, "\033[1;5Q", 0, 0},
{ XKB_KEY_F27, MOD_NONE, "\033[1;5R", 0, 0},
{ XKB_KEY_F28, MOD_NONE, "\033[1;5S", 0, 0},
{ XKB_KEY_F29, MOD_NONE, "\033[15;5~", 0, 0},
{ XKB_KEY_F30, MOD_NONE, "\033[17;5~", 0, 0},
{ XKB_KEY_F31, MOD_NONE, "\033[18;5~", 0, 0},
{ XKB_KEY_F32, MOD_NONE, "\033[19;5~", 0, 0},
{ XKB_KEY_F33, MOD_NONE, "\033[20;5~", 0, 0},
{ XKB_KEY_F34, MOD_NONE, "\033[21;5~", 0, 0},
{ XKB_KEY_F35, MOD_NONE, "\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{|}~";