diff options
Diffstat (limited to 'ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tmux.lua')
| -rw-r--r-- | ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tmux.lua | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tmux.lua b/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tmux.lua new file mode 100644 index 0000000..41869f8 --- /dev/null +++ b/ar/.config/TheSiahxyz/lua/thesiahxyz/utils/tmux.lua @@ -0,0 +1,63 @@ +local M = {} + +M.tmux_pane_function = function(dir) + -- NOTE: variable that controls the auto-cd behavior + local auto_cd_to_new_dir = true + -- NOTE: Variable to control pane direction: 'right' or 'bottom' + -- If you modify this, make sure to also modify TMUX_PANE_DIRECTION in the + -- zsh-vi-mode section on the .zshrc file + -- Also modify this in your tmux.conf file if you want it to work when in tmux + -- copy-mode + local pane_direction = vim.g.tmux_pane_direction or "right" + -- NOTE: Below, the first number is the size of the pane if split horizontally, + -- the 2nd number is the size of the pane if split vertically + local pane_size = (pane_direction == "right") and 60 or 15 + local move_key = (pane_direction == "right") and "C-l" or "" + local split_cmd = (pane_direction == "right") and "-h" or "-v" + -- if no dir is passed, use the current file's directory + local file_dir = dir or vim.fn.expand("%:p:h") + -- Simplified this, was checking if a pane existed + local has_panes = vim.fn.system("tmux list-panes | wc -l"):gsub("%s+", "") ~= "1" + -- Check if the current pane is zoomed (maximized) + local is_zoomed = vim.fn.system("tmux display-message -p '#{window_zoomed_flag}'"):gsub("%s+", "") == "1" + -- Escape the directory path for shell + local escaped_dir = file_dir:gsub("'", "'\\''") + -- If any additional pane exists + if has_panes then + if is_zoomed then + -- Compare the stored pane directory with the current file directory + if auto_cd_to_new_dir and vim.g.tmux_pane_dir ~= escaped_dir then + -- If different, cd into the new dir + vim.fn.system("tmux send-keys -t :.+ 'cd \"" .. escaped_dir .. "\"' Enter") + -- Update the stored directory to the new one + vim.g.tmux_pane_dir = escaped_dir + end + -- If zoomed, unzoom and switch to the correct pane + vim.fn.system("tmux resize-pane -Z") + vim.fn.system("tmux send-keys " .. move_key) + else + -- If not zoomed, zoom current pane + vim.fn.system("tmux resize-pane -Z") + end + else + -- Store the initial directory in a Neovim variable + if vim.g.tmux_pane_dir == nil then + vim.g.tmux_pane_dir = escaped_dir + end + -- If no pane exists, open it with zsh and DISABLE_PULL variable + vim.fn.system( + "tmux split-window " + .. split_cmd + .. " -l " + .. pane_size + .. " 'cd \"" + .. escaped_dir + .. "\" && DISABLE_PULL=1 zsh'" + ) + vim.fn.system("tmux send-keys " .. move_key) + end +end + +vim.keymap.set({ "n", "v", "i" }, "<M-\\>", M.tmux_pane_function, { desc = "Toggle terminal in tmux" }) + +return M |
