local compare = require('cmp.config.compare') local types = require('cmp.types') local WIDE_HEIGHT = 40 ---@return cmp.ConfigSchema return function() return { enabled = function() local disabled = false disabled = disabled or (vim.api.nvim_buf_get_option(0, 'buftype') == 'prompt') disabled = disabled or (vim.fn.reg_recording() ~= '') disabled = disabled or (vim.fn.reg_executing() ~= '') return not disabled end, performance = { debounce = 60, throttle = 30, fetching_timeout = 200, }, preselect = types.cmp.PreselectMode.Item, mapping = {}, snippet = { expand = function() error('snippet engine is not configured.') end, }, completion = { autocomplete = { types.cmp.TriggerEvent.TextChanged, }, completeopt = 'menu,menuone,noselect', keyword_pattern = [[\%(-\?\d\+\%(\.\d\+\)\?\|\h\w*\%(-\w*\)*\)]], keyword_length = 1, }, formatting = { fields = { 'abbr', 'kind', 'menu' }, format = function(_, vim_item) return vim_item end, }, matching = { disallow_fuzzy_matching = false, disallow_partial_matching = false, disallow_prefix_unmatching = false, }, sorting = { priority_weight = 2, comparators = { compare.offset, compare.exact, -- compare.scopes, compare.score, compare.recently_used, compare.locality, compare.kind, compare.sort_text, compare.length, compare.order, }, }, sources = {}, confirmation = { default_behavior = types.cmp.ConfirmBehavior.Insert, get_commit_characters = function(commit_characters) return commit_characters end, }, event = {}, experimental = { ghost_text = false, }, view = { entries = { name = 'custom', selection_order = 'top_down' }, }, window = { 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)), max_width = math.floor((WIDE_HEIGHT * 2) * (vim.o.columns / (WIDE_HEIGHT * 2 * 16 / 9))), border = { '', '', '', ' ', '', '', '', ' ' }, winhighlight = 'FloatBorder:NormalFloat', }, }, } end