diff options
Diffstat (limited to 'src/buffer_utils.cc')
| -rw-r--r-- | src/buffer_utils.cc | 20 |
1 files changed, 20 insertions, 0 deletions
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 <unistd.h> @@ -15,6 +16,25 @@ namespace Kakoune { +void replace(Buffer& buffer, ArrayView<BufferRange> ranges, ConstArrayView<String> 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) { |
