Ensure line-specs and range-specs options are sorted internally
This commit is contained in:
parent
424b2389cb
commit
53069bcb2d
|
@ -1212,10 +1212,6 @@ static void update_line_specs_ifn(const Buffer& buffer, LineAndSpecList& line_fl
|
|||
|
||||
auto& lines = line_flags.list;
|
||||
|
||||
std::sort(lines.begin(), lines.end(),
|
||||
[](const LineAndSpec& lhs, const LineAndSpec& rhs)
|
||||
{ return std::get<0>(lhs) < std::get<0>(rhs); });
|
||||
|
||||
auto modifs = compute_line_modifications(buffer, line_flags.prefix);
|
||||
auto ins_pos = lines.begin();
|
||||
for (auto it = lines.begin(); it != lines.end(); ++it)
|
||||
|
@ -1246,6 +1242,13 @@ void option_update(LineAndSpecList& opt, const Context& context)
|
|||
update_line_specs_ifn(context.buffer(), opt);
|
||||
}
|
||||
|
||||
void option_list_postprocess(Vector<LineAndSpec, MemoryDomain::Options>& opt)
|
||||
{
|
||||
std::sort(opt.begin(), opt.end(),
|
||||
[](auto& lhs, auto& rhs)
|
||||
{ return std::get<0>(lhs) < std::get<0>(rhs); });
|
||||
}
|
||||
|
||||
struct FlagLinesHighlighter : Highlighter
|
||||
{
|
||||
FlagLinesHighlighter(String option_name, String default_face)
|
||||
|
@ -1404,6 +1407,16 @@ static void update_ranges_ifn(const Buffer& buffer, RangeAndStringList& range_an
|
|||
range_and_faces.prefix = buffer.timestamp();
|
||||
}
|
||||
|
||||
void option_list_postprocess(Vector<RangeAndString, MemoryDomain::Options>& opt)
|
||||
{
|
||||
std::sort(opt.begin(), opt.end(),
|
||||
[](auto& lhs, auto& rhs) {
|
||||
return std::get<0>(lhs).first == std::get<0>(rhs).first ?
|
||||
std::get<0>(lhs).last < std::get<0>(rhs).last
|
||||
: std::get<0>(lhs).first < std::get<0>(rhs).first;
|
||||
});
|
||||
}
|
||||
|
||||
void option_update(RangeAndStringList& opt, const Context& context)
|
||||
{
|
||||
update_ranges_ifn(context.buffer(), opt);
|
||||
|
|
|
@ -27,6 +27,7 @@ constexpr StringView option_type_name(Meta::Type<LineAndSpecList>)
|
|||
return "line-specs";
|
||||
}
|
||||
void option_update(LineAndSpecList& opt, const Context& context);
|
||||
void option_list_postprocess(Vector<LineAndSpec, MemoryDomain::Options>& opt);
|
||||
|
||||
using RangeAndString = std::tuple<InclusiveBufferRange, String>;
|
||||
using RangeAndStringList = TimestampedList<RangeAndString>;
|
||||
|
@ -36,6 +37,7 @@ constexpr StringView option_type_name(Meta::Type<RangeAndStringList>)
|
|||
return "range-specs";
|
||||
}
|
||||
void option_update(RangeAndStringList& opt, const Context& context);
|
||||
void option_list_postprocess(Vector<RangeAndString, MemoryDomain::Options>& opt);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -75,6 +75,10 @@ String option_to_string(const Vector<T, domain>& opt)
|
|||
list_separator);
|
||||
}
|
||||
|
||||
template<typename T, MemoryDomain domain>
|
||||
void option_list_postprocess(Vector<T, domain>& opt)
|
||||
{}
|
||||
|
||||
template<typename T, MemoryDomain domain>
|
||||
void option_from_string(StringView str, Vector<T, domain>& opt)
|
||||
{
|
||||
|
@ -85,6 +89,7 @@ void option_from_string(StringView str, Vector<T, domain>& opt)
|
|||
option_from_string(elem, opt_elem);
|
||||
opt.push_back(opt_elem);
|
||||
}
|
||||
option_list_postprocess(opt);
|
||||
}
|
||||
|
||||
template<typename T, MemoryDomain domain>
|
||||
|
@ -95,6 +100,7 @@ bool option_add(Vector<T, domain>& opt, StringView str)
|
|||
opt.insert(opt.end(),
|
||||
std::make_move_iterator(vec.begin()),
|
||||
std::make_move_iterator(vec.end()));
|
||||
option_list_postprocess(opt);
|
||||
return not vec.empty();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user