From fc3e5ea419aa79c7adf38a9252586d867b3eb19b Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Sat, 27 Jun 2020 13:33:50 +1000 Subject: Refactor how InsetCompletionHide hook parameter is computed Keep track of inserted ranges instead of trying to re-derive them. Fixes #3556 --- src/buffer_utils.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/buffer_utils.cc') diff --git a/src/buffer_utils.cc b/src/buffer_utils.cc index d8daa944..206dc4b7 100644 --- a/src/buffer_utils.cc +++ b/src/buffer_utils.cc @@ -4,6 +4,7 @@ #include "event_manager.hh" #include "file.hh" #include "selection.hh" +#include "changes.hh" #include @@ -15,6 +16,25 @@ namespace Kakoune { +void replace(Buffer& buffer, ArrayView ranges, ConstArrayView strings) +{ + ForwardChangesTracker changes_tracker; + size_t timestamp = buffer.timestamp(); + for (size_t index = 0; index < ranges.size(); ++index) + { + auto& range = ranges[index]; + range.begin = changes_tracker.get_new_coord_tolerant(range.begin); + range.end = changes_tracker.get_new_coord_tolerant(range.end); + kak_assert(buffer.is_valid(range.begin) and buffer.is_valid(range.end)); + + range = buffer.replace(range.begin, range.end, strings.empty() ? StringView{} : strings[std::min(index, strings.size()-1)]); + kak_assert(buffer.is_valid(range.begin) and buffer.is_valid(range.end)); + changes_tracker.update(buffer, timestamp); + } + + buffer.check_invariant(); +} + ColumnCount get_column(const Buffer& buffer, ColumnCount tabstop, BufferCoord coord) { -- cgit v1.2.3