Rewrite join_select_spaces

Stop using regex for selecting spaces at the begining of the line
This commit is contained in:
Maxime Coste 2014-01-03 20:41:47 +00:00
parent 25e6c1cc39
commit 6c4c32eb59

View File

@ -725,19 +725,26 @@ void split_lines(Context& context, int)
void join_select_spaces(Context& context, int) void join_select_spaces(Context& context, int)
{ {
select(context, select_whole_lines);
select<SelectMode::Extend>(context, select_to_eol);
auto& buffer = context.buffer(); auto& buffer = context.buffer();
auto& selections = context.selections(); SelectionList selections;
select_all_matches(buffer, selections, Regex{"(\n\\h*)+"}); for (auto& sel : context.selections())
// remove last end of line if selected {
kak_assert(std::is_sorted(selections.begin(), selections.end(), for (LineCount line = sel.min().line; line <= sel.max().line; ++line)
[](const Selection& lhs, const Selection& rhs) {
{ return lhs.min() < rhs.min(); })); if (line == buffer.line_count() - 1)
if (not selections.empty() and selections.back().max() == buffer.back_coord()) continue;
selections.pop_back(); auto begin = buffer.iterator_at({line, buffer[line].length()-1});
auto end = begin+1;
skip_while(end, buffer.end(), is_horizontal_blank);
selections.push_back({begin.coord(), (end-1).coord()});
}
}
if (selections.empty())
return;
selections.sort_and_merge_overlapping();
context.selections() = selections;
ScopedEdition edition(context); ScopedEdition edition(context);
insert<InsertMode::Replace>(buffer, selections, " "); insert<InsertMode::Replace>(buffer, context.selections(), " ");
} }
void join(Context& context, int param) void join(Context& context, int param)