Files

74 lines
1.8 KiB
Lua

local M = {}
local function nav(short_direction, direction, action)
-- Use "move-focus" if action is nil.
if not action then
action = "move-focus"
end
if action ~= "move-focus" and action ~= "move-focus-or-tab" then
error("invalid action: " .. action)
end
-- get window ID, try switching windows, and get ID again to see if it worked
local cur_winnr = vim.fn.winnr()
vim.api.nvim_command("wincmd " .. short_direction)
local new_winnr = vim.fn.winnr()
-- if the window ID didn't change, then we didn't switch
if cur_winnr == new_winnr then
vim.fn.system("zellij action " .. action .. " " .. direction)
if vim.v.shell_error ~= 0 then
error("zellij executable not found in path")
end
end
end
function M.up()
nav("k", "up", nil)
end
function M.down()
nav("j", "down", nil)
end
function M.right()
nav("l", "right", nil)
end
function M.left()
nav("h", "left", nil)
end
function M.up_tab()
nav("k", "up", "move-focus-or-tab")
end
function M.down_tab()
nav("j", "down", "move-focus-or-tab")
end
function M.right_tab()
nav("l", "right", "move-focus-or-tab")
end
function M.left_tab()
nav("h", "left", "move-focus-or-tab")
end
-- create our exported setup() function
function M.setup(opts)
-- create our commands
vim.api.nvim_create_user_command("ZellijNavigateUp", M.up, {})
vim.api.nvim_create_user_command("ZellijNavigateDown", M.down, {})
vim.api.nvim_create_user_command("ZellijNavigateLeft", M.left, {})
vim.api.nvim_create_user_command("ZellijNavigateRight", M.right, {})
vim.api.nvim_create_user_command("ZellijNavigateUpTab", M.up_tab, {})
vim.api.nvim_create_user_command("ZellijNavigateDownTab", M.down_tab, {})
vim.api.nvim_create_user_command("ZellijNavigateLeftTab", M.left_tab, {})
vim.api.nvim_create_user_command("ZellijNavigateRightTab", M.right_tab, {})
end
return M