aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAurélien Aptel <aurelien.aptel@gmail.com>2011-09-16 18:48:16 +0200
committerAurélien Aptel <aurelien.aptel@gmail.com>2011-09-16 18:48:16 +0200
commit62a92ca1aaaf537ea8a6001ca3dd2c26e4bf148b (patch)
tree382cc482d130b6b2bb38944476420bec73668c40
parent98042a1a2d3ec09e3411bc1937e413a64b8a024d (diff)
downloadst-patched-62a92ca1aaaf537ea8a6001ca3dd2c26e4bf148b.tar.bz2
st-patched-62a92ca1aaaf537ea8a6001ca3dd2c26e4bf148b.tar.xz
st-patched-62a92ca1aaaf537ea8a6001ca3dd2c26e4bf148b.zip
selection is removed or scrolled properly. (thx Rafa Garcia Gallego)
-rw-r--r--st.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/st.c b/st.c
index c295de6..89fbee9 100644
--- a/st.c
+++ b/st.c
@@ -237,6 +237,7 @@ static void selinit(void);
237static inline int selected(int, int); 237static inline int selected(int, int);
238static void selcopy(void); 238static void selcopy(void);
239static void selpaste(); 239static void selpaste();
240static void selscroll(int, int);
240 241
241static int utf8decode(char *, long *); 242static int utf8decode(char *, long *);
242static int utf8encode(long *, char *); 243static int utf8encode(long *, char *);
@@ -806,6 +807,8 @@ tscrolldown(int orig, int n) {
806 term.line[i] = term.line[i-n]; 807 term.line[i] = term.line[i-n];
807 term.line[i-n] = temp; 808 term.line[i-n] = temp;
808 } 809 }
810
811 selscroll(orig, n);
809} 812}
810 813
811void 814void
@@ -821,6 +824,31 @@ tscrollup(int orig, int n) {
821 term.line[i] = term.line[i+n]; 824 term.line[i] = term.line[i+n];
822 term.line[i+n] = temp; 825 term.line[i+n] = temp;
823 } 826 }
827
828 selscroll(orig, -n);
829}
830
831void
832selscroll(int orig, int n) {
833 if(sel.bx == -1)
834 return;
835
836 if(BETWEEN(sel.by, orig, term.bot) || BETWEEN(sel.ey, orig, term.bot)) {
837 if((sel.by += n) > term.bot || (sel.ey += n) < term.top) {
838 sel.bx = -1;
839 return;
840 }
841 if(sel.by < term.top) {
842 sel.by = term.top;
843 sel.bx = 0;
844 }
845 if(sel.ey > term.bot) {
846 sel.ey = term.bot;
847 sel.ex = term.col;
848 }
849 sel.b.y = sel.by, sel.b.x = sel.bx;
850 sel.e.y = sel.ey, sel.e.x = sel.ex;
851 }
824} 852}
825 853
826void 854void
@@ -1077,6 +1105,7 @@ csihandle(void) {
1077 break; 1105 break;
1078 /* XXX: (CSI n I) CHT -- Cursor Forward Tabulation <n> tab stops */ 1106 /* XXX: (CSI n I) CHT -- Cursor Forward Tabulation <n> tab stops */
1079 case 'J': /* ED -- Clear screen */ 1107 case 'J': /* ED -- Clear screen */
1108 sel.bx = -1;
1080 switch(escseq.arg[0]) { 1109 switch(escseq.arg[0]) {
1081 case 0: /* below */ 1110 case 0: /* below */
1082 tclearregion(term.c.x, term.c.y, term.col-1, term.c.y); 1111 tclearregion(term.c.x, term.c.y, term.col-1, term.c.y);
@@ -1382,6 +1411,7 @@ tputc(char *c) {
1382 } 1411 }
1383 } 1412 }
1384 } else { 1413 } else {
1414 if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey)) sel.bx = -1;
1385 switch(ascii) { 1415 switch(ascii) {
1386 case '\t': 1416 case '\t':
1387 tputtab(); 1417 tputtab();