From be094a157913535d46cc6ac39465ce1ea7dae132 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sun, 5 Feb 2012 01:18:48 +0100 Subject: 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) --- src/getchar.c | 24 +++++++++++++++++++++--- src/normal.c | 18 ++++++++++++++++++ src/proto/getchar.pro | 3 ++- src/version.c | 2 ++ 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/getchar.c b/src/getchar.c index 3d6b0b23a3..af18c6f249 100644 --- a/src/getchar.c +++ b/src/getchar.c @@ -470,6 +470,24 @@ ResetRedobuff() } } +/* + * 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 @@ stuffnumReadbuff(n) * 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 a6cd2d6b29..aa470e4f75 100644 --- a/src/normal.c +++ b/src/normal.c @@ -1978,7 +1978,10 @@ do_pending_operator(cap, old_col, gui_yank) VIsual_reselect = FALSE; /* don't reselect now */ #endif if (empty_region_error) + { vim_beep(); + CancelRedo(); + } else { (void)op_delete(oap); @@ -1992,7 +1995,10 @@ do_pending_operator(cap, old_col, gui_yank) if (empty_region_error) { if (!gui_yank) + { vim_beep(); + CancelRedo(); + } } else (void)op_yank(oap, FALSE, !gui_yank); @@ -2004,7 +2010,10 @@ do_pending_operator(cap, old_col, gui_yank) 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 @@ do_pending_operator(cap, old_col, gui_yank) case OP_LOWER: case OP_ROT13: if (empty_region_error) + { vim_beep(); + CancelRedo(); + } else op_tilde(oap); check_cursor_col(); @@ -2099,7 +2111,10 @@ do_pending_operator(cap, old_col, gui_yank) #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 @@ do_pending_operator(cap, old_col, gui_yank) #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 a304bafa53..371f77002c 100644 --- a/src/proto/getchar.pro +++ b/src/proto/getchar.pro @@ -4,8 +4,9 @@ char_u *get_recorded __ARGS((void)); 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 6ba69ea03d..03bdab2627 100644 --- a/src/version.c +++ b/src/version.c @@ -714,6 +714,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 429, /**/ 428, /**/ -- cgit v1.2.3