From b77413ff8f59f380612074f0c9bd49093d8db695 Mon Sep 17 00:00:00 2001 From: Mike Vink Date: Sun, 19 Jan 2025 13:52:52 +0100 Subject: Squashed 'mut/neovim/pack/plugins/start/blink.cmp/' content from commit 1cc3b1a git-subtree-dir: mut/neovim/pack/plugins/start/blink.cmp git-subtree-split: 1cc3b1a908fbcfd15451c4772759549724f38524 --- lua/blink/cmp/lib/event_emitter.lua | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 lua/blink/cmp/lib/event_emitter.lua (limited to 'lua/blink/cmp/lib/event_emitter.lua') diff --git a/lua/blink/cmp/lib/event_emitter.lua b/lua/blink/cmp/lib/event_emitter.lua new file mode 100644 index 0000000..d3939cb --- /dev/null +++ b/lua/blink/cmp/lib/event_emitter.lua @@ -0,0 +1,37 @@ +--- @class blink.cmp.EventEmitter : { event: string, autocmd?: string, listeners: table, new: ( fun(event: string, autocmd: string): blink.cmp.EventEmitter ), on: ( fun(self: blink.cmp.EventEmitter, callback: fun(data: T)) ), off: ( fun(self: blink.cmp.EventEmitter, callback: fun(data: T)) ), emit: ( fun(self: blink.cmp.EventEmitter, data?: table) ) }; +--- TODO: is there a better syntax for this? + +local event_emitter = {} + +--- @param event string +--- @param autocmd? string +function event_emitter.new(event, autocmd) + local self = setmetatable({}, { __index = event_emitter }) + self.event = event + self.autocmd = autocmd + self.listeners = {} + return self +end + +function event_emitter:on(callback) table.insert(self.listeners, callback) end + +function event_emitter:off(callback) + for idx, cb in ipairs(self.listeners) do + if cb == callback then table.remove(self.listeners, idx) end + end +end + +function event_emitter:emit(data) + data = data or {} + data.event = self.event + for _, callback in ipairs(self.listeners) do + callback(data) + end + if self.autocmd then + require('blink.cmp.lib.utils').schedule_if_needed( + function() vim.api.nvim_exec_autocmds('User', { pattern = self.autocmd, modeline = false, data = data }) end + ) + end +end + +return event_emitter -- cgit v1.2.3