Hmm. I broke CUI mode. Index: src/term.c =================================================================== --- src/term.c (revision 1318) +++ src/term.c (working copy) @@ -5152,7 +5152,7 @@
#ifdef FEAT_MBYTE /* skip multibyte char correctly */ - for (i = (*mb_ptr2len)(src); i > 0; --i) + if ((i = (*mb_ptr2len)(src)) == 1) #endif { /* @@ -5177,7 +5177,13 @@ else result[dlen++] = *src; ++src; +#ifdef FEAT_MBYTE + } else { + mch_memmove(result + dlen, src, i); + dlen += i; + src += i; } +#endif } result[dlen] = NUL; On Tue, Jan 13, 2009 at 8:18 PM, Yasuhiro MATSUMOTO <mattn...@gmail.com> wrote: > oops. the patch have a bug. please check following. > > Index: src/term.c > =================================================================== > --- src/term.c (revision 1318) > +++ src/term.c (working copy) > @@ -5152,7 +5152,7 @@ > > #ifdef FEAT_MBYTE > /* skip multibyte char correctly */ > - for (i = (*mb_ptr2len)(src); i > 0; --i) > + if ((i = (*mb_ptr2len)(src)) == 1) > #endif > { > /* > @@ -5172,12 +5172,17 @@ > result[dlen++] = K_SPECIAL; > result[dlen++] = KS_EXTRA; > result[dlen++] = (int)KE_CSI; > - } > + } else > + result[dlen++] = *src; > # endif > - else > - result[dlen++] = *src; > ++src; > +#ifdef FEAT_MBYTE > + } else { > + mch_memmove(result + dlen, src, i); > + dlen += i; > + src += i; > } > +#endif > } > result[dlen] = NUL; > -- > > On Tue, Jan 13, 2009 at 8:01 PM, Yasuhiro MATSUMOTO <mattn...@gmail.com> > wrote: >> Hi. bram and all. >> >> I found a bug about treating multi-byte and special characters in command >> line. >> ex: >> :set enc=utf-8 >> :command! SubJapanesePeriodToDot %s/。/./g >> >> "。" mean period in japanese utf-8. and it has 0x80 in leading byte. >> but replace_termcodes treat 0x80 as K_SPECIAL and break some >> multi-byte characters in command line above. >> Below is a patch for this problem. Please check and include. >> >> Thanks. >> >> Index: src/term.c >> =================================================================== >> --- src/term.c (revision 1318) >> +++ src/term.c (working copy) >> @@ -5155,28 +5155,33 @@ >> for (i = (*mb_ptr2len)(src); i > 0; --i) >> #endif >> { >> - /* >> - * If the character is K_SPECIAL, replace it with K_SPECIAL >> - * KS_SPECIAL KE_FILLER. >> - * If compiled with the GUI replace CSI with K_CSI. >> - */ >> - if (*src == K_SPECIAL) >> - { >> - result[dlen++] = K_SPECIAL; >> - result[dlen++] = KS_SPECIAL; >> - result[dlen++] = KE_FILLER; >> - } >> + if (i == 1) { >> + /* >> + * If the character is K_SPECIAL, replace it with K_SPECIAL >> + * KS_SPECIAL KE_FILLER. >> + * If compiled with the GUI replace CSI with K_CSI. >> + */ >> + if (*src == K_SPECIAL) >> + { >> + result[dlen++] = K_SPECIAL; >> + result[dlen++] = KS_SPECIAL; >> + result[dlen++] = KE_FILLER; >> + } >> # ifdef FEAT_GUI >> - else if (*src == CSI) >> - { >> - result[dlen++] = K_SPECIAL; >> - result[dlen++] = KS_EXTRA; >> - result[dlen++] = (int)KE_CSI; >> + else if (*src == CSI) >> + { >> + result[dlen++] = K_SPECIAL; >> + result[dlen++] = KS_EXTRA; >> + result[dlen++] = (int)KE_CSI; >> + } else >> + result[dlen++] = *src; >> +# endif >> + ++src; >> + } else { >> + mch_memmove(result + dlen, src, i); >> + dlen += i; >> + src += i; >> } >> -# endif >> - else >> - result[dlen++] = *src; >> - ++src; >> } >> } >> result[dlen] = NUL; >> >> >> >> >> -- >> - Yasuhiro Matsumoto >> > > > > -- > - Yasuhiro Matsumoto > -- - Yasuhiro Matsumoto --~--~---------~--~----~------------~-------~--~----~ You received this message from the "vim_dev" maillist. For more information, visit http://www.vim.org/maillist.php -~----------~----~----~----~------~----~------~--~---