diff options
author | Bram Moolenaar <bram@vim.org> | 2012-01-20 14:32:27 +0100 |
---|---|---|
committer | Bram Moolenaar <bram@vim.org> | 2012-01-20 14:32:27 +0100 |
commit | 4db1fad91535cdf725531a93c38ef21403a3d115 (patch) | |
tree | 999fafe132e6357a5076e2efc0699a9dbfd39328 | |
parent | 0f5e18816445320877fef1f887e09353ebf8a9e7 (diff) | |
download | vim-4db1fad91535cdf725531a93c38ef21403a3d115.tar.gz |
Problem: When a complete function uses refresh "always" redo will not work
properly.
Solution: Do not reset compl_leader when compl_opt_refresh_always is set.
(Yasuhiro Matsumoto)
-rw-r--r-- | src/edit.c | 19 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 17 insertions, 4 deletions
@@ -3465,11 +3465,17 @@ ins_compl_addleader(c) if (ins_compl_need_restart()) ins_compl_restart(); - vim_free(compl_leader); - compl_leader = vim_strnsave(ml_get_curline() + compl_col, + /* When 'always' is set, don't reset compl_leader. While completing, + * cursor don't point original position, changing compl_leader would + * break redo. */ + if (!compl_opt_refresh_always) + { + vim_free(compl_leader); + compl_leader = vim_strnsave(ml_get_curline() + compl_col, (int)(curwin->w_cursor.col - compl_col)); - if (compl_leader != NULL) - ins_compl_new_leader(); + if (compl_leader != NULL) + ins_compl_new_leader(); + } } /* @@ -4554,6 +4560,11 @@ ins_compl_next(allow_get_expansion, count, insert_match) int found_end = FALSE; int advance; + /* When user complete function return -1 for findstart which is next + * time of 'always', compl_shown_match become NULL. */ + if (compl_shown_match == NULL) + return -1; + if (compl_leader != NULL && (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0) { diff --git a/src/version.c b/src/version.c index 7fc23028..e2a2fa21 100644 --- a/src/version.c +++ b/src/version.c @@ -715,6 +715,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 404, +/**/ 403, /**/ 402, |