diff --git a/selection.c b/selection.c index 35212ab2..f9642719 100644 --- a/selection.c +++ b/selection.c @@ -615,11 +615,13 @@ selection_update(struct terminal *term, int col, int row) keep_going = wc == CELL_MULT_COL_SPACER; - /* Multi-col chars shouldn’t span line-wraps */ - assert(pivot_end->col > 0); - if (pivot_end->col == 0) - break; - pivot_end->col--; + if (pivot_end->col == 0) { + if (pivot_end->row - term->grid->view <= 0) + break; + pivot_end->col = term->cols - 1; + pivot_end->row--; + } else + pivot_end->col--; } } else { bool keep_going = true; @@ -630,9 +632,13 @@ selection_update(struct terminal *term, int col, int row) keep_going = wc == CELL_MULT_COL_SPACER; - if (pivot_start->col >= term->cols - 1) - break; - pivot_start->col++; + if (pivot_start->col >= term->cols - 1) { + if (pivot_start->row - term->grid->view >= term->rows - 1) + break; + pivot_start->col = 0; + pivot_start->row++; + } else + pivot_start->col++; } }