diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e0c8aaf..1c94ea81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -75,6 +75,8 @@ argument in `ioctl(3)` is an `int` (for example: linux/ppc64). * Crash when using the mouse in alternate scroll mode in an unfocused window (https://codeberg.org/dnkl/foot/issues/179). +* Character dropped from selection when "right-click-hold"-extending a + selection (https://codeberg.org/dnkl/foot/issues/180). ### Security diff --git a/selection.c b/selection.c index 46fd5f1e..a0dfaa02 100644 --- a/selection.c +++ b/selection.c @@ -485,17 +485,20 @@ selection_extend_normal(struct terminal *term, int col, int row, uint32_t serial assert(start->row < end->row || start->col < end->col); struct coord new_start, new_end; + enum selection_scroll_direction direction; if (row < start->row || (row == start->row && col < start->col)) { /* Extend selection to start *before* current start */ new_start = *end; new_end = (struct coord){col, row}; + direction = SELECTION_LEFT; } else if (row > end->row || (row == end->row && col > end->col)) { /* Extend selection to end *after* current end */ new_start = *start; new_end = (struct coord){col, row}; + direction = SELECTION_RIGHT; } else { @@ -509,15 +512,18 @@ selection_extend_normal(struct terminal *term, int col, int row, uint32_t serial /* Move start point */ new_start = *end; new_end = (struct coord){col, row}; + direction = SELECTION_LEFT; } else { /* Move end point */ new_start = *start; new_end = (struct coord){col, row}; + direction = SELECTION_RIGHT; } } + term->selection.direction = direction; selection_modify(term, new_start, new_end); }