diff options
author | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2015-09-11 21:40:45 +0100 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2015-09-11 21:40:45 +0100 |
commit | e1c0a947cc845c71dd844db44016d07922cfcefa (patch) | |
tree | f952b7ac97712807e1d2b696987a00afdaf7ddf8 /Src/Zle/zle_main.c | |
parent | 560a23033d2d0e029bbbcda0366053d8d87a37d9 (diff) | |
download | zsh-e1c0a947cc845c71dd844db44016d07922cfcefa.tar.gz zsh-e1c0a947cc845c71dd844db44016d07922cfcefa.tar.xz zsh-e1c0a947cc845c71dd844db44016d07922cfcefa.zip |
Read full multibyte string early for self-insert
Diffstat (limited to 'Src/Zle/zle_main.c')
-rw-r--r-- | Src/Zle/zle_main.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index ec3d2c354..992f152df 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -933,7 +933,7 @@ getfullchar(int do_keytmout) int inchar = getbyte((long)do_keytmout, NULL); #ifdef MULTIBYTE_SUPPORT - return getrestchar(inchar); + return getrestchar(inchar, NULL, NULL); #else return inchar; #endif @@ -951,7 +951,7 @@ getfullchar(int do_keytmout) /**/ mod_export ZLE_INT_T -getrestchar(int inchar) +getrestchar(int inchar, char *outstr, int *outcount) { char c = inchar; wchar_t outchar; @@ -965,6 +965,8 @@ getrestchar(int inchar) */ lastchar_wide_valid = 1; + if (outcount) + *outcount = 0; if (inchar == EOF) { /* End of input, so reset the shift state. */ memset(&mbs, 0, sizeof mbs); @@ -1013,6 +1015,10 @@ getrestchar(int inchar) return lastchar_wide = WEOF; } c = inchar; + if (outstr) { + *outstr++ = c; + (*outcount)++; + } } return lastchar_wide = (ZLE_INT_T)outchar; } |