修复 Ghostty 下 Tmux 的可点击超链接问题
在 Ghostty 终端中使用 tmux 时,可能会遇到可点击超链接无法正常工作的问题。我自己就遇到了。一开始在 GitHub Issues 里搜了一圈,试了各种建议的方案,都没用。于是我换了 Kitty ✋😭✋
最近又回头研究了一下,找到了可行的解决方案。
解决方案
TL;DR
- 方案一:在 Ghostty 配置中禁用
mouse-shift-capture。 - 方案二:在 tmux 配置中禁用鼠标支持,即在
~/.tmux.conf中设置set -g mouse off。
| Ghostty\Tmux | Integration: 关闭 | Integration: 开启 |
|---|---|---|
| Shift Capture: False | ⌘ + Click | ⇧ + ⌘ + Click |
| Shift Capture: True | ⌘ + Click | 无法工作 |
方案一
Ghostty 有一个叫 mouse-shift-capture 的功能 [1],默认是关闭的。不知何时我在配置文件(~/.config/ghostty/config)中开启了这个功能,这就是为什么 ⇧ + ⌘ + Click 在我的笔记本上不生效的原因。
在 Ghostty 配置中注释掉或删除 mouse-shift-capture = true,就可以重新用 ⇧ + ⌘ + Click 在 tmux 中打开链接了。
原理解释
这个选项决定了谁来处理点击事件:终端(Ghostty)还是程序(Tmux)。
- 设为 true(失效):
- Ghostty 将
⇧ + ⌘ + Click直接发送给 Tmux。 - 结果:Tmux 收到了信号,但不知道怎么打开浏览器。
- Ghostty 将
- 设为 false(正常):
- Ghostty 检测到 Shift 键,决定自己处理该事件,忽略 Tmux。
- 结果:Ghostty 识别
⌘ + Click并帮你打开链接。
方案二
另一种方式是在 tmux 中禁用鼠标支持,即在 ~/.tmux.conf 中注释掉或删除 set -g mouse on。
这样修改后,可以用 ⌘ + Click(无需 Shift)打开链接。但代价是你会失去 tmux 中的以下鼠标功能:
- 在面板历史记录中鼠标滚动
- 鼠标文本选择和复制
- 鼠标标签/面板选择(点击聚焦标签/面板)
- 鼠标面板调整大小(拖拽面板边框)
原理解释
我没有去翻 tmux 文档确认,但我的理解是:
- 设为
on(拦截):- Tmux 告诉 Ghostty 由它来处理鼠标事件。
- 结果:Ghostty 将普通点击转发给 Tmux。
⌘ + Click由 Tmux 处理,但 Tmux 不知道怎么打开浏览器,所以不生效。
- 设为
off(正常):- Tmux 忽略鼠标,由 Ghostty 完全接管所有鼠标事件,不需要
⇧绕过键。因此⌘ + Click正常工作。
- Tmux 忽略鼠标,由 Ghostty 完全接管所有鼠标事件,不需要
结语
我用 tmux 主要为了节省时间,比如:
- 用
tmux-floating-pane快速执行操作而不用离开当前上下文,详情见 tmux_floating_pane。 - 用 tmux 的复制模式快速复制文本而不用切换到鼠标。
讽刺的是,我花在调试工具上的时间,可能比省下来的还多。tmux 值得这个成本吗?也许就像 Kitty 的开发者说的,“终端复用器是个坏主意” 😭
也许有一天我会放弃 tmux,但目前我真的需要浮动面板功能。[2]
决定运行中的程序是否能检测到鼠标点击时同时按下了 Shift 键。通常 Shift 键用于扩展鼠标选择范围。Option Reference - Configuration ↩︎
也许 Ghostty 未来会实现浮动面板功能 Float pane / popup support · ghostty-org/ghostty · Discussion #3197 ↩︎