Do not go through some temporary selections for indent/deindent

This does not seem necessary and simplifies the logic
This commit is contained in:
Maxime Coste 2021-08-21 20:33:15 +10:00
parent 33a80e644c
commit 2edabde919

View File

@ -1182,24 +1182,17 @@ void indent(Context& context, NormalParams params)
String indent = indent_width == 0 ? String{'\t', count} : String{' ', indent_width * count}; String indent = indent_width == 0 ? String{'\t', count} : String{' ', indent_width * count};
auto& buffer = context.buffer(); auto& buffer = context.buffer();
Vector<Selection> sels;
LineCount last_line = 0; LineCount last_line = 0;
for (auto& sel : context.selections()) for (auto& sel : context.selections())
{ {
for (auto line = std::max(last_line, sel.min().line); line < sel.max().line+1; ++line) for (auto line = std::max(last_line, sel.min().line); line < sel.max().line+1; ++line)
{ {
if (indent_empty or buffer[line].length() > 1) if (indent_empty or buffer[line].length() > 1)
sels.emplace_back(line, line); buffer.insert(line, indent);
} }
// avoid reindenting the same line if multiple selections are on it // avoid reindenting the same line if multiple selections are on it
last_line = sel.max().line+1; last_line = sel.max().line+1;
} }
if (not sels.empty())
{
ScopedEdition edition(context);
SelectionList selections{buffer, std::move(sels)};
selections.insert(indent, InsertMode::Insert);
}
} }
template<bool deindent_incomplete = true> template<bool deindent_incomplete = true>
@ -1212,8 +1205,7 @@ void deindent(Context& context, NormalParams params)
indent_width = tabstop; indent_width = tabstop;
indent_width = indent_width * count; indent_width = indent_width * count;
const auto& buffer = context.buffer(); auto& buffer = context.buffer();
Vector<Selection> sels;
LineCount last_line = 0; LineCount last_line = 0;
for (auto& sel : context.selections()) for (auto& sel : context.selections())
{ {
@ -1232,12 +1224,12 @@ void deindent(Context& context, NormalParams params)
else else
{ {
if (deindent_incomplete and width != 0) if (deindent_incomplete and width != 0)
sels.emplace_back(line, BufferCoord{line, column-1}); buffer.erase(line, BufferCoord{line, column});
break; break;
} }
if (width >= indent_width) if (width >= indent_width)
{ {
sels.emplace_back(line, BufferCoord{line, column}); buffer.erase(line, BufferCoord{line, column+1});
break; break;
} }
} }
@ -1245,12 +1237,6 @@ void deindent(Context& context, NormalParams params)
// avoid reindenting the same line if multiple selections are on it // avoid reindenting the same line if multiple selections are on it
last_line = sel.max().line + 1; last_line = sel.max().line + 1;
} }
if (not sels.empty())
{
ScopedEdition edition(context);
SelectionList selections{context.buffer(), std::move(sels)};
selections.erase();
}
} }
template<ObjectFlags flags, SelectMode mode = SelectMode::Replace> template<ObjectFlags flags, SelectMode mode = SelectMode::Replace>