From 4e2e456b87a54f0fe6c1569f47919054935d9c32 Mon Sep 17 00:00:00 2001 From: "Kenneth Benzie (Benie)" Date: Fri, 4 Oct 2024 13:02:26 +0100 Subject: [PATCH] Make movement bindings DRYer and begin making them dynamic --- wezterm.lua | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/wezterm.lua b/wezterm.lua index bb6fd76..3f8c0e6 100644 --- a/wezterm.lua +++ b/wezterm.lua @@ -39,26 +39,35 @@ config.keys = { end), }), }, - { - key = 'h', - mods = 'CTRL|SHIFT', - action = wezterm.action.ActivatePaneDirection('Left'), - }, - { - key = 'l', - mods = 'CTRL|SHIFT', - action = wezterm.action.ActivatePaneDirection('Right'), - }, - { - key = 'k', - mods = 'CTRL|SHIFT', - action = wezterm.action.ActivatePaneDirection('Up'), - }, - { - key = 'j', - mods = 'CTRL|SHIFT', - action = wezterm.action.ActivatePaneDirection('Down'), - }, } +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 +end + +for _, map in pairs({ + { key = 'h', direction = 'Left' }, + { key = 'l', direction = 'Right' }, + { key = 'k', direction = 'Up' }, + { key = 'j', direction = 'Down' }, +}) do + table.insert(config.keys, { + key = map.key, + mods = move_mods, + action = wezterm.action_callback(function(window, pane) + if send_key(window, pane) then + window:perform_action( + wezterm.action.SendKey({ key = map.key, modes = move_mods }), pane) + else + window:perform_action( + wezterm.action.ActivatePaneDirection(map.direction), pane) + end + end), + }) +end + return config