From b8b43e2eabfd8647a9fc41d28cf7ea0003c03b2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 28 Aug 2019 17:26:44 +0200 Subject: [PATCH] search: fix start/end row in selection --- search.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/search.c b/search.c index 903645e5..82902e6c 100644 --- a/search.c +++ b/search.c @@ -161,11 +161,25 @@ search_update(struct terminal *term) if (start_row != term->search.match.row || start_col != term->search.match.col) { - selection_start(term, start_col, start_row - term->grid->view); + int selection_row = start_row - term->grid->view; + while (selection_row < 0) + selection_row += term->grid->num_rows; + + assert(selection_row >= 0 && + selection_row < term->grid->num_rows); + selection_start(term, start_col, selection_row); } /* Update selection endpoint */ - selection_update(term, end_col, end_row - term->grid->view); + { + int selection_row = end_row - term->grid->view; + while (selection_row < 0) + selection_row += term->grid->num_rows; + + assert(selection_row >= 0 && + selection_row < term->grid->num_rows); + selection_update(term, end_col, selection_row); + } /* Update match state */ term->search.match.row = start_row;