From cc2a791779a015643dc8d002131d567dc9f69397 Mon Sep 17 00:00:00 2001 From: psychhim Date: Wed, 15 Oct 2025 18:36:08 +0530 Subject: [PATCH] Fix: alpha in normal mode. New tab keybind to fix all tab/buffer problems. --- init.lua | 3 -- lua/keymaps.lua | 6 +-- lua/plugins/custom/alpha.lua | 66 +++++++-------------------- lua/plugins/custom/telescope.lua | 6 +-- lua/settings_autoload_after_alpha.lua | 44 ------------------ 5 files changed, 22 insertions(+), 103 deletions(-) delete mode 100644 lua/settings_autoload_after_alpha.lua diff --git a/init.lua b/init.lua index 4886df5..f0201c8 100644 --- a/init.lua +++ b/init.lua @@ -343,9 +343,6 @@ vim.api.nvim_create_autocmd('TextYankPost', { pattern = '*', }) --- Auto-apply settings to all normal buffers -require('settings_autoload_after_alpha').setup() - -- Theme require('kanagawa').setup { transparent = true } vim.cmd [[colorscheme kanagawa]] diff --git a/lua/keymaps.lua b/lua/keymaps.lua index 4dddc66..52bf584 100644 --- a/lua/keymaps.lua +++ b/lua/keymaps.lua @@ -310,7 +310,7 @@ end, { desc = 'Discard changes in current window & quit' }) -- [[ Close Neovim ]] -- Function to close Neovim, discarding all unsaved changes if confirmed -_G.close_nvim_with_prompt = function() +local function close_nvim_with_prompt() -- Get list of all listed buffers local buffers = vim.fn.getbufinfo { buflisted = 1 } -- Check for unsaved buffers @@ -332,10 +332,10 @@ _G.close_nvim_with_prompt = function() vim.cmd 'qa!' else -- Cancel quitting - print '\nCancelled closing Neovim.' + print 'Cancelled closing Neovim.' end end -vim.keymap.set('n', 'qa', _G.close_nvim_with_prompt, { noremap = true, silent = true, desc = 'Quit Neovim' }) +vim.keymap.set('n', 'qa', close_nvim_with_prompt, { noremap = true, silent = true, desc = 'Quit Neovim' }) -- [[ Switch below/right split windows ]] vim.keymap.set('n', '', '') diff --git a/lua/plugins/custom/alpha.lua b/lua/plugins/custom/alpha.lua index ff579d1..d00654e 100644 --- a/lua/plugins/custom/alpha.lua +++ b/lua/plugins/custom/alpha.lua @@ -9,9 +9,6 @@ return { local splash = require 'ascii_splash' dashboard.section.header.val = splash - -- Get Neovim starting directory - local start_dir = vim.fn.getcwd() - -- Setup buttons dashboard.section.buttons.val = { -- New file @@ -21,55 +18,24 @@ return { vim.cmd 'enew' vim.cmd 'startinsert' end), - -- Open Neo-tree in starting directory - dashboard.button('n', ' Open Neo-tree', 'cd ' .. vim.fn.fnameescape(start_dir) .. ' | Neotree toggle float'), - -- Close Alpha window - dashboard.button('q', ' Close this window', function() - local current_buf = vim.api.nvim_get_current_buf() - -- Count listed buffers - local listed_count = 0 - for _, buf in ipairs(vim.api.nvim_list_bufs()) do - if vim.api.nvim_buf_get_option(buf, 'buflisted') then - listed_count = listed_count + 1 - end - end - -- If only 1 listed buffer left, force quit Neovim - if listed_count == 1 then - vim.cmd 'qa!' - else - -- Delete current buffer - if vim.api.nvim_buf_is_valid(current_buf) then - vim.api.nvim_buf_delete(current_buf, { force = true }) - end - -- Delete one listed, unmodified, no-name buffer - for _, buf in ipairs(vim.api.nvim_list_bufs()) do - if vim.api.nvim_buf_is_valid(buf) then - local listed = vim.api.nvim_buf_get_option(buf, 'buflisted') - local modified = vim.api.nvim_buf_get_option(buf, 'modified') - local name = vim.api.nvim_buf_get_name(buf) - -- target buffers that are listed, have no modifications, and no name - if listed and not modified and name == '' then - vim.api.nvim_buf_delete(buf, { force = true }) - break -- delete only one buffer - end - end - end - end + -- Create new empty buffer in a new tab + dashboard.button('e', ' New Tab', function() + local alpha_buf = vim.api.nvim_get_current_buf() + -- Close Alpha buffer + vim.api.nvim_buf_delete(alpha_buf, { force = true }) + -- Create new tab and empty buffer + vim.cmd 'tabnew' + vim.cmd 'enew' + end), + -- Open Neo-tree in current directory + dashboard.button('n', ' Open Neo-tree', 'Neotree toggle float'), + -- Close Neovim + dashboard.button('q', ' Exit', function() + vim.cmd 'qa!' end), } - -- Ensure Alpha buffer is a scratch buffer so closing it doesn’t leave [No Name] - local opts = dashboard.opts - opts.hide = true -- hide it from buffer list - alpha.setup(opts) - - -- Open Alpha in a dedicated scratch buffer if no file is loaded - if vim.fn.bufnr '$' == 1 and vim.fn.bufname(0) == '' then - vim.cmd 'enew' -- create a proper empty buffer - vim.cmd 'Alpha' -- open Alpha in that buffer - vim.bo.buflisted = false -- mark it unlisted so it doesn’t pollute buffer pickers - vim.bo.buftype = 'nofile' -- make it a scratch buffer - -- vim.bo.bufhidden = 'wipe' -- critical: buffer is automatically deleted when hidden - end + -- Setup Alpha dashboard + alpha.setup(dashboard.opts) end, } diff --git a/lua/plugins/custom/telescope.lua b/lua/plugins/custom/telescope.lua index f90267f..ee5c296 100644 --- a/lua/plugins/custom/telescope.lua +++ b/lua/plugins/custom/telescope.lua @@ -74,7 +74,7 @@ return { if prompt_bufnr and vim.api.nvim_buf_is_valid(prompt_bufnr) then pcall(actions.close, prompt_bufnr) end - -- 1. If file is already open → jump to it + -- If file is already open → jump to it local tabpages = vim.api.nvim_list_tabpages() for _, tab in ipairs(tabpages) do for _, win in ipairs(vim.api.nvim_tabpage_list_wins(tab)) do @@ -86,7 +86,7 @@ return { end end end - -- 2. If current tab has an empty "No Name" buffer → reuse it + -- If current tab has an empty "No Name" buffer → reuse it local wins = vim.api.nvim_tabpage_list_wins(0) for _, win in ipairs(wins) do local buf = vim.api.nvim_win_get_buf(win) @@ -106,7 +106,7 @@ return { return end end - -- 3. Otherwise → open in a new tab + -- Otherwise → open in a new tab vim.cmd('tabnew ' .. vim.fn.fnameescape(path)) end diff --git a/lua/settings_autoload_after_alpha.lua b/lua/settings_autoload_after_alpha.lua deleted file mode 100644 index 13756f6..0000000 --- a/lua/settings_autoload_after_alpha.lua +++ /dev/null @@ -1,44 +0,0 @@ --- Auto-apply all preferred settings to every normal buffer -local M = {} - -function M.setup() - vim.api.nvim_create_autocmd({ 'BufWinEnter', 'WinEnter', 'BufEnter' }, { - callback = function() - local ft = vim.bo.filetype - local bt = vim.bo.buftype - - -- Skip floating or special buffers - if ft == 'neo-tree' or ft == 'TelescopePrompt' or bt == 'terminal' or bt == 'nofile' then - return - end - - -- Window-local options - vim.wo.number = true - vim.wo.relativenumber = true - vim.wo.signcolumn = 'yes' - vim.wo.scrolloff = 8 - - -- Global options - vim.o.hlsearch = false - vim.o.mouse = '' -- disable mouse - vim.o.breakindent = true - vim.o.undofile = true - vim.o.ignorecase = true - vim.o.smartcase = true - vim.o.updatetime = 250 - vim.o.timeoutlen = 300 - vim.o.completeopt = 'menuone,noselect' - vim.o.termguicolors = true - vim.o.showtabline = 1 - - -- Tabs and indentation - vim.o.expandtab = false - vim.o.shiftwidth = 4 - vim.o.softtabstop = 0 - vim.o.tabstop = 4 - vim.o.smartindent = true - end, - }) -end - -return M