我正在尝试绑定X以执行以下操作:
y输入,则终止会话终止会话并关闭终端:
bind X confirm-before -p "Kill #S (y/n)?" kill-session
Run Code Online (Sandbox Code Playgroud)提示用户输入要终止的会话名称,并在终止后选择下一个会话:
bind X command-prompt -p "kill:" "switch-client -n \; kill-session -t '%%'"
Run Code Online (Sandbox Code Playgroud)我一直无法找到类似命令的示例。这是一个不起作用的解决方案:
bind X confirm-before -p "Kill #S (y/n)?" "SESSION='#S' \; \
switch-client -n \; kill-session -t \"$SESSION\""
Run Code Online (Sandbox Code Playgroud)Chr*_*sen 13
我认为这接近你想要的:
bind-key X confirm-before -p "Kill #S (y/n)?" "run-shell 'tmux switch-client -n \\\; kill-session -t \"#S\"'"
Run Code Online (Sandbox Code Playgroud)
您的 #3 方法是正确的,但问题是在其命令字符串confirm-before中没有进行status-left-style 替换(例如#S)。
上述绑定的一个警告是,由于一切都在 from 中完成run-shell,因此命令在任何特定客户端或会话的上下文之外运行。它确实有效,因为“默认”客户端(for switch-client)和“默认”会话(for #S)是最近活跃的。只要您只有一个活动客户端(例如,在 shell 命令完成运行之前,一个用户不会输入另一个tmux客户端),这就像您期望的那样;如果(例如)您在tmux客户端 A 中触发绑定,它可能会严重失败,但是在启动的 shell有机会运行其命令之前,tmux客户端 B接收到新输入run-shell。
这种特殊的竞争条件似乎是为命令提供客户端/会话/窗口/窗格信息的一个很好的动机run-shell。有一个关于获取if-shell和run-shell支持(可选?)status_replace()(即status-left- 样式替换)的 TODO 条目,但也许更好的选择是format_expand(),这是一种较新的超集status_replace(优惠#{client_tty}等)。
| 归档时间: |
|
| 查看次数: |
4829 次 |
| 最近记录: |