diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2016-04-13 20:48:34 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2016-04-13 21:21:00 +0100 |
| commit | b0060ed79e6978c6bb41ff008b9f36ea14b6d9ac (patch) | |
| tree | 5c2719ad2ee6a514bb70f95c6e1abe6bfa5fd592 /src/selection.cc | |
| parent | 7521165011d9f0e40c6bd0771d4214fcc8940dd6 (diff) | |
Fix modified range computation when erasing multiple times past current buffer end
Fixes #654
Diffstat (limited to 'src/selection.cc')
| -rw-r--r-- | src/selection.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/selection.cc b/src/selection.cc index a2b2d1f2..ee849bc4 100644 --- a/src/selection.cc +++ b/src/selection.cc @@ -305,6 +305,14 @@ Vector<Selection> compute_modified_ranges(Buffer& buffer, size_t timestamp) change_it = backward_end; } + const auto end_coord = buffer.end_coord(); + for (auto it = ranges.begin() + prev_size; it != ranges.end(); ++it) + { + it->anchor() = std::min(it->anchor(), end_coord); + it->cursor() = std::min<ByteCoord>(it->cursor(), end_coord); + } + + kak_assert(std::is_sorted(ranges.begin() + prev_size, ranges.end(), compare_selections)); std::inplace_merge(ranges.begin(), ranges.begin() + prev_size, ranges.end(), compare_selections); ranges.erase(merge_overlapping(ranges.begin(), ranges.end(), dummy, overlaps), ranges.end()); |
