188 lines
4.3 KiB
Lua
188 lines
4.3 KiB
Lua
local wezterm = require 'wezterm'
|
|
local config = {}
|
|
|
|
config.font = wezterm.font_with_fallback {
|
|
'Iosevka Term SS12',
|
|
'Cascadia Code'
|
|
}
|
|
|
|
local appearance_themes = {
|
|
Light = 'dawnfox',
|
|
Dark = 'carbonfox',
|
|
}
|
|
|
|
local appearance = wezterm.gui.get_appearance()
|
|
config.color_scheme = appearance_themes[appearance] or 'carbonfox'
|
|
config.font_size = 14
|
|
config.enable_tab_bar = true
|
|
config.use_fancy_tab_bar = false
|
|
-- config.front_end = "WebGpu"
|
|
-- config.integrated_title_button_style = "Gnome"
|
|
|
|
function basename(s)
|
|
return string.gsub(s, '(.*[/\\])(.*)', '%2')
|
|
end
|
|
|
|
wezterm.on(
|
|
'format-tab-title',
|
|
function(tab, tabs, panes, config, hover, maxwidth)
|
|
local tab_name
|
|
local title = tab.tab_title
|
|
if title and #title > 0 then
|
|
tab_name = tab.tab_id .. ':' .. title
|
|
end
|
|
local pane = tab.active_pane
|
|
local name = pane.foreground_process_name
|
|
if name then
|
|
tab_name = tab.tab_id .. ':' .. basename(name)
|
|
end
|
|
if tab.is_active then
|
|
return {
|
|
'ResetAttributes',
|
|
{ Text = ' ' .. tab_name .. '* '},
|
|
}
|
|
-- elseif tab.is_last_active then
|
|
-- return {
|
|
-- { Text = ' ' .. tab_name .. '- ' },
|
|
-- }
|
|
else
|
|
return {
|
|
'ResetAttributes',
|
|
{ Text = ' ' .. tab_name .. ' ' }
|
|
}
|
|
end
|
|
end
|
|
)
|
|
|
|
-- keys
|
|
local act = wezterm.action
|
|
config.leader = { key = 'a', mods = 'CTRL', timeout_milliseconds = 1000 }
|
|
config.keys = {
|
|
{
|
|
key = 'a',
|
|
mods = 'LEADER|CTRL',
|
|
action = wezterm.action.SendKey { key = 'a', mods = 'CTRL' },
|
|
},
|
|
{
|
|
key = "c",
|
|
mods = "LEADER",
|
|
action = act.SpawnTab 'CurrentPaneDomain'
|
|
},
|
|
{
|
|
key = "e",
|
|
mods = "LEADER",
|
|
action = act.CharSelect {
|
|
copy_on_select = true,
|
|
copy_to = 'ClipboardAndPrimarySelection',
|
|
},
|
|
},
|
|
{
|
|
key = "C",
|
|
mods = "LEADER",
|
|
action = act.SpawnTab 'CurrentPaneDomain'
|
|
},
|
|
{
|
|
key = "x",
|
|
mods = "LEADER",
|
|
action = act.CloseCurrentPane { confirm = true }
|
|
},
|
|
{
|
|
key = "p",
|
|
mods = "LEADER",
|
|
action = act.ActivateTabRelative(-1)
|
|
},
|
|
{
|
|
key = "n",
|
|
mods = "LEADER",
|
|
action = act.ActivateTabRelative(1)
|
|
},
|
|
{
|
|
key = "%",
|
|
mods = "LEADER|SHIFT",
|
|
action = act.SplitPane {
|
|
direction = "Right"
|
|
}
|
|
},
|
|
{
|
|
key = "\"",
|
|
mods = "LEADER|SHIFT",
|
|
action = act.SplitPane {
|
|
direction = "Down"
|
|
}
|
|
},
|
|
{
|
|
key = "o",
|
|
mods = "LEADER",
|
|
action = act.ActivatePaneDirection 'Next'
|
|
},
|
|
{
|
|
key = "h",
|
|
mods = "LEADER",
|
|
action = act.ActivatePaneDirection 'Left'
|
|
},
|
|
{
|
|
key = "l",
|
|
mods = "LEADER",
|
|
action = act.ActivatePaneDirection 'Right'
|
|
},
|
|
{
|
|
key = "j",
|
|
mods = "LEADER",
|
|
action = act.ActivatePaneDirection 'Down'
|
|
},
|
|
{
|
|
key = "k",
|
|
mods = "LEADER",
|
|
action = act.ActivatePaneDirection 'Up'
|
|
},
|
|
{
|
|
key = "P",
|
|
mods = "LEADER",
|
|
action = act.PasteFrom 'Clipboard'
|
|
},
|
|
{
|
|
key = "s",
|
|
mods = "LEADER",
|
|
action = act.QuickSelect
|
|
},
|
|
{
|
|
key = "Y",
|
|
mods = "LEADER",
|
|
action = act.CopyTo 'Clipboard'
|
|
},
|
|
{
|
|
key = "v",
|
|
mods = "LEADER",
|
|
action = act.ActivateCopyMode
|
|
},
|
|
{
|
|
key = "f",
|
|
mods = "LEADER",
|
|
action = act.Search("CurrentSelectionOrEmptyString")
|
|
},
|
|
{
|
|
key = ',',
|
|
mods = 'LEADER',
|
|
action = act.PromptInputLine {
|
|
description = 'Enter new name for tab',
|
|
action = wezterm.action_callback(function(window, pane, line)
|
|
-- line will be `nil` if they hit escape without entering anything
|
|
-- An empty string if they just hit enter
|
|
-- Or the actual line of text they wrote
|
|
if line then
|
|
window:active_tab():set_title(line)
|
|
end
|
|
end),
|
|
},
|
|
},
|
|
}
|
|
for i = 1, 8 do
|
|
-- CTRL+ALT + number to activate that tab
|
|
table.insert(config.keys, {
|
|
key = tostring(i),
|
|
mods = 'LEADER',
|
|
action = act.ActivateTab(i - 1),
|
|
})
|
|
end
|
|
return config
|