Remove duplicated logic and fix insert in Replace mode

This commit is contained in:
Maxime Coste 2014-05-19 18:59:14 +01:00
parent 03e5264df4
commit b29cae4d16

View File

@ -62,30 +62,6 @@ BufferIterator prepare_insert(Buffer& buffer, const Selection& sel)
return {}; return {};
} }
template<InsertMode mode>
void insert(Buffer& buffer, SelectionList& selections, const String& str)
{
for (auto& sel : reversed(selections))
{
auto pos = prepare_insert<mode>(buffer, sel);
pos = buffer.insert(pos, str);
if (mode == InsertMode::Replace)
{
if (pos == buffer.end())
--pos;
sel.anchor() = pos.coord();
sel.cursor() = str.empty() ?
pos.coord() : (pos + str.byte_count_to(str.char_length() - 1)).coord();
}
}
if (mode == InsertMode::Replace)
selections.update_timestamp();
else
selections.update();
selections.avoid_eol();
buffer.check_invariant();
}
template<InsertMode mode> template<InsertMode mode>
void insert(Buffer& buffer, SelectionList& selections, memoryview<String> strings) void insert(Buffer& buffer, SelectionList& selections, memoryview<String> strings)
{ {
@ -102,16 +78,15 @@ void insert(Buffer& buffer, SelectionList& selections, memoryview<String> string
{ {
if (pos == buffer.end()) if (pos == buffer.end())
--pos; --pos;
selections.update();
sel.anchor() = pos.coord(); sel.anchor() = pos.coord();
sel.cursor() = (str.empty() ? sel.cursor() = (str.empty() ?
pos : pos + str.byte_count_to(str.char_length() - 1)).coord(); pos : pos + str.byte_count_to(str.char_length() - 1)).coord();
} }
} }
if (mode == InsertMode::Replace)
selections.update_timestamp();
else
selections.update(); selections.update();
selections.avoid_eol(); selections.avoid_eol();
selections.check_invariant();
buffer.check_invariant(); buffer.check_invariant();
} }
@ -788,7 +763,7 @@ void join_select_spaces(Context& context, int)
return; return;
context.selections() = selections; context.selections() = selections;
ScopedEdition edition(context); ScopedEdition edition(context);
insert<InsertMode::Replace>(buffer, context.selections(), " "); insert<InsertMode::Replace>(buffer, context.selections(), " "_str);
} }
void join(Context& context, int param) void join(Context& context, int param)