dev (#956)
* Adjust empty line count * Implement vim.api.nvim_create_autocmd (#844) * Implement vim.api.nvim_create_autocmd * Only use vim.api.nvim_create_autocmd on nighly * Cleanup * cleanup * Rename autos.lua to autocmds.lua * Fix forgot to rename autos to autocmds * Remove legacy autocmd * Add descriptions on autocmds * Update descriptions on autocmds * Update CmpStatus command to lua API (#922) Signed-off-by: Micah Halter <micah@balena.io> * Move highlights to nvim_set_hl lua API (#925) Signed-off-by: Micah Halter <micah@balena.io> * Add default to highlight * Refactor autocmds * fmt * Improve performance * Fix bug * Improve matching logic Fixes https://github.com/hrsh7th/nvim-cmp/discussions/954 * Fix format * Improve performance Fix #825 * Fix cmdline redraw bug * Fix event Co-authored-by: hrsh7th <> Co-authored-by: zer09 <zer09@users.noreply.github.com> Co-authored-by: Micah Halter <micah@mehalter.com>
This commit is contained in:
136
plugin/cmp.lua
136
plugin/cmp.lua
@@ -3,126 +3,54 @@ if vim.g.loaded_cmp then
|
||||
end
|
||||
vim.g.loaded_cmp = true
|
||||
|
||||
local api = require "cmp.utils.api"
|
||||
local misc = require('cmp.utils.misc')
|
||||
local api = require('cmp.utils.api')
|
||||
local types = require('cmp.types')
|
||||
local config = require('cmp.config')
|
||||
local highlight = require('cmp.utils.highlight')
|
||||
local autocmd = require('cmp.utils.autocmd')
|
||||
|
||||
-- TODO: https://github.com/neovim/neovim/pull/14661
|
||||
vim.cmd [[
|
||||
augroup ___cmp___
|
||||
autocmd!
|
||||
autocmd InsertEnter * lua require'cmp.utils.autocmd'.emit('InsertEnter')
|
||||
autocmd InsertLeave * lua require'cmp.utils.autocmd'.emit('InsertLeave')
|
||||
autocmd TextChangedI,TextChangedP * lua require'cmp.utils.autocmd'.emit('TextChanged')
|
||||
autocmd CursorMovedI * lua require'cmp.utils.autocmd'.emit('CursorMoved')
|
||||
autocmd CompleteChanged * lua require'cmp.utils.autocmd'.emit('CompleteChanged')
|
||||
autocmd CompleteDone * lua require'cmp.utils.autocmd'.emit('CompleteDone')
|
||||
autocmd ColorScheme * call v:lua.cmp.plugin.colorscheme()
|
||||
autocmd CmdlineEnter * call v:lua.cmp.plugin.cmdline.enter()
|
||||
autocmd CmdwinEnter * call v:lua.cmp.plugin.cmdline.leave() " for entering cmdwin with `<C-f>`
|
||||
augroup END
|
||||
]]
|
||||
|
||||
misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'enter' }, function()
|
||||
if config.is_native_menu() then
|
||||
return
|
||||
end
|
||||
if vim.fn.expand('<afile>') ~= '=' then
|
||||
vim.schedule(function()
|
||||
if api.is_cmdline_mode() then
|
||||
vim.cmd [[
|
||||
augroup cmp-cmdline
|
||||
autocmd!
|
||||
autocmd CmdlineChanged * lua require'cmp.utils.autocmd'.emit('TextChanged')
|
||||
autocmd CmdlineLeave * call v:lua.cmp.plugin.cmdline.leave()
|
||||
augroup END
|
||||
]]
|
||||
require('cmp.utils.autocmd').emit('CmdlineEnter')
|
||||
end
|
||||
end)
|
||||
end
|
||||
end)
|
||||
|
||||
misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'leave' }, function()
|
||||
if vim.fn.expand('<afile>') ~= '=' then
|
||||
vim.cmd [[
|
||||
augroup cmp-cmdline
|
||||
autocmd!
|
||||
augroup END
|
||||
]]
|
||||
require('cmp.utils.autocmd').emit('CmdlineLeave')
|
||||
end
|
||||
end)
|
||||
|
||||
misc.set(_G, { 'cmp', 'plugin', 'colorscheme' }, function()
|
||||
highlight.inherit('CmpItemAbbrDefault', 'Pmenu', {
|
||||
guibg = 'NONE',
|
||||
ctermbg = 'NONE',
|
||||
})
|
||||
highlight.inherit('CmpItemAbbrDeprecatedDefault', 'Comment', {
|
||||
gui = 'NONE',
|
||||
guibg = 'NONE',
|
||||
ctermbg = 'NONE',
|
||||
})
|
||||
highlight.inherit('CmpItemAbbrMatchDefault', 'Pmenu', {
|
||||
gui = 'NONE',
|
||||
guibg = 'NONE',
|
||||
ctermbg = 'NONE',
|
||||
})
|
||||
highlight.inherit('CmpItemAbbrMatchFuzzyDefault', 'Pmenu', {
|
||||
gui = 'NONE',
|
||||
guibg = 'NONE',
|
||||
ctermbg = 'NONE',
|
||||
})
|
||||
highlight.inherit('CmpItemKindDefault', 'Special', {
|
||||
guibg = 'NONE',
|
||||
ctermbg = 'NONE',
|
||||
})
|
||||
highlight.inherit('CmpItemMenuDefault', 'Pmenu', {
|
||||
guibg = 'NONE',
|
||||
ctermbg = 'NONE',
|
||||
})
|
||||
for name in pairs(types.lsp.CompletionItemKind) do
|
||||
if type(name) == 'string' then
|
||||
vim.cmd(([[highlight default link CmpItemKind%sDefault CmpItemKind]]):format(name))
|
||||
end
|
||||
end
|
||||
end)
|
||||
_G.cmp.plugin.colorscheme()
|
||||
|
||||
vim.cmd [[
|
||||
highlight default link CmpItemAbbr CmpItemAbbrDefault
|
||||
highlight default link CmpItemAbbrDeprecated CmpItemAbbrDeprecatedDefault
|
||||
highlight default link CmpItemAbbrMatch CmpItemAbbrMatchDefault
|
||||
highlight default link CmpItemAbbrMatchFuzzy CmpItemAbbrMatchFuzzyDefault
|
||||
highlight default link CmpItemKind CmpItemKindDefault
|
||||
highlight default link CmpItemMenu CmpItemMenuDefault
|
||||
]]
|
||||
|
||||
for name in pairs(types.lsp.CompletionItemKind) do
|
||||
if type(name) == 'string' then
|
||||
local hi = ('CmpItemKind%s'):format(name)
|
||||
if vim.fn.hlexists(hi) ~= 1 then
|
||||
vim.cmd(([[highlight default link %s %sDefault]]):format(hi, hi))
|
||||
end
|
||||
vim.api.nvim_set_hl(0, 'CmpItemAbbr', { link = 'CmpItemAbbrDefault', default = true })
|
||||
vim.api.nvim_set_hl(0, 'CmpItemAbbrDeprecated', { link = 'CmpItemAbbrDeprecatedDefault', default = true })
|
||||
vim.api.nvim_set_hl(0, 'CmpItemAbbrMatch', { link = 'CmpItemAbbrMatchDefault', default = true })
|
||||
vim.api.nvim_set_hl(0, 'CmpItemAbbrMatchFuzzy', { link = 'CmpItemAbbrMatchFuzzyDefault', default = true })
|
||||
vim.api.nvim_set_hl(0, 'CmpItemKind', { link = 'CmpItemKindDefault', default = true })
|
||||
vim.api.nvim_set_hl(0, 'CmpItemMenu', { link = 'CmpItemMenuDefault', default = true })
|
||||
for kind in pairs(types.lsp.CompletionItemKind) do
|
||||
if type(kind) == 'string' then
|
||||
local name = ('CmpItemKind%s'):format(kind)
|
||||
vim.api.nvim_set_hl(0, name, { link = ('%sDefault'):format(name), default = true })
|
||||
end
|
||||
end
|
||||
|
||||
autocmd.subscribe('ColorScheme', function()
|
||||
highlight.inherit('CmpItemAbbrDefault', 'Pmenu', { bg = 'NONE', default = true })
|
||||
highlight.inherit('CmpItemAbbrDeprecatedDefault', 'Comment', { bg = 'NONE', default = true })
|
||||
highlight.inherit('CmpItemAbbrMatchDefault', 'Pmenu', { bg = 'NONE', default = true })
|
||||
highlight.inherit('CmpItemAbbrMatchFuzzyDefault', 'Pmenu', { bg = 'NONE', default = true })
|
||||
highlight.inherit('CmpItemKindDefault', 'Special', { bg = 'NONE', default = true })
|
||||
highlight.inherit('CmpItemMenuDefault', 'Pmenu', { bg = 'NONE', default = true })
|
||||
for name in pairs(types.lsp.CompletionItemKind) do
|
||||
if type(name) == 'string' then
|
||||
vim.api.nvim_set_hl(0, ('CmpItemKind%sDefault'):format(name), { link = 'CmpItemKind', default = true })
|
||||
end
|
||||
end
|
||||
end)
|
||||
autocmd.emit('ColorScheme')
|
||||
|
||||
if vim.on_key then
|
||||
vim.on_key(function(keys)
|
||||
if keys == vim.api.nvim_replace_termcodes('<C-c>', true, true, true) then
|
||||
vim.schedule(function()
|
||||
if not api.is_suitable_mode() then
|
||||
require('cmp.utils.autocmd').emit('InsertLeave')
|
||||
autocmd.emit('InsertLeave')
|
||||
end
|
||||
end)
|
||||
end
|
||||
end, vim.api.nvim_create_namespace('cmp.plugin'))
|
||||
end
|
||||
|
||||
vim.cmd [[command! CmpStatus lua require('cmp').status()]]
|
||||
vim.api.nvim_create_user_command('CmpStatus', function()
|
||||
require('cmp').status()
|
||||
end, { desc = 'Check status of cmp sources' })
|
||||
|
||||
vim.cmd [[doautocmd <nomodeline> User CmpReady]]
|
||||
vim.cmd([[doautocmd <nomodeline> User CmpReady]])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user