Index: patches/readline-6.2-branch_update-3.patch
===================================================================
--- patches/readline-6.2-branch_update-3.patch	(revision 8c5edb4a5b5afa4171390c0a06029bd020cf4101)
+++ patches/readline-6.2-branch_update-3.patch	(revision 8c5edb4a5b5afa4171390c0a06029bd020cf4101)
@@ -0,0 +1,157 @@
+Submitted By: William Harrington (kb0iic at cross-lfs dot org)
+Date: 2012-11-01
+Initial Package Version: 6.2
+Origin: Upstream
+Upstream Status: Applied
+Description: Contains all upstream patches up to 6.2-004
+
+diff -Naur readline-6.2.orig/callback.c readline-6.2/callback.c
+--- readline-6.2.orig/callback.c	2010-06-06 16:18:58.000000000 +0000
++++ readline-6.2/callback.c	2012-11-01 20:14:01.000000000 +0000
+@@ -148,6 +148,9 @@
+ 	  eof = _rl_vi_domove_callback (_rl_vimvcxt);
+ 	  /* Should handle everything, including cleanup, numeric arguments,
+ 	     and turning off RL_STATE_VIMOTION */
++	  if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)
++	    _rl_internal_char_cleanup ();
++
+ 	  return;
+ 	}
+ #endif
+diff -Naur readline-6.2.orig/input.c readline-6.2/input.c
+--- readline-6.2.orig/input.c	2010-05-30 22:33:01.000000000 +0000
++++ readline-6.2/input.c	2012-11-01 20:14:01.000000000 +0000
+@@ -409,7 +409,7 @@
+ int
+ rl_read_key ()
+ {
+-  int c;
++  int c, r;
+ 
+   rl_key_sequence_length++;
+ 
+@@ -429,14 +429,18 @@
+ 	{
+ 	  while (rl_event_hook)
+ 	    {
+-	      if (rl_gather_tyi () < 0)	/* XXX - EIO */
++	      if (rl_get_char (&c) != 0)
++		break;
++		
++	      if ((r = rl_gather_tyi ()) < 0)	/* XXX - EIO */
+ 		{
+ 		  rl_done = 1;
+ 		  return ('\n');
+ 		}
++	      else if (r == 1)			/* read something */
++		continue;
++
+ 	      RL_CHECK_SIGNALS ();
+-	      if (rl_get_char (&c) != 0)
+-		break;
+ 	      if (rl_done)		/* XXX - experimental */
+ 		return ('\n');
+ 	      (*rl_event_hook) ();
+diff -Naur readline-6.2.orig/patchlevel readline-6.2/patchlevel
+--- readline-6.2.orig/patchlevel	2010-01-14 15:15:52.000000000 +0000
++++ readline-6.2/patchlevel	2012-11-01 20:14:01.000000000 +0000
+@@ -1,3 +1,3 @@
+ # Do not edit -- exists only for use by patch
+ 
+-1
++4
+diff -Naur readline-6.2.orig/support/shobj-conf readline-6.2/support/shobj-conf
+--- readline-6.2.orig/support/shobj-conf	2009-10-28 13:20:21.000000000 +0000
++++ readline-6.2/support/shobj-conf	2012-11-01 20:14:01.000000000 +0000
+@@ -157,7 +157,7 @@
+ 	;;
+ 
+ # Darwin/MacOS X
+-darwin[89]*|darwin10*)
++darwin[89]*|darwin1[012]*)
+ 	SHOBJ_STATUS=supported
+ 	SHLIB_STATUS=supported
+ 	
+@@ -186,7 +186,7 @@
+ 	SHLIB_LIBSUFF='dylib'
+ 
+ 	case "${host_os}" in
+-	darwin[789]*|darwin10*)	SHOBJ_LDFLAGS=''
++	darwin[789]*|darwin1[012]*)	SHOBJ_LDFLAGS=''
+ 			SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v'
+ 			;;
+ 	*)		SHOBJ_LDFLAGS='-dynamic'
+diff -Naur readline-6.2.orig/vi_mode.c readline-6.2/vi_mode.c
+--- readline-6.2.orig/vi_mode.c	2010-11-21 00:51:39.000000000 +0000
++++ readline-6.2/vi_mode.c	2012-11-01 20:14:01.000000000 +0000
+@@ -1114,7 +1114,7 @@
+       rl_beg_of_line (1, c);
+       _rl_vi_last_motion = c;
+       RL_UNSETSTATE (RL_STATE_VIMOTION);
+-      return (0);
++      return (vidomove_dispatch (m));
+     }
+ #if defined (READLINE_CALLBACKS)
+   /* XXX - these need to handle rl_universal_argument bindings */
+@@ -1234,11 +1234,19 @@
+       _rl_vimvcxt->motion = '$';
+       r = rl_domove_motion_callback (_rl_vimvcxt);
+     }
+-  else if (vi_redoing)
++  else if (vi_redoing && _rl_vi_last_motion != 'd')	/* `dd' is special */
+     {
+       _rl_vimvcxt->motion = _rl_vi_last_motion;
+       r = rl_domove_motion_callback (_rl_vimvcxt);
+     }
++  else if (vi_redoing)		/* handle redoing `dd' here */
++    {
++      _rl_vimvcxt->motion = _rl_vi_last_motion;
++      rl_mark = rl_end;
++      rl_beg_of_line (1, key);
++      RL_UNSETSTATE (RL_STATE_VIMOTION);
++      r = vidomove_dispatch (_rl_vimvcxt);
++    }
+ #if defined (READLINE_CALLBACKS)
+   else if (RL_ISSTATE (RL_STATE_CALLBACK))
+     {
+@@ -1316,11 +1324,19 @@
+       _rl_vimvcxt->motion = '$';
+       r = rl_domove_motion_callback (_rl_vimvcxt);
+     }
+-  else if (vi_redoing)
++  else if (vi_redoing && _rl_vi_last_motion != 'c')	/* `cc' is special */
+     {
+       _rl_vimvcxt->motion = _rl_vi_last_motion;
+       r = rl_domove_motion_callback (_rl_vimvcxt);
+     }
++  else if (vi_redoing)		/* handle redoing `cc' here */
++    {
++      _rl_vimvcxt->motion = _rl_vi_last_motion;
++      rl_mark = rl_end;
++      rl_beg_of_line (1, key);
++      RL_UNSETSTATE (RL_STATE_VIMOTION);
++      r = vidomove_dispatch (_rl_vimvcxt);
++    }
+ #if defined (READLINE_CALLBACKS)
+   else if (RL_ISSTATE (RL_STATE_CALLBACK))
+     {
+@@ -1377,6 +1393,19 @@
+       _rl_vimvcxt->motion = '$';
+       r = rl_domove_motion_callback (_rl_vimvcxt);
+     }
++  else if (vi_redoing && _rl_vi_last_motion != 'y')	/* `yy' is special */
++    {
++      _rl_vimvcxt->motion = _rl_vi_last_motion;
++      r = rl_domove_motion_callback (_rl_vimvcxt);
++    }
++  else if (vi_redoing)			/* handle redoing `yy' here */
++    {
++      _rl_vimvcxt->motion = _rl_vi_last_motion;
++      rl_mark = rl_end;
++      rl_beg_of_line (1, key);
++      RL_UNSETSTATE (RL_STATE_VIMOTION);
++      r = vidomove_dispatch (_rl_vimvcxt);
++    }
+ #if defined (READLINE_CALLBACKS)
+   else if (RL_ISSTATE (RL_STATE_CALLBACK))
+     {
