summaryrefslogtreecommitdiff
path: root/lua/windownav.lua
diff options
context:
space:
mode:
authorJosh Rahm <rahm@google.com>2023-01-27 23:27:56 +0000
committerJosh Rahm <rahm@google.com>2023-01-27 23:30:21 +0000
commita1e2781502292f6b1c586373de79d94835ec3a46 (patch)
treef3bd6f9598f8578392156b76a7c9baab7fa6264c /lua/windownav.lua
parente2fc2685d2d0b9dac434d6a87e0304efe63751ad (diff)
downloadconfig.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.lua76
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