commit 119c5931779aa6ee2e6f9bd3aa8fbe089399e0a8
parent d4206b98b1b6abec50bba8e260236ac1ce978701
Author: Tomas Nemec <owl@gtms.dev>
Date: Fri, 30 Jun 2023 02:08:22 +0200
update: copilot
Diffstat:
7 files changed, 104 insertions(+), 57 deletions(-)
diff --git a/after/plugin/cmp.lua b/after/plugin/cmp.lua
@@ -44,12 +44,19 @@ local cmp = require('cmp')
-- })
-- cmp.register_source('exe', require('tms.p.cmp.exe_source').new())
-local function doOrOpen(fn, t)
- return function(_)
+local function close()
+ return function(fallback)
+ if pcall(require, 'copilot') then
+ local copilot = require('copilot.suggestion')
+ if copilot.is_visible() then
+ fallback = copilot.dismiss
+ end
+ end
+
if cmp.visible() then
- fn(t)
+ cmp.abort()
else
- cmp.complete()
+ fallback()
end
end
end
@@ -65,7 +72,7 @@ cmp.setup({
require('luasnip').lsp_expand(args.body)
end,
},
- view = { entries = { name = 'custom' } },
+ -- view = { entries = { name = 'custom' } },
formatting = {
format = function(entry, vim_item)
-- Kind icons
@@ -83,13 +90,13 @@ cmp.setup({
end,
},
mapping = {
- ['<c-e>'] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close() }),
+ ['<c-e>'] = cmp.mapping({ i = close(), c = cmp.mapping.close() }),
['<c-y>'] = cmp.mapping.confirm({ select = true }),
- ['<c-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
+ ['<c-u>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
['<c-d>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
- -- ['<c-space>'] = cmp.mapping { i = doOrOpen(cmp.confirm, { select = true }) },
- ['<c-p>'] = cmp.mapping({ i = doOrOpen(cmp.select_prev_item, { behavior = cmp.SelectBehavior.Select }) }),
- ['<c-n>'] = cmp.mapping({ i = doOrOpen(cmp.select_next_item, { behavior = cmp.SelectBehavior.Select }) }),
+ ['<c-p>'] = cmp.mapping({ i = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Select }) }),
+ ['<c-n>'] = cmp.mapping({ i = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Select }) }),
+ ['<c-space>'] = cmp.mapping({ i = cmp.mapping.complete() }),
},
sources = cmp.config.sources({
{ name = 'nvim_lsp' },
@@ -120,7 +127,7 @@ cmp.setup({
-- compare.order,
-- },
-- },
- experimental = { ghost_text = true },
+ experimental = { ghost_text = false },
})
-- cmp.setup.cmdline('/', {
diff --git a/after/plugin/copilot.lua b/after/plugin/copilot.lua
@@ -0,0 +1,31 @@
+if not pcall(require, 'copilot') then
+ return
+end
+
+local copilot = require('copilot')
+copilot.setup({ -- -
+ suggestion = {
+ enabled = true,
+ auto_trigger = true,
+ keymap = { next = '<c-n>', prev = '<c-p>', accept = '<c-y>', dismiss = '<c-e>' },
+ },
+})
+
+local toggle = require('tms.toggle')
+toggle.fn('p', require('copilot.suggestion').toggle_auto_trigger, 'copilot')
+
+if pcall(require, 'cmp') then
+ local cmp = require('cmp')
+ cmp.event:on('menu_opened', function()
+ vim.b.copilot_suggestion_hidden = true
+ if require('copilot.suggestion').is_visible() then
+ require('copilot.suggestion').dismiss()
+ end
+ end)
+ cmp.event:on('menu_closed', function()
+ vim.b.copilot_suggestion_hidden = false
+ if not require('copilot.suggestion').is_visible() then
+ require('copilot.suggestion').next()
+ end
+ end)
+end
diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua
@@ -30,8 +30,9 @@ local function keymap(client, buf)
vim.keymap.set('n', 'gm', lb.implementation, opt('LSP Implementation'))
end
if client.supports_method('textDocument/signatureHelp') then
- vim.keymap.set('n', '<c-p>', lb.signature_help, opt('LSP Signature Help'))
- vim.keymap.set('i', '<c-p>', lb.signature_help, opt('LSP Signature Help'))
+ -- TODO(tms) 29.06.23:
+ -- vim.keymap.set('n', '<c-p>', lb.signature_help, opt('LSP Signature Help'))
+ -- vim.keymap.set('i', '<c-p>', lb.signature_help, opt('LSP Signature Help'))
end
if client.supports_method('textDocument/references') then
vim.keymap.set('n', 'gr', lb.references, opt('LSP References'))
diff --git a/lua/plugins.lua b/lua/plugins.lua
@@ -29,8 +29,8 @@ return packer.startup {
use 'tpope/vim-repeat'
use 'kylechui/nvim-surround'
use 'chaoren/vim-wordmotion' -- word counts with _,.,-,...
- use 'romgrk/equal.operator' -- equal text object `lefthand = righthand`
- use 'godlygeek/tabular' -- align
+ use 'romgrk/equal.operator' -- equal text object `lefthand = righthand`
+ use 'godlygeek/tabular' -- align
-- use 'windwp/nvim-autopairs'
use 'numToStr/Comment.nvim'
use 'mbbill/undotree'
@@ -97,6 +97,7 @@ return packer.startup {
'hrsh7th/cmp-calc',
'hrsh7th/cmp-cmdline',
'hrsh7th/cmp-nvim-lsp',
+ 'zbirenbaum/copilot-cmp',
'hrsh7th/cmp-nvim-lsp-signature-help',
'hrsh7th/cmp-nvim-lua',
'hrsh7th/cmp-path',
@@ -123,6 +124,8 @@ return packer.startup {
use { 'jose-elias-alvarez/null-ls.nvim', requires = { 'nvim-lua/plenary.nvim' } }
use 'lvimuser/lsp-inlayhints.nvim'
+ use 'zbirenbaum/copilot.lua'
+
-- dap
use 'mfussenegger/nvim-dap'
use 'leoluz/nvim-dap-go'
diff --git a/lua/tms/p/telescope.lua b/lua/tms/p/telescope.lua
@@ -35,15 +35,15 @@ function L.dd_large_noprev(opts)
return themes.get_dropdown(opts)
end
-M.mail_address = function()
+function M.mail_address()
pickers.new {
results_title = 'Adresses',
- finder = finders.new_oneshot_job({ 'goobook', 'query', '.*' }),
+ finder = finders.new_oneshot_job({ 'mates', 'email-query' }),
sorter = sorters.get_fuzzy_file(),
attach_mappings = function(_)
action_set.select:replace(function(prompt_bufnr, _)
local entry = action_state.get_selected_entry()
- local mail = entry.value:match('(%S+)')
+ local mail = entry.value:match('<(%S+)>')
actions.close(prompt_bufnr)
vim.fn.setreg('+', mail)
vim.fn.setreg('*', mail)
diff --git a/lua/tms/toggle.lua b/lua/tms/toggle.lua
@@ -0,0 +1,33 @@
+local M = {}
+
+function M.option(letter, option, mode)
+ vim.keymap.set('n', 'yo' .. letter, function()
+ local scope
+ if mode == 'local' then
+ scope = vim.opt_local
+ elseif mode == 'global' then
+ scope = vim.opt_global
+ else
+ scope = vim.opt
+ end
+
+ local val = scope[option]:get()
+ if type(val) == 'boolean' then
+ scope[option] = not val
+ elseif type(val) == 'number' then
+ if val == 1 then
+ scope[option] = 0
+ else
+ scope[option] = 1
+ end
+ end
+ end, { desc = 'Toggle ' .. option })
+end
+
+function M.fn(letter, fn, desc)
+ vim.keymap.set('n', 'yo' .. letter, function()
+ fn()
+ end, { desc = 'Toggle ' .. desc })
+end
+
+return M
diff --git a/plugin/unimpaired.lua b/plugin/unimpaired.lua
@@ -24,42 +24,14 @@ vim.keymap.set('n', '<c-h><c-s>', '[s')
vim.keymap.set('n', '<c-l>s', ']S')
vim.keymap.set('n', '<c-h>s', '[S')
-local toggle = function(op, mode)
- local scope
- if mode == 'local' then
- scope = vim.opt_local
- elseif mode == 'global' then
- scope = vim.opt_global
- else
- scope = vim.opt
- end
-
- local val = scope[op]:get()
- if type(val) == 'boolean' then
- scope[op] = not val
- elseif type(val) == 'number' then
- if val == 1 then
- scope[op] = 0
- else
- scope[op] = 1
- end
- end
-
-end
-
-local map_toggle = function(letter, option, mode)
- vim.keymap.set('n', 'yo' .. letter, function()
- toggle(option, mode)
- end)
-end
-
-map_toggle('c', 'cursorline', 'local')
-map_toggle('u', 'cursorcolumn', 'local')
-map_toggle('h', 'hlsearch', 'global')
-map_toggle('i', 'ignorecase', 'global')
-map_toggle('l', 'list', 'local')
-map_toggle('n', 'number', 'local')
-map_toggle('r', 'relativenumber', 'local')
-map_toggle('s', 'spell', 'local')
-map_toggle('w', 'wrap', 'local')
-map_toggle('d', 'cmdheight', 'global')
+local toggle = require('tms.toggle')
+toggle.option('c', 'cursorline', 'local')
+toggle.option('u', 'cursorcolumn', 'local')
+toggle.option('h', 'hlsearch', 'global')
+toggle.option('i', 'ignorecase', 'global')
+toggle.option('l', 'list', 'local')
+toggle.option('n', 'number', 'local')
+toggle.option('r', 'relativenumber', 'local')
+toggle.option('s', 'spell', 'local')
+toggle.option('w', 'wrap', 'local')
+toggle.option('d', 'cmdheight', 'global')