如何在tmux中关闭所有右侧的窗口

3

有没有一种方法可以发出命令关闭所有tmux窗口,除非该窗口中有打开的文件、正在运行的进程等?例如,类似于网页浏览器中右键单击并选择“关闭所有其他选项卡”。我希望在tmux中发出此命令,并且与网页浏览器示例类似,繁忙的窗口或面板会提示我关闭它们或无声地失败。

我看到了这个问题,但我不一定想对所有窗口发出命令。


1
有一种方法,但它不是内置的。您将需要编写脚本。您可以使用 #{window_panes} 获取当前窗格的数量,并循环遍历它们,确保正在测试的窗格号大于当前窗格(即在当前窗格右侧)。然后只需为该窗格发送 kill pane 命令即可。 - jeremysprofile
谢谢,Jeremy! - Scott Skiles
2个回答

2
这里有一个Shell的替代方案:
for win_id in $(tmux list-windows -F '#{window_active} #{window_id}' | awk '/^1/ { active=1; next } active { print $2 }'); do tmux kill-window -t "$win_id"; done

And here's the same (readable version):

for win_id in $(tmux list-windows -F '#{window_active} #{window_id}' | \
                awk '/^1/ { active=1; next } active { print $2 }')
do 
  tmux kill-window -t "$win_id"
done

编辑:我已经做了一个插件! https://github.com/pschmitt/tmux-forsaken


1

我刚刚编写了一个脚本来实现这个功能,代码如下:

#!/usr/bin/env python3
import subprocess
import os
import re

result = subprocess.run(['tmux', 'list-windows'], stdout=subprocess.PIPE)

result = result.stdout.decode('utf-8')

lines = result.splitlines()
should_close_next = False
for line in lines:

    if should_close_next:
        window = line.split(':')[0]
        os.system(f'tmux kill-window -t {window}')
        continue

    match = re.search("active", line)
    if match:
        should_close_next = True

要将其与您的tmux集成,请将其添加到您的tmux.conf中

bind-key "k" run-shell "kill_panes_to_right.py\n"

最好

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接