updated for version 7.3.429
Problem: When 'cpoptions' includes "E" "c0" in the first column is an
error. The redo register is then set to the errornous command.
Solution: Do not set the redo register if the command fails because of an
empty region. (Hideki Eiraku)
diff --git a/src/getchar.c b/src/getchar.c
index 3d6b0b2..af18c6f 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -470,6 +470,24 @@
}
}
+/*
+ * Discard the contents of the redo buffer and restore the previous redo
+ * buffer.
+ */
+ void
+CancelRedo()
+{
+ if (!block_redo)
+ {
+ free_buff(&redobuff);
+ redobuff = old_redobuff;
+ old_redobuff.bh_first.b_next = NULL;
+ start_stuff();
+ while (read_stuff(TRUE) != NUL)
+ ;
+ }
+}
+
#if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
/*
* Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
@@ -691,9 +709,9 @@
* Read a character from the redo buffer. Translates K_SPECIAL, CSI and
* multibyte characters.
* The redo buffer is left as it is.
- * if init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
- * otherwise
- * if old is TRUE, use old_redobuff instead of redobuff
+ * If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+ * otherwise.
+ * If old is TRUE, use old_redobuff instead of redobuff.
*/
static int
read_redo(init, old_redo)
diff --git a/src/normal.c b/src/normal.c
index a6cd2d6..aa470e4 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -1978,7 +1978,10 @@
VIsual_reselect = FALSE; /* don't reselect now */
#endif
if (empty_region_error)
+ {
vim_beep();
+ CancelRedo();
+ }
else
{
(void)op_delete(oap);
@@ -1992,7 +1995,10 @@
if (empty_region_error)
{
if (!gui_yank)
+ {
vim_beep();
+ CancelRedo();
+ }
}
else
(void)op_yank(oap, FALSE, !gui_yank);
@@ -2004,7 +2010,10 @@
VIsual_reselect = FALSE; /* don't reselect now */
#endif
if (empty_region_error)
+ {
vim_beep();
+ CancelRedo();
+ }
else
{
/* This is a new edit command, not a restart. Need to
@@ -2066,7 +2075,10 @@
case OP_LOWER:
case OP_ROT13:
if (empty_region_error)
+ {
vim_beep();
+ CancelRedo();
+ }
else
op_tilde(oap);
check_cursor_col();
@@ -2099,7 +2111,10 @@
#endif
#ifdef FEAT_VISUALEXTRA
if (empty_region_error)
+ {
vim_beep();
+ CancelRedo();
+ }
else
{
/* This is a new edit command, not a restart. Need to
@@ -2129,7 +2144,10 @@
#ifdef FEAT_VISUALEXTRA
if (empty_region_error)
#endif
+ {
vim_beep();
+ CancelRedo();
+ }
#ifdef FEAT_VISUALEXTRA
else
op_replace(oap, cap->nchar);
diff --git a/src/proto/getchar.pro b/src/proto/getchar.pro
index a304baf..371f770 100644
--- a/src/proto/getchar.pro
+++ b/src/proto/getchar.pro
@@ -4,8 +4,9 @@
char_u *get_inserted __ARGS((void));
int stuff_empty __ARGS((void));
void typeahead_noflush __ARGS((int c));
-void flush_buffers __ARGS((int typeahead));
+void flush_buffers __ARGS((int flush_typeahead));
void ResetRedobuff __ARGS((void));
+void CancelRedo __ARGS((void));
void saveRedobuff __ARGS((void));
void restoreRedobuff __ARGS((void));
void AppendToRedobuff __ARGS((char_u *s));
diff --git a/src/version.c b/src/version.c
index 6ba69ea..03bdab2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 429,
+/**/
428,
/**/
427,