*** bash-3.0/lib/readline/vi_mode.c	Tue Jul 13 14:08:27 2004
--- bash/lib/readline/vi_mode.c	Tue Aug 17 00:12:09 2004
***************
*** 691,695 ****
    wchar_t wc;
    char mb[MB_LEN_MAX+1];
!   int mblen;
    mbstate_t ps;
  
--- 693,697 ----
    wchar_t wc;
    char mb[MB_LEN_MAX+1];
!   int mblen, p;
    mbstate_t ps;
  
***************
*** 714,722 ****
        if (wc)
  	{
  	  mblen = wcrtomb (mb, wc, &ps);
  	  if (mblen >= 0)
  	    mb[mblen] = '\0';
  	  rl_begin_undo_group ();
! 	  rl_delete (1, 0);
  	  rl_insert_text (mb);
  	  rl_end_undo_group ();
--- 716,727 ----
        if (wc)
  	{
+ 	  p = rl_point;
  	  mblen = wcrtomb (mb, wc, &ps);
  	  if (mblen >= 0)
  	    mb[mblen] = '\0';
  	  rl_begin_undo_group ();
! 	  rl_vi_delete (1, 0);
! 	  if (rl_point < p)	/* Did we retreat at EOL? */
! 	    rl_point++;	/* XXX - should we advance more than 1 for mbchar? */
  	  rl_insert_text (mb);
  	  rl_end_undo_group ();
***************
*** 1311,1320 ****
  #if defined (HANDLE_MULTIBYTE)
        if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
! 	while (_rl_insert_char (1, c))
! 	  {
! 	    RL_SETSTATE (RL_STATE_MOREINPUT);
! 	    c = rl_read_key ();
! 	    RL_UNSETSTATE (RL_STATE_MOREINPUT);
! 	  }
        else
  #endif
--- 1316,1329 ----
  #if defined (HANDLE_MULTIBYTE)
        if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
! 	{
! 	  if (rl_point < p)		/* Did we retreat at EOL? */
! 	    rl_point++;
! 	  while (_rl_insert_char (1, c))
! 	    {
! 	      RL_SETSTATE (RL_STATE_MOREINPUT);
! 	      c = rl_read_key ();
! 	      RL_UNSETSTATE (RL_STATE_MOREINPUT);
! 	    }
! 	}
        else
  #endif

*** bash-3.0/patchlevel.h	Wed Aug 22 08:05:39 2001
--- bash/patchlevel.h	Thu Sep  2 15:04:32 2004
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 8
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 9
  
  #endif /* _PATCHLEVEL_H_ */
