diff --git a/README.md b/README.md index ff02745..ad3d05c 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ vim.keymap.set({'n', 't'}, '', 'NavigatorPrevious') - [Tmux](https://github.com/numToStr/Navigator.nvim/wiki/Tmux-Integration) - [WezTerm](https://github.com/numToStr/Navigator.nvim/wiki/WezTerm-Integration) +- [Zellj](https://github.com/numToStr/Navigator.nvim/wiki/Zellij-Integration) #### Configuration (optional) diff --git a/lua/Navigator/mux/zellij.lua b/lua/Navigator/mux/zellij.lua new file mode 100644 index 0000000..1374ede --- /dev/null +++ b/lua/Navigator/mux/zellij.lua @@ -0,0 +1,54 @@ +---@mod navigator.zellij Zellij navigator +---@brief [[ +---This module provides navigation and interaction for Zellij, and uses |navigator.vi| +---as a base class. This is used automatically when zellij is detected on host +---system but can also be used to manually override the mux. +---Read also: https://github.com/numToStr/Navigator.nvim/wiki/Zellij-Integration +---@brief ]] + +---@private +---@class Zellij: Vi +---@field private direction table +---@field private execute fun(arg: string): unknown +local Zellij = require('Navigator.mux.vi'):new() + +---Creates a new Zellij navigator instance +---@return Zellij +---@usage [[ +---local ok, zellij = pcall(function() +--- return require('Navigator.mux.zellij'):new() +---end) +--- +---require('Navigator').setup({ +--- mux = ok and zellij or 'auto' +---}) +---@usage ]] +function Zellij:new() + assert(os.getenv('ZELLIJ'), '[Navigator] Zellij is not running!') + + ---@type Zellij + local state = { + execute = function(arg) + return require('Navigator.utils').execute(string.format('zellij action %s', arg)) + end, + direction = { + p = 'focus-previous-pane', + h = 'move-focus-or-tab left', + j = 'move-focus down', + k = 'move-focus up', + l = 'move-focus-or-tab right', + }, + } + self.__index = self + return setmetatable(state, self) +end + +---Switch pane in zellij +---@param direction Direction See |navigator.api.Direction| +---@return Zellij +function Zellij:navigate(direction) + self.execute(string.format("%s", self.direction[direction])) + return self +end + +return Zellij diff --git a/lua/Navigator/navigate.lua b/lua/Navigator/navigate.lua index 12af69b..7fa6115 100644 --- a/lua/Navigator/navigate.lua +++ b/lua/Navigator/navigate.lua @@ -13,6 +13,12 @@ local N = { ---Detect and load correct mux ---@return Vi local function load_mux() + local ok_zellij, zellij = pcall(function() + return require('Navigator.mux.zellij'):new() + end) + if ok_zellij then + return zellij + end local ok_tmux, tmux = pcall(function() return require('Navigator.mux.tmux'):new() end)