Commit a93a11eb authored by Benno Schulenberg's avatar Benno Schulenberg
Browse files

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
parent 5688c160
Showing with 10 additions and 39 deletions
+10 -39
...@@ -5,6 +5,7 @@ ...@@ -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
......
...@@ -420,52 +420,22 @@ void do_statusbar_cut_text(void) ...@@ -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') {
/* Move forward until we find the character after the last letter of statusbar_x = move_mbright(answer, statusbar_x);
* the current word. */
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;
}
/* 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 /* If this is not a word character, then it's a separator; else
* line. */ * if we've already seen a separator, then it's a word start. */
if (is_word_mbchar(char_mb, FALSE)) if (!is_word_mbchar(answer + statusbar_x, FALSE))
seen_space = TRUE;
else if (seen_space)
break; break;
if (answer[statusbar_x] == '\0')
end_line = TRUE;
else
statusbar_x += char_mb_len;
} }
free(char_mb);
update_the_bar(); update_the_bar();
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment