Make linewise bracketed paste match P behavior

This is experimental. Testing will reveal if this is the desired
behavior.
This commit is contained in:
Johannes Altmanninger 2023-03-09 21:21:29 +01:00
parent b2cf74bb4a
commit 1990a764e3
3 changed files with 18 additions and 11 deletions

View File

@ -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)

View File

@ -657,13 +657,6 @@ void change(Context& context, NormalParams params)
enter_insert_mode<InsertMode::Replace>(context, params);
}
enum class PasteMode
{
Append,
Insert,
Replace
};
BufferCoord paste_pos(Buffer& buffer, BufferCoord min, BufferCoord max, PasteMode mode, bool linewise)
{
switch (mode)

View File

@ -10,6 +10,7 @@
namespace Kakoune
{
class Buffer;
class Context;
struct no_selections_remaining : runtime_error
@ -40,6 +41,15 @@ struct KeyInfo
String build_autoinfo_for_mapping(const Context& context, KeymapMode mode,
ConstArrayView<KeyInfo> built_ins);
enum class PasteMode
{
Append,
Insert,
Replace
};
BufferCoord paste_pos(Buffer& buffer, BufferCoord min, BufferCoord max, PasteMode mode, bool linewise);
}
#endif // normal_hh_INCLUDED