From 0becf1e5cda3260550b68a228e4f258e1ce62612 Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Sun, 12 Jan 2025 20:22:27 +0000 Subject: [PATCH] Add support for no shift navigation keymaps --- wezterm.lua | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/wezterm.lua b/wezterm.lua index 2101e43..6690371 100644 --- a/wezterm.lua +++ b/wezterm.lua @@ -53,14 +53,26 @@ config.keys = { }, } -local move_mods = 'CTRL|SHIFT' -local function send_key(window, pane) - -- TODO: Detect if tmux is running - -- Detect if vim/nvim is running - -- Failing that, check if there is only a single pane - return false +local function send_move_key(window, pane) + -- TODO: Detect if vim/nvim is running + -- We can't use pane:get_foreground_process_info() because it appears to + -- contain info about the most recent process launched in the pane. During + -- testing this was lua-language-server.exe so obisouly can't be used to + -- determine if we're running inside neovim. + -- WezTerm supports the OSC 1337 SetUserVar escape sequence, this could be + -- used to inform WezTerm that neovim is running in a given tab. + + if pane:get_user_vars()['vim'] ~= nil then + if pane:get_user_vars().vim ~= '1' then + return false + end + elseif #window:active_tab():panes() > 1 then + return false + end + return true end +local move_mods = 'CTRL' for _, map in pairs({ { key = 'h', direction = 'Left' }, { key = 'l', direction = 'Right' }, @@ -71,9 +83,9 @@ for _, map in pairs({ key = map.key, mods = move_mods, action = wezterm.action_callback(function(window, pane) - if send_key(window, pane) then + if send_move_key(window, pane) then window:perform_action( - wezterm.action.SendKey({ key = map.key, modes = move_mods }), pane) + wezterm.action.SendKey({ key = map.key, mods = move_mods }), pane) else window:perform_action( wezterm.action.ActivatePaneDirection(map.direction), pane)