aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/edit.c4
-rw-r--r--src/nvim/fold.c4
-rw-r--r--src/nvim/globals.h4
-rw-r--r--test/functional/viml/completion_spec.lua6
4 files changed, 14 insertions, 4 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index beae55b8a8..3729cd5f2d 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -165,10 +165,6 @@ static int compl_restarting = FALSE; /* don't insert match */
* FALSE the word to be completed must be located. */
static int compl_started = FALSE;
-/* Set when doing something for completion that may call edit() recursively,
- * which is not allowed. */
-static int compl_busy = FALSE;
-
static int compl_matches = 0;
static char_u *compl_pattern = NULL;
static int compl_direction = FORWARD;
diff --git a/src/nvim/fold.c b/src/nvim/fold.c
index 6c135ef47b..70ab4ced75 100644
--- a/src/nvim/fold.c
+++ b/src/nvim/fold.c
@@ -762,6 +762,10 @@ void clearFolding(win_T *win)
*/
void foldUpdate(win_T *wp, linenr_T top, linenr_T bot)
{
+ if (compl_busy) {
+ return;
+ }
+
fold_T *fp;
if (wp->w_buffer->terminal) {
return;
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index 69e65c3208..618245ea23 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -214,6 +214,10 @@ EXTERN int compl_length INIT(= 0);
* stop looking for matches. */
EXTERN int compl_interrupted INIT(= FALSE);
+// Set when doing something for completion that may call edit() recursively,
+// which is not allowed. Also used to disable folding during completion
+EXTERN int compl_busy INIT(= false);
+
/* List of flags for method of completion. */
EXTERN int compl_cont_status INIT(= 0);
# define CONT_ADDING 1 /* "normal" or "adding" expansion */
diff --git a/test/functional/viml/completion_spec.lua b/test/functional/viml/completion_spec.lua
index 4bb9707cda..45dbbdb7c7 100644
--- a/test/functional/viml/completion_spec.lua
+++ b/test/functional/viml/completion_spec.lua
@@ -141,4 +141,10 @@ describe('completion', function()
June]])
end)
end)
+
+ it('disables folding during completion', function ()
+ execute("set foldmethod=indent")
+ feed('i<Tab>foo<CR><Tab>bar<Esc>ggA<C-x><C-l>')
+ eq(-1, eval('foldclosed(1)'))
+ end)
end)