tselection is removed or scrolled properly. (thx Rafa Garcia Gallego) - st - [f… | |
git clone git://src.adamsgaard.dk/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 4bd087766f16bd541a1aebd0b0348ecc5fe9b94c | |
parent b032814e25ddb166b4621262be4b8a1a0a609e37 | |
Author: Aurélien Aptel <[email protected]> | |
Date: Fri, 16 Sep 2011 18:48:16 +0200 | |
selection is removed or scrolled properly. (thx Rafa Garcia Gallego) | |
Diffstat: | |
M st.c | 30 ++++++++++++++++++++++++++++++ | |
1 file changed, 30 insertions(+), 0 deletions(-) | |
--- | |
diff --git a/st.c b/st.c | |
t@@ -237,6 +237,7 @@ static void selinit(void); | |
static inline int selected(int, int); | |
static void selcopy(void); | |
static void selpaste(); | |
+static void selscroll(int, int); | |
static int utf8decode(char *, long *); | |
static int utf8encode(long *, char *); | |
t@@ -806,6 +807,8 @@ tscrolldown(int orig, int n) { | |
term.line[i] = term.line[i-n]; | |
term.line[i-n] = temp; | |
} | |
+ | |
+ selscroll(orig, n); | |
} | |
void | |
t@@ -821,6 +824,31 @@ tscrollup(int orig, int n) { | |
term.line[i] = term.line[i+n]; | |
term.line[i+n] = temp; | |
} | |
+ | |
+ selscroll(orig, -n); | |
+} | |
+ | |
+void | |
+selscroll(int orig, int n) { | |
+ if(sel.bx == -1) | |
+ return; | |
+ | |
+ if(BETWEEN(sel.by, orig, term.bot) || BETWEEN(sel.ey, orig, term.bot))… | |
+ if((sel.by += n) > term.bot || (sel.ey += n) < term.top) { | |
+ sel.bx = -1; | |
+ return; | |
+ } | |
+ if(sel.by < term.top) { | |
+ sel.by = term.top; | |
+ sel.bx = 0; | |
+ } | |
+ if(sel.ey > term.bot) { | |
+ sel.ey = term.bot; | |
+ sel.ex = term.col; | |
+ } | |
+ sel.b.y = sel.by, sel.b.x = sel.bx; | |
+ sel.e.y = sel.ey, sel.e.x = sel.ex; | |
+ } | |
} | |
void | |
t@@ -1077,6 +1105,7 @@ csihandle(void) { | |
break; | |
/* XXX: (CSI n I) CHT -- Cursor Forward Tabulation <n> tab stops */ | |
case 'J': /* ED -- Clear screen */ | |
+ sel.bx = -1; | |
switch(escseq.arg[0]) { | |
case 0: /* below */ | |
tclearregion(term.c.x, term.c.y, term.col-1, term.c.y); | |
t@@ -1382,6 +1411,7 @@ tputc(char *c) { | |
} | |
} | |
} else { | |
+ if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey)) sel.bx =… | |
switch(ascii) { | |
case '\t': | |
tputtab(); |