From de0e52f0db22e6edab8d59707357ca387a9fe61f Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Sun, 12 Jan 2025 20:21:06 +0000 Subject: [PATCH] Add WezTerm multiplex support to navigation bindings --- lua/plugins/mux.lua | 64 ++++++++++++++++++++++++++++++++++++++++++++ lua/plugins/tmux.lua | 39 --------------------------- 2 files changed, 64 insertions(+), 39 deletions(-) create mode 100644 lua/plugins/mux.lua delete mode 100644 lua/plugins/tmux.lua diff --git a/lua/plugins/mux.lua b/lua/plugins/mux.lua new file mode 100644 index 0000000..ed3afb9 --- /dev/null +++ b/lua/plugins/mux.lua @@ -0,0 +1,64 @@ +return { + 'numToStr/Navigator.nvim', + config = function() + local navigator = require('Navigator') + navigator.setup({ + disable_on_zoom = true, + }) + + local augroup = vim.api.nvim_create_augroup('mux', { clear = true }) + if vim.env.TMUX ~= nil then + -- Integrate tmux navigation flag + local navigation_flag = + '@vim' .. vim.fn.substitute(vim.env.TMUX_PANE, '%', '\\%', 'g') + local function set_navigation_flag() + vim.fn.system('tmux set-window-option ' .. navigation_flag .. ' 1') + end + local function unset_navigation_flag() + -- FIXME: Due to a regression this causes SIGABRT when RelWithDebInfo + -- vim.fn.system('tmux set-window-option -u ' .. navigation_flag) + -- https://github.com/neovim/neovim/issues/21856 contains a workaround + vim.fn.jobstart( + 'tmux set-window-option -u ' .. navigation_flag, { detach = true }) + end + + -- [Un]set tmux window option to detect when to change pane. + set_navigation_flag() + vim.api.nvim_create_autocmd('FocusGained', { + pattern = '*', group = augroup, callback = set_navigation_flag, + }) + vim.api.nvim_create_autocmd('VimLeave', { + pattern = '*', group = augroup, callback = unset_navigation_flag, + }) + elseif vim.env.TERM_PROGRAM ~= nil and vim.env.TERM_PROGRAM == 'WezTerm' then + local function set_wezterm_user_var(in_vim) + local value = in_vim and '1' or '0' + local template = "\x1b]1337;SetUserVar=%s=%s\a" + local command = template:format('vim', vim.base64.encode(tostring(value))) + vim.api.nvim_chan_send(vim.v.stderr, command) + end + + vim.api.nvim_create_autocmd({ 'VimEnter', 'VimResume' }, { + pattern = '*', + group = augroup, + callback = function() + set_wezterm_user_var(true) + end, + }) + + vim.api.nvim_create_autocmd({ 'VimLeave', 'VimSuspend' }, { + pattern = '*', + group = augroup, + callback = function() + set_wezterm_user_var(false) + end, + }) + end + + -- Map nativation bindings + vim.keymap.set('n', "", navigator.left) + vim.keymap.set('n', "", navigator.down) + vim.keymap.set('n', "", navigator.up) + vim.keymap.set('n', "", navigator.right) + end +} diff --git a/lua/plugins/tmux.lua b/lua/plugins/tmux.lua deleted file mode 100644 index 265d9b8..0000000 --- a/lua/plugins/tmux.lua +++ /dev/null @@ -1,39 +0,0 @@ -return { - 'alexghergh/nvim-tmux-navigation', - config = function() - local plugin = require('nvim-tmux-navigation') - plugin.setup({ - disable_when_zoomed = true, - }) - - -- Integrate tmux navigation flag - local navigation_flag = - '@vim' .. vim.fn.substitute(vim.env.TMUX_PANE, '%', '\\%', 'g') - local function set_navigation_flag() - vim.fn.system('tmux set-window-option ' .. navigation_flag .. ' 1') - end - local function unset_navigation_flag() - -- FIXME: Due to a regression this causes SIGABRT when RelWithDebInfo - -- vim.fn.system('tmux set-window-option -u ' .. navigation_flag) - -- https://github.com/neovim/neovim/issues/21856 contains a workaround - vim.fn.jobstart( - 'tmux set-window-option -u ' .. navigation_flag, { detach = true}) - end - - -- [Un]set tmux window option to detect when to change pane. - set_navigation_flag() - local augroup = vim.api.nvim_create_augroup('tmux', { clear = true }) - vim.api.nvim_create_autocmd('FocusGained', { - pattern = '*', group = augroup, callback = set_navigation_flag, - }) - vim.api.nvim_create_autocmd('VimLeave', { - pattern = '*', group = augroup, callback = unset_navigation_flag, - }) - - -- Map nativation bindings - vim.keymap.set('n', "", plugin.NvimTmuxNavigateLeft) - vim.keymap.set('n', "", plugin.NvimTmuxNavigateDown) - vim.keymap.set('n', "", plugin.NvimTmuxNavigateUp) - vim.keymap.set('n', "", plugin.NvimTmuxNavigateRight) - end -}