Add WezTerm multiplex support to navigation bindings
This commit is contained in:
parent
e929956a8c
commit
de0e52f0db
64
lua/plugins/mux.lua
Normal file
64
lua/plugins/mux.lua
Normal file
@ -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', "<C-h>", navigator.left)
|
||||||
|
vim.keymap.set('n', "<C-j>", navigator.down)
|
||||||
|
vim.keymap.set('n', "<C-k>", navigator.up)
|
||||||
|
vim.keymap.set('n', "<C-l>", navigator.right)
|
||||||
|
end
|
||||||
|
}
|
@ -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', "<C-h>", plugin.NvimTmuxNavigateLeft)
|
|
||||||
vim.keymap.set('n', "<C-j>", plugin.NvimTmuxNavigateDown)
|
|
||||||
vim.keymap.set('n', "<C-k>", plugin.NvimTmuxNavigateUp)
|
|
||||||
vim.keymap.set('n', "<C-l>", plugin.NvimTmuxNavigateRight)
|
|
||||||
end
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user