From df6734aa018d6feb4d76ba6bda94b1aeac2b378a Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 15 Jun 2022 04:49:16 +0200 Subject: [PATCH] Add Completion Window Options (#901) * Add window.completion.side_padding and window.completion.col_offset * add col_offset and side_padding options to config/window --- doc/cmp.txt | 10 ++++++++++ lua/cmp/config/default.lua | 2 ++ lua/cmp/config/window.lua | 2 ++ lua/cmp/view/custom_entries_view.lua | 10 ++++------ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/doc/cmp.txt b/doc/cmp.txt index 274b48a..fc54809 100644 --- a/doc/cmp.txt +++ b/doc/cmp.txt @@ -560,6 +560,16 @@ window.{completion,documentation}.zindex~ The completion window's zindex. See |nvim_open_win|. + *cmp-config.window.completion.col_offset* +window.completion.col_offset~ + `number` + Offsets the completion window relative to the cursor. + + *cmp-config.window.completion.side_padding* +window.completion.side_padding~ + `number` + The ammount of padding to add on the completion window's sides + *cmp-config.window.documentation.max_width* window.documentation.max_width~ `number` diff --git a/lua/cmp/config/default.lua b/lua/cmp/config/default.lua index 8327980..7516ae8 100644 --- a/lua/cmp/config/default.lua +++ b/lua/cmp/config/default.lua @@ -90,6 +90,8 @@ return function() completion = { border = { '', '', '', '', '', '', '', '' }, winhighlight = 'Normal:Pmenu,FloatBorder:Pmenu,CursorLine:PmenuSel,Search:None', + col_offset = 0, + side_padding = 1, }, documentation = { max_height = math.floor(WIDE_HEIGHT * (WIDE_HEIGHT / vim.o.lines)), diff --git a/lua/cmp/config/window.lua b/lua/cmp/config/window.lua index b6fec0f..be5d67a 100644 --- a/lua/cmp/config/window.lua +++ b/lua/cmp/config/window.lua @@ -6,6 +6,8 @@ window.bordered = function(opts) border = opts.border or 'rounded', winhighlight = opts.winhighlight or 'Normal:Normal,FloatBorder:Normal,CursorLine:Visual,Search:None', zindex = opts.zindex or 1001, + col_offset = opts.col_offset or 0, + side_padding = opts.side_padding or 1 } end diff --git a/lua/cmp/view/custom_entries_view.lua b/lua/cmp/view/custom_entries_view.lua index 8020a9b..d3e97c9 100644 --- a/lua/cmp/view/custom_entries_view.lua +++ b/lua/cmp/view/custom_entries_view.lua @@ -8,8 +8,6 @@ local keymap = require('cmp.utils.keymap') local misc = require('cmp.utils.misc') local api = require('cmp.utils.api') -local SIDE_PADDING = 1 - local DEFAULT_HEIGHT = 10 -- @see https://github.com/vim/vim/blob/master/src/popupmenu.c#L45 ---@class cmp.CustomEntriesView @@ -65,7 +63,7 @@ custom_entries_view.new = function() local e = self.entries[i + 1] if e then local v = e:get_view(self.offset, buf) - local o = SIDE_PADDING + local o = config.get().window.completion.side_padding local a = 0 for _, field in ipairs(fields) do if field == types.cmp.ItemField.Abbr then @@ -200,7 +198,7 @@ custom_entries_view.open = function(self, offset, entries) relative = 'editor', style = 'minimal', row = math.max(0, row), - col = math.max(0, col), + col = math.max(0, col + completion.col_offset), width = width, height = height, border = completion.border, @@ -255,12 +253,12 @@ custom_entries_view.draw = function(self) if e then local view = e:get_view(self.offset, entries_buf) local text = {} - table.insert(text, string.rep(' ', SIDE_PADDING)) + table.insert(text, string.rep(' ', config.get().window.completion.side_padding)) for _, field in ipairs(fields) do table.insert(text, view[field].text) table.insert(text, string.rep(' ', 1 + self.column_width[field] - view[field].width)) end - table.insert(text, string.rep(' ', SIDE_PADDING)) + table.insert(text, string.rep(' ', config.get().window.completion.side_padding)) table.insert(texts, table.concat(text, '')) end end