]> git.wh0rd.org Git - nano.git/commitdiff
miscellaneous minor fixes
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 8 Jul 2005 04:53:51 +0000 (04:53 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Fri, 8 Jul 2005 04:53:51 +0000 (04:53 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2833 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/nano.c
src/winio.c

index b9baf6428bd639379d640fd072a737bcfe471395..21c57d2bdebd6b116b236a4cb8bfda471bd0a3bd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -12,8 +12,11 @@ CVS code -
        - Simplify wording of nano_gotoline_msg. (Jordi)
 - nano.c:
   do_verbatim_input()
-       - If constant cursor position display is on when we finish, make
-         sure the cursor position is displayed properly. (DLR)
+       - If constant cursor position display is on, make sure the
+         cursor position is displayed properly when we finish. (DLR)
+  do_next_word()
+       - Rework to be more like do_prev_word(), to avoid a potential
+         problem if we start at the end of a line. (DLR)
   do_alt_speller()
        - If we can't invoke the spell checker, use sprintf() instead of
          snprintf() to write the error string we return, as the one
@@ -23,6 +26,9 @@ CVS code -
          no longer needed, and make the error message more similar to
          what the internal spell checker returns under the same
          circumstances. (DLR)
+  do_justify()
+       - If constant cursor position display is on, make sure the
+         cursor position is displayed properly when we finish. (DLR)
   allow_pending_sigwinch()
        - Simplify by using the "?" operator instead of an if clause.
          (DLR)
@@ -45,6 +51,9 @@ CVS code -
        - Blank out last_replace properly again just before displaying
          the "Replace" prompt. (DLR, found by Mike Frysinger)
 - winio.c:
+  do_statusbar_next_word()
+       - Rework to be more like do_statusbar_prev_word(), to avoid a
+         potential problem if we start at the end of a line. (DLR)
   display_string()
        - Display invalid multibyte sequences as Unicode 0xFFFD
          (Replacement Character). (DLR)
index a6a2fb987ef2650dded5c2a1fb0e88d3b1dac236..c0cf1202c14fa1cce16a1cea113ff9c5e12edae9 100644 (file)
@@ -1285,6 +1285,11 @@ void do_verbatim_input(void)
 
     statusbar(_("Verbatim Input"));
 
+    /* If constant cursor position display is on, make sure the current
+     * cursor position will be properly displayed on the statusbar. */
+    if (ISSET(CONST_UPDATE))
+       do_cursorpos(TRUE);
+
     /* Read in all the verbatim characters. */
     kbinput = get_verbatim_kbinput(edit, &kbinput_len);
 
@@ -1299,11 +1304,6 @@ void do_verbatim_input(void)
     do_output(output, kbinput_len, TRUE);
 
     free(output);
-
-    /* If constant cursor position display is on, make sure the current
-     * cursor position is properly displayed on the statusbar. */
-    if (ISSET(CONST_UPDATE))
-       do_cursorpos(TRUE);
 }
 
 void do_backspace(void)
@@ -1484,7 +1484,7 @@ bool do_next_word(bool allow_punct, bool allow_update)
     const filestruct *current_save = current;
     char *char_mb;
     int char_mb_len;
-    bool started_on_word = FALSE;
+    bool end_line = FALSE, started_on_word = FALSE;
 
     assert(current != NULL && current->data != NULL);
 
@@ -1492,7 +1492,7 @@ bool do_next_word(bool allow_punct, bool allow_update)
 
     /* Move forward until we find the character after the last letter of
      * the current word. */
-    while (current->data[current_x] != '\0') {
+    while (!end_line) {
        char_mb_len = parse_mbchar(current->data + current_x, char_mb,
                NULL, NULL);
 
@@ -1505,15 +1505,20 @@ bool do_next_word(bool allow_punct, bool allow_update)
         * started_on_word to TRUE. */
        started_on_word = TRUE;
 
-       current_x += char_mb_len;
+       if (current->data[current_x] == '\0')
+           end_line = TRUE;
+       else
+           current_x += char_mb_len;
     }
 
     /* Move forward until we find the first letter of the next word. */
-    if (current->data[current_x] != '\0')
+    if (current->data[current_x] == '\0')
+       end_line = TRUE;
+    else
        current_x += char_mb_len;
 
     for (; current != NULL; current = current->next) {
-       while (current->data[current_x] != '\0') {
+       while (!end_line) {
            char_mb_len = parse_mbchar(current->data + current_x,
                char_mb, NULL, NULL);
 
@@ -1522,15 +1527,21 @@ bool do_next_word(bool allow_punct, bool allow_update)
            if (is_word_mbchar(char_mb, allow_punct))
                break;
 
-           current_x += char_mb_len;
+           if (current->data[current_x] == '\0')
+               end_line = TRUE;
+           else
+               current_x += char_mb_len;
        }
 
        /* If we've found it, stop moving forward to the beginnings of
         * subsequent lines. */
-       if (current->data[current_x] != '\0')
+       if (!end_line)
            break;
 
-       current_x = 0;
+       if (current->next != NULL) {
+           end_line = FALSE;
+           current_x = 0;
+       }
     }
 
     free(char_mb);
@@ -1630,12 +1641,11 @@ bool do_prev_word(bool allow_punct, bool allow_update)
 
     /* If we haven't found it, leave the cursor at the beginning of the
      * file. */
-    if (current == NULL) {
+    if (current == NULL)
        current = fileage;
-       current_x = 0;
     /* If we've found it, move backward until we find the character
      * before the first letter of the previous word. */
-    else if (!begin_line) {
+    else if (!begin_line) {
        if (current_x == 0)
            begin_line = TRUE;
        else
@@ -3414,6 +3424,11 @@ void do_justify(bool full_justify)
 
     statusbar(_("Can now UnJustify!"));
 
+    /* If constant cursor position display is on, make sure the current
+     * cursor position will be properly displayed on the statusbar. */
+    if (ISSET(CONST_UPDATE))
+       do_cursorpos(TRUE);
+
     /* Display the shortcut list with UnJustify. */
     shortcut_init(TRUE);
     display_main_list();
index 58983354aaef7daa729774386dddf01dddf3a409..1b71ab39b607d15a7192463467344d3897b69d7a 100644 (file)
@@ -1912,7 +1912,7 @@ bool do_statusbar_next_word(bool allow_punct)
 {
     char *char_mb;
     int char_mb_len;
-    bool started_on_word = FALSE;
+    bool end_line = FALSE, started_on_word = FALSE;
 
     assert(answer != NULL);
 
@@ -1920,7 +1920,7 @@ bool do_statusbar_next_word(bool allow_punct)
 
     /* Move forward until we find the character after the last letter of
      * the current word. */
-    while (answer[statusbar_x] != '\0') {
+    while (!end_line) {
        char_mb_len = parse_mbchar(answer + statusbar_x, char_mb, NULL,
                NULL);
 
@@ -1933,14 +1933,19 @@ bool do_statusbar_next_word(bool allow_punct)
         * started_on_word to TRUE. */
        started_on_word = TRUE;
 
-       statusbar_x += char_mb_len;
+       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')
+    if (answer[statusbar_x] == '\0')
+       end_line = TRUE;
+    else
        statusbar_x += char_mb_len;
 
-    while (answer[statusbar_x] != '\0') {
+    while (!end_line) {
        char_mb_len = parse_mbchar(answer + statusbar_x, char_mb, NULL,
                NULL);
 
@@ -1949,7 +1954,10 @@ bool do_statusbar_next_word(bool allow_punct)
        if (is_word_mbchar(char_mb, allow_punct))
            break;
 
-       statusbar_x += char_mb_len;
+       if (answer[statusbar_x] == '\0')
+           end_line = TRUE;
+       else
+           statusbar_x += char_mb_len;
     }
 
     free(char_mb);