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 <[email protected]> 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 <[email protected]>
> 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
-~----------~----~----~----~------~----~------~--~---