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 | 4bd087766f16bd541a1aebd0b0348ecc5fe9b94c (patch) | |
| tree | 382cc482d130b6b2bb38944476420bec73668c40 | |
| parent | b032814e25ddb166b4621262be4b8a1a0a609e37 (diff) | |
| download | st-4bd087766f16bd541a1aebd0b0348ecc5fe9b94c.tar.gz st-4bd087766f16bd541a1aebd0b0348ecc5fe9b94c.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(); |
