157 lines
5.2 KiB
Lua
157 lines
5.2 KiB
Lua
---@type wezterm
|
|
local wezterm = require("wezterm")
|
|
local act = wezterm.action
|
|
|
|
local shortcuts = {}
|
|
|
|
local map = function(key, mods, action)
|
|
if type(mods) == "string" then
|
|
table.insert(shortcuts, { key = key, mods = mods, action = action })
|
|
elseif type(mods) == "table" then
|
|
for _, mod in pairs(mods) do
|
|
table.insert(shortcuts, { key = key, mods = mod, action = action })
|
|
end
|
|
end
|
|
end
|
|
|
|
wezterm.GLOBAL.enable_tab_bar = true
|
|
local toggleTabBar = wezterm.action_callback(function(window)
|
|
wezterm.GLOBAL.enable_tab_bar = not wezterm.GLOBAL.enable_tab_bar
|
|
window:set_config_overrides({
|
|
enable_tab_bar = wezterm.GLOBAL.enable_tab_bar,
|
|
})
|
|
end)
|
|
|
|
local openUrl = act.QuickSelectArgs({
|
|
label = "open url",
|
|
patterns = { "https?://\\S+" },
|
|
action = wezterm.action_callback(function(window, pane)
|
|
local url = window:get_selection_text_for_pane(pane)
|
|
wezterm.open_with(url)
|
|
end),
|
|
})
|
|
|
|
local changeCtpFlavor = act.InputSelector({
|
|
title = "Change Catppuccin flavor",
|
|
choices = {
|
|
{ label = "Mocha" },
|
|
{ label = "Macchiato" },
|
|
{ label = "Frappe" },
|
|
{ label = "Latte" },
|
|
},
|
|
action = wezterm.action_callback(function(window, _, _, label)
|
|
if label then
|
|
window:set_config_overrides({ color_scheme = "Catppuccin " .. label })
|
|
end
|
|
end),
|
|
})
|
|
|
|
-- use 'Backslash' to split horizontally
|
|
map("\\", "LEADER", act.SplitHorizontal({ domain = "CurrentPaneDomain" }))
|
|
-- and 'Minus' to split vertically
|
|
map("-", "LEADER", act.SplitVertical({ domain = "CurrentPaneDomain" }))
|
|
-- map 1-9 to switch to tab 1-9, 0 for the last tab
|
|
for i = 1, 9 do
|
|
map(tostring(i), { "LEADER", "SUPER" }, act.ActivateTab(i - 1))
|
|
end
|
|
map("0", { "LEADER", "SUPER" }, act.ActivateTab(-1))
|
|
-- 'hjkl' to move between panes
|
|
map("h", { "LEADER", "SUPER" }, act.ActivatePaneDirection("Left"))
|
|
map("j", { "LEADER", "SUPER" }, act.ActivatePaneDirection("Down"))
|
|
map("k", { "LEADER", "SUPER" }, act.ActivatePaneDirection("Up"))
|
|
map("l", { "LEADER", "SUPER" }, act.ActivatePaneDirection("Right"))
|
|
-- resize
|
|
map("h", "LEADER|SHIFT", act.AdjustPaneSize({ "Left", 5 }))
|
|
map("j", "LEADER|SHIFT", act.AdjustPaneSize({ "Down", 5 }))
|
|
map("k", "LEADER|SHIFT", act.AdjustPaneSize({ "Up", 5 }))
|
|
map("l", "LEADER|SHIFT", act.AdjustPaneSize({ "Right", 5 }))
|
|
-- spawn & close
|
|
map("c", "LEADER", act.SpawnTab("CurrentPaneDomain"))
|
|
map("x", "LEADER", act.CloseCurrentPane({ confirm = true }))
|
|
map("t", "LEADER", changeCtpFlavor)
|
|
map("t", { "SHIFT|CTRL", "SUPER" }, act.SpawnTab("CurrentPaneDomain"))
|
|
map("w", { "SHIFT|CTRL", "SUPER" }, act.CloseCurrentTab({ confirm = true }))
|
|
map("n", { "SHIFT|CTRL", "SUPER" }, act.SpawnWindow)
|
|
-- zoom states
|
|
map("z", { "LEADER", "SUPER" }, act.TogglePaneZoomState)
|
|
map("Z", { "LEADER", "SUPER" }, toggleTabBar)
|
|
-- copy & paste
|
|
map("v", "LEADER", act.ActivateCopyMode)
|
|
map("c", { "SHIFT|CTRL", "SUPER" }, act.CopyTo("Clipboard"))
|
|
map("v", { "SHIFT|CTRL", "SUPER" }, act.PasteFrom("Clipboard"))
|
|
map("f", { "SHIFT|CTRL", "SUPER" }, act.Search("CurrentSelectionOrEmptyString"))
|
|
-- rotation
|
|
map("e", { "LEADER", "SUPER" }, act.RotatePanes("Clockwise"))
|
|
-- pickers
|
|
map(" ", "LEADER", act.QuickSelect)
|
|
map("o", { "LEADER", "SUPER" }, openUrl)
|
|
map("p", { "LEADER", "SUPER" }, act.PaneSelect({ alphabet = "asdfghjkl;" }))
|
|
map("R", { "LEADER", "SUPER" }, act.ReloadConfiguration)
|
|
map("u", "SHIFT|CTRL", act.CharSelect)
|
|
map("p", { "SHIFT|CTRL", "SHIFT|SUPER" }, act.ActivateCommandPalette)
|
|
-- view
|
|
map("Enter", "ALT", act.ToggleFullScreen)
|
|
map("-", { "CTRL", "SUPER" }, act.DecreaseFontSize)
|
|
map("=", { "CTRL", "SUPER" }, act.IncreaseFontSize)
|
|
map("0", { "CTRL", "SUPER" }, act.ResetFontSize)
|
|
-- switch fonts
|
|
map("f", "LEADER", act.EmitEvent("switch-font"))
|
|
-- debug
|
|
map("l", "SHIFT|CTRL", act.ShowDebugOverlay)
|
|
|
|
map(
|
|
"r",
|
|
{ "LEADER", "SUPER" },
|
|
act.ActivateKeyTable({
|
|
name = "resize_mode",
|
|
one_shot = false,
|
|
})
|
|
)
|
|
|
|
local key_tables = {
|
|
resize_mode = {
|
|
{ key = "h", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
{ key = "j", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
{ key = "k", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
{ key = "l", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
{ key = "LeftArrow", action = act.AdjustPaneSize({ "Left", 1 }) },
|
|
{ key = "DownArrow", action = act.AdjustPaneSize({ "Down", 1 }) },
|
|
{ key = "UpArrow", action = act.AdjustPaneSize({ "Up", 1 }) },
|
|
{ key = "RightArrow", action = act.AdjustPaneSize({ "Right", 1 }) },
|
|
},
|
|
}
|
|
|
|
-- add a common escape sequence to all key tables
|
|
for k, _ in pairs(key_tables) do
|
|
table.insert(key_tables[k], { key = "Escape", action = "PopKeyTable" })
|
|
table.insert(key_tables[k], { key = "Enter", action = "PopKeyTable" })
|
|
table.insert(
|
|
key_tables[k],
|
|
{ key = "c", mods = "CTRL", action = "PopKeyTable" }
|
|
)
|
|
end
|
|
|
|
local M = {}
|
|
M.apply = function(c)
|
|
c.leader = {
|
|
key = "s",
|
|
mods = "CTRL",
|
|
timeout_milliseconds = math.maxinteger,
|
|
}
|
|
c.keys = shortcuts
|
|
c.disable_default_key_bindings = true
|
|
c.key_tables = key_tables
|
|
c.mouse_bindings = {
|
|
{
|
|
event = { Down = { streak = 1, button = { WheelUp = 1 } } },
|
|
mods = "NONE",
|
|
action = wezterm.action.ScrollByLine(5),
|
|
},
|
|
{
|
|
event = { Down = { streak = 1, button = { WheelDown = 1 } } },
|
|
mods = "NONE",
|
|
action = wezterm.action.ScrollByLine(-5),
|
|
},
|
|
}
|
|
end
|
|
return M
|