search: fix next/prev not updating selection correctly when matches overlap

When the new match overlapped with the old match, the selection wasn’t
updated correctly.
This commit is contained in:
Daniel Eklöf 2022-04-17 19:16:47 +02:00
parent 24ee3dcc10
commit c5519e2aa6
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 11 additions and 3 deletions

View file

@ -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

View file

@ -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 isnt 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;

View file

@ -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)