From 58d081300bb941bdf14b4e6316020914019e247a Mon Sep 17 00:00:00 2001 From: hrsh7th Date: Thu, 28 Oct 2021 01:59:50 +0900 Subject: [PATCH] Fix #420 --- lua/cmp/core.lua | 57 ++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/lua/cmp/core.lua b/lua/cmp/core.lua index 6c4a65b..dc68fba 100644 --- a/lua/cmp/core.lua +++ b/lua/cmp/core.lua @@ -151,7 +151,7 @@ core.prepare = function(self) end ---Check auto-completion -core.on_change = function(self, event) +core.on_change = function(self, trigger_event) local ignore = false ignore = ignore or self.suspending ignore = ignore or (vim.fn.pumvisible() == 1 and (vim.v.completed_item).word) @@ -161,14 +161,14 @@ core.on_change = function(self, event) return end - self:autoindent(event, function() + self:autoindent(trigger_event, function() local ctx = self:get_context({ reason = types.cmp.ContextReason.Auto }) debug.log(('ctx: `%s`'):format(ctx.cursor_before_line)) if ctx:changed(ctx.prev_context) then self.view:on_change() debug.log('changed') - if vim.tbl_contains(config.get().completion.autocomplete or {}, event) then + if vim.tbl_contains(config.get().completion.autocomplete or {}, trigger_event) then self:complete(ctx) else self.filter.timeout = THROTTLE_TIME @@ -193,31 +193,36 @@ core.on_moved = function(self) end ---Check autoindent ----@param event cmp.TriggerEvent +---@param trigger_event cmp.TriggerEvent ---@param callback function -core.autoindent = function(self, event, callback) - if event == types.cmp.TriggerEvent.TextChanged then - local cursor_before_line = api.get_cursor_before_line() - local prefix = pattern.matchstr('[^[:blank:]]\\+$', cursor_before_line) - if prefix then - for _, key in ipairs(vim.split(vim.bo.indentkeys, ',')) do - if vim.tbl_contains({ '=' .. prefix, '0=' .. prefix }, key) then - local release = self:suspend() - vim.schedule(function() - if cursor_before_line == api.get_cursor_before_line() then - local indentkeys = vim.bo.indentkeys - vim.bo.indentkeys = indentkeys .. ',!^F' - keymap.feedkeys(keymap.t(''), 'n', function() - vim.bo.indentkeys = indentkeys - release() - callback() - end) - else +core.autoindent = function(self, trigger_event, callback) + if trigger_event ~= types.cmp.TriggerEvent.TextChanged then + return callback() + end + if not api.is_insert_mode() then + return callback() + end + + local cursor_before_line = api.get_cursor_before_line() + local prefix = pattern.matchstr('[^[:blank:]]\\+$', cursor_before_line) + if prefix then + for _, key in ipairs(vim.split(vim.bo.indentkeys, ',')) do + if vim.tbl_contains({ '=' .. prefix, '0=' .. prefix }, key) then + local release = self:suspend() + vim.schedule(function() + if cursor_before_line == api.get_cursor_before_line() then + local indentkeys = vim.bo.indentkeys + vim.bo.indentkeys = indentkeys .. ',!^F' + keymap.feedkeys(keymap.t(''), 'n', function() + vim.bo.indentkeys = indentkeys + release() callback() - end - end) - return - end + end) + else + callback() + end + end) + return end end end