local wezterm = require 'wezterm' local act = wezterm.action local config = wezterm.config_builder() config.enable_kitty_keyboard = false -- Так работает стабильнее. local local_domain = { DomainName = 'local' } local default_prog local launch_menu local is_windows = wezterm.target_triple:find 'windows' if is_windows then local function wsl(name) return { DomainName = 'WSL:' .. name } end local pwsh = { 'pwsh.exe', '-NoLogo' } default_prog = pwsh launch_menu = { { label = 'PowerShell', domain = local_domain, args = pwsh }, { label = 'Командная строка', domain = local_domain, args = { 'cmd.exe' } }, { label = 'Ubuntu', domain = wsl 'Ubuntu' }, { label = 'Ubuntu 24.04.1 LTS', domain = wsl 'Ubuntu-24.04' }, } else local shell = os.getenv 'SHELL' or '/bin/bash' local shell_name = shell:match '([^/]+)$' or shell shell_name = shell_name:sub(1, 1):upper() .. shell_name:sub(2) default_prog = { shell, '-l' } launch_menu = { { label = shell_name, domain = local_domain, args = default_prog }, } end config.default_domain = 'local' config.default_prog = default_prog config.launch_menu = launch_menu -- В Wayland у WezTerm пока нет надёжной системной рамки окна в GNOME. -- XWayland возвращает обычный заголовок с кнопками и перетаскиванием. if not is_windows then config.enable_wayland = false end config.scrollback_lines = 50000 config.color_scheme = 'Ubuntu' -- Встроен в WezTerm и одинаково доступен на Windows и Linux. config.font = wezterm.font 'JetBrains Mono' config.font_size = 11.0 config.initial_cols = 120 config.initial_rows = 28 config.window_background_opacity = 1.0 config.window_decorations = 'TITLE|RESIZE' config.hide_tab_bar_if_only_one_tab = true config.freetype_load_target = 'HorizontalLcd' config.freetype_render_target = 'HorizontalLcd' config.keys = { { key = 'phys:Space', mods = 'CTRL|SHIFT', action = act.ShowLauncherArgs { flags = 'LAUNCH_MENU_ITEMS|DOMAINS' } }, { key = 'phys:V', mods = 'CTRL|SHIFT', action = act.PasteFrom 'Clipboard' }, { key = 'phys:T', mods = 'CTRL|SHIFT', action = act.SpawnCommandInNewTab { domain = local_domain, args = default_prog } }, { key = 'phys:R', mods = 'CTRL|SHIFT|ALT', action = act.ResetTerminal }, -- Переключение на вкладку по номеру: Ctrl+Shift+1..9. { key = 'phys:1', mods = 'CTRL|SHIFT', action = act.ActivateTab(0) }, { key = 'phys:2', mods = 'CTRL|SHIFT', action = act.ActivateTab(1) }, { key = 'phys:3', mods = 'CTRL|SHIFT', action = act.ActivateTab(2) }, { key = 'phys:4', mods = 'CTRL|SHIFT', action = act.ActivateTab(3) }, { key = 'phys:5', mods = 'CTRL|SHIFT', action = act.ActivateTab(4) }, { key = 'phys:6', mods = 'CTRL|SHIFT', action = act.ActivateTab(5) }, { key = 'phys:7', mods = 'CTRL|SHIFT', action = act.ActivateTab(6) }, { key = 'phys:8', mods = 'CTRL|SHIFT', action = act.ActivateTab(7) }, { key = 'phys:9', mods = 'CTRL|SHIFT', action = act.ActivateTab(-1) }, { key = 'phys:H', mods = 'CTRL|SHIFT|ALT', action = act.SplitHorizontal { domain = 'CurrentPaneDomain' } }, { key = 'phys:V', mods = 'CTRL|SHIFT|ALT', action = act.SplitVertical { domain = 'CurrentPaneDomain' } }, } return config