Index: Src/system.h =================================================================== RCS file: /cvsroot/zsh/zsh/Src/system.h,v retrieving revision 1.28 diff -u -p -r1.28 system.h --- Src/system.h 18 Feb 2005 13:57:27 -0000 1.28 +++ Src/system.h 21 Feb 2005 19:08:51 -0000 @@ -689,6 +689,7 @@ extern short ospeed; */ #if defined(HAVE_WCHAR_H) && defined(HAVE_WCTOMB) && defined (__STDC_ISO_10646__) # include +# include /* * More stringent requirements to enable complete Unicode conversion Index: Src/Zle/zle.h =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/zle.h,v retrieving revision 1.8 diff -u -p -r1.8 zle.h --- Src/Zle/zle.h 21 Feb 2005 11:20:24 -0000 1.8 +++ Src/Zle/zle.h 21 Feb 2005 19:08:52 -0000 @@ -47,6 +47,7 @@ typedef wint_t ZLE_INT_T; #define ZLENL L'\n' #define ZLENUL L'\0' #define ZLETAB L'\t' +#define ZLESPC L' ' #define DIGIT_1 L'1' #define DIGIT_9 L'9' @@ -75,6 +76,7 @@ typedef int ZLE_INT_T; #define ZLENL '\n' #define ZLENUL '\0' #define ZLETAB '\t' +#define ZLESPC ' ' #define DIGIT_1 '1' #define DIGIT_9 '9' Index: Src/Zle/zle_main.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_main.c,v retrieving revision 1.59 diff -u -p -r1.59 zle_main.c --- Src/Zle/zle_main.c 18 Feb 2005 13:57:28 -0000 1.59 +++ Src/Zle/zle_main.c 21 Feb 2005 19:08:53 -0000 @@ -752,6 +752,7 @@ getrestchar(int inchar) char buf[MB_CUR_MAX], *ptr; wchar_t outchar; int ret; + mbstate_t ps; /* * We are guaranteed to set a valid wide last character, @@ -764,7 +765,8 @@ getrestchar(int inchar) return lastchar_wide = WEOF; /* reset shift state by converting null */ - mbrtowc(&outchar, &cnull, 1, &ps); + //mbrtowc(&outchar, &cnull, 1, &ps); + memset (&ps, '\0', sizeof (ps)); ptr = buf; *ptr++ = inchar; @@ -785,7 +787,7 @@ getrestchar(int inchar) return lastchar_wide = WEOF; *ptr++ = inchar; } - return lastchar_wide = (wint_t)outchar; + return lastchar_wide = (ZLE_INT_T)outchar; } /**/ #endif Index: Src/Zle/zle_misc.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_misc.c,v retrieving revision 1.16 diff -u -p -r1.16 zle_misc.c --- Src/Zle/zle_misc.c 18 Feb 2005 17:31:11 -0000 1.16 +++ Src/Zle/zle_misc.c 21 Feb 2005 19:08:53 -0000 @@ -61,9 +61,13 @@ mod_export int selfinsert(UNUSED(char **args)) { #ifdef ZLE_UNICODE_SUPPORT + /* wint_t and wchar_t not neccessarily the same size */ + wchar_t tmp; + if (!lastchar_wide_valid) getrestchar(lastchar); - doinsert(&lastchar_wide, 1); + tmp = lastchar_wide; + doinsert(&tmp, 1); #else char s = lastchar; doinsert(&s, 1); @@ -921,7 +925,7 @@ executenamedcommand(char *prmt) #ifdef ZLE_UNICODE_SUPPORT if (!lastchar_wide_valid) getrestchar(0); - if (iswcntrl(lastchar)) + if (iswcntrl(lastchar_wide)) #else if (icntrl(lastchar)) #endif Index: Src/Zle/zle_tricky.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_tricky.c,v retrieving revision 1.49 diff -u -p -r1.49 zle_tricky.c --- Src/Zle/zle_tricky.c 18 Feb 2005 17:31:11 -0000 1.49 +++ Src/Zle/zle_tricky.c 21 Feb 2005 19:08:55 -0000 @@ -159,12 +159,12 @@ int hascompwidgets; static int usetab(void) { - unsigned char *s = zleline + zlecs - 1; + ZLE_STRING_T s = zleline + zlecs - 1; if (keybuf[0] != '\t' || keybuf[1]) return 0; - for (; s >= zleline && *s != '\n'; s--) - if (*s != '\t' && *s != ' ') + for (; s >= zleline && *s != ZLENL; s--) + if (*s != ZLETAB && *s != ZLESPC) return 0; if (compfunc) { wouldinstab = 1; @@ -866,7 +866,7 @@ addx(char **ptmp) (instring && (zleline[zlecs] == '"' || zleline[zlecs] == '\'')) || (addspace = (comppref && !iblank(zleline[zlecs])))) { *ptmp = (char *)zleline; - zleline = (unsigned char *)zhalloc(strlen((char *)zleline) + 3 + + zleline = (ZLE_STRING_T)zhalloc(strlen((char *)zleline) + 3 + addspace); memcpy(zleline, *ptmp, zlecs); zleline[zlecs] = 'x'; Index: Src/Zle/zle_utils.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_utils.c,v retrieving revision 1.18 diff -u -p -r1.18 zle_utils.c --- Src/Zle/zle_utils.c 18 Feb 2005 13:57:28 -0000 1.18 +++ Src/Zle/zle_utils.c 21 Feb 2005 19:08:55 -0000 @@ -111,22 +111,22 @@ zlelineasstring(ZLE_STRING_T instr, int { #ifdef ZLE_UNICODE_SUPPORT char *s; - char *mb_cursor; int i, j; size_t mb_len = 0; - mb_cursor = s = zalloc(inll * MB_CUR_MAX); + s = zalloc(inll * MB_CUR_MAX + 1); - for(i=0;i<=inll;i++) { + for(i=0; i < inll; i++) { if (outcs != NULL && i == incs) *outcs = mb_len; - j = wctomb(mb_cursor, instr[i]); + j = wctomb(s + mb_len, instr[i]); if (j == -1) { /* invalid char; what to do? */ } else { mb_len += j; } } + s[mb_len] = '\0'; if (outll != NULL) *outll = mb_len; @@ -135,7 +135,7 @@ zlelineasstring(ZLE_STRING_T instr, int unsigned char *ret = (unsigned char *) metafy((char *) s, mb_len, META_HEAPDUP); - zfree((char *)s, inll * MB_CUR_MAX); + zfree((char *)s, inll * MB_CUR_MAX + 1); return ret; }