diff options
author | Aurélien Aptel <aurelien.aptel@gmail.com> | 2011-09-16 18:48:16 +0200 |
---|---|---|
committer | Aurélien Aptel <aurelien.aptel@gmail.com> | 2011-09-16 18:48:16 +0200 |
commit | 62a92ca1aaaf537ea8a6001ca3dd2c26e4bf148b (patch) | |
tree | 382cc482d130b6b2bb38944476420bec73668c40 | |
parent | 98042a1a2d3ec09e3411bc1937e413a64b8a024d (diff) | |
download | st-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.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -237,6 +237,7 @@ static void selinit(void); | |||
237 | static inline int selected(int, int); | 237 | static inline int selected(int, int); |
238 | static void selcopy(void); | 238 | static void selcopy(void); |
239 | static void selpaste(); | 239 | static void selpaste(); |
240 | static void selscroll(int, int); | ||
240 | 241 | ||
241 | static int utf8decode(char *, long *); | 242 | static int utf8decode(char *, long *); |
242 | static int utf8encode(long *, char *); | 243 | static 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 | ||
811 | void | 814 | void |
@@ -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 | |||
831 | void | ||
832 | selscroll(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 | ||
826 | void | 854 | void |
@@ -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(); |