Как закрыть все окна справа в tmux

Есть ли способ выдать команду для закрытия всех окон tmux, если в этом окне что-то не открыто? Например, открытый файл, запущенный процесс и т.д.?

Я надеюсь на что-то, что работает как веб-браузер, где вы можете щелкнуть правой кнопкой мыши и выбрать close all other tabs to the right. Я хотел бы выдать это в tmux, и, как и в примере с веб-браузером, иметь «занятые» окна или панели, предлагающие мне закрыть их или молча не закрывается.

Я видел этот вопрос, но мне не обязательно введите команду для всех окон.


person Scott Skiles    schedule 13.02.2019    source источник
comment
Способ есть, но он не встроен. Придется заскриптовать. Вы можете получить количество текущих панелей с помощью #{window_panes} и перебрать их и убедиться, что номер тестируемой панели больше, чем текущая панель (т. е. справа от текущей панели). Затем просто отправьте kill pane для этой панели.   -  person jeremysprofile    schedule 14.02.2019
comment
Спасибо, Джереми!   -  person Scott Skiles    schedule 14.02.2019


Ответы (2)


Я только что создал скрипт для этого, вот он:

#!/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"

Лучший

person Jean Carlo Machado    schedule 11.10.2019

Вот альтернатива оболочки:

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

А вот то же самое (удобочитаемый вариант):

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

person pschmitt    schedule 21.11.2020