diff options
Diffstat (limited to 'src/input_handler.cc')
| -rw-r--r-- | src/input_handler.cc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc index a24ddfa2..877517e2 100644 --- a/src/input_handler.cc +++ b/src/input_handler.cc @@ -77,13 +77,17 @@ void InputMode::paste(StringView content) try { Buffer& buffer = context().buffer(); + const bool linewise = not content.empty() and content.back() == '\n'; ScopedEdition edition{context()}; ScopedSelectionEdition selection_edition{context()}; - context().selections().for_each([&buffer, content=std::move(content)] + context().selections().for_each([&buffer, content=std::move(content), linewise] (size_t index, Selection& sel) { - BufferRange range = buffer.insert(sel.min(), content); - sel.min() = range.begin; - sel.max() = range.end > range.begin ? buffer.char_prev(range.end) : range.begin; + auto& min = sel.min(); + auto& max = sel.max(); + BufferRange range = + buffer.insert(paste_pos(buffer, min, max, PasteMode::Insert, linewise), content); + min = range.begin; + max = range.end > range.begin ? buffer.char_prev(range.end) : range.begin; }, false); } catch (Kakoune::runtime_error& error) |
