diff options
Diffstat (limited to 'lua/windownav.lua')
-rw-r--r-- | lua/windownav.lua | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/lua/windownav.lua b/lua/windownav.lua new file mode 100644 index 0000000..9ac83e3 --- /dev/null +++ b/lua/windownav.lua @@ -0,0 +1,76 @@ +local vim = assert(vim) +local augroup = vim.api.nvim_create_augroup -- Create/get autocommand group +local autocmd = vim.api.nvim_create_autocmd -- Create autocommand + +M = {} + +local function get_buffers(options) + local buffers = {} + local len = 0 + local options_listed = options.listed + local vim_fn = vim.fn + local buflisted = vim_fn.buflisted + + for buffer = 1, vim_fn.bufnr('$') do + if not options_listed or buflisted(buffer) ~= 1 then + len = len + 1 + buffers[len] = buffer + end + end + + return buffers +end + +function M.goto_terminal() + for _, buf in pairs(vim.fn.tabpagebuflist()) do + if string.match(vim.fn.bufname(buf), "^term://.*") then + local win = vim.fn.bufwinnr(buf) + vim.api.nvim_exec(win .. "wincmd w", 0) + return + end + end +end + +local function contains(needle, haystack) + for _, h in pairs(haystack) do + if h == needle then + return true + end + end + return false +end + +local function navigate_to(buffer) + local wid = vim.fn.win_findbuf(buffer) + if #wid > 0 then + vim.fn.win_gotoid(wid[1]) + end +end + +function M.goto_lastwin() + if M.lastwin then + vim.fn.win_gotoid(M.lastwin) + end +end + +function M.goto_initvim() + local buffers = get_buffers({}) + for _, buf in pairs(buffers) do + if string.match(vim.fn.bufname(buf), "nvim/init.vim$") then + navigate_to(buf) + return + end + end + + vim.api.nvim_exec("tabedit ~/.config/nvim/init.vim", 0) +end + +augroup('WindowNav', { clear = true }) +autocmd('WinLeave', { + group = 'WindowNav', + callback = function () + M.lastwin = vim.fn.win_getid() + end +}) + +return M |