Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdding wrap handling in selection. - st - [fork] customized build of st, the s…
git clone git://src.adamsgaard.dk/st
Log
Files
Refs
README
LICENSE
---
commit b596d6ba3c50bc379adc298a4e2ba7c122b116ab
parent 872a7f18eaffd96eefb31e3dcb45fd86bc67029b
Author: Christoph Lohmann <[email protected]>
Date: Sun, 21 Apr 2013 13:01:16 +0200
Adding wrap handling in selection.
Diffstat:
M st.c | 37 +++++++++++++++++++----------…
1 file changed, 23 insertions(+), 14 deletions(-)
---
diff --git a/st.c b/st.c
t@@ -85,6 +85,7 @@ enum glyph_attribute {
ATTR_GFX = 8,
ATTR_ITALIC = 16,
ATTR_BLINK = 32,
+ ATTR_WRAP = 64,
};
enum cursor_movement {
t@@ -668,17 +669,15 @@ void
selsnap(int mode, int *x, int *y, int direction) {
switch(mode) {
case SNAP_WORD:
- while(*x > 0 && *x < term.col-1 && term.line[*y][*x + directio…
+ while(*x > 0 && *x < term.col-1
+ && term.line[*y][*x + direction].c[0] != ' ') {
*x += direction;
}
break;
-
case SNAP_LINE:
*x = (direction < 0) ? 0 : term.col - 1;
break;
-
default:
- /* do nothing */
break;
}
}
t@@ -771,6 +770,7 @@ bpress(XEvent *e) {
mousereport(e);
} else if(e->xbutton.button == Button1) {
gettimeofday(&now, NULL);
+
/* Clear previous selection, logically and visually. */
if(sel.bx != -1) {
sel.bx = -1;
t@@ -781,14 +781,15 @@ bpress(XEvent *e) {
sel.type = SEL_REGULAR;
sel.ex = sel.bx = x2col(e->xbutton.x);
sel.ey = sel.by = y2row(e->xbutton.y);
+
/*
* Snap handling.
* If user clicks are fasst enough (e.g. below timeouts),
- * we ignore if his hand slipped left or down and accidentally…
- * we are just snapping to whatever we're snapping.
+ * we ignore if his hand slipped left or down and accidentally
+ * selected more; we are just snapping to whatever we're
+ * snapping.
*/
if(TIMEDIFF(now, sel.tclick2) <= tripleclicktimeout) {
- /* Snap to line */
sel.snap = SNAP_LINE;
} else if(TIMEDIFF(now, sel.tclick1) <= doubleclicktimeout) {
sel.snap = SNAP_WORD;
t@@ -797,8 +798,15 @@ bpress(XEvent *e) {
}
selsnap(sel.snap, &sel.bx, &sel.by, -1);
selsnap(sel.snap, &sel.ex, &sel.ey, 1);
- sel.b.x = sel.bx, sel.b.y = sel.by, sel.e.x = sel.ex, sel.e.y …
- /* Draw selection, unless it's regular and we don't want to ma…
+ sel.b.x = sel.bx;
+ sel.b.y = sel.by;
+ sel.e.x = sel.ex;
+ sel.e.y = sel.ey;
+
+ /*
+ * Draw selection, unless it's regular and we don't want to
+ * make clicks visible
+ */
if (sel.snap != 0) {
tsetdirt(sel.b.y, sel.e.y);
draw();
t@@ -834,9 +842,8 @@ selcopy(void) {
/* nothing */;
for(x = 0; gp <= last; x++, ++gp) {
- if(!selected(x, y)) {
+ if(!selected(x, y))
continue;
- }
size = utf8size(gp->c);
memcpy(ptr, gp->c, size);
t@@ -852,7 +859,7 @@ selcopy(void) {
* st.
* FIXME: Fix the computer world.
*/
- if(y < sel.e.y)
+ if(y < sel.e.y && !((gp-1)->mode & ATTR_WRAP))
*ptr++ = '\n';
}
*ptr = 0;
t@@ -2266,8 +2273,10 @@ tputc(char *c, int len) {
return;
if(sel.bx != -1 && BETWEEN(term.c.y, sel.by, sel.ey))
sel.bx = -1;
- if(IS_SET(MODE_WRAP) && term.c.state & CURSOR_WRAPNEXT)
- tnewline(1); /* always go to first col */
+ if(IS_SET(MODE_WRAP) && (term.c.state & CURSOR_WRAPNEXT)) {
+ term.line[term.c.y][term.c.x].mode |= ATTR_WRAP;
+ tnewline(1);
+ }
if(IS_SET(MODE_INSERT) && term.c.x+1 < term.col) {
memmove(&term.line[term.c.y][term.c.x+1],
You are viewing proxied material from mx1.adamsgaard.dk. 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.