Add a -previous switch to show-matching highlighter
This switch makes show-matching fallback to the character preceeding the cursor if the character under the cursor is not a matching character, which should make show-matching more useful in insert mode.
This commit is contained in:
parent
4106791adc
commit
5b1ad0bd0c
|
@ -30,7 +30,11 @@ highlighter is replaced with the new one.
|
|||
|
||||
*show-matching*::
|
||||
highlight matching char of the character under the selections' cursor
|
||||
using `MatchingChar` face
|
||||
using `MatchingChar` face, with the following *options*:
|
||||
|
||||
*-previous*:::
|
||||
fall back to the character before the cursor when the cursor is not
|
||||
over a matching char
|
||||
|
||||
*show-whitespaces* [options]::
|
||||
display symbols on top of whitespaces to make them more explicit
|
||||
|
|
|
@ -197,7 +197,7 @@ public:
|
|||
|
||||
const auto faces = m_faces | transform([&faces = context.context.faces()](auto&& spec) {
|
||||
return faces[spec.second];
|
||||
}) | gather<Vector<Face>>();
|
||||
}) | gather<Vector>();
|
||||
|
||||
const auto& matches = get_matches(context.context.buffer(), display_buffer.range(), range);
|
||||
kak_assert(matches.size() % m_faces.size() == 0);
|
||||
|
@ -1154,8 +1154,9 @@ constexpr StringView LineNumbersHighlighter::ms_id;
|
|||
|
||||
const HighlighterDesc show_matching_desc = {
|
||||
"Apply the MatchingChar face to the char matching the one under the cursor",
|
||||
{}
|
||||
{ { { "previous", {} } }, ParameterDesc::Flags::SwitchesOnlyAtStart, 0, 0 }
|
||||
};
|
||||
template<bool match_prev>
|
||||
void show_matching_char(HighlightContext context, DisplayBuffer& display_buffer, BufferRange)
|
||||
{
|
||||
const Face face = context.context.faces()["MatchingChar"];
|
||||
|
@ -1170,10 +1171,17 @@ void show_matching_char(HighlightContext context, DisplayBuffer& display_buffer,
|
|||
|
||||
Utf8Iterator it{buffer.iterator_at(pos), buffer};
|
||||
auto match = find(matching_pairs, *it);
|
||||
bool matching_prev = match == matching_pairs.end() and match_prev;
|
||||
if (matching_prev)
|
||||
match = find(matching_pairs, *--it);
|
||||
|
||||
if (match == matching_pairs.end())
|
||||
continue;
|
||||
|
||||
if (matching_prev)
|
||||
highlight_range(display_buffer, it.base().coord(), (it+1).base().coord(),
|
||||
false, apply_face(face));
|
||||
|
||||
int level = 0;
|
||||
if (((match - matching_pairs.begin()) % 2) == 0)
|
||||
{
|
||||
|
@ -1216,7 +1224,8 @@ void show_matching_char(HighlightContext context, DisplayBuffer& display_buffer,
|
|||
|
||||
std::unique_ptr<Highlighter> create_matching_char_highlighter(HighlighterParameters params, Highlighter*)
|
||||
{
|
||||
return make_highlighter(show_matching_char);
|
||||
ParametersParser parser{params, show_matching_desc.params};
|
||||
return make_highlighter(parser.get_switch("previous") ? show_matching_char<true> : show_matching_char<false>);
|
||||
}
|
||||
|
||||
void highlight_selections(HighlightContext context, DisplayBuffer& display_buffer, BufferRange)
|
||||
|
|
|
@ -49,6 +49,7 @@ struct {
|
|||
"» {+b}<a-u>{} and {+b}<a-U>{} now undo selection history\n"
|
||||
"» {+u}%exp\\{...}{} expansions provide flexible quoting for expanded "
|
||||
"strings (as double quoted strings)\n"
|
||||
"» {+u}show-matching -previous{} switch\n"
|
||||
}, {
|
||||
20221031,
|
||||
"» {+b}<esc>{} does not end macro recording anymore, use {+b}Q{}\n"
|
||||
|
|
Loading…
Reference in New Issue
Block a user