Skip to content

Commit e1757ae

Browse files
authored
feat(view): add api get_selected_index (#1986)
1 parent 7e348da commit e1757ae

5 files changed

+36
-5
lines changed

lua/cmp/init.lua

+6
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,12 @@ cmp.visible = cmp.sync(function()
8888
return cmp.core.view:visible() or vim.fn.pumvisible() == 1
8989
end)
9090

91+
---Get what number candidates are currently selected.
92+
---If not selected, nil is returned.
93+
cmp.get_selected_index = cmp.sync(function()
94+
return cmp.core.view:get_selected_index()
95+
end)
96+
9197
---Get current selected entry or nil
9298
cmp.get_selected_entry = cmp.sync(function()
9399
return cmp.core.view:get_selected_entry()

lua/cmp/view.lua

+7
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,13 @@ view.scroll_docs = function(self, delta)
211211
self.docs_view:scroll(delta)
212212
end
213213

214+
---Get what number candidates are currently selected.
215+
---If not selected, nil is returned.
216+
---@return integer|nil
217+
view.get_selected_index = function(self)
218+
return self:_get_entries_view():get_selected_index()
219+
end
220+
214221
---Select prev menu item.
215222
---@param option cmp.SelectOption
216223
view.select_next_item = function(self, option)

lua/cmp/view/custom_entries_view.lua

+9-3
Original file line numberDiff line numberDiff line change
@@ -306,9 +306,15 @@ custom_entries_view.info = function(self)
306306
return self.entries_win:info()
307307
end
308308

309+
custom_entries_view.get_selected_index = function(self)
310+
if self:visible() and self.active then
311+
return vim.api.nvim_win_get_cursor(self.entries_win.win)[1]
312+
end
313+
end
314+
309315
custom_entries_view.select_next_item = function(self, option)
310316
if self:visible() then
311-
local cursor = vim.api.nvim_win_get_cursor(self.entries_win.win)[1]
317+
local cursor = self:get_selected_index()
312318
local is_top_down = self:is_direction_top_down()
313319
local last = #self.entries
314320

@@ -345,7 +351,7 @@ end
345351

346352
custom_entries_view.select_prev_item = function(self, option)
347353
if self:visible() then
348-
local cursor = vim.api.nvim_win_get_cursor(self.entries_win.win)[1]
354+
local cursor = self:get_selected_index()
349355
local is_top_down = self:is_direction_top_down()
350356
local last = #self.entries
351357

@@ -402,7 +408,7 @@ end
402408

403409
custom_entries_view.get_selected_entry = function(self)
404410
if self:visible() and self.entries_win:option('cursorline') then
405-
return self.entries[vim.api.nvim_win_get_cursor(self.entries_win.win)[1]]
411+
return self.entries[self:get_selected_index()]
406412
end
407413
end
408414

lua/cmp/view/native_entries_view.lua

+7-1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ native_entries_view.preselect = function(self, index)
116116
end
117117
end
118118

119+
native_entries_view.get_selected_index = function(self)
120+
if self:visible() and (vim.v.completed_item or {}).word then
121+
return vim.fn.complete_info({ 'selected' }).selected
122+
end
123+
end
124+
119125
native_entries_view.select_next_item = function(self, option)
120126
local callback = function()
121127
self.event:emit('change')
@@ -164,7 +170,7 @@ end
164170

165171
native_entries_view.get_selected_entry = function(self)
166172
if self:visible() then
167-
local idx = vim.fn.complete_info({ 'selected' }).selected
173+
local idx = self:get_selected_index()
168174
if idx > -1 then
169175
return self.entries[math.max(0, idx) + 1]
170176
end

lua/cmp/view/wildmenu_entries_view.lua

+7-1
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,12 @@ wildmenu_entries_view.info = function(self)
179179
return self.entries_win:info()
180180
end
181181

182+
wildmenu_entries_view.get_selected_index = function(self)
183+
if self:visible() and self.active then
184+
return self.selected_index
185+
end
186+
end
187+
182188
wildmenu_entries_view.select_next_item = function(self, option)
183189
if self:visible() then
184190
local cursor
@@ -224,7 +230,7 @@ end
224230

225231
wildmenu_entries_view.get_selected_entry = function(self)
226232
if self:visible() and self.active then
227-
return self.entries[self.selected_index]
233+
return self.entries[self:get_selected_index()]
228234
end
229235
end
230236

0 commit comments

Comments
 (0)