~martanne/vis

4b2aa76ea98f9219b46a775f393955b4fdb23cbd — Marc AndrĂ© Tanner 20 days ago 08d2e69
vis: improve C-n behavior in visual mode

Determine the matching behavior based on the first (not primary)
selection.

Fix #864
1 files changed, 9 insertions(+), 3 deletions(-)

M main.c
M main.c => main.c +9 -3
@@ 1376,15 1376,21 @@ static const char *selections_match_next(Vis *vis, const char *keys, const Arg *
	if (!text_range_valid(&sel))
		return keys;

	Filerange word = text_object_word(txt, view_cursors_pos(s));
	if (!text_range_equal(&sel, &word))
	static bool match_word;

	if (view_selections_count(view) == 1) {
		Filerange word = text_object_word(txt, view_cursors_pos(s));
		match_word = text_range_equal(&sel, &word);
	}

	if (!match_word)
		return selections_match_next_literal(vis, keys, arg);

	char *buf = text_bytes_alloc0(txt, sel.start, text_range_size(&sel));
	if (!buf)
		return keys;

	word = text_object_word_find_next(txt, sel.end, buf);
	Filerange word = text_object_word_find_next(txt, sel.end, buf);
	if (text_range_valid(&word) && selection_new_primary(view, &word))
		goto out;