From c5f63147179608778b76f1067537b46c4eb25804 Mon Sep 17 00:00:00 2001 From: mrsu Date: Mon, 26 Jun 2023 10:27:44 +0100 Subject: [PATCH] scrollback --- config.def.h | 519 +++++++++++++++++++++++++++++++++++++++++++++++++++ config.h | 2 + st.c | 125 ++++++++++--- st.h | 2 + st.o | Bin 88152 -> 91200 bytes x.o | Bin 82064 -> 82248 bytes 6 files changed, 621 insertions(+), 27 deletions(-) create mode 100644 config.def.h diff --git a/config.def.h b/config.def.h new file mode 100644 index 0000000..fd2a22d --- /dev/null +++ b/config.def.h @@ -0,0 +1,519 @@ +/* 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"; +/* Spare fonts */ +static char *font2[] = { +/* "Inconsolata for Powerline:pixelsize=12:antialias=true:autohint=true", */ +/* "Hack Nerd Font Mono:pixelsize=11: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 */ + "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; + +/* + * Xresources preferences to load at startup + */ +ResourcePref resources[] = { + { "font", STRING, &font }, + { "color0", STRING, &colorname[0] }, + { "color1", STRING, &colorname[1] }, + { "color2", STRING, &colorname[2] }, + { "color3", STRING, &colorname[3] }, + { "color4", STRING, &colorname[4] }, + { "color5", STRING, &colorname[5] }, + { "color6", STRING, &colorname[6] }, + { "color7", STRING, &colorname[7] }, + { "color8", STRING, &colorname[8] }, + { "color9", STRING, &colorname[9] }, + { "color10", STRING, &colorname[10] }, + { "color11", STRING, &colorname[11] }, + { "color12", STRING, &colorname[12] }, + { "color13", STRING, &colorname[13] }, + { "color14", STRING, &colorname[14] }, + { "color15", STRING, &colorname[15] }, + { "background", STRING, &colorname[256] }, + { "foreground", STRING, &colorname[257] }, + { "cursorColor", STRING, &colorname[258] }, + { "termname", STRING, &termname }, + { "shell", STRING, &shell }, + { "minlatency", INTEGER, &minlatency }, + { "maxlatency", INTEGER, &maxlatency }, + { "blinktimeout", INTEGER, &blinktimeout }, + { "bellvolume", INTEGER, &bellvolume }, + { "tabspaces", INTEGER, &tabspaces }, + { "borderpx", INTEGER, &borderpx }, + { "cwscale", FLOAT, &cwscale }, + { "chscale", FLOAT, &chscale }, +}; + +/* + * 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} }, + { TERMMOD, XK_Escape, keyboard_select,{ 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/config.h b/config.h index aa63b99..fd2a22d 100644 --- a/config.h +++ b/config.h @@ -244,6 +244,8 @@ static Shortcut shortcuts[] = { { ShiftMask, XK_Insert, selpaste, {.i = 0} }, { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, { TERMMOD, XK_Escape, keyboard_select,{ 0 } }, + { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, + { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, }; /* diff --git a/st.c b/st.c index 8dd4c6c..e344718 100644 --- a/st.c +++ b/st.c @@ -37,6 +37,7 @@ #define ESC_ARG_SIZ 16 #define STR_BUF_SIZ ESC_BUF_SIZ #define STR_ARG_SIZ ESC_ARG_SIZ +#define HISTSIZE 2000 /* macros */ #define IS_SET(flag) ((term.mode & (flag)) != 0) @@ -44,6 +45,9 @@ #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) #define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c)) #define ISDELIM(u) (u && wcschr(worddelimiters, u)) +#define TLINE(y) ((y) < term.scr ? term.hist[((y) + term.histi - \ + term.scr + HISTSIZE + 1) % HISTSIZE] : \ + term.line[(y) - term.scr]) enum term_mode { MODE_WRAP = 1 << 0, @@ -117,6 +121,9 @@ typedef struct { int col; /* nb col */ Line *line; /* screen */ Line *alt; /* alternate screen */ + Line hist[HISTSIZE]; /* history buffer */ + int histi; /* history index */ + int scr; /* scroll back */ int *dirty; /* dirtyness of lines */ TCursor c; /* cursor */ int ocx; /* old cursor col */ @@ -187,8 +194,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); @@ -411,10 +418,10 @@ tlinelen(int y) { int i = term.col; - if (term.line[y][i - 1].mode & ATTR_WRAP) + if (TLINE(y)[i - 1].mode & ATTR_WRAP) return i; - while (i > 0 && term.line[y][i - 1].u == ' ') + while (i > 0 && TLINE(y)[i - 1].u == ' ') --i; return i; @@ -523,7 +530,7 @@ selsnap(int *x, int *y, int direction) * Snap around if the word wraps around at the end or * beginning of a line. */ - prevgp = &term.line[*y][*x]; + prevgp = &TLINE(*y)[*x]; prevdelim = ISDELIM(prevgp->u); for (;;) { newx = *x + direction; @@ -538,14 +545,14 @@ selsnap(int *x, int *y, int direction) yt = *y, xt = *x; else yt = newy, xt = newx; - if (!(term.line[yt][xt].mode & ATTR_WRAP)) + if (!(TLINE(yt)[xt].mode & ATTR_WRAP)) break; } if (newx >= tlinelen(newy)) break; - gp = &term.line[newy][newx]; + gp = &TLINE(newy)[newx]; delim = ISDELIM(gp->u); if (!(gp->mode & ATTR_WDUMMY) && (delim != prevdelim || (delim && gp->u != prevgp->u))) @@ -566,14 +573,14 @@ selsnap(int *x, int *y, int direction) *x = (direction < 0) ? 0 : term.col - 1; if (direction < 0) { for (; *y > 0; *y += direction) { - if (!(term.line[*y-1][term.col-1].mode + if (!(TLINE(*y-1)[term.col-1].mode & ATTR_WRAP)) { break; } } } else if (direction > 0) { for (; *y < term.row-1; *y += direction) { - if (!(term.line[*y][term.col-1].mode + if (!(TLINE(*y)[term.col-1].mode & ATTR_WRAP)) { break; } @@ -604,13 +611,13 @@ getsel(void) } if (sel.type == SEL_RECTANGULAR) { - gp = &term.line[y][sel.nb.x]; + gp = &TLINE(y)[sel.nb.x]; lastx = sel.ne.x; } else { - gp = &term.line[y][sel.nb.y == y ? sel.nb.x : 0]; + gp = &TLINE(y)[sel.nb.y == y ? sel.nb.x : 0]; lastx = (sel.ne.y == y) ? sel.ne.x : term.col-1; } - last = &term.line[y][MIN(lastx, linelen-1)]; + last = &TLINE(y)[MIN(lastx, linelen-1)]; while (last >= gp && last->u == ' ') --last; @@ -846,6 +853,9 @@ void ttywrite(const char *s, size_t n, int may_echo) { const char *next; + Arg arg = (Arg) { .i = term.scr }; + + kscrolldown(&arg); if (may_echo && IS_SET(MODE_ECHO)) twrite(s, n, 1); @@ -1057,12 +1067,52 @@ tswapscreen(void) } void -tscrolldown(int orig, int n) +kscrolldown(const Arg* a) +{ + int n = a->i; + + if (n < 0) + n = term.row + n; + + if (n > term.scr) + n = term.scr; + + if (term.scr > 0) { + term.scr -= n; + selscroll(0, -n); + tfulldirt(); + } +} + +void +kscrollup(const Arg* a) +{ + int n = a->i; + + if (n < 0) + n = term.row + n; + + if (term.scr <= HISTSIZE-n) { + term.scr += n; + selscroll(0, n); + tfulldirt(); + } +} + +void +tscrolldown(int orig, int n, int copyhist) { int i; Line temp; LIMIT(n, 0, term.bot-orig+1); + if (copyhist) { + term.histi = (term.histi - 1 + HISTSIZE) % HISTSIZE; + temp = term.hist[term.histi]; + term.hist[term.histi] = term.line[term.bot]; + term.line[term.bot] = temp; + } + tsetdirt(orig, term.bot-n); tclearregion(0, term.bot-n+1, term.col-1, term.bot); @@ -1073,17 +1123,28 @@ tscrolldown(int orig, int n) term.line[i-n] = temp; } - selscroll(orig, n); + if (term.scr == 0) + selscroll(orig, n); } void -tscrollup(int orig, int n) +tscrollup(int orig, int n, int copyhist) { int i; Line temp; LIMIT(n, 0, term.bot-orig+1); + if (copyhist) { + term.histi = (term.histi + 1) % HISTSIZE; + temp = term.hist[term.histi]; + term.hist[term.histi] = term.line[orig]; + term.line[orig] = temp; + } + + if (term.scr > 0 && term.scr < HISTSIZE) + term.scr = MIN(term.scr + n, HISTSIZE-1); + tclearregion(0, orig, term.col-1, orig+n-1); tsetdirt(orig+n, term.bot); @@ -1093,7 +1154,8 @@ tscrollup(int orig, int n) term.line[i+n] = temp; } - selscroll(orig, -n); + if (term.scr == 0) + selscroll(orig, -n); } void @@ -1122,7 +1184,7 @@ tnewline(int first_col) int y = term.c.y; if (y == term.bot) { - tscrollup(term.top, 1); + tscrollup(term.top, 1, 1); } else { y++; } @@ -1287,14 +1349,14 @@ void tinsertblankline(int n) { if (BETWEEN(term.c.y, term.top, term.bot)) - tscrolldown(term.c.y, n); + tscrolldown(term.c.y, n, 0); } void tdeleteline(int n) { if (BETWEEN(term.c.y, term.top, term.bot)) - tscrollup(term.c.y, n); + tscrollup(term.c.y, n, 0); } int32_t @@ -1731,11 +1793,11 @@ csihandle(void) break; case 'S': /* SU -- Scroll line up */ DEFAULT(csiescseq.arg[0], 1); - tscrollup(term.top, csiescseq.arg[0]); + tscrollup(term.top, csiescseq.arg[0], 0); break; case 'T': /* SD -- Scroll line down */ DEFAULT(csiescseq.arg[0], 1); - tscrolldown(term.top, csiescseq.arg[0]); + tscrolldown(term.top, csiescseq.arg[0], 0); break; case 'L': /* IL -- Insert blank lines */ DEFAULT(csiescseq.arg[0], 1); @@ -2307,7 +2369,7 @@ eschandle(uchar ascii) return 0; case 'D': /* IND -- Linefeed */ if (term.c.y == term.bot) { - tscrollup(term.top, 1); + tscrollup(term.top, 1, 1); } else { tmoveto(term.c.x, term.c.y+1); } @@ -2320,7 +2382,7 @@ eschandle(uchar ascii) break; case 'M': /* RI -- Reverse index */ if (term.c.y == term.top) { - tscrolldown(term.top, 1); + tscrolldown(term.top, 1, 1); } else { tmoveto(term.c.x, term.c.y-1); } @@ -2539,7 +2601,7 @@ twrite(const char *buf, int buflen, int show_ctrl) void tresize(int col, int row) { - int i; + int i, j; int minrow = MIN(row, term.row); int mincol = MIN(col, term.col); int *bp; @@ -2579,6 +2641,14 @@ tresize(int col, int row) term.dirty = xrealloc(term.dirty, row * sizeof(*term.dirty)); term.tabs = xrealloc(term.tabs, col * sizeof(*term.tabs)); + for (i = 0; i < HISTSIZE; i++) { + term.hist[i] = xrealloc(term.hist[i], col * sizeof(Glyph)); + for (j = mincol; j < col; j++) { + term.hist[i][j] = term.c.attr; + term.hist[i][j].u = ' '; + } + } + /* resize each row to new width, zero-pad if needed */ for (i = 0; i < minrow; i++) { term.line[i] = xrealloc(term.line[i], col * sizeof(Glyph)); @@ -2637,7 +2707,7 @@ drawregion(int x1, int y1, int x2, int y2) continue; term.dirty[y] = 0; - xdrawline(term.line[y], x1, y, x2); + xdrawline(TLINE(y), x1, y, x2); } } @@ -2658,8 +2728,9 @@ draw(void) cx--; drawregion(0, 0, term.col, term.row); - xdrawcursor(cx, term.c.y, term.line[term.c.y][cx], - term.ocx, term.ocy, term.line[term.ocy][term.ocx]); + if (term.scr == 0) + xdrawcursor(cx, term.c.y, term.line[term.c.y][cx], + term.ocx, term.ocy, term.line[term.ocy][term.ocx]); term.ocx = cx; term.ocy = term.c.y; xfinishdraw(); diff --git a/st.h b/st.h index 8714d58..5434356 100644 --- a/st.h +++ b/st.h @@ -87,6 +87,8 @@ void die(const char *, ...); void redraw(void); void draw(void); +void kscrolldown(const Arg *); +void kscrollup(const Arg *); void printscreen(const Arg *); void printsel(const Arg *); void sendbreak(const Arg *); diff --git a/st.o b/st.o index 1162a7ec5dd2a39304840ce6b631e2ab1c624af6..401e2e22c34a9f0c09a478a9fe087fe40750546f 100644 GIT binary patch literal 91200 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 literal 88152 zcmeF4d3+RA_UNmV1_FjuR74aQTTPS*BFG{wC~0Vu7eB;1OfyR9Y9A>R5q7xS{6|jLFjkRz4s(1mz4hA`@GNRy+5oEov!-U zsdLXg_uRFrn#v)8%Tin}gEp6OsnK{u)G!_$)kt#%&NWUpPBMJ2UBD_P$*O?1f99*AkE=-+gQ6yo1{J!hZVs#wNqKB-zR^Cg;?*I+`?$#rS7Y3JA|SjC@jO_y%M?Qfn@(g@jV; zYEF$DuAIDi5gK0S`>XF7-_^d+SC6tHKlZciP*z%={b{~c|<6ml-0ppIxzOrv1HP& z3)B>6b;yejNkT4DCs*V}j=Cll=0$#UO&YrdEeS-YWqFqGXz4ST4(J}RkHr?lWv%P1 z2w)>T+={Gn4fB2nDdm}$t+KqU%0KbF50@DM?=JJM3CUy<4NJ2-1nk|GT_0NmR}Zs) zj1Pk|LVset?|n=s-XBOFoaqJMG1O2a%EStS2H|C^rrlvHxW-z(&3(Y%X1^=kzPfhC zNtSDE9-B7A3Vv=y z-49_}IpCJSg)Y#YqEf4Or=VF-GH%PeCLFI@igJniW%yNnVCoz4_`N!%w=5~n#45r3 zI!oEE47a8Iw#ZPV4{C77R-&M}P{iMXb|egEEW6aiN?=nsj$a9(Mqq2BwZm_9bP3^!^QSz zR?ccG+WSqAZg1v@{KM|e>E?-@g?1rO6MC~9q*F8PZ<(=u5EykT-ZSlKS?QL&-~PmB zud{;63ZZ1?w3N|CxT}3A67xk4T{8JhyH-^^t7gCot2!AnF~HLoyCIp_!rvgKg1
EN`2nd)7RSvC0;C1b#lgN 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 Gi2nz0 z^?kDAQgKfoNhPI66oF@z+dNZaM z0=bM0(^uLu+B0@ce+i-%OxLsnQV*tQf~XJER{|*}p6ba9-NdHZGiopiR8QBkXS8E< vn4W15lrb=#z6!|YVrYXnQ$u0;CwoRSPK{*{zVdWK2S#(I3d`wP4vcC5nG|j0 delta 376 zcmX@n#5$pob%F-d1{M*fd?qn(-gg4&LcXHjMum3#KdD zGS)L45ShNnmeGxI!St85jOLsUhKyj>T1?lpV>D-Un4W0IXwT>|eIbZSnEnt*O@Cm= z$T3~Rp3#DF!}LUZMti0+Rg)LGiA|o6FEIUtJ);EEg{tX~>>2GC8Kx^b0HrI8rYAWt p+HoCdg#^S8`RS`17|l3$EQRoSr@wSyH0L^C0kN8kadK9^8~`T?SCaq$