parent
6b7200e4d5
commit
2d44712766
|
@ -139,6 +139,18 @@ the Shift modifier and moving will extend each selection instead.
|
|||
select to the next sequence enclosed by matching character, see the
|
||||
`matching_pairs` option in <<options#,`:doc options`>>
|
||||
|
||||
*M*::
|
||||
extend the current selection to the next sequence enclosed by matching
|
||||
character, see the `matching_pairs` option in <<options#,`:doc options`>>
|
||||
|
||||
*<a-m>*::
|
||||
select to the previous sequence enclosed by matching character, see the
|
||||
`matching_pairs` option in <<options#,`:doc options`>>
|
||||
|
||||
*<a-M>*::
|
||||
extend the current selection to the previous sequence enclosed by matching
|
||||
character, see the `matching_pairs` option in <<options#,`:doc options`>>
|
||||
|
||||
*x*::
|
||||
select line on which the end of each selection lies (or next line when end lies
|
||||
on an end-of-line)
|
||||
|
|
|
@ -2215,8 +2215,10 @@ static const HashMap<Key, NormalCmd, MemoryDomain::Undefined, KeymapBackend> key
|
|||
{ {alt('x')}, {"extend selections to whole lines", select<SelectMode::Replace, select_lines>} },
|
||||
{ {alt('X')}, {"crop selections to whole lines", select<SelectMode::Replace, trim_partial_lines>} },
|
||||
|
||||
{ {'m'}, {"select to matching character", select<SelectMode::Replace, select_matching>} },
|
||||
{ {'M'}, {"extend to matching character", select<SelectMode::Extend, select_matching>} },
|
||||
{ {'m'}, {"select to matching character", select<SelectMode::Replace, select_matching<true>>} },
|
||||
{ {alt('m')}, {"backward select to matching character", select<SelectMode::Replace, select_matching<false>>} },
|
||||
{ {'M'}, {"extend to matching character", select<SelectMode::Extend, select_matching<true>>} },
|
||||
{ {alt('M')}, {"backward extend to matching character", select<SelectMode::Extend, select_matching<false>>} },
|
||||
|
||||
{ {'/'}, {"select next given regex match", search<SelectMode::Replace, MatchDirection::Forward>} },
|
||||
{ {'?'}, {"extend with next given regex match", search<SelectMode::Extend, MatchDirection::Forward>} },
|
||||
|
|
|
@ -220,6 +220,7 @@ select_to_first_non_blank(const Context& context, const Selection& selection)
|
|||
return {it.coord()};
|
||||
}
|
||||
|
||||
template<bool forward>
|
||||
Optional<Selection>
|
||||
select_matching(const Context& context, const Selection& selection)
|
||||
{
|
||||
|
@ -227,13 +228,23 @@ select_matching(const Context& context, const Selection& selection)
|
|||
auto& matching_pairs = context.options()["matching_pairs"].get<Vector<Codepoint, MemoryDomain::Options>>();
|
||||
Utf8Iterator it{buffer.iterator_at(selection.cursor()), buffer};
|
||||
auto match = matching_pairs.end();
|
||||
while (it != buffer.end())
|
||||
|
||||
if (forward) while (it != buffer.end())
|
||||
{
|
||||
match = find(matching_pairs, *it);
|
||||
if (match != matching_pairs.end())
|
||||
break;
|
||||
++it;
|
||||
}
|
||||
else while (true)
|
||||
{
|
||||
match = find(matching_pairs, *it);
|
||||
if (match != matching_pairs.end()
|
||||
or it == buffer.begin())
|
||||
break;
|
||||
--it;
|
||||
}
|
||||
|
||||
if (match == matching_pairs.end())
|
||||
return {};
|
||||
|
||||
|
@ -271,6 +282,10 @@ select_matching(const Context& context, const Selection& selection)
|
|||
}
|
||||
return {};
|
||||
}
|
||||
template Optional<Selection>
|
||||
select_matching<true>(const Context& context, const Selection& selection);
|
||||
template Optional<Selection>
|
||||
select_matching<false>(const Context& context, const Selection& selection);
|
||||
|
||||
template<typename Iterator, typename Container>
|
||||
Optional<std::pair<Iterator, Iterator>>
|
||||
|
|
|
@ -31,6 +31,7 @@ select_to_previous_word(const Context& context, const Selection& selection);
|
|||
Optional<Selection>
|
||||
select_line(const Context& context, const Selection& selection);
|
||||
|
||||
template<bool forward>
|
||||
Optional<Selection>
|
||||
select_matching(const Context& context, const Selection& selection);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user