From 8cab7889766d715b1107b9967a4077568c41ee2a Mon Sep 17 00:00:00 2001 From: tzachar Date: Fri, 24 Jun 2022 06:35:47 +0300 Subject: [PATCH] add events: view_opened and view_closed (#965) * add events: view_opened and view_closed * fix typos * rename view -> menu --- doc/cmp.txt | 4 ++++ lua/cmp/core.lua | 8 +++++--- lua/cmp/view.lua | 9 +++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/doc/cmp.txt b/doc/cmp.txt index fc54809..831c43b 100644 --- a/doc/cmp.txt +++ b/doc/cmp.txt @@ -222,6 +222,10 @@ NOTE: `lua require('cmp').complete()` can be used to call these functio - `complete_done`: emit after current completion is done. - `confirm_done`: emit after confirmation is done. + - `menu_opened`: emit after opening a new completion menu. Called with a table holding a key + named `window`, pointing to the completion menu implementation. + - `menu_closed`: emit after completion menu is closed. Called with a table holding a key + named `window`, pointing to the completion menu implementation. ============================================================================== Mapping *cmp-mapping* diff --git a/lua/cmp/core.lua b/lua/cmp/core.lua index 81638b6..196b25e 100644 --- a/lua/cmp/core.lua +++ b/lua/cmp/core.lua @@ -34,9 +34,11 @@ core.new = function() self.view.event:on('keymap', function(...) self:on_keymap(...) end) - self.view.event:on('complete_done', function(evt) - self.event:emit('complete_done', evt) - end) + for _, event_name in ipairs({ 'complete_done', 'menu_opened', 'menu_closed' }) do + self.view.event:on(event_name, function(evt) + self.event:emit(event_name, evt) + end) + end return self end diff --git a/lua/cmp/view.lua b/lua/cmp/view.lua index 981378b..6eb00f5 100644 --- a/lua/cmp/view.lua +++ b/lua/cmp/view.lua @@ -108,6 +108,9 @@ view.open = function(self, ctx, sources) -- open if #entries > 0 then self:_get_entries_view():open(offset, entries) + self.event:emit('menu_opened', { + window = self:_get_entries_view(), + }) break end end @@ -128,6 +131,9 @@ view.close = function(self) self:_get_entries_view():close() self.docs_view:close() self.ghost_text_view:hide() + self.event:emit('menu_closed', { + window = self:_get_entries_view(), + }) end ---Abort menu @@ -135,6 +141,9 @@ view.abort = function(self) self:_get_entries_view():abort() self.docs_view:close() self.ghost_text_view:hide() + self.event:emit('menu_closed', { + window = self:_get_entries_view(), + }) end ---Return the view is visible or not.