From: Benno Schulenberg Date: Tue, 26 Jan 2016 10:31:16 +0000 (+0000) Subject: Using a simpler algorithm for jumping to the next word. X-Git-Tag: v2.5.2~40 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=a93a11eb425b5f54d347308d842f58d2aae5618d;p=nano.git 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 --- diff --git a/ChangeLog b/ChangeLog index d47bd6e0..a12d5935 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,6 +5,7 @@ * 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 the preceding one. This fixes Savannah bug #46970. + * src/prompt.c (do_statusbar_next_word): Use simpler algorithm. 2016-01-25 Benno Schulenberg * src/files.c (update_poshistory): Handle an update of the first diff --git a/src/prompt.c b/src/prompt.c index e187e6c0..5a2e7b98 100644 --- a/src/prompt.c +++ b/src/prompt.c @@ -420,52 +420,22 @@ void do_statusbar_cut_text(void) /* Move to the next word in the prompt text. */ void do_statusbar_next_word(void) { - char *char_mb; - int char_mb_len; - bool end_line = FALSE; + bool seen_space = !is_word_mbchar(answer + statusbar_x, FALSE); assert(answer != NULL); - char_mb = charalloc(mb_cur_max()); - - /* Move forward until we find the character after the last letter of - * 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); + /* Move forward until we reach the start of a word. */ + while (answer[statusbar_x] != '\0') { + statusbar_x = move_mbright(answer, statusbar_x); - /* If we've found it, stop moving forward through the current - * line. */ - if (is_word_mbchar(char_mb, FALSE)) + /* If this is not a word character, then it's a separator; else + * if we've already seen a separator, then it's a word start. */ + if (!is_word_mbchar(answer + statusbar_x, FALSE)) + seen_space = TRUE; + else if (seen_space) break; - - if (answer[statusbar_x] == '\0') - end_line = TRUE; - else - statusbar_x += char_mb_len; } - free(char_mb); - update_the_bar(); }