Introduction
Introduction Statistics Contact Development Disclaimer Help
st-scrollback-mark-0.9.2.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
st-scrollback-mark-0.9.2.diff (2933B)
---
1 From eed328240d04caedfaeef83342cf219758e20ded Mon Sep 17 00:00:00 2001
2 From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= <[email protected]>
3 Date: Sat, 6 Jul 2024 01:00:30 +0200
4 Subject: [PATCH] Add \e[ m escape to mark a line. Ctrl+PgUp/+PgDn scroll…
5 marked lines
6
7 Primarily useful for C++ enthusiasts so if you get a megabyte of errors
8 you can go back to the first one
9
10 Recommended usage: PS1="$PS1\e[ m"
11
12 Ref: https://101010.pl/@[email protected]/112734806523834451
13 ---
14 config.def.h | 2 ++
15 st.c | 41 +++++++++++++++++++++++++++++++++++++++++
16 st.h | 3 +++
17 3 files changed, 46 insertions(+)
18
19 diff --git a/config.def.h b/config.def.h
20 index fc3079e..5bf8132 100644
21 --- a/config.def.h
22 +++ b/config.def.h
23 @@ -226,7 +226,9 @@ static Shortcut shortcuts[] = {
24 { ShiftMask, XK_Insert, selpaste, {.i = …
25 { TERMMOD, XK_Num_Lock, numlock, {.i = …
26 { ShiftMask, XK_Page_Up, kscrollup, {.i = -…
27 + { ControlMask, XK_Page_Up, kscrolltoprevmark …
28 { ShiftMask, XK_Page_Down, kscrolldown, {.i = -…
29 + { ControlMask, XK_Page_Down, kscrolltonextmark …
30 { TERMMOD, XK_I, iso14755, {.i = …
31 };
32
33 diff --git a/st.c b/st.c
34 index ddd14c1..353d6c6 100644
35 --- a/st.c
36 +++ b/st.c
37 @@ -1104,6 +1104,44 @@ kscrollup(const Arg* a)
38 }
39 }
40
41 +void
42 +kscrolltonextmark(const Arg* a)
43 +{
44 + int orig_scr = term.scr;
45 +
46 + while (--term.scr >= 0)
47 + if (TLINE(0)->mode & ATTR_MARKED) {
48 + found:
49 + if (term.scr != orig_scr) {
50 + selscroll(0, term.scr - orig_scr);
51 + tfulldirt();
52 + }
53 + return;
54 + }
55 +
56 + term.scr = 0;
57 + for(int i = 0; i < term.row; ++i)
58 + if (TLINE(i)->mode & ATTR_MARKED)
59 + goto found;
60 +
61 + term.scr = orig_scr;
62 +}
63 +
64 +void
65 +kscrolltoprevmark(const Arg* a)
66 +{
67 + int orig_scr = term.scr;
68 +
69 + while (++term.scr <= HISTSIZE)
70 + if (TLINE(0)->mode & ATTR_MARKED) {
71 + selscroll(0, term.scr - orig_scr);
72 + tfulldirt();
73 + return;
74 + }
75 +
76 + term.scr = orig_scr;
77 +}
78 +
79 void
80 tscrolldown(int orig, int n, int copyhist)
81 {
82 @@ -1881,6 +1919,9 @@ csihandle(void)
83 if (xsetcursor(csiescseq.arg[0]))
84 goto unknown;
85 break;
86 + case 'm': /* mark line to quickly scroll back to later …
87 + term.line[term.c.y]->mode |= ATTR_MARKED;
88 + break;
89 default:
90 goto unknown;
91 }
92 diff --git a/st.h b/st.h
93 index 9dba57d..469e5c4 100644
94 --- a/st.h
95 +++ b/st.h
96 @@ -35,6 +35,7 @@ enum glyph_attribute {
97 ATTR_WDUMMY = 1 << 10,
98 ATTR_BOXDRAW = 1 << 11,
99 ATTR_BOLD_FAINT = ATTR_BOLD | ATTR_FAINT,
100 + ATTR_MARKED = 1 << 12,
101 };
102
103 enum selection_mode {
104 @@ -84,6 +85,8 @@ void draw(void);
105
106 void kscrolldown(const Arg *);
107 void kscrollup(const Arg *);
108 +void kscrolltonextmark(const Arg *);
109 +void kscrolltoprevmark(const Arg *);
110 void iso14755(const Arg *);
111 void printscreen(const Arg *);
112 void printsel(const Arg *);
113 --
114 2.39.2
115
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.