diff options
author | Bram Moolenaar <Bram@vim.org> | 2011-09-21 19:10:46 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2011-09-21 19:10:46 +0200 |
commit | a6f4d61af772140159a828911f574dd28b1c4564 (patch) | |
tree | 0a1e0e506bb338527ad04abe0e9c5017217ebd71 | |
parent | 62951b1e0d5b3a74c7de6991fc57f67b1d97abbf (diff) | |
download | vim-git-a6f4d61af772140159a828911f574dd28b1c4564.tar.gz |
updated for version 7.3.320v7.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 <a0>.
-rw-r--r-- | src/ex_docmd.c | 45 | ||||
-rw-r--r-- | 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); } @@ -2797,6 +2794,42 @@ checkforcmd(pp, cmd, len) } /* + * 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, "<a0>"); + 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. * Returns pointer to char after the command name. diff --git a/src/version.c b/src/version.c index 24d98bb10..5bae7d85b 100644 --- a/src/version.c +++ b/src/version.c @@ -710,6 +710,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 320, +/**/ 319, /**/ 318, |