diff --git a/CHANGELOG.md b/CHANGELOG.md index 28c2e856..38450ab3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -123,6 +123,8 @@ are enabled, and CSD border width set to a non-zero value. * Key binding overrides on the command line having no effect with `footclient` instances (https://codeberg.org/dnkl/foot/issues/931). +* Search prev/next not updating the selection correctly when the + previous and new match overlaps. ### Security diff --git a/search.c b/search.c index 2a7903d7..0ae09fde 100644 --- a/search.c +++ b/search.c @@ -235,9 +235,15 @@ search_update_selection(struct terminal *term, const struct range *match) } #endif - /* Begin a new selection if the start coords changed */ + /* + * Begin a new selection if the start coords changed + * + * Note: check column against selection.coords, since our “old” + * start column isn’t reliable - we modify it when searching + * “next” or “prev”. + */ if (start_row != term->search.match.row || - start_col != term->search.match.col) + start_col != term->selection.coords.start.col) { int selection_row = start_row - grid->view + grid->num_rows; selection_row &= grid->num_rows - 1; diff --git a/selection.c b/selection.c index a4bc5f3b..f279a834 100644 --- a/selection.c +++ b/selection.c @@ -42,7 +42,7 @@ bool selection_on_rows(const struct terminal *term, int row_start, int row_end) { LOG_DBG("on rows: %d-%d, range: %d-%d (offset=%d)", - term->selection.start.row, term->selection.end.row, + term->selection.coords.start.row, term->selection.coords.end.row, row_start, row_end, term->grid->offset); if (term->selection.coords.end.row < 0)