]> git.wh0rd.org Git - nano.git/commitdiff
reset the mbtowc() and wctomb() state machines at the right places
authorDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 8 Dec 2004 16:52:52 +0000 (16:52 +0000)
committerDavid Lawrence Ramsey <pooka109@gmail.com>
Wed, 8 Dec 2004 16:52:52 +0000 (16:52 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2178 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

src/nano.c
src/winio.c

index 74427851e42e9ff5d6912a7d113be25dad438192..3f94a6a7d3e63e79c8e81dcff72f5d16dac84447 100644 (file)
@@ -3582,6 +3582,10 @@ void do_output(int *kbinput, size_t kbinput_len)
     /* Turn off constant cursor position display. */
     UNSET(CONSTUPDATE);
 
+#ifdef NANO_WIDE
+    wctomb(NULL, 0);
+#endif
+
     for (i = 0; i < kbinput_len; i++) {
 #ifdef NANO_WIDE
        /* Change the wide character to its multibyte value.  If it's
@@ -3665,6 +3669,10 @@ void do_output(int *kbinput, size_t kbinput_len)
 #endif
     }
 
+#ifdef NANO_WIDE
+    wctomb(NULL, 0);
+#endif
+
     /* Turn constant cursor position display back on if it was on
      * before. */
     if (old_constupdate)
index 283eef7c4c934fa52c06817e95a40a45f6db89b7..aad629f50a92976e710fd3c1b42d3ec7c479e9f0 100644 (file)
@@ -112,13 +112,6 @@ static bool resetstatuspos = FALSE;
 /* Reset all the input routines that rely on character sequences. */
 void reset_kbinput(void)
 {
-#ifdef NANO_WIDE
-    /* Reset the multibyte and wide character interpreter states. */
-    if (!ISSET(NO_UTF8)) {
-       mbtowc(NULL, NULL, 0);
-       wctomb(NULL, 0);
-    }
-#endif
     parse_kbinput(NULL, NULL, NULL, TRUE);
     get_word_kbinput(0, TRUE);
 }
@@ -191,6 +184,8 @@ void get_buffer(WINDOW *win)
        buffer *clean_key_buffer = NULL;
        size_t clean_key_buffer_len = 0;
 
+       mbtowc(NULL, NULL, 0);
+
        /* Change all complete and valid multibyte keystrokes to
         * their wide character values, discarding the others. */
        for (i = 0; i < key_buffer_len; i++) {
@@ -216,6 +211,8 @@ void get_buffer(WINDOW *win)
            }
        }
 
+       mbtowc(NULL, NULL, 0);
+
        /* Replace the default keystroke buffer with the non-(-1)
         * keystroke buffer. */
        key_buffer_len = clean_key_buffer_len;
@@ -260,6 +257,8 @@ void unget_input(buffer *input, size_t input_len)
     if (!ISSET(NO_UTF8)) {
        size_t i;
 
+       wctomb(NULL, 0);
+
        /* Keep all valid wide keystrokes, discarding the others. */
        for (i = 0; i < input_len; i++) {
            char key[MB_LEN_MAX];
@@ -276,6 +275,9 @@ void unget_input(buffer *input, size_t input_len)
                        input[i].key_code;
            }
        }
+
+       wctomb(NULL, 0);
+
     } else {
 #endif
        clean_input = input;