Mercurial > vim
diff src/edit.c @ 13215:ae5f855a64be v8.0.1482
patch 8.0.1482: using feedkeys() does not work to test completion
commit https://github.com/vim/vim/commit/02ae9b4a93deea4993d7abe20485f91f1cce5e36
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Feb 9 15:06:02 2018 +0100
patch 8.0.1482: using feedkeys() does not work to test completion
Problem: Using feedkeys() does not work to test Insert mode completion.
(Lifepillar)
Solution: Do not check for typed keys when executing :normal or feedkeys().
Fix thesaurus completion not working when 'complete' is empty.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 09 Feb 2018 15:15:06 +0100 |
parents | ed51483e9971 |
children | e0dcfd3dbb52 |
line wrap: on
line diff
--- a/src/edit.c +++ b/src/edit.c @@ -1454,7 +1454,8 @@ doESCkey: /* if 'complete' is empty then plain ^P is no longer special, * but it is under other ^X modes */ if (*curbuf->b_p_cpt == NUL - && ctrl_x_mode != 0 + && (ctrl_x_mode == CTRL_X_NORMAL + || ctrl_x_mode == CTRL_X_WHOLE_LINE) && !(compl_cont_status & CONT_LOCAL)) goto normalchar; @@ -1568,8 +1569,8 @@ normalchar: /* If typed something may trigger CursorHoldI again. */ if (c != K_CURSORHOLD # ifdef FEAT_COMPL_FUNC - /* but not in CTRL-X mode, a script can't restore the state */ - && ctrl_x_mode == 0 + /* but not in CTRL-X mode, a script can't restore the state */ + && ctrl_x_mode == CTRL_X_NORMAL # endif ) did_cursorhold = FALSE; @@ -1582,7 +1583,7 @@ normalchar: #ifdef FEAT_CINDENT if (can_cindent && cindent_on() # ifdef FEAT_INS_EXPAND - && ctrl_x_mode == 0 + && ctrl_x_mode == CTRL_X_NORMAL # endif ) { @@ -5020,12 +5021,12 @@ ins_compl_next( ins_compl_check_keys(int frequency, int in_compl_func) { static int count = 0; - - int c; - - /* Don't check when reading keys from a script. That would break the test - * scripts */ - if (using_script()) + int c; + + /* Don't check when reading keys from a script, :normal or feedkeys(). + * That would break the test scripts. But do check for keys when called + * from complete_check(). */ + if (!in_compl_func && (using_script() || ex_normal_busy)) return; /* Only do this at regular intervals */