From d4126dc480a17d92eb4d4361a4e34349f7b0b2ea Mon Sep 17 00:00:00 2001 From: Martin Larsson Date: Sun, 26 May 2024 23:10:44 +0200 Subject: [PATCH] Add a sticky terminal panel to the bottom, remove old terminal from lspsaga --- home/.config/nvim/init.lua | 3 ++ home/.config/nvim/lua/keymaps.lua | 6 --- home/.config/nvim/lua/plugs/lspsaga.lua | 3 -- home/.config/nvim/lua/terminal.lua | 52 +++++++++++++++++++++++++ home/.config/nvim/lua/utils.lua | 4 ++ 5 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 home/.config/nvim/lua/terminal.lua diff --git a/home/.config/nvim/init.lua b/home/.config/nvim/init.lua index 28999d7..fa5e6ce 100644 --- a/home/.config/nvim/init.lua +++ b/home/.config/nvim/init.lua @@ -28,5 +28,8 @@ require("lazy_init") -- Initialize plugins, add a plugin by creating a new file in the plugins dir require("lazy").setup("plugs") +-- Initialize the sticky terminal window at the bottom +require("terminal").setup() + -- See ":help vim.highlight.on_yank()" setup_yank_highlight() diff --git a/home/.config/nvim/lua/keymaps.lua b/home/.config/nvim/lua/keymaps.lua index afa6d5d..db6a066 100644 --- a/home/.config/nvim/lua/keymaps.lua +++ b/home/.config/nvim/lua/keymaps.lua @@ -118,11 +118,5 @@ require("utils").add_keymaps({ [""] = { cmd = "", }, - [""] = { - cmd = function() - local win = vim.api.nvim_get_current_win() - vim.api.nvim_win_close(win, true) - end, - } }, }) diff --git a/home/.config/nvim/lua/plugs/lspsaga.lua b/home/.config/nvim/lua/plugs/lspsaga.lua index 56a04d0..078450e 100644 --- a/home/.config/nvim/lua/plugs/lspsaga.lua +++ b/home/.config/nvim/lua/plugs/lspsaga.lua @@ -46,9 +46,6 @@ return { ["rn"] = { cmd = ":Lspsaga rename" }, - ["h"] = { - cmd = ":Lspsaga term_toggle" - }, ["gr"] = { cmd = ":Lspsaga finder" }, diff --git a/home/.config/nvim/lua/terminal.lua b/home/.config/nvim/lua/terminal.lua new file mode 100644 index 0000000..deb338b --- /dev/null +++ b/home/.config/nvim/lua/terminal.lua @@ -0,0 +1,52 @@ +local utils = require("utils") + +local M = {} + +local terminal_window = nil +local terminal_bufnr = nil + +local function open_terminal_window() + if terminal_bufnr and vim.api.nvim_buf_is_valid(terminal_bufnr) and utils.is_buf_buftype(terminal_bufnr, "terminal") then + vim.cmd("botright split") + terminal_window = vim.api.nvim_get_current_win() + vim.api.nvim_win_set_buf(terminal_window, terminal_bufnr) + else + vim.cmd("botright split term://zsh") + terminal_window = vim.api.nvim_get_current_win() + terminal_bufnr = vim.api.nvim_get_current_buf() + end +end + +local function toggle_terminal() + if terminal_window and vim.api.nvim_win_is_valid(terminal_window) then + vim.api.nvim_win_close(terminal_window, true) + terminal_window = nil + return + end + + open_terminal_window() + + local term_height = vim.api.nvim_get_option("lines") + local height_percentage = 0.225 + local min_height = 15 + local max_height = 25 + local height = utils.calculate_split_size(term_height, height_percentage, min_height, max_height) + + vim.api.nvim_win_set_height(terminal_window, height) + vim.api.nvim_win_set_option(terminal_window, "winfixheight", true) + vim.api.nvim_win_set_option(terminal_window, "winhighlight", "Normal:Utility,FloatBorder:Utility") + utils.lock_buf_to_window(terminal_window, terminal_bufnr, "terminal") + vim.api.nvim_command("startinsert") +end + +function M.setup() + utils.add_keymaps({ + n = { + ["h"] = { + cmd = toggle_terminal + } + } + }) +end + +return M diff --git a/home/.config/nvim/lua/utils.lua b/home/.config/nvim/lua/utils.lua index 901a41a..0860db5 100644 --- a/home/.config/nvim/lua/utils.lua +++ b/home/.config/nvim/lua/utils.lua @@ -12,6 +12,10 @@ function M.is_buf_filetype(bufnr, filetype) return vim.api.nvim_buf_get_option(bufnr, "filetype") == filetype end +function M.is_buf_buftype(bufnr, filetype) + return vim.api.nvim_buf_get_option(bufnr, "buftype") == filetype +end + function M.lock_buf_to_window(win_id, bufnr, filetype) local augroup_id = vim.api.nvim_create_augroup("LockWindow" .. win_id, { clear = true })