Mercurial > dotfiles
changeset 336:7a8b66395d69
Add floating terminal to be toggled via c-z
author | zegervdv <zegervdv@me.com> |
---|---|
date | Thu, 21 Jan 2021 09:17:28 +0100 |
parents | cd9a31235699 |
children | e89bdbc1a2dd |
files | dot_config/nvim/config.lua dot_config/nvim/lua/terminal.lua |
diffstat | 2 files changed, 94 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/dot_config/nvim/config.lua Sun Jan 17 10:48:17 2021 +0100 +++ b/dot_config/nvim/config.lua Thu Jan 21 09:17:28 2021 +0100 @@ -112,6 +112,20 @@ end) end +-- This came from https://github.com/tjdevries/config_manager/blob/master/xdg_config/nvim/lua/lsp_config.lua +local mapper = function(mode, key, result, noremap) + if noremap == nil then + noremap = true + end + vim.fn.nvim_buf_set_keymap(0, mode, key, result, {noremap=noremap, silent=true}) +end + +-- Terminal +mapper('n', '<c-z>', '<cmd>lua require"terminal".toggle()<CR>') +-- mapper('t', '<c-z>', '<C-\\><C-n><cmd>lua require"terminal".toggle()<CR>') +vim.cmd "tnoremap <silent> <c-z> <c-\\><c-n>:lua require'terminal'.toggle()<CR>" + +-- LSP and Treesitter config local lsp = require'lspconfig' local lsputil = require'lspconfig.util' @@ -246,13 +260,6 @@ matching_strategy_list = {'exact', 'fuzzy'}, chain_complete_list = chain_complete_list, }) - -- This came from https://github.com/tjdevries/config_manager/blob/master/xdg_config/nvim/lua/lsp_config.lua - local mapper = function(mode, key, result, noremap) - if noremap == nil then - noremap = true - end - vim.fn.nvim_buf_set_keymap(0, mode, key, result, {noremap=noremap, silent=true}) - end mapper('n', '<CR>', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics({show_header=false})<CR>') mapper('n', 'gd', '<cmd>lua vim.lsp.buf.declaration()<CR>')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dot_config/nvim/lua/terminal.lua Thu Jan 21 09:17:28 2021 +0100 @@ -0,0 +1,80 @@ +-- Copied from: https://github.com/kutsan/dotfiles/blob/b2046a6c0bcc754fc381351119c14c374721fd4d/.config/nvim/lua/kutsan/mappings/normal/terminal.lua + +local api = vim.api +local fn = vim.fn + +local terminal = { + buf = nil, + win = nil, + pid = nil +} + +terminal.open = function () + -- Create buffer. + local buf = nil + + if terminal.buf and api.nvim_buf_is_loaded(terminal.buf) then + buf = terminal.buf + else + buf = api.nvim_create_buf(false, true) + end + + -- Create window. + local width = math.ceil(vim.o.columns * 0.8) + local height = math.ceil(vim.o.lines * 0.9) + + local win = api.nvim_open_win(buf, true, { + relative = 'editor', + style = 'minimal', + width = width, + height = height, + col = math.ceil((vim.o.columns - width) / 2), + row = math.ceil((vim.o.lines - height) / 2 - 1), + }) + api.nvim_win_set_option(win, 'winhighlight', 'Normal:CursorLine') + + -- Launch terminal. + if not terminal.buf then + terminal.pid = fn.termopen(string.format('%s --login', os.getenv('SHELL'))) + end + + vim.cmd('startinsert') + vim.cmd("autocmd! TermClose <buffer> lua require('terminal').close(true)") + + -- Save current handles. + terminal.win = win + terminal.buf = buf +end + +terminal.close = function (force) + if not terminal.win then + return + end + + if api.nvim_win_is_valid(terminal.win) then + api.nvim_win_close(terminal.win, false) + terminal.win = nil + end + + -- Force close upon terminal exit. + if force then + if api.nvim_buf_is_loaded(terminal.buf) then + api.nvim_buf_delete(terminal.buf, { force = true }) + end + + fn.jobstop(terminal.pid) + + terminal.buf = nil + terminal.pid = nil + end +end + +terminal.toggle = function () + if not terminal.win then + terminal.open() + else + terminal.close() + end +end + +return terminal