Index: patches/readline-6.0-branch_update-1.patch
===================================================================
--- patches/readline-6.0-branch_update-1.patch	(revision 0cbb4b7df6271c0eb27b9b9c6f335809bb8b1598)
+++ 	(revision )
@@ -1,92 +1,0 @@
-Submitted By: Jim Gifford (jim at cross-lfs dot org)
-Date: 06-05-2009
-Initial Package Version: 6.0
-Origin: Upstream
-Upstream Status: Applied
-Description: Contains all upstream patches up to 6.0-003
-
-diff -Naur readline-6.0.orig/display.c readline-6.0/display.c
---- readline-6.0.orig/display.c	2009-01-04 11:32:32.000000000 -0800
-+++ readline-6.0/display.c	2009-06-05 14:07:00.000000000 -0700
-@@ -512,6 +512,7 @@
-   /* Block keyboard interrupts because this function manipulates global
-      data structures. */
-   _rl_block_sigint ();  
-+  RL_SETSTATE (RL_STATE_REDISPLAYING);
- 
-   if (!rl_display_prompt)
-     rl_display_prompt = "";
-@@ -1236,6 +1237,7 @@
-       visible_wrap_offset = wrap_offset;
-   }
- 
-+  RL_UNSETSTATE (RL_STATE_REDISPLAYING);
-   _rl_release_sigint ();
- }
- 
-@@ -1772,7 +1774,7 @@
- 	     space_to_eol will insert too many spaces.  XXX - maybe we should
- 	     adjust col_lendiff based on the difference between _rl_last_c_pos
- 	     and _rl_screenwidth */
--	  if (col_lendiff && (_rl_last_c_pos < _rl_screenwidth))
-+	  if (col_lendiff && ((MB_CUR_MAX == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth)))
- #endif
- 	    {	  
- 	      if (_rl_term_autowrap && current_line < inv_botlin)
-@@ -1892,6 +1894,10 @@
- 
-   woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset);
-   cpos = _rl_last_c_pos;
-+
-+  if (cpos == 0 && cpos == new)
-+    return;
-+
- #if defined (HANDLE_MULTIBYTE)
-   /* If we have multibyte characters, NEW is indexed by the buffer point in
-      a multibyte string, but _rl_last_c_pos is the display position.  In
-@@ -1905,9 +1911,9 @@
- 	 prompt string, since they're both buffer indices and DPOS is a
- 	 desired display position. */
-       if ((new > prompt_last_invisible) ||		/* XXX - don't use woff here */
--	  (prompt_physical_chars > _rl_screenwidth &&
-+	  (prompt_physical_chars >= _rl_screenwidth &&
- 	   _rl_last_v_pos == prompt_last_screen_line &&
--	   wrap_offset >= woff &&
-+	   wrap_offset >= woff && dpos >= woff &&
- 	   new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))
- 	   /* XXX last comparison might need to be >= */
- 	{
-diff -Naur readline-6.0.orig/patchlevel readline-6.0/patchlevel
---- readline-6.0.orig/patchlevel	2008-11-18 08:01:14.000000000 -0800
-+++ readline-6.0/patchlevel	2009-06-05 14:07:00.000000000 -0700
-@@ -1,3 +1,3 @@
- # Do not edit -- exists only for use by patch
- 
--0
-+3
-diff -Naur readline-6.0.orig/readline.h readline-6.0/readline.h
---- readline-6.0.orig/readline.h	2009-01-04 11:32:33.000000000 -0800
-+++ readline-6.0/readline.h	2009-06-05 14:06:57.000000000 -0700
-@@ -814,8 +814,9 @@
- #define RL_STATE_VIMOTION	0x100000	/* reading vi motion arg */
- #define RL_STATE_MULTIKEY	0x200000	/* reading multiple-key command */
- #define RL_STATE_VICMDONCE	0x400000	/* entered vi command mode at least once */
-+#define RL_STATE_REDISPLAYING	0x800000	/* updating terminal display */
- 
--#define RL_STATE_DONE		0x800000	/* done; accepted line */
-+#define RL_STATE_DONE		0x1000000	/* done; accepted line */
- 
- #define RL_SETSTATE(x)		(rl_readline_state |= (x))
- #define RL_UNSETSTATE(x)	(rl_readline_state &= ~(x))
-diff -Naur readline-6.0.orig/terminal.c readline-6.0/terminal.c
---- readline-6.0.orig/terminal.c	2009-01-04 11:32:34.000000000 -0800
-+++ readline-6.0/terminal.c	2009-06-05 14:06:57.000000000 -0700
-@@ -355,7 +355,7 @@
-       _rl_get_screen_size (fileno (rl_instream), 1);
-       if (CUSTOM_REDISPLAY_FUNC ())
- 	rl_forced_update_display ();
--      else
-+      else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0)
- 	_rl_redisplay_after_sigwinch ();
-     }
- }
Index: patches/readline-6.0-branch_update-2.patch
===================================================================
--- patches/readline-6.0-branch_update-2.patch	(revision 24bab8b0719812f97dc19809251f6201cf60e05b)
+++ patches/readline-6.0-branch_update-2.patch	(revision 24bab8b0719812f97dc19809251f6201cf60e05b)
@@ -0,0 +1,115 @@
+Submitted By: Jonathan Norman (jonathan at bluesquarelinux.co.uk)
+Date: 2009-12-31 
+Initial Package Version: 6.0 
+Origin: Upstream
+Upstream Status: Applied
+Description: Contains all upstream patches up to 6.0-004
+
+diff -Naur readline-6.0.orig/display.c readline-6.0/display.c
+--- readline-6.0.orig/display.c	2009-12-31 18:52:45.000000000 +0000
++++ readline-6.0/display.c	2009-12-31 19:05:02.000000000 +0000
+@@ -512,6 +512,7 @@
+   /* Block keyboard interrupts because this function manipulates global
+      data structures. */
+   _rl_block_sigint ();  
++  RL_SETSTATE (RL_STATE_REDISPLAYING);
+ 
+   if (!rl_display_prompt)
+     rl_display_prompt = "";
+@@ -1191,6 +1192,8 @@
+       if (!rl_display_fixed || forced_display || lmargin != last_lmargin)
+ 	{
+ 	  forced_display = 0;
++	  o_cpos = _rl_last_c_pos;
++	  cpos_adjusted = 0;
+ 	  update_line (&visible_line[last_lmargin],
+ 		       &invisible_line[lmargin],
+ 		       0,
+@@ -1198,6 +1201,13 @@
+ 		       _rl_screenwidth + (lmargin ? 0 : wrap_offset),
+ 		       0);
+ 
++	  if ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
++ 	      cpos_adjusted == 0 &&
++ 	      _rl_last_c_pos != o_cpos &&
++ 	      _rl_last_c_pos > wrap_offset &&
++ 	      o_cpos < prompt_last_invisible)
++ 		_rl_last_c_pos -= prompt_invis_chars_first_line;	/* XXX - was wrap_offset */
++
+ 	  /* If the visible new line is shorter than the old, but the number
+ 	     of invisible characters is greater, and we are at the end of
+ 	     the new line, we need to clear to eol. */
+@@ -1236,6 +1246,7 @@
+       visible_wrap_offset = wrap_offset;
+   }
+ 
++  RL_UNSETSTATE (RL_STATE_REDISPLAYING);
+   _rl_release_sigint ();
+ }
+ 
+@@ -1772,7 +1783,7 @@
+ 	     space_to_eol will insert too many spaces.  XXX - maybe we should
+ 	     adjust col_lendiff based on the difference between _rl_last_c_pos
+ 	     and _rl_screenwidth */
+-	  if (col_lendiff && (_rl_last_c_pos < _rl_screenwidth))
++	  if (col_lendiff && ((MB_CUR_MAX == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth)))
+ #endif
+ 	    {	  
+ 	      if (_rl_term_autowrap && current_line < inv_botlin)
+@@ -1892,6 +1903,10 @@
+ 
+   woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset);
+   cpos = _rl_last_c_pos;
++
++  if (cpos == 0 && cpos == new)
++    return;
++
+ #if defined (HANDLE_MULTIBYTE)
+   /* If we have multibyte characters, NEW is indexed by the buffer point in
+      a multibyte string, but _rl_last_c_pos is the display position.  In
+@@ -1905,9 +1920,9 @@
+ 	 prompt string, since they're both buffer indices and DPOS is a
+ 	 desired display position. */
+       if ((new > prompt_last_invisible) ||		/* XXX - don't use woff here */
+-	  (prompt_physical_chars > _rl_screenwidth &&
++	  (prompt_physical_chars >= _rl_screenwidth &&
+ 	   _rl_last_v_pos == prompt_last_screen_line &&
+-	   wrap_offset >= woff &&
++	   wrap_offset >= woff && dpos >= woff &&
+ 	   new > (prompt_last_invisible-(_rl_screenwidth*_rl_last_v_pos)-wrap_offset)))
+ 	   /* XXX last comparison might need to be >= */
+ 	{
+diff -Naur readline-6.0.orig/patchlevel readline-6.0/patchlevel
+--- readline-6.0.orig/patchlevel	2009-12-31 18:52:45.000000000 +0000
++++ readline-6.0/patchlevel	2009-12-31 18:58:11.000000000 +0000
+@@ -1,3 +1,3 @@
+ # Do not edit -- exists only for use by patch
+ 
+-0
++3
+diff -Naur readline-6.0.orig/readline.h readline-6.0/readline.h
+--- readline-6.0.orig/readline.h	2009-12-31 18:52:45.000000000 +0000
++++ readline-6.0/readline.h	2009-12-31 18:58:11.000000000 +0000
+@@ -814,8 +814,9 @@
+ #define RL_STATE_VIMOTION	0x100000	/* reading vi motion arg */
+ #define RL_STATE_MULTIKEY	0x200000	/* reading multiple-key command */
+ #define RL_STATE_VICMDONCE	0x400000	/* entered vi command mode at least once */
++#define RL_STATE_REDISPLAYING	0x800000	/* updating terminal display */
+ 
+-#define RL_STATE_DONE		0x800000	/* done; accepted line */
++#define RL_STATE_DONE		0x1000000	/* done; accepted line */
+ 
+ #define RL_SETSTATE(x)		(rl_readline_state |= (x))
+ #define RL_UNSETSTATE(x)	(rl_readline_state &= ~(x))
+diff -Naur readline-6.0.orig/terminal.c readline-6.0/terminal.c
+--- readline-6.0.orig/terminal.c	2009-12-31 18:52:45.000000000 +0000
++++ readline-6.0/terminal.c	2009-12-31 18:58:11.000000000 +0000
+@@ -355,7 +355,7 @@
+       _rl_get_screen_size (fileno (rl_instream), 1);
+       if (CUSTOM_REDISPLAY_FUNC ())
+ 	rl_forced_update_display ();
+-      else
++      else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0)
+ 	_rl_redisplay_after_sigwinch ();
+     }
+ }
