From 29ad715924eb8fafa8cd042b1a9eb66b03db0d0d Mon Sep 17 00:00:00 2001 From: hrsh7th Date: Tue, 17 Aug 2021 01:10:58 +0900 Subject: [PATCH] Update README.md --- README.md | 32 ++++++++++++++++++++++++++++++++ lua/cmp/mapping.lua | 9 ++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6136e72..214d771 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,8 @@ cmp.setup { ### mapping (type: table) +_TODO: This API is not stable yet. It can be changed with no announcement._ + Define mappings with `cmp.mapping` helper. The `cmp.mapping` helper has the below functions. @@ -133,6 +135,36 @@ The `cmp.mapping` helper has the below functions. - *cmp.mapping.prev_item()* - *cmp.mapping.scroll(delta = number)* +You can use ``and `` for navigating menu. + +```lua +-- This is just an example of LusSnip integration. You have to adjust it yourself. +local luasnip = require'luasnip' +local cmp = require'cmp' +cmp.setup { + mapping = { + [''] = cmp.mapping.mode({ 'i', 's' }, function(core, fallback) + if vim.fn.pumvisible() == 1 then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n') + elseif luasnip.expand_or_jumpable() then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes('luasnip-expand-or-jump', true, true, true), '') + else + fallback() + end + end), + [''] = cmp.mapping.mode({ 'i', 's' }, function(core, fallback) + if vim.fn.pumvisible() == 1 then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n') + elseif luasnip.jumpable(-1) then + vim.fn.feedkeys(vim.api.nvim_replace_termcodes('luasnip-jump-prev', true, true, true), '') + else + fallback() + end + end) + } +} +``` + ### completion.autocomplete (type: cmp.TriggerEvent[]) Which events should trigger `autocompletion`. diff --git a/lua/cmp/mapping.lua b/lua/cmp/mapping.lua index 465f250..3525734 100644 --- a/lua/cmp/mapping.lua +++ b/lua/cmp/mapping.lua @@ -3,8 +3,15 @@ local types = require('cmp.types') local mapping = {} mapping.mode = function(modes, action) + if type(action) == 'table' then + if type(action.action) == 'function' then + action = action.action + else + error('`action` must be function or result of `cmp.mapping.mode`.') + end + end return setmetatable({ - modes = modes or { 'i' }, + modes = modes, action = action, }, { __call = function(_, ...)