WezTerm launch_menu 配置指南:为 Launcher 菜单定制启动项与 SpawnCommand 详解

发布时间:2026/9/12 1:54:08
WezTerm launch_menu 配置指南:为 Launcher 菜单定制启动项与 SpawnCommand 详解 WezTerm launch_menu 配置指南为 Launcher 菜单定制启动项与 SpawnCommand 详解【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/weztermlaunch_menu是 WezTerm 中用于向 Launcher Menu启动器菜单注入自定义启动项的配置项。通过它你可以在右键点击标签栏的按钮弹出的菜单中一键启动任意程序、指定工作目录与临时环境变量从而把常用开发工具、监控脚本或编译环境固化成一个可重复调用的启动入口。读完本文你将掌握launch_menu的完整配置语法、SpawnCommand对象各字段的语义以及如何结合源码理解它从配置 → 菜单项 → 新标签页的完整实现链路。什么是 Launcher Menu如何打开它在 WezTerm 中标签栏最右侧的按钮承担着新建标签页的职责左键单击直接按默认程序通常是你的 shell新建一个标签页而右键单击则会打开 Launcher Menu启动器菜单。Launcher Menu 默认列出当前配置的各种 multiplexer 域domain并提供在对应域中新建标签页或连接域的选项。此外你也可以把启动器绑定到快捷键上使用 ShowLauncher 或 ShowLauncherArgs 这两个 key assignment 触发菜单后者还支持通过launcher_alphabet等参数进一步定制模糊匹配模式与菜单内容见 ShowLauncherArgs。launch_menu自版本20200503-171512-b13ef15f起可用的作用就是在上述菜单中追加你自己的条目比如运行top监控进程、显式启动某个 shell、或拉起某个编译工具链。launch_menu 基础配置launch_menu是一个 Lua 数组数组中的每一个元素都是 SpawnCommand 对象的实例。下面的最小示例往菜单里添加了两个条目一个运行top监控进程活动另一个显式启动bashconfig.launch_menu { { args { top }, }, { -- 在启动器中显示的可选标签省略时将从 args 推导出标签 label Bash, -- 要派生的参数数组省略时使用默认程序 -- 见上文中关于默认程序的说明 args { bash, -l }, -- 可以为此命令指定一个备用的当前工作目录 -- 若不指定则默认基于 OSC 7 转义序列得到 -- 参见 Shell Integration 文档 -- 兜底使用用户主目录。 -- cwd /some/path -- 可以仅为这条命令覆盖环境变量 -- 语义与全局的 set_environment_variables 配置项一致。 -- set_environment_variables { FOO bar }, }, }配置写入后保存并重新加载config变更会自动热重载再次右键点击按钮即可在菜单顶部看到top与Bash两个新条目。SpawnCommand 字段详解从源码看SpawnCommand定义在 config/src/keyassignment.rs共包含六个字段launch_menu中的每个条目都对应这样一个结构体字段类型是否必填语义labelOptionString否菜单中显示的描述性标签省略时根据args自动推导argsOptionVecString否要执行的命令行程序 参数省略时使用该域的默认命令通常是用户的 shellcwdOptionPathBuf否命令的当前工作目录省略时按OSC 7 → 当前进程组 leader 的 cwd →default_cwd→ 主目录的顺序解析set_environment_variablesHashMapString, String否默认空仅为该命令设置的环境变量表语义同全局set_environment_variablesdomainSpawnTabDomain否默认CurrentPaneDomain在哪个域中派生该标签页默认域 / 当前窗格所在域 / 指定域名或域 idpositionOptionGuiPosition否新标签页/窗口的界面位置各字段的核心语义如下label用于在菜单中展示。若省略Launcher 会从args推导例如args { top }的条目会显示为top若args也省略则显示为(default shell)这一逻辑见下文源码分析。当你的命令参数较复杂时显式给出label能让菜单更清晰。args派生程序的参数数组其中第 0 个元素是程序本身其余为位置参数。省略时默认行为与 launch.md 中描述的默认程序规则一致。cwd为该命令指定独立的工作目录适合把在项目目录中启动开发环境做成菜单项。set_environment_variables以wezterm进程自身环境为基底再叠加你为这条命令指定的变量实现菜单项级的环境定制。domain对应源码中的SpawnTabDomain枚举见 config/src/keyassignment.rs用于把标签页派生到指定 multiplexer 域例如远程 SSH 域。源码视角launch_menu 如何变成菜单项从源码结构看launch_menu的消费链路非常清晰。配置侧Config结构体在 config/src/config.rs 中声明为#[dynamic(default)] pub launch_menu: VecSpawnCommand,即默认值为空数组未配置时不会产生任何自定义条目。在 GUI 侧wezterm-gui/src/overlay/launcher.rs 的build_entries函数负责把配置渲染为菜单项// Pull in the user defined entries from the launch_menu // section of the configuration. if args.flags.contains(LauncherFlags::LAUNCH_MENU_ITEMS) { for item in config.launch_menu { self.entries.push(Entry { label: match item.label.as_ref() { Some(label) label.to_string(), None match item.args.as_ref() { Some(args) args.join( ), None (default shell).to_string(), }, }, action: KeyAssignment::SpawnCommandInNewTab(item.clone()), }); } }这里印证了两点其一label缺省时的推导规则是将args用空格拼接args也缺省则显示(default shell)其二菜单项的触发动作是SpawnCommandInNewTab——即选择该条目等同于在当前窗口新建一个执行该命令的标签页。选中菜单项后事件在 wezterm-gui/src/frontend.rs 中被分发KeyAssignment::SpawnCommandInNewTab(spawn) { spawn_command(spawn, SpawnWhere::NewTab); } KeyAssignment::SpawnCommandInNewWindow(spawn) { spawn_command(spawn, SpawnWhere::NewWindow); }此外wezterm-gui/src/commands.rs 还会把launch_menu中的条目同步注册为可执行命令ExpandedCommand并以{label} (New Tab)的形式出现在命令面板与菜单栏的Shell子菜单中。这意味着同样的启动项不仅在右键的 Launcher Menu 里可用还能通过命令面板统一检索触发。当args或cwd缺省时程序构建由Config::build_prog与apply_cmd_defaults兜底见 config/src/config.rscwd未指定时依次尝试 OSC 7、进程组 leader 的 cwd、default_cwd最后才是主目录args未指定时使用CommandBuilder::new_default_prog()解析出的默认 shell。进阶实战按平台注入启动项由于launch_menu是纯 Lua 数据你可以在配置中结合wezterm.target_triple、wezterm.glob等函数动态生成条目。launch.md 提供了一个针对 Windows 的经典示例注入 PowerShell 入口并自动扫描已安装的 Visual Studio 版本把对应的 x64 原生工具链命令行vcvars64.bat加入菜单local wezterm require wezterm local launch_menu {} if wezterm.target_triple x86_64-pc-windows-msvc then table.insert(launch_menu, { label PowerShell, args { powershell.exe, -NoLogo }, }) -- 查找已安装的 Visual Studio 版本并把其编译环境命令行加入菜单 for _, vsvers in ipairs( wezterm.glob(Microsoft Visual Studio/20*, C:/Program Files (x86)) ) do local year vsvers:gsub(Microsoft Visual Studio/, ) table.insert(launch_menu, { label x64 Native Tools VS .. year, args { cmd.exe, /k, C:/Program Files (x86)/ .. vsvers .. /BuildTools/VC/Auxiliary/Build/vcvars64.bat, }, }) end end return { launch_menu launch_menu, }这一写法展示了launch_menu的典型高阶用法用 Lua 在加载配置时探测系统环境目标平台、已装软件据此动态构造菜单项。同理你也可以在 macOS 或 Linux 上扫描自定义的工具目录或根据某个配置文件是否存在来决定是否插入某个启动项。与相关配置项的关系理解launch_menu时容易与下面几个配置混淆这里一并厘清default_prog全局默认程序。当launch_menu条目省略args时使用的就是该默认程序它是全局兜底而launch_menu的args是条目级覆盖。参见 default_prog 相关说明。default_cwd全局默认工作目录。launch_menu条目省略cwd时的兜底之一。参见 default_cwd 文档。set_environment_variables全局环境变量注入launch_menu条目内的同名字段只作用于该条目二者语义一致、作用域不同。参见 set_environment_variables 文档。SpawnCommandInNewTab/SpawnCommandInNewWindow这两个 key assignment 也接受SpawnCommand对象。也就是说你既可以把命令放入 Launcher Menu也可以直接为它绑定快捷键或鼠标手势实现一个 SpawnCommand 多处复用。参见 SpawnCommandInNewTab 与 SpawnCommandInNewWindow。Shell IntegrationOSC 7新标签页工作目录的优先来源文档见 shell-integration.md。小结launch_menu是一个薄而实用的配置入口它以VecSpawnCommand的形式让用户为 Launcher Menu 注入任意启动项并通过label/args/cwd/set_environment_variables/domain五个可选项对每条命令进行精确控制。结合源码可以看到这些配置最终由 wezterm-gui/src/overlay/launcher.rs 渲染为SpawnCommandInNewTab动作并同步注册进命令面板形成右键 按钮、快捷键、命令面板三处统一的启动入口。无论是把监控工具、备用 shell、项目专用目录还是平台相关的编译环境固化进菜单launch_menu都是 WezTerm 配置中值得优先掌握的一项能力。【免费下载链接】weztermA GPU-accelerated cross-platform terminal emulator and multiplexer written by wez and implemented in Rust项目地址: https://gitcode.com/GitHub_Trending/we/wezterm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考