From d3ed6bae0453491b95c8dbb4b0343f1023ef4d3c Mon Sep 17 00:00:00 2001 From: Evie Litherland-Smith Date: Mon, 13 Feb 2023 12:38:19 +0000 Subject: [PATCH] Add explicit control over wezterm keyboard shortcuts --- config/wezterm/wezterm.lua | 233 +++++++++++++++++++++++++++++++++++++ home/zprofile | 2 +- 2 files changed, 234 insertions(+), 1 deletion(-) diff --git a/config/wezterm/wezterm.lua b/config/wezterm/wezterm.lua index caf7154c..bd53627e 100644 --- a/config/wezterm/wezterm.lua +++ b/config/wezterm/wezterm.lua @@ -1,7 +1,240 @@ +local wezterm = require('wezterm') +local act = wezterm.action + +wezterm.on('update-right-status', function(window, pane) + local name = window:active_key_table() + if name then + name = 'TABLE: ' .. name + end + window:set_right_status(name or '') +end) + +local function isViProcess(pane) + -- get_foreground_process_name On Linux, macOS and Windows, + -- the process can be queried to determine this path. Other operating systems + -- (notably, FreeBSD and other unix systems) are not currently supported + return pane:get_foreground_process_name():find('n?vim') ~= nil + -- return pane:get_title():find("n?vim") ~= nil +end + +local function conditionalActivatePane(window, pane, pane_direction, vim_direction) + if isViProcess(pane) then + window:perform_action( + -- This should match the keybinds you set in Neovim. + act.SendKey({ key = vim_direction, mods = 'ALT' }), + pane + ) + else + window:perform_action(act.ActivatePaneDirection(pane_direction), pane) + end +end + +wezterm.on('ActivatePaneDirection-right', function(window, pane) + conditionalActivatePane(window, pane, 'Right', 'l') +end) +wezterm.on('ActivatePaneDirection-left', function(window, pane) + conditionalActivatePane(window, pane, 'Left', 'h') +end) +wezterm.on('ActivatePaneDirection-up', function(window, pane) + conditionalActivatePane(window, pane, 'Up', 'k') +end) +wezterm.on('ActivatePaneDirection-down', function(window, pane) + conditionalActivatePane(window, pane, 'Down', 'j') +end) + + +local keys = { + { key = 'h', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-left') }, + { key = 'j', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-down') }, + { key = 'k', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-up') }, + { key = 'l', mods = 'ALT', action = act.EmitEvent('ActivatePaneDirection-right') }, + { key = 'Tab', mods = 'CTRL', action = act.ActivateTabRelative(1) }, + { key = 'Tab', mods = 'SHIFT|CTRL', action = act.ActivateTabRelative(-1) }, + { key = 'Enter', mods = 'SUPER', action = act.ToggleFullScreen }, + { key = '1', mods = 'ALT', action = act.ActivateTab(0) }, + { key = '2', mods = 'ALT', action = act.ActivateTab(1) }, + { key = '3', mods = 'ALT', action = act.ActivateTab(2) }, + { key = '4', mods = 'ALT', action = act.ActivateTab(3) }, + { key = '5', mods = 'ALT', action = act.ActivateTab(4) }, + { key = '6', mods = 'ALT', action = act.ActivateTab(5) }, + { key = '7', mods = 'ALT', action = act.ActivateTab(6) }, + { key = '8', mods = 'ALT', action = act.ActivateTab(7) }, + { key = '9', mods = 'ALT', action = act.ActivateTab(8) }, + { key = '0', mods = 'ALT', action = act.ActivateTab(-1) }, + { key = 'Enter', mods = 'ALT', action = act.SplitVertical{ domain = 'CurrentPaneDomain' } }, + { key = 'Enter', mods = 'SHIFT|ALT', action = act.SplitHorizontal{ domain = 'CurrentPaneDomain' } }, + { key = ')', mods = 'CTRL', action = act.ResetFontSize }, + { key = ')', mods = 'SHIFT|CTRL', action = act.ResetFontSize }, + { key = '0', mods = 'CTRL', action = act.ResetFontSize }, + { key = '0', mods = 'SHIFT|CTRL', action = act.ResetFontSize }, + { key = '+', mods = 'CTRL', action = act.IncreaseFontSize }, + { key = '+', mods = 'SHIFT|CTRL', action = act.IncreaseFontSize }, + { key = '-', mods = 'CTRL', action = act.DecreaseFontSize }, + { key = '-', mods = 'SHIFT|CTRL', action = act.DecreaseFontSize }, + { key = '=', mods = 'CTRL', action = act.IncreaseFontSize }, + { key = '=', mods = 'SHIFT|CTRL', action = act.IncreaseFontSize }, + { key = 'C', mods = 'CTRL', action = act.CopyTo 'Clipboard' }, + { key = 'C', mods = 'SHIFT|CTRL', action = act.CopyTo 'Clipboard' }, + { key = 'F', mods = 'CTRL', action = act.Search 'CurrentSelectionOrEmptyString' }, + { key = 'F', mods = 'SHIFT|CTRL', action = act.Search 'CurrentSelectionOrEmptyString' }, + { key = 'K', mods = 'CTRL', action = act.ClearScrollback 'ScrollbackOnly' }, + { key = 'K', mods = 'SHIFT|CTRL', action = act.ClearScrollback 'ScrollbackOnly' }, + { key = 'L', mods = 'CTRL', action = act.ShowDebugOverlay }, + { key = 'L', mods = 'SHIFT|CTRL', action = act.ShowDebugOverlay }, + { key = 'M', mods = 'CTRL', action = act.Hide }, + { key = 'M', mods = 'SHIFT|CTRL', action = act.Hide }, + { key = 'N', mods = 'CTRL', action = act.SpawnWindow }, + { key = 'N', mods = 'SHIFT|CTRL', action = act.SpawnWindow }, + { key = 'P', mods = 'CTRL', action = act.PaneSelect{ alphabet = '', mode = 'Activate' } }, + { key = 'P', mods = 'SHIFT|CTRL', action = act.PaneSelect{ alphabet = '', mode = 'Activate' } }, + { key = 'R', mods = 'CTRL', action = act.ReloadConfiguration }, + { key = 'R', mods = 'SHIFT|CTRL', action = act.ReloadConfiguration }, + { key = 'T', mods = 'CTRL', action = act.SpawnTab 'CurrentPaneDomain' }, + { key = 'T', mods = 'SHIFT|CTRL', action = act.SpawnTab 'CurrentPaneDomain' }, + { key = 'U', mods = 'CTRL', action = act.CharSelect{ copy_on_select = true, copy_to = 'ClipboardAndPrimarySelection' } }, + { key = 'U', mods = 'SHIFT|CTRL', action = act.CharSelect{ copy_on_select = true, copy_to = 'ClipboardAndPrimarySelection' } }, + { key = 'V', mods = 'CTRL', action = act.PasteFrom 'Clipboard' }, + { key = 'V', mods = 'SHIFT|CTRL', action = act.PasteFrom 'Clipboard' }, + { key = 'W', mods = 'CTRL', action = act.CloseCurrentTab{ confirm = true } }, + { key = 'W', mods = 'SHIFT|CTRL', action = act.CloseCurrentTab{ confirm = true } }, + { key = 'X', mods = 'CTRL', action = act.ActivateCopyMode }, + { key = 'X', mods = 'SHIFT|CTRL', action = act.ActivateCopyMode }, + { key = 'Z', mods = 'CTRL', action = act.TogglePaneZoomState }, + { key = 'Z', mods = 'SHIFT|CTRL', action = act.TogglePaneZoomState }, + { key = '[', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(-1) }, + { key = ']', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(1) }, + { key = '_', mods = 'CTRL', action = act.DecreaseFontSize }, + { key = '_', mods = 'SHIFT|CTRL', action = act.DecreaseFontSize }, + { key = 'c', mods = 'SHIFT|CTRL', action = act.CopyTo 'Clipboard' }, + { key = 'c', mods = 'SUPER', action = act.CopyTo 'Clipboard' }, + { key = 'f', mods = 'SHIFT|CTRL', action = act.Search 'CurrentSelectionOrEmptyString' }, + { key = 'f', mods = 'SUPER', action = act.Search 'CurrentSelectionOrEmptyString' }, + { key = 'k', mods = 'SHIFT|CTRL', action = act.ClearScrollback 'ScrollbackOnly' }, + { key = 'k', mods = 'SUPER', action = act.ClearScrollback 'ScrollbackOnly' }, + { key = 'l', mods = 'SHIFT|CTRL', action = act.ShowDebugOverlay }, + { key = 'm', mods = 'SHIFT|CTRL', action = act.Hide }, + { key = 'm', mods = 'SUPER', action = act.Hide }, + { key = 'n', mods = 'SHIFT|CTRL', action = act.SpawnWindow }, + { key = 'n', mods = 'SUPER', action = act.SpawnWindow }, + { key = 'p', mods = 'SHIFT|CTRL', action = act.PaneSelect{ alphabet = '', mode = 'Activate' } }, + { key = 'r', mods = 'SHIFT|CTRL', action = act.ReloadConfiguration }, + { key = 'r', mods = 'SUPER', action = act.ReloadConfiguration }, + { key = 't', mods = 'SHIFT|CTRL', action = act.SpawnTab 'CurrentPaneDomain' }, + { key = 't', mods = 'SUPER', action = act.SpawnTab 'CurrentPaneDomain' }, + { key = 'u', mods = 'SHIFT|CTRL', action = act.CharSelect{ copy_on_select = true, copy_to = 'ClipboardAndPrimarySelection' } }, + { key = 'v', mods = 'SHIFT|CTRL', action = act.PasteFrom 'Clipboard' }, + { key = 'v', mods = 'SUPER', action = act.PasteFrom 'Clipboard' }, + { key = 'w', mods = 'SHIFT|CTRL', action = act.CloseCurrentTab{ confirm = true } }, + { key = 'w', mods = 'SUPER', action = act.CloseCurrentTab{ confirm = true } }, + { key = 'x', mods = 'SHIFT|CTRL', action = act.ActivateCopyMode }, + { key = 'z', mods = 'SHIFT|CTRL', action = act.TogglePaneZoomState }, + { key = '{', mods = 'SUPER', action = act.ActivateTabRelative(-1) }, + { key = '{', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(-1) }, + { key = '}', mods = 'SUPER', action = act.ActivateTabRelative(1) }, + { key = '}', mods = 'SHIFT|SUPER', action = act.ActivateTabRelative(1) }, + { key = 'phys:Space', mods = 'SHIFT|CTRL', action = act.QuickSelect }, + { key = 'PageUp', mods = 'SHIFT', action = act.ScrollByPage(-1) }, + { key = 'PageUp', mods = 'CTRL', action = act.ActivateTabRelative(-1) }, + { key = 'PageUp', mods = 'SHIFT|CTRL', action = act.MoveTabRelative(-1) }, + { key = 'PageDown', mods = 'SHIFT', action = act.ScrollByPage(1) }, + { key = 'PageDown', mods = 'CTRL', action = act.ActivateTabRelative(1) }, + { key = 'PageDown', mods = 'SHIFT|CTRL', action = act.MoveTabRelative(1) }, + { key = 'LeftArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Left' }, + { key = 'LeftArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Left', 1 } }, + { key = 'RightArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Right' }, + { key = 'RightArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Right', 1 } }, + { key = 'UpArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Up' }, + { key = 'UpArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Up', 1 } }, + { key = 'DownArrow', mods = 'SHIFT|CTRL', action = act.ActivatePaneDirection 'Down' }, + { key = 'DownArrow', mods = 'SHIFT|ALT|CTRL', action = act.AdjustPaneSize{ 'Down', 1 } }, + { key = 'Insert', mods = 'SHIFT', action = act.PasteFrom 'PrimarySelection' }, + { key = 'Insert', mods = 'CTRL', action = act.CopyTo 'PrimarySelection' }, + { key = 'Copy', mods = 'NONE', action = act.CopyTo 'Clipboard' }, + { key = 'Paste', mods = 'NONE', action = act.PasteFrom 'Clipboard' }, +} + +local key_tables = { + copy_mode = { + { key = 'Tab', mods = 'NONE', action = act.CopyMode 'MoveForwardWord' }, + { key = 'Tab', mods = 'SHIFT', action = act.CopyMode 'MoveBackwardWord' }, + { key = 'Enter', mods = 'NONE', action = act.CopyMode 'MoveToStartOfNextLine' }, + { key = 'Escape', mods = 'NONE', action = act.CopyMode 'Close' }, + { key = 'Space', mods = 'NONE', action = act.CopyMode{ SetSelectionMode = 'Cell' } }, + { key = '$', mods = 'NONE', action = act.CopyMode 'MoveToEndOfLineContent' }, + { key = '$', mods = 'SHIFT', action = act.CopyMode 'MoveToEndOfLineContent' }, + { key = ',', mods = 'NONE', action = act.CopyMode 'JumpReverse' }, + { key = '0', mods = 'NONE', action = act.CopyMode 'MoveToStartOfLine' }, + { key = ';', mods = 'NONE', action = act.CopyMode 'JumpAgain' }, + { key = 'F', mods = 'NONE', action = act.CopyMode{ JumpBackward = { prev_char = false } } }, + { key = 'F', mods = 'SHIFT', action = act.CopyMode{ JumpBackward = { prev_char = false } } }, + { key = 'G', mods = 'NONE', action = act.CopyMode 'MoveToScrollbackBottom' }, + { key = 'G', mods = 'SHIFT', action = act.CopyMode 'MoveToScrollbackBottom' }, + { key = 'H', mods = 'NONE', action = act.CopyMode 'MoveToViewportTop' }, + { key = 'H', mods = 'SHIFT', action = act.CopyMode 'MoveToViewportTop' }, + { key = 'L', mods = 'NONE', action = act.CopyMode 'MoveToViewportBottom' }, + { key = 'L', mods = 'SHIFT', action = act.CopyMode 'MoveToViewportBottom' }, + { key = 'M', mods = 'NONE', action = act.CopyMode 'MoveToViewportMiddle' }, + { key = 'M', mods = 'SHIFT', action = act.CopyMode 'MoveToViewportMiddle' }, + { key = 'O', mods = 'NONE', action = act.CopyMode 'MoveToSelectionOtherEndHoriz' }, + { key = 'O', mods = 'SHIFT', action = act.CopyMode 'MoveToSelectionOtherEndHoriz' }, + { key = 'T', mods = 'NONE', action = act.CopyMode{ JumpBackward = { prev_char = true } } }, + { key = 'T', mods = 'SHIFT', action = act.CopyMode{ JumpBackward = { prev_char = true } } }, + { key = 'V', mods = 'NONE', action = act.CopyMode{ SetSelectionMode = 'Line' } }, + { key = 'V', mods = 'SHIFT', action = act.CopyMode{ SetSelectionMode = 'Line' } }, + { key = '^', mods = 'NONE', action = act.CopyMode 'MoveToStartOfLineContent' }, + { key = '^', mods = 'SHIFT', action = act.CopyMode 'MoveToStartOfLineContent' }, + { key = 'b', mods = 'NONE', action = act.CopyMode 'MoveBackwardWord' }, + { key = 'b', mods = 'ALT', action = act.CopyMode 'MoveBackwardWord' }, + { key = 'b', mods = 'CTRL', action = act.CopyMode 'PageUp' }, + { key = 'c', mods = 'CTRL', action = act.CopyMode 'Close' }, + { key = 'f', mods = 'NONE', action = act.CopyMode{ JumpForward = { prev_char = false } } }, + { key = 'f', mods = 'ALT', action = act.CopyMode 'MoveForwardWord' }, + { key = 'f', mods = 'CTRL', action = act.CopyMode 'PageDown' }, + { key = 'g', mods = 'NONE', action = act.CopyMode 'MoveToScrollbackTop' }, + { key = 'g', mods = 'CTRL', action = act.CopyMode 'Close' }, + { key = 'h', mods = 'NONE', action = act.CopyMode 'MoveLeft' }, + { key = 'j', mods = 'NONE', action = act.CopyMode 'MoveDown' }, + { key = 'k', mods = 'NONE', action = act.CopyMode 'MoveUp' }, + { key = 'l', mods = 'NONE', action = act.CopyMode 'MoveRight' }, + { key = 'm', mods = 'ALT', action = act.CopyMode 'MoveToStartOfLineContent' }, + { key = 'o', mods = 'NONE', action = act.CopyMode 'MoveToSelectionOtherEnd' }, + { key = 'q', mods = 'NONE', action = act.CopyMode 'Close' }, + { key = 't', mods = 'NONE', action = act.CopyMode{ JumpForward = { prev_char = true } } }, + { key = 'v', mods = 'NONE', action = act.CopyMode{ SetSelectionMode = 'Cell' } }, + { key = 'v', mods = 'CTRL', action = act.CopyMode{ SetSelectionMode = 'Block' } }, + { key = 'w', mods = 'NONE', action = act.CopyMode 'MoveForwardWord' }, + { key = 'y', mods = 'NONE', action = act.Multiple{ { CopyTo = 'ClipboardAndPrimarySelection' }, { CopyMode = 'Close' } } }, + { key = 'PageUp', mods = 'NONE', action = act.CopyMode 'PageUp' }, + { key = 'PageDown', mods = 'NONE', action = act.CopyMode 'PageDown' }, + { key = 'LeftArrow', mods = 'NONE', action = act.CopyMode 'MoveLeft' }, + { key = 'LeftArrow', mods = 'ALT', action = act.CopyMode 'MoveBackwardWord' }, + { key = 'RightArrow', mods = 'NONE', action = act.CopyMode 'MoveRight' }, + { key = 'RightArrow', mods = 'ALT', action = act.CopyMode 'MoveForwardWord' }, + { key = 'UpArrow', mods = 'NONE', action = act.CopyMode 'MoveUp' }, + { key = 'DownArrow', mods = 'NONE', action = act.CopyMode 'MoveDown' }, + }, + + search_mode = { + { key = 'Enter', mods = 'NONE', action = act.CopyMode 'PriorMatch' }, + { key = 'Escape', mods = 'NONE', action = act.CopyMode 'Close' }, + { key = 'n', mods = 'CTRL', action = act.CopyMode 'NextMatch' }, + { key = 'p', mods = 'CTRL', action = act.CopyMode 'PriorMatch' }, + { key = 'r', mods = 'CTRL', action = act.CopyMode 'CycleMatchType' }, + { key = 'u', mods = 'CTRL', action = act.CopyMode 'ClearPattern' }, + { key = 'PageUp', mods = 'NONE', action = act.CopyMode 'PriorMatchPage' }, + { key = 'PageDown', mods = 'NONE', action = act.CopyMode 'NextMatchPage' }, + { key = 'UpArrow', mods = 'NONE', action = act.CopyMode 'PriorMatch' }, + { key = 'DownArrow', mods = 'NONE', action = act.CopyMode 'NextMatch' }, + } +} + return { font_size = 14, disable_default_key_bindings = true, window_background_opacity = 0.95, color_scheme = "nightfox", hide_tab_bar_if_only_one_tab = true, + use_dead_keys = false, + keys = keys, + key_tables = key_tables, } diff --git a/home/zprofile b/home/zprofile index 4f7124b6..7a8fa6a1 100644 --- a/home/zprofile +++ b/home/zprofile @@ -1,4 +1,4 @@ -command -v pyenv && { +command -v pyenv > /dev/null && { export PYENV_ROOT="$HOME/.pyenv" echo $PATH | grep -i pyenv > /dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)"