diff --git a/config/nvim/lua/plugins/init.lua b/config/nvim/lua/plugins/init.lua index de96571..a43e3f8 100644 --- a/config/nvim/lua/plugins/init.lua +++ b/config/nvim/lua/plugins/init.lua @@ -1,23 +1,24 @@ vim.pack.add({ - { src = "https://github.com/nvim-mini/mini.nvim" }, - { src = "https://github.com/neovim/nvim-lspconfig" }, - { src = "https://github.com/romus204/tree-sitter-manager.nvim" }, - { src = "https://github.com/brenoprata10/nvim-highlight-colors" }, + { src = 'https://github.com/nvim-mini/mini.nvim' }, + { src = 'https://github.com/neovim/nvim-lspconfig' }, + { src = 'https://github.com/romus204/tree-sitter-manager.nvim' }, { src = 'https://github.com/metalelf0/kintsugi-nvim' }, - { src = 'https://github.com/xiyaowong/transparent.nvim' } + { src = 'https://github.com/xiyaowong/transparent.nvim' }, + { src = 'https://github.com/brenoprata10/nvim-highlight-colors' } }) -require("tree-sitter-manager").setup() +require('tree-sitter-manager').setup() require('nvim-highlight-colors').setup() -- Mini setups -require("mini.extra").setup() -require("mini.pairs").setup() +require('mini.extra').setup() +require('mini.pairs').setup() +require('mini.files').setup() require('mini.surround').setup() require('mini.sessions').setup() -require("mini.statusline").setup() +require('mini.statusline').setup() require('mini.basics').setup({options = { extra_ui = true }}) require('mini.completion').setup({lsp_completion = { auto_setup = true }}) -require("mini.pick").setup({ +require('mini.pick').setup({ window = { config = function() local height = math.floor(0.50 * vim.o.lines) @@ -28,37 +29,6 @@ require("mini.pick").setup({ col = math.floor(0.5 * (vim.o.columns - width)), } end - }, - - -- Add global mappings here - mappings = { - delete_buffer = { - char = '', - func = function() - local pick = require('mini.pick') - local current_match = pick.get_picker_matches().current - - -- Safety check: only attempt deletion if the item has a valid buffer number - if current_match and current_match.bufnr then - local bufnr = current_match.bufnr - - -- Safely delete the buffer - vim.api.nvim_buf_delete(bufnr, {}) - - -- Instantly remove it from the visible picker list - local buffer_items = pick.get_picker_items() - for i = #buffer_items, 1, -1 do - if buffer_items[i].bufnr == bufnr then - table.remove(buffer_items, i) - break - end - end - pick.set_picker_items(buffer_items) - else - vim.notify("Current item is not a buffer", vim.log.levels.WARN) - end - end - } } }) @@ -72,20 +42,11 @@ map("n", "gd", ":lua vim.lsp.buf.definition()") map("n", "r", ":lua vim.lsp.buf.rename()") map("n", "a", ":lua vim.lsp.buf.code_action()") -- Mini Keybinds -map("n", "f", ":lua MiniPick.builtin.files()") +map("n", "e", function() MiniFiles.open(vim.fn.getcwd()) end) +map("n", "f", function() MiniPick.builtin.files(nil, { source = { cwd = vim.fn.getcwd() } }) end) map("n", "o", ":lua MiniPick.builtin.buffers()") map("n", "h", ":lua MiniPick.builtin.help()") map("n", "d", ":lua MiniExtra.pickers.diagnostic()") -map("n", "ss", ":lua MiniPick.builtin.grep_live()") -map("n", "tc", ":HighlightColors Toggle") +map("n", "ss", function() MiniPick.builtin.grep_live(nil, { source = { cwd = vim.fn.getcwd() } }) end) map("n", "pp", ":lua MiniSessions.select()") -map('n', 'pa', - function() - -- Get the tail (:t) of the current working directory path (the folder name) - local session_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':t') - - -- Create/overwrite the session silently - require('mini.sessions').write(session_name) - print("Session '" .. session_name .. "' saved!") - end -) +map("n", "tc", ":HighlightColors Toggle") diff --git a/config/nvim/lua/terminal/init.lua b/config/nvim/lua/terminal/init.lua index 058441e..9bedac9 100644 --- a/config/nvim/lua/terminal/init.lua +++ b/config/nvim/lua/terminal/init.lua @@ -1,63 +1,58 @@ -local term_win = nil local term_buf = nil +local function open_term_split() + vim.cmd('botright vsplit') + local win = vim.api.nvim_get_current_win() + if term_buf and vim.api.nvim_buf_is_valid(term_buf) then + vim.api.nvim_win_set_buf(win, term_buf) + else + vim.cmd('terminal') + term_buf = vim.api.nvim_get_current_buf() + end + vim.api.nvim_win_set_width(win, math.floor(vim.o.columns * 0.37)) + vim.cmd('startinsert') +end + local function toggle_term() - if term_win and vim.api.nvim_win_is_valid(term_win) then - vim.api.nvim_win_close(term_win, false) - term_win = nil - else - vim.cmd('botright vsplit') - term_win = vim.api.nvim_get_current_win() - if term_buf and vim.api.nvim_buf_is_valid(term_buf) then - vim.api.nvim_win_set_buf(term_win, term_buf) - else - vim.cmd('terminal') - term_buf = vim.api.nvim_get_current_buf() - end - vim.api.nvim_win_set_width(term_win, math.floor(vim.o.columns * 0.35)) - vim.cmd('startinsert') - end + -- Check if terminal is already visible in a window + for _, win in ipairs(vim.api.nvim_list_wins()) do + if vim.api.nvim_win_get_buf(win) == term_buf then + vim.api.nvim_win_close(win, false) + return + end + end + open_term_split() +end + +local function open_term_fullscreen() + if term_buf and vim.api.nvim_buf_is_valid(term_buf) then + vim.api.nvim_set_current_buf(term_buf) + else + vim.cmd('terminal') + term_buf = vim.api.nvim_get_current_buf() + end + vim.cmd('startinsert') end --- Jump to previous non-terminal buffer local function prev_non_term_buf() - local cur = vim.api.nvim_get_current_buf() - local bufs = vim.fn.getbufinfo({ buflisted = 1 }) - - -- Walk buffer list in reverse to find last non-terminal buffer that isn't current - local history = vim.fn.execute('ls t') -- 't' flag = sort by last used time - local candidates = {} - for _, info in ipairs(bufs) do - local bufnr = info.bufnr - if bufnr ~= cur - and bufnr ~= term_buf - and vim.bo[bufnr].buftype ~= 'terminal' - then - table.insert(candidates, { bufnr = bufnr, lastused = info.lastused }) - end - end - - if #candidates == 0 then - print('No previous non-terminal buffer') - return - end - - -- Sort by lastused descending, pick the most recently used - table.sort(candidates, function(a, b) return a.lastused > b.lastused end) - vim.api.nvim_set_current_buf(candidates[1].bufnr) + local cur = vim.api.nvim_get_current_buf() + local bufs = vim.fn.getbufinfo({ buflisted = 1 }) + local candidates = {} + for _, info in ipairs(bufs) do + if info.bufnr ~= cur and vim.bo[info.bufnr].buftype ~= 'terminal' then + table.insert(candidates, info) + end + end + if #candidates == 0 then + print('No previous non-terminal buffer') + return + end + table.sort(candidates, function(a, b) return a.lastused > b.lastused end) + vim.api.nvim_set_current_buf(candidates[1].bufnr) end --- Overrides init binding -map('n', 'l', prev_non_term_buf, { desc = 'Go to previous non-terminal buffer' }) -map('n', '', function() - if term_buf and vim.api.nvim_buf_is_valid(term_buf) then - vim.api.nvim_set_current_buf(term_buf) - else - print('No terminal buffer open yet') - end -end) -map('n', '', toggle_term, { desc = 'Toggle terminal' }) - --- terminal mode binds -map('t', '', toggle_term, { desc = 'Toggle terminal' }) -map('t', '', '', { desc = 'Go to last buffer' }) +map('n', 'l', prev_non_term_buf, { desc = 'Go to previous non-terminal buffer' }) +map('n', '', toggle_term, { desc = 'Toggle terminal split' }) +map('n', '', open_term_fullscreen, { desc = 'Open terminal fullscreen' }) +map('t', '', toggle_term, { desc = 'Toggle terminal split' }) +map('t', '', prev_non_term_buf, { desc = 'Exit terminal mode' })