Using a simpler algorithm for jumping to the next word.

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5595 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
Benno Schulenberg 2016-01-26 10:31:16 +00:00
parent 5688c160a9
commit a93a11eb42
2 changed files with 10 additions and 39 deletions

View File

@ -5,6 +5,7 @@
* src/prompt.c (do_statusbar_prev_word): When in the middle of a * src/prompt.c (do_statusbar_prev_word): When in the middle of a
word, jump to the start of the current word, not to the start of word, jump to the start of the current word, not to the start of
the preceding one. This fixes Savannah bug #46970. the preceding one. This fixes Savannah bug #46970.
* src/prompt.c (do_statusbar_next_word): Use simpler algorithm.
2016-01-25 Benno Schulenberg <bensberg@justemail.net> 2016-01-25 Benno Schulenberg <bensberg@justemail.net>
* src/files.c (update_poshistory): Handle an update of the first * src/files.c (update_poshistory): Handle an update of the first

View File

@ -420,52 +420,22 @@ void do_statusbar_cut_text(void)
/* Move to the next word in the prompt text. */ /* Move to the next word in the prompt text. */
void do_statusbar_next_word(void) void do_statusbar_next_word(void)
{ {
char *char_mb; bool seen_space = !is_word_mbchar(answer + statusbar_x, FALSE);
int char_mb_len;
bool end_line = FALSE;
assert(answer != NULL); assert(answer != NULL);
char_mb = charalloc(mb_cur_max()); /* Move forward until we reach the start of a word. */
while (answer[statusbar_x] != '\0') {
statusbar_x = move_mbright(answer, statusbar_x);
/* Move forward until we find the character after the last letter of /* If this is not a word character, then it's a separator; else
* the current word. */ * if we've already seen a separator, then it's a word start. */
while (!end_line) { if (!is_word_mbchar(answer + statusbar_x, FALSE))
char_mb_len = parse_mbchar(answer + statusbar_x, char_mb, NULL); seen_space = TRUE;
else if (seen_space)
/* If we've found it, stop moving forward through the current
* line. */
if (!is_word_mbchar(char_mb, FALSE))
break; break;
if (answer[statusbar_x] == '\0')
end_line = TRUE;
else
statusbar_x += char_mb_len;
} }
/* Move forward until we find the first letter of the next word. */
if (answer[statusbar_x] == '\0')
end_line = TRUE;
else
statusbar_x += char_mb_len;
while (!end_line) {
char_mb_len = parse_mbchar(answer + statusbar_x, char_mb, NULL);
/* If we've found it, stop moving forward through the current
* line. */
if (is_word_mbchar(char_mb, FALSE))
break;
if (answer[statusbar_x] == '\0')
end_line = TRUE;
else
statusbar_x += char_mb_len;
}
free(char_mb);
update_the_bar(); update_the_bar();
} }