To: vim_dev@googlegroups.com
Subject: Patch 7.3.320
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 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 <a0>.
Files:	    src/ex_docmd.c


*** ../vim-7.3.319/src/ex_docmd.c	2011-07-20 16:36:35.000000000 +0200
--- src/ex_docmd.c	2011-09-21 19:02:15.000000000 +0200
***************
*** 61,66 ****
--- 61,67 ----
  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,2145 ****
  	{
  	    STRCPY(IObuff, _("E492: Not an editor command"));
  	    if (!sourcing)
! 	    {
! 		STRCAT(IObuff, ": ");
! 		STRNCAT(IObuff, *cmdlinep, 40);
! 	    }
  	    errormsg = IObuff;
  	}
  	goto doend;
--- 2137,2143 ----
  	{
  	    STRCPY(IObuff, _("E492: Not an editor command"));
  	    if (!sourcing)
! 		append_command(*cmdlinep);
  	    errormsg = IObuff;
  	}
  	goto doend;
***************
*** 2708,2715 ****
  		STRCPY(IObuff, errormsg);
  		errormsg = IObuff;
  	    }
! 	    STRCAT(errormsg, ": ");
! 	    STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
  	}
  	emsg(errormsg);
      }
--- 2706,2712 ----
  		STRCPY(IObuff, errormsg);
  		errormsg = IObuff;
  	    }
! 	    append_command(*cmdlinep);
  	}
  	emsg(errormsg);
      }
***************
*** 2797,2802 ****
--- 2794,2835 ----
  }
  
  /*
+  * 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.
*** ../vim-7.3.319/src/version.c	2011-09-21 18:23:02.000000000 +0200
--- src/version.c	2011-09-21 19:04:35.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     320,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
28. You have comandeered your teenager's phone line for the net and even his
    friends know not to call on his line anymore.

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///
