From 4849e8f87459be043ddaad3a37e334df03e9209e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Sun, 3 Jan 2021 16:06:04 +0100 Subject: [PATCH] selection: update: line-wraps are ok while moving pivot start/end point This fixes an assertion triggered when selecting the upper left cell and dragging down. We would end up trying to decrement the pivot end point, hitting an assertion that only is valid while skipping spacers. Remove the assertion, and allow pivot points to be moved across line wraps, but take care not to move outside the visible screen area. --- selection.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) 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++; } }