size_t buf_setln(Buf* buf, size_t line);
size_t buf_getln(Buf* buf, size_t off);
-size_t buf_getcol(Buf* buf, size_t pos);
+void buf_getcol(Buf* buf, Sel* p_sel);
size_t buf_setcol(Buf* buf, size_t pos, size_t col);
/* Screen management functions
return line;
}
-size_t buf_getcol(Buf* buf, size_t pos) {
- size_t col = 0, curr = buf_bol(buf, pos);
- for (; curr < pos; curr = buf_byrune(buf, curr, 1))
- col += runewidth(col, buf_getrat(buf, curr));
- return col;
+void buf_getcol(Buf* buf, Sel* sel) {
+ size_t pos = sel->end, curr = buf_bol(buf, pos);
+ for (sel->col = 0; curr < pos; curr = buf_byrune(buf, curr, 1))
+ sel->col += runewidth(sel->col, buf_getrat(buf, curr));
}
size_t buf_setcol(Buf* buf, size_t pos, size_t col) {
}
/* only update column if not moving vertically */
if (bything != buf_byline)
- sel->col = buf_getcol(&(view->buffer), sel->end);
+ buf_getcol(&(view->buffer), &(view->selection));
}
static void move_to(View* view, bool extsel, size_t off) {
view->selection.end = (off > buf_end(buf) ? buf_end(buf) : off);
if (!extsel)
view->selection.beg = view->selection.end;
- view->selection.col = buf_getcol(&(view->buffer), view->selection.end);
+ buf_getcol(&(view->buffer), &(view->selection));
view->sync_needed = true;
}
buf_getword(buf, risbigword, sel);
}
sel->end = buf_byrune(&(view->buffer), sel->end, RIGHT);
- sel->col = buf_getcol(&(view->buffer), sel->end);
+ buf_getcol(&(view->buffer), &(view->selection));
}
static void selswap(Sel* sel) {