sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit bae23585084d6f8ed84cb8d71633caa8cba6b9a0
parent 45691fc2ba333f578d2ee3c9186809368bb33ddc
Author: наб <nabijaczleweli@nabijaczleweli.xyz>
Date:   Sat,  6 Jul 2024 01:29:16 +0200

[st][patches][scrollback] Add mark patch

This patch adds a \e[ m escape,
such that Ctrl+PgUp can go directly to the past PS1

Diffstat:
Mst.suckless.org/patches/scrollback/index.md | 4++++
Ast.suckless.org/patches/scrollback/st-scrollback-mark-0.9.2.diff | 115+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 119 insertions(+), 0 deletions(-)

diff --git a/st.suckless.org/patches/scrollback/index.md b/st.suckless.org/patches/scrollback/index.md @@ -58,6 +58,10 @@ Apply the following patch on top of the first two to allow changing how fast the * [st-scrollback-mouse-increment-0.8.2.diff](st-scrollback-mouse-increment-0.8.2.diff) * [st-scrollback-mouse-increment-0.9.2.diff](st-scrollback-mouse-increment-0.9.2.diff) +Apply the following patch on top of the first two to allow a `\e[ m` escape, +marking the line to quickly scroll to with Control+{PageUp, PageDown}. +* [st-scrollback-mark-0.9.2.diff](st-scrollback-mark-0.9.2.diff) + Notes ----- * Patches modify config.def.h, you need to add mkeys to your own config.h diff --git a/st.suckless.org/patches/scrollback/st-scrollback-mark-0.9.2.diff b/st.suckless.org/patches/scrollback/st-scrollback-mark-0.9.2.diff @@ -0,0 +1,115 @@ +From eed328240d04caedfaeef83342cf219758e20ded Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <nabijaczleweli@nabijaczleweli.xyz> +Date: Sat, 6 Jul 2024 01:00:30 +0200 +Subject: [PATCH] Add \e[ m escape to mark a line. Ctrl+PgUp/+PgDn scroll to + marked lines + +Primarily useful for C++ enthusiasts so if you get a megabyte of errors +you can go back to the first one + +Recommended usage: PS1="$PS1\e[ m" + +Ref: https://101010.pl/@atax1a@infosec.exchange/112734806523834451 +--- + config.def.h | 2 ++ + st.c | 41 +++++++++++++++++++++++++++++++++++++++++ + st.h | 3 +++ + 3 files changed, 46 insertions(+) + +diff --git a/config.def.h b/config.def.h +index fc3079e..5bf8132 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -226,7 +226,9 @@ static Shortcut shortcuts[] = { + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, + { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, ++ { ControlMask, XK_Page_Up, kscrolltoprevmark }, + { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, ++ { ControlMask, XK_Page_Down, kscrolltonextmark }, + { TERMMOD, XK_I, iso14755, {.i = 0} }, + }; + +diff --git a/st.c b/st.c +index ddd14c1..353d6c6 100644 +--- a/st.c ++++ b/st.c +@@ -1104,6 +1104,44 @@ kscrollup(const Arg* a) + } + } + ++void ++kscrolltonextmark(const Arg* a) ++{ ++ int orig_scr = term.scr; ++ ++ while (--term.scr >= 0) ++ if (TLINE(0)->mode & ATTR_MARKED) { ++ found: ++ if (term.scr != orig_scr) { ++ selscroll(0, term.scr - orig_scr); ++ tfulldirt(); ++ } ++ return; ++ } ++ ++ term.scr = 0; ++ for(int i = 0; i < term.row; ++i) ++ if (TLINE(i)->mode & ATTR_MARKED) ++ goto found; ++ ++ term.scr = orig_scr; ++} ++ ++void ++kscrolltoprevmark(const Arg* a) ++{ ++ int orig_scr = term.scr; ++ ++ while (++term.scr <= HISTSIZE) ++ if (TLINE(0)->mode & ATTR_MARKED) { ++ selscroll(0, term.scr - orig_scr); ++ tfulldirt(); ++ return; ++ } ++ ++ term.scr = orig_scr; ++} ++ + void + tscrolldown(int orig, int n, int copyhist) + { +@@ -1881,6 +1919,9 @@ csihandle(void) + if (xsetcursor(csiescseq.arg[0])) + goto unknown; + break; ++ case 'm': /* mark line to quickly scroll back to later */ ++ term.line[term.c.y]->mode |= ATTR_MARKED; ++ break; + default: + goto unknown; + } +diff --git a/st.h b/st.h +index 9dba57d..469e5c4 100644 +--- a/st.h ++++ b/st.h +@@ -35,6 +35,7 @@ enum glyph_attribute { + ATTR_WDUMMY = 1 << 10, + ATTR_BOXDRAW = 1 << 11, + ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT, ++ ATTR_MARKED = 1 << 12, + }; + + enum selection_mode { +@@ -84,6 +85,8 @@ void draw(void); + + void kscrolldown(const Arg *); + void kscrollup(const Arg *); ++void kscrolltonextmark(const Arg *); ++void kscrolltoprevmark(const Arg *); + void iso14755(const Arg *); + void printscreen(const Arg *); + void printsel(const Arg *); +-- +2.39.2 +