--- rxvt-unicode/src/screen.C 2013/03/30 08:47:06 1.442 +++ rxvt-unicode/src/screen.C 2013/04/12 07:54:15 1.445 @@ -1899,7 +1899,8 @@ void rxvt_term::scr_move_to (int y, int len) NOTHROW { - scr_changeview ((top_row - nrow) * (len - y) / len + (nrow - 1)); + // lerp (y, 0, len, top_row, nrow - 1) + scr_changeview (top_row + (nrow - 1 - top_row) * y / len); } /* ------------------------------------------------------------------------- */ @@ -2680,8 +2681,8 @@ rxvt_term::selection_changed () NOTHROW { line_t &r1 = ROW (selection.beg.row); - while (selection.beg.col > 0 && r1.t [selection.beg.col] == NOCHAR) - --selection.beg.col; + while (selection.beg.col < r1.l && r1.t [selection.beg.col] == NOCHAR) + ++selection.beg.col; line_t &r2 = ROW (selection.end.row); while (selection.end.col < r2.l && r2.t [selection.end.col] == NOCHAR) @@ -3074,14 +3075,6 @@ if (dirn == DN) col++; /* put us on one past the end */ - else - { - // if the delimiter on the left has width > 1 col points to the - // first NOCHAR in the delimiter cell and so we must move it to the - // beginning of the next cell. - while (ROW(row).t[col] == NOCHAR) - col++; - } /* Poke the values back in */ ret->row = row;