term: cancel selection when scrolling wraps

If we scroll enough, we'll eventually end up wrapping around the
entire scrollback buffer. At this point, a selection is no longer
valid, so cancel it.

Note: this was very obvious when scrolling in the alt screen, since
its scrollback buffer is what you see on the screen (i.e. it has no
scrollback).
This commit is contained in:
Daniel Eklöf 2019-08-05 20:16:17 +02:00
parent 1e08d93528
commit c06f141189
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 23 additions and 2 deletions

View file

@ -24,6 +24,20 @@ selection_enabled(const struct terminal *term)
term->mouse_tracking != MOUSE_MOTION);
}
bool
selection_on_row_in_view(const struct terminal *term, int row_no)
{
if (term->selection.start.row == -1 || term->selection.end.row == -1)
return false;
const struct coord *start = &term->selection.start;
const struct coord *end = &term->selection.end;
assert(start->row <= end->row);
row_no += term->grid->view;
return row_no >= start->row && row_no <= end->row;
}
static char *
extract_selection(const struct terminal *term)
{