terminal completion

This commit is contained in:
hrsh7th 2021-11-04 18:31:38 +09:00
parent 68a37a669b
commit 704889c542
3 changed files with 34 additions and 3 deletions

View file

@ -5,7 +5,6 @@ local feedkeys = require('cmp.utils.feedkeys')
local autocmd = require('cmp.utils.autocmd')
local keymap = require('cmp.utils.keymap')
local misc = require('cmp.utils.misc')
local api = require('cmp.utils.api')
local cmp = {}

View file

@ -9,6 +9,8 @@ api.get_mode = function()
return 'x'
elseif api.is_select_mode() then
return 's'
elseif api.is_terminal_mode() then
return 't'
elseif api.is_cmdline_mode() then
return 'c'
end
@ -30,6 +32,12 @@ api.is_cmdline_mode = function()
return is_cmdline_mode and vim.fn.getcmdtype() ~= '='
end
api.is_terminal_mode = function()
return vim.tbl_contains({
't',
}, vim.api.nvim_get_mode().mode)
end
api.is_select_mode = function()
return vim.tbl_contains({
's',
@ -45,7 +53,7 @@ api.is_visual_mode = function()
end
api.is_suitable_mode = function()
return api.is_insert_mode() or api.is_cmdline_mode()
return api.is_insert_mode() or api.is_cmdline_mode() or api.is_terminal_mode()
end
api.get_current_line = function()
@ -58,6 +66,11 @@ end
api.get_cursor = function()
if api.is_cmdline_mode() then
return { vim.o.lines - (vim.api.nvim_get_option('cmdheight') or 1) + 1, vim.fn.getcmdpos() - 1 }
elseif api.is_terminal_mode() then
local cursor = vim.api.nvim_win_get_cursor(0)
cursor[2] = cursor[2] + 1
print(vim.inspect(cursor))
return cursor
end
return vim.api.nvim_win_get_cursor(0)
end

View file

@ -21,9 +21,29 @@ vim.cmd [[
autocmd ColorScheme * call v:lua.cmp.plugin.colorscheme()
autocmd CmdlineEnter * call v:lua.cmp.plugin.cmdline.enter()
autocmd CmdlineLeave * call v:lua.cmp.plugin.cmdline.leave()
autocmd TermEnter * call v:lua.cmp.plugin.term.enter()
autocmd TermLeave * call v:lua.cmp.plugin.term.leave()
augroup END
]]
local term_timer = vim.loop.new_timer()
misc.set(_G, { 'cmp', 'plugin', 'term', 'enter' }, function()
require('cmp.utils.autocmd').emit('InsertEnter')
local cursor = api.get_cursor()
term_timer:start(100, 100, vim.schedule_wrap(function()
local new_cursor = api.get_cursor()
if cursor[1] ~= new_cursor[1] or cursor[2] ~= new_cursor[2] then
cursor = new_cursor
require('cmp.utils.autocmd').emit('TextChanged')
end
end))
end)
misc.set(_G, { 'cmp', 'plugin', 'term', 'leave' }, function()
term_timer:stop()
require('cmp.utils.autocmd').emit('InsertLeave')
end)
misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'enter' }, function()
if config.get().experimental.native_menu then
return
@ -41,7 +61,6 @@ misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'enter' }, function()
end
end
end)
misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'leave' }, function()
if config.get().experimental.native_menu then
return