Skip to content

Commit e015e47

Browse files
authored
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
1 parent 0767bf9 commit e015e47

File tree

2 files changed

+115
-39
lines changed

2 files changed

+115
-39
lines changed

lua/cmp/autocmds.lua

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
local M = {}
2+
local emit = require('cmp.utils.autocmd').emit
3+
4+
function M.autocmd()
5+
local ___cmp___ = vim.api.nvim_create_augroup('___cmp___', { clear = true })
6+
vim.api.nvim_create_autocmd('InsertEnter', {
7+
group = ___cmp___,
8+
callback = function()
9+
emit('InsertEnter')
10+
end,
11+
desc = 'nvim-cmp: emits autocmd event for InsertEnter',
12+
})
13+
14+
vim.api.nvim_create_autocmd('InsertLeave', {
15+
group = ___cmp___,
16+
callback = function()
17+
emit('InsertLeave')
18+
end,
19+
desc = 'nvim-cmp: emits autocmd event for InsertLeave',
20+
})
21+
22+
vim.api.nvim_create_autocmd({
23+
'TextChangedI',
24+
'TextChangedP',
25+
}, {
26+
27+
group = ___cmp___,
28+
callback = function()
29+
emit('TextChanged')
30+
end,
31+
desc = 'nvim-cmp: emits autocmd event for TextChangedI and TextChangedP',
32+
})
33+
34+
vim.api.nvim_create_autocmd('CursorMovedI', {
35+
group = ___cmp___,
36+
callback = function()
37+
emit('CursorMoved')
38+
end,
39+
desc = 'nvim-cmp: emits autocmd event for CursorMovedI',
40+
})
41+
42+
vim.api.nvim_create_autocmd('CompleteChanged', {
43+
group = ___cmp___,
44+
callback = function()
45+
emit('CompleteChanged')
46+
end,
47+
desc = 'nvim-cmp: emits autocmd event for CompleteChanged',
48+
})
49+
50+
vim.api.nvim_create_autocmd('CompleteDone', {
51+
group = ___cmp___,
52+
callback = function()
53+
emit('CompleteDone')
54+
end,
55+
desc = 'nvim-cmp: emits autocmd event for CompleteDone',
56+
})
57+
58+
vim.api.nvim_create_autocmd('ColorScheme', {
59+
group = ___cmp___,
60+
callback = _G.cmp.plugin.colorscheme,
61+
desc = 'nvim-cmp: calling _G.cmp.plugin.colorscheme on ColorScheme event',
62+
})
63+
64+
-- for entering cmdwin with `<C-f>`
65+
vim.api.nvim_create_autocmd('CmdlineEnter', {
66+
group = ___cmp___,
67+
callback = _G.cmp.plugin.cmdline.enter,
68+
desc = 'nvim-cmp: calling _G.cmp.plugin.cmdline.enter on CmdlineEnter event',
69+
})
70+
71+
vim.api.nvim_create_autocmd('CmdwinEnter', {
72+
group = ___cmp___,
73+
callback = _G.cmp.plugin.cmdline.leave,
74+
desc = 'nvim-cmp: calling _G.cmp.plugin.cmdline.leave on CmdwinEnter',
75+
})
76+
end
77+
78+
function M.cmdline_mode()
79+
local cmp_cmdline = vim.api.nvim_create_augroup('cmp-cmdline', { clear = true })
80+
vim.api.nvim_create_autocmd('CmdlineChanged', {
81+
group = cmp_cmdline,
82+
callback = function()
83+
emit('TextChanged')
84+
end,
85+
desc = 'nvim-cmp: emits autocmd TextChanged event on CmdlineChanged',
86+
})
87+
88+
vim.api.nvim_create_autocmd('CmdlineLeave', {
89+
group = cmp_cmdline,
90+
callback = _G.cmp.plugin.cmdline.leave,
91+
desc = 'nvim-cmp: calling _G.cmp.plugin.cmdline.leave on CmdlineLeave event',
92+
})
93+
end
94+
95+
return M

plugin/cmp.lua

+20-39
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,24 @@ if vim.g.loaded_cmp then
33
end
44
vim.g.loaded_cmp = true
55

6-
local api = require "cmp.utils.api"
6+
local api = require('cmp.utils.api')
77
local misc = require('cmp.utils.misc')
88
local types = require('cmp.types')
99
local config = require('cmp.config')
1010
local highlight = require('cmp.utils.highlight')
11+
local emit = require('cmp.utils.autocmd').emit
12+
local autocmds = require('cmp.autocmds')
1113

12-
-- TODO: https://github.com/neovim/neovim/pull/14661
13-
vim.cmd [[
14-
augroup ___cmp___
15-
autocmd!
16-
autocmd InsertEnter * lua require'cmp.utils.autocmd'.emit('InsertEnter')
17-
autocmd InsertLeave * lua require'cmp.utils.autocmd'.emit('InsertLeave')
18-
autocmd TextChangedI,TextChangedP * lua require'cmp.utils.autocmd'.emit('TextChanged')
19-
autocmd CursorMovedI * lua require'cmp.utils.autocmd'.emit('CursorMoved')
20-
autocmd CompleteChanged * lua require'cmp.utils.autocmd'.emit('CompleteChanged')
21-
autocmd CompleteDone * lua require'cmp.utils.autocmd'.emit('CompleteDone')
22-
autocmd ColorScheme * call v:lua.cmp.plugin.colorscheme()
23-
autocmd CmdlineEnter * call v:lua.cmp.plugin.cmdline.enter()
24-
autocmd CmdwinEnter * call v:lua.cmp.plugin.cmdline.leave() " for entering cmdwin with `<C-f>`
25-
augroup END
26-
]]
14+
misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'leave' }, function()
15+
if vim.fn.expand('<afile>') ~= '=' then
16+
vim.cmd([[
17+
augroup cmp-cmdline
18+
autocmd!
19+
augroup END
20+
]])
21+
emit('CmdlineLeave')
22+
end
23+
end)
2724

2825
misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'enter' }, function()
2926
if config.is_native_menu() then
@@ -32,30 +29,13 @@ misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'enter' }, function()
3229
if vim.fn.expand('<afile>') ~= '=' then
3330
vim.schedule(function()
3431
if api.is_cmdline_mode() then
35-
vim.cmd [[
36-
augroup cmp-cmdline
37-
autocmd!
38-
autocmd CmdlineChanged * lua require'cmp.utils.autocmd'.emit('TextChanged')
39-
autocmd CmdlineLeave * call v:lua.cmp.plugin.cmdline.leave()
40-
augroup END
41-
]]
42-
require('cmp.utils.autocmd').emit('CmdlineEnter')
32+
autocmds.cmdline_mode()
33+
emit('CmdlineEnter')
4334
end
4435
end)
4536
end
4637
end)
4738

48-
misc.set(_G, { 'cmp', 'plugin', 'cmdline', 'leave' }, function()
49-
if vim.fn.expand('<afile>') ~= '=' then
50-
vim.cmd [[
51-
augroup cmp-cmdline
52-
autocmd!
53-
augroup END
54-
]]
55-
require('cmp.utils.autocmd').emit('CmdlineLeave')
56-
end
57-
end)
58-
5939
misc.set(_G, { 'cmp', 'plugin', 'colorscheme' }, function()
6040
highlight.inherit('CmpItemAbbrDefault', 'Pmenu', {
6141
guibg = 'NONE',
@@ -92,14 +72,14 @@ misc.set(_G, { 'cmp', 'plugin', 'colorscheme' }, function()
9272
end)
9373
_G.cmp.plugin.colorscheme()
9474

95-
vim.cmd [[
75+
vim.cmd([[
9676
highlight default link CmpItemAbbr CmpItemAbbrDefault
9777
highlight default link CmpItemAbbrDeprecated CmpItemAbbrDeprecatedDefault
9878
highlight default link CmpItemAbbrMatch CmpItemAbbrMatchDefault
9979
highlight default link CmpItemAbbrMatchFuzzy CmpItemAbbrMatchFuzzyDefault
10080
highlight default link CmpItemKind CmpItemKindDefault
10181
highlight default link CmpItemMenu CmpItemMenuDefault
102-
]]
82+
]])
10383

10484
for name in pairs(types.lsp.CompletionItemKind) do
10585
if type(name) == 'string' then
@@ -122,7 +102,8 @@ if vim.on_key then
122102
end, vim.api.nvim_create_namespace('cmp.plugin'))
123103
end
124104

125-
vim.cmd [[command! CmpStatus lua require('cmp').status()]]
105+
vim.cmd([[command! CmpStatus lua require('cmp').status()]])
126106

127-
vim.cmd [[doautocmd <nomodeline> User CmpReady]]
107+
vim.cmd([[doautocmd <nomodeline> User CmpReady]])
128108

109+
autocmds.autocmd()

0 commit comments

Comments
 (0)