From a6f4d61af772140159a828911f574dd28b1c4564 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 21 Sep 2011 19:10:46 +0200 Subject: [PATCH] updated for version 7.3.320 Problem: When a 0xa0 character is in a sourced file the error message for unrecognized command does not show the problem. Solution: Display 0xa0 as . --- src/ex_docmd.c | 45 +++++++++++++++++++++++++++++++++++++++------ src/version.c | 2 ++ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index a6fa374bc..9b5a5b164 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -61,6 +61,7 @@ static char_u *do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(* static char_u *do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie)); static int if_level = 0; /* depth in :if */ #endif +static void append_command __ARGS((char_u *cmd)); static char_u *find_command __ARGS((exarg_T *eap, int *full)); static void ex_abbreviate __ARGS((exarg_T *eap)); @@ -2136,10 +2137,7 @@ do_one_cmd(cmdlinep, sourcing, { STRCPY(IObuff, _("E492: Not an editor command")); if (!sourcing) - { - STRCAT(IObuff, ": "); - STRNCAT(IObuff, *cmdlinep, 40); - } + append_command(*cmdlinep); errormsg = IObuff; } goto doend; @@ -2708,8 +2706,7 @@ doend: STRCPY(IObuff, errormsg); errormsg = IObuff; } - STRCAT(errormsg, ": "); - STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1); + append_command(*cmdlinep); } emsg(errormsg); } @@ -2796,6 +2793,42 @@ checkforcmd(pp, cmd, len) return FALSE; } +/* + * Append "cmd" to the error message in IObuff. + * Takes care of limiting the length and handling 0xa0, which would be + * invisible otherwise. + */ + static void +append_command(cmd) + char_u *cmd; +{ + char_u *s = cmd; + char_u *d; + + STRCAT(IObuff, ": "); + d = IObuff + STRLEN(IObuff); + while (*s != NUL && d - IObuff < IOSIZE - 7) + { + if ( +#ifdef FEAT_MBYTE + enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) : +#endif + *s == 0xa0) + { + s += +#ifdef FEAT_MBYTE + enc_utf8 ? 2 : +#endif + 1; + STRCPY(d, ""); + d += 4; + } + else + MB_COPY_CHAR(s, d); + } + *d = NUL; +} + /* * Find an Ex command by its name, either built-in or user. * Start of the name can be found at eap->cmd. diff --git a/src/version.c b/src/version.c index 24d98bb10..5bae7d85b 100644 --- a/src/version.c +++ b/src/version.c @@ -709,6 +709,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 320, /**/ 319, /**/ -- 2.40.0