diff options
author | Josh Rahm <rahm@google.com> | 2023-01-27 23:27:56 +0000 |
---|---|---|
committer | Josh Rahm <rahm@google.com> | 2023-01-27 23:30:21 +0000 |
commit | a1e2781502292f6b1c586373de79d94835ec3a46 (patch) | |
tree | f3bd6f9598f8578392156b76a7c9baab7fa6264c /lua/windownav.lua | |
parent | e2fc2685d2d0b9dac434d6a87e0304efe63751ad (diff) | |
download | config.vim-a1e2781502292f6b1c586373de79d94835ec3a46.tar.gz config.vim-a1e2781502292f6b1c586373de79d94835ec3a46.tar.bz2 config.vim-a1e2781502292f6b1c586373de79d94835ec3a46.zip |
add lua/windownav.lua
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 |