updated for version 7.4.363

Problem:    In Windows console typing 0xCE does not work.
Solution:   Convert 0xCE to K_NUL 3. (Nobuhiro Takasaki et al.)
This commit is contained in:
Bram Moolenaar
2014-07-09 20:51:07 +02:00
parent 1e1aca3784
commit 455009122a
3 changed files with 39 additions and 4 deletions

View File

@ -1785,13 +1785,14 @@ mch_inchar(
#endif #endif
{ {
int n = 1; int n = 1;
int conv = FALSE;
/* A key may have one or two bytes. */
typeahead[typeaheadlen] = c; typeahead[typeaheadlen] = c;
if (ch2 != NUL) if (ch2 != NUL)
{ {
typeahead[typeaheadlen + 1] = ch2; typeahead[typeaheadlen + 1] = 3;
++n; typeahead[typeaheadlen + 2] = ch2;
n += 2;
} }
#ifdef FEAT_MBYTE #ifdef FEAT_MBYTE
/* Only convert normal characters, not special keys. Need to /* Only convert normal characters, not special keys. Need to
@ -1800,6 +1801,7 @@ mch_inchar(
if (input_conv.vc_type != CONV_NONE if (input_conv.vc_type != CONV_NONE
&& (ch2 == NUL || c != K_NUL)) && (ch2 == NUL || c != K_NUL))
{ {
conv = TRUE;
typeaheadlen -= unconverted; typeaheadlen -= unconverted;
n = convert_input_safe(typeahead + typeaheadlen, n = convert_input_safe(typeahead + typeaheadlen,
n + unconverted, TYPEAHEADLEN - typeaheadlen, n + unconverted, TYPEAHEADLEN - typeaheadlen,
@ -1807,6 +1809,24 @@ mch_inchar(
} }
#endif #endif
if (conv)
{
char_u *p = typeahead + typeaheadlen;
char_u *e = typeahead + TYPEAHEADLEN;
while (*p && p < e)
{
if (*p == K_NUL)
{
++p;
mch_memmove(p + 1, p, ((size_t)(e - p)) - 1);
*p = 3;
++n;
}
++p;
}
}
/* Use the ALT key to set the 8th bit of the character /* Use the ALT key to set the 8th bit of the character
* when it's one byte, the 8th bit isn't set yet and not * when it's one byte, the 8th bit isn't set yet and not
* using a double-byte encoding (would become a lead * using a double-byte encoding (would become a lead

View File

@ -3724,7 +3724,11 @@ add_termcode(name, string, flags)
return; return;
} }
#if defined(WIN3264) && !defined(FEAT_GUI)
s = vim_strnsave(string, (int)STRLEN(string) + 1);
#else
s = vim_strsave(string); s = vim_strsave(string);
#endif
if (s == NULL) if (s == NULL)
return; return;
@ -3734,6 +3738,15 @@ add_termcode(name, string, flags)
STRMOVE(s, s + 1); STRMOVE(s, s + 1);
s[0] = term_7to8bit(string); s[0] = term_7to8bit(string);
} }
#if defined(WIN3264) && !defined(FEAT_GUI)
if (s[0] == K_NUL)
{
STRMOVE(s + 1, s);
s[1] = 3;
}
#endif
len = (int)STRLEN(s); len = (int)STRLEN(s);
need_gather = TRUE; /* need to fill termleader[] */ need_gather = TRUE; /* need to fill termleader[] */

View File

@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
363,
/**/ /**/
362, 362,
/**/ /**/