253 lines
9.2 KiB
Lua
253 lines
9.2 KiB
Lua
-- ╭─────────────────────────────────────────────────────────╮
|
|
-- │ KEYMAPS │
|
|
-- ╰─────────────────────────────────────────────────────────╯
|
|
|
|
local wezterm = WEZTERM
|
|
local act = wezterm.action
|
|
|
|
-- Set up some reference values
|
|
local Chord = "SHIFT|CTRL"
|
|
local LeaderChord = "LEADER|SHIFT|CTRL"
|
|
local LeaderShift = "LEADER|SHIFT"
|
|
local LeaderCtrl = "LEADER|CTRL"
|
|
|
|
local FuzzyLaunch = "FUZZY|TABS|DOMAINS|WORKSPACES|COMMANDS|LAUNCH_MENU_ITEMS|KEY_ASSIGNMENTS"
|
|
|
|
local resurrect = wezterm.plugin.require("https://github.com/MLFlexer/resurrect.wezterm")
|
|
local tunicodes = require("plugins/tunicodes")
|
|
|
|
local opts = {
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Leader key ━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
leader = { key = " ", mods = "CTRL", timeout_milliseconds = 1500 },
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━ Global Key Mappings ━━━━━━━━━━━━━━━━━━━━━
|
|
keys = {
|
|
-- Close window
|
|
{ key = "q", mods = LeaderChord, action = act.QuitApplication },
|
|
-- Split pane
|
|
{ key = "|", mods = LeaderShift, action = act.SplitHorizontal({ domain = "CurrentPaneDomain" }) },
|
|
{ key = "_", mods = LeaderShift, action = act.SplitVertical({ domain = "CurrentPaneDomain" }) },
|
|
|
|
-- Move pane
|
|
{ key = "h", mods = Chord, action = act.ActivatePaneDirection("Left") },
|
|
{ key = "j", mods = Chord, action = act.ActivatePaneDirection("Down") },
|
|
{ key = "k", mods = Chord, action = act.ActivatePaneDirection("Up") },
|
|
{ key = "l", mods = Chord, action = act.ActivatePaneDirection("Right") },
|
|
-- Move pane to new window
|
|
{
|
|
key = "!",
|
|
mods = LeaderShift,
|
|
action = wezterm.action_callback(function(_, pane)
|
|
pane:move_to_new_window()
|
|
end),
|
|
},
|
|
|
|
-- Toggle pane zoom
|
|
{
|
|
key = "z",
|
|
mods = Chord,
|
|
action = act.TogglePaneZoomState,
|
|
},
|
|
{
|
|
key = "z",
|
|
mods = "LEADER",
|
|
action = act.TogglePaneZoomState,
|
|
},
|
|
-- Reload Config
|
|
{ key = "F5", mods = "LEADER", action = act.ReloadConfiguration },
|
|
|
|
-- Close pane
|
|
{ key = "q", mods = "LEADER", action = act.CloseCurrentPane({ confirm = true }) },
|
|
{ key = "q", mods = Chord, action = act.CloseCurrentPane({ confirm = true }) },
|
|
|
|
-- Resize pane
|
|
{ key = "h", mods = "ALT", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
{ key = "j", mods = "ALT", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
{ key = "k", mods = "ALT", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
{ key = "l", mods = "ALT", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
-- Resize pane mode
|
|
{ key = "r", mods = "LEADER", action = act.ActivateKeyTable({ name = "resize_mode", one_shot = false }) },
|
|
{ key = "p", mods = "LEADER", action = act.ActivateKeyTable({ name = "window_mode", one_shot = false }) },
|
|
|
|
-- Tab Manipulation
|
|
{ key = "PageUp", mods = "CTRL", action = act.ActivateTabRelative(1) },
|
|
{ key = "PageUp", mods = Chord, action = act.MoveTabRelative(1) },
|
|
{ key = "PageDown", mods = "CTRL", action = act.ActivateTabRelative(-1) },
|
|
{ key = "PageDown", mods = Chord, action = act.MoveTabRelative(-1) },
|
|
|
|
{ -- Quick launch
|
|
key = "x",
|
|
mods = LeaderCtrl,
|
|
action = act.ShowLauncherArgs({
|
|
title = "Quick Launch",
|
|
flags = FuzzyLaunch,
|
|
}),
|
|
},
|
|
|
|
-- Search
|
|
{ key = "f", mods = "LEADER", action = act.Search("CurrentSelectionOrEmptyString") },
|
|
{ key = "f", mods = Chord, action = act.Search("CurrentSelectionOrEmptyString") },
|
|
|
|
-- Miscellaneous
|
|
{ key = "a", mods = LeaderCtrl, action = act.SendKey({ key = "a", mods = "CTRL" }) },
|
|
{ key = ";", mods = "CTRL", action = act.ActivateCommandPalette },
|
|
{ key = "F1", mods = "LEADER", action = act.ShowDebugOverlay },
|
|
{
|
|
key = "u",
|
|
mods = LeaderCtrl,
|
|
action = act.AttachDomain("SSH:aws-discord"),
|
|
},
|
|
{
|
|
key = "s",
|
|
mods = LeaderCtrl,
|
|
action = act.ShowLauncherArgs({ title = "Connect to SSH server", flags = "FUZZY|DOMAINS" }),
|
|
},
|
|
{ key = "z", mods = LeaderCtrl, action = act.TogglePaneZoomState },
|
|
{ key = "n", mods = LeaderCtrl, action = act.SpawnWindow },
|
|
{ key = "x", mods = "LEADER", action = act.ActivateCopyMode },
|
|
|
|
-- Naming
|
|
{ -- Rename [W]orkspace
|
|
key = "w",
|
|
mods = LeaderCtrl,
|
|
action = act.PromptInputLine({
|
|
description = "Enter new name for the workspace:",
|
|
action = wezterm.action_callback(function(window, _, line)
|
|
if line then
|
|
wezterm.mux.rename_workspace(window:active_workspace(), line)
|
|
end
|
|
end),
|
|
}),
|
|
},
|
|
{ -- Rename [T]ab
|
|
key = "t",
|
|
mods = LeaderCtrl,
|
|
action = act.PromptInputLine({
|
|
description = "Enter new name for the tab:",
|
|
action = wezterm.action_callback(function(_, pane, line)
|
|
if line then
|
|
local tab = pane:tab()
|
|
---@diagnostic disable-next-line: need-check-nil
|
|
tab:set_title(line)
|
|
end
|
|
end),
|
|
}),
|
|
},
|
|
{ -- Save [w]orkspace State
|
|
key = "w",
|
|
mods = "ALT",
|
|
action = wezterm.action_callback(function()
|
|
resurrect.save_state(resurrect.workspace_state.get_workspace_state())
|
|
end),
|
|
},
|
|
{ -- Save [W]indow State
|
|
key = "W",
|
|
mods = "ALT",
|
|
action = resurrect.window_state.save_window_action(),
|
|
},
|
|
{ -- [S]ave Session
|
|
key = "s",
|
|
mods = "ALT",
|
|
action = act.Multiple({
|
|
wezterm.action_callback(function(_, _)
|
|
resurrect.save_state(resurrect.workspace_state.get_workspace_state())
|
|
resurrect.window_state.save_window_action()
|
|
end),
|
|
}),
|
|
},
|
|
{ -- [R]estore Session
|
|
key = "r",
|
|
mods = "ALT",
|
|
action = wezterm.action_callback(function(win, pane)
|
|
resurrect.fuzzy_load(win, pane, function(id)
|
|
local type = string.match(id, "^([^/]+)") -- match before '/'
|
|
id = string.match(id, "([^/]+)$") -- match after '/'
|
|
id = string.match(id, "(.+)%..+$") -- remove file extension
|
|
local state
|
|
if type == "workspace" then
|
|
state = resurrect.load_state(id, "workspace")
|
|
resurrect.workspace_state.restore_workspace(state, {
|
|
relative = true,
|
|
restore_text = true,
|
|
on_pane_restore = resurrect.tab_state.default_on_pane_restore,
|
|
})
|
|
elseif type == "window" then
|
|
state = resurrect.load_state(id, "window")
|
|
resurrect.window_state.restore_window(pane:window(), state, {
|
|
relative = true,
|
|
restore_text = true,
|
|
on_pane_restore = resurrect.tab_state.default_on_pane_restore,
|
|
-- uncomment this line to use active tab when restoring
|
|
-- tab = win:active_tab(),
|
|
})
|
|
end
|
|
end)
|
|
end),
|
|
},
|
|
{ -- [.] Insert Unicode and Emoji symbols
|
|
key = ".",
|
|
mods = LeaderCtrl,
|
|
action = tunicodes.DefaultAction,
|
|
},
|
|
{ key = "u", mods = LeaderCtrl, action = act.EmitEvent("toggle-tabbar") },
|
|
},
|
|
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━ Conditional Key Mappings ━━━━━━━━━━━━━━━━━━━
|
|
key_tables = {
|
|
resize_mode = { ---------- Resize Pane Mode -------------------------
|
|
{ key = "LeftArrow", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
{ key = "h", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
|
|
{ key = "RightArrow", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
{ key = "l", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
|
|
{ key = "UpArrow", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
{ key = "k", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
|
|
{ key = "DownArrow", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
{ key = "j", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
|
|
-- Cancel the mode by pressing escape
|
|
{ key = "Escape", action = "PopKeyTable" },
|
|
},
|
|
window_mode = { --------- Activate Pane Mode ----------------------
|
|
{ key = "LeftArrow", action = act.ActivatePaneDirection("Left") },
|
|
{ key = "h", action = act.ActivatePaneDirection("Left") },
|
|
|
|
{ key = "RightArrow", action = act.ActivatePaneDirection("Right") },
|
|
{ key = "l", action = act.ActivatePaneDirection("Right") },
|
|
|
|
{ key = "UpArrow", action = act.ActivatePaneDirection("Up") },
|
|
{ key = "k", action = act.ActivatePaneDirection("Up") },
|
|
|
|
{ key = "DownArrow", action = act.ActivatePaneDirection("Down") },
|
|
{ key = "j", action = act.ActivatePaneDirection("Down") },
|
|
},
|
|
},
|
|
|
|
-- ━━━━━━━━━━━━━━━━━━━━━━━━━━━ Mouse Bindings ━━━━━━━━━━━━━━━━━━━━━━━━
|
|
mouse_bindings = {
|
|
{ -- Left-Click: (Up) Select Text
|
|
event = { Up = { streak = 1, button = "Left" } },
|
|
mods = "NONE",
|
|
action = act.CompleteSelection("ClipboardAndPrimarySelection"),
|
|
},
|
|
{ -- Ctrl+Left-Click: (Up) Open Hyperlink
|
|
event = { Up = { streak = 1, button = "Left" } },
|
|
mods = "CTRL",
|
|
action = act.OpenLinkAtMouseCursor,
|
|
},
|
|
{ -- Ctrl+WheelUp: Go to previous tab
|
|
event = { Down = { streak = 1, button = { WheelUp = 1 } } },
|
|
mods = "CTRL",
|
|
action = act.ActivateTabRelative(-1),
|
|
},
|
|
{ -- Ctrl+WheelDown: Go to next tab
|
|
event = { Down = { streak = 1, button = { WheelDown = 1 } } },
|
|
mods = "CTRL",
|
|
action = act.ActivateTabRelative(1),
|
|
},
|
|
},
|
|
}
|
|
|
|
return opts
|