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;
|
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 modifs = compute_line_modifications(buffer, line_flags.prefix);
|
||||||
auto ins_pos = lines.begin();
|
auto ins_pos = lines.begin();
|
||||||
for (auto it = lines.begin(); it != lines.end(); ++it)
|
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);
|
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
|
struct FlagLinesHighlighter : Highlighter
|
||||||
{
|
{
|
||||||
FlagLinesHighlighter(String option_name, String default_face)
|
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();
|
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)
|
void option_update(RangeAndStringList& opt, const Context& context)
|
||||||
{
|
{
|
||||||
update_ranges_ifn(context.buffer(), opt);
|
update_ranges_ifn(context.buffer(), opt);
|
||||||
|
|
|
@ -27,6 +27,7 @@ constexpr StringView option_type_name(Meta::Type<LineAndSpecList>)
|
||||||
return "line-specs";
|
return "line-specs";
|
||||||
}
|
}
|
||||||
void option_update(LineAndSpecList& opt, const Context& context);
|
void option_update(LineAndSpecList& opt, const Context& context);
|
||||||
|
void option_list_postprocess(Vector<LineAndSpec, MemoryDomain::Options>& opt);
|
||||||
|
|
||||||
using RangeAndString = std::tuple<InclusiveBufferRange, String>;
|
using RangeAndString = std::tuple<InclusiveBufferRange, String>;
|
||||||
using RangeAndStringList = TimestampedList<RangeAndString>;
|
using RangeAndStringList = TimestampedList<RangeAndString>;
|
||||||
|
@ -36,6 +37,7 @@ constexpr StringView option_type_name(Meta::Type<RangeAndStringList>)
|
||||||
return "range-specs";
|
return "range-specs";
|
||||||
}
|
}
|
||||||
void option_update(RangeAndStringList& opt, const Context& context);
|
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);
|
list_separator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T, MemoryDomain domain>
|
||||||
|
void option_list_postprocess(Vector<T, domain>& opt)
|
||||||
|
{}
|
||||||
|
|
||||||
template<typename T, MemoryDomain domain>
|
template<typename T, MemoryDomain domain>
|
||||||
void option_from_string(StringView str, Vector<T, domain>& opt)
|
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);
|
option_from_string(elem, opt_elem);
|
||||||
opt.push_back(opt_elem);
|
opt.push_back(opt_elem);
|
||||||
}
|
}
|
||||||
|
option_list_postprocess(opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, MemoryDomain domain>
|
template<typename T, MemoryDomain domain>
|
||||||
|
@ -95,6 +100,7 @@ bool option_add(Vector<T, domain>& opt, StringView str)
|
||||||
opt.insert(opt.end(),
|
opt.insert(opt.end(),
|
||||||
std::make_move_iterator(vec.begin()),
|
std::make_move_iterator(vec.begin()),
|
||||||
std::make_move_iterator(vec.end()));
|
std::make_move_iterator(vec.end()));
|
||||||
|
option_list_postprocess(opt);
|
||||||
return not vec.empty();
|
return not vec.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user