summaryrefslogtreecommitdiff
path: root/src/selection.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2016-04-13 20:48:34 +0100
committerMaxime Coste <frrrwww@gmail.com>2016-04-13 21:21:00 +0100
commitb0060ed79e6978c6bb41ff008b9f36ea14b6d9ac (patch)
tree5c2719ad2ee6a514bb70f95c6e1abe6bfa5fd592 /src/selection.cc
parent7521165011d9f0e40c6bd0771d4214fcc8940dd6 (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.cc8
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());