]> git.wh0rd.org Git - nano.git/commitdiff
Using a simpler algorithm for jumping to the next word.
authorBenno Schulenberg <bensberg@justemail.net>
Tue, 26 Jan 2016 10:31:16 +0000 (10:31 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Tue, 26 Jan 2016 10:31:16 +0000 (10:31 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5595 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/prompt.c

index d47bd6e0b08ef5ec69110a5730d5fa754d812bc7..a12d5935112460e952e1dd8a3546f00a04dbf690 100644 (file)
--- 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  <bensberg@justemail.net>
        * src/files.c (update_poshistory): Handle an update of the first
index e187e6c01c2c28293e632f099d4d37e75352508b..5a2e7b986ea2c0524faafe9bafc80e211d980ae8 100644 (file)
@@ -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();
 }