Intereting Posts
Расширение скобы и составная команда поиск и увеличение значений между символом второй тильды и символом третьей тильды в каждой строке файла txt Установка Zorin OS 6.3 на «Подготовка к установке» Автоматическое переключение на Wi-Fi Найти все вхождения 5 цифр после десятичной дроби, добавить цифру CentOS 7 не будет обслуживать статический контент https, почему бы и нет? Показывать информацию GEO IP в Firefox при использовании tor Почему моя переменная среды не видна из командной строки? usbip: проблема получения атрибутов устройства: нет такого файла или каталога Как игнорировать ошибки -l в поиске Как заставить yum загружать из определенного зеркала? как вызвать функции из цикла for в сценарии оболочки Установите другую версию Maven из версии, предоставленной Ubuntu Добавить порядковый номер за словом данных Разработка системы Watchdog Alert для обнаружения пропущенных периодических электронных писем

Изменение порядка окон tmux

Как я могу эффективно переупорядочить окна в tmux? Например, имея этот набор окон:

0:zsh 1:elinks 2:mutt 3:irssi 4:emacs 5:rss 6:htop 

Что мне нужно сделать, чтобы переместить rss между elinks и mutt , в результате чего:

 0:zsh 1:elinks 2:rss 3:mutt 4:irssi 5:emacs 6:htop 

Я знаю, как использовать move-window перемещения для перемещения окна к еще неиспользованному индексу, и я мог бы использовать их для достижения этого, но, очевидно, это очень утомительно.

swap-window может помочь вам:

 swap-window -t -1 

Он перемещает текущее окно слева на одну позицию.

От человека tmux :

 swap-window [-d] [-s src-window] [-t dst-window] (alias: swapw) This is similar to link-window, except the source and destination windows are swapped. It is an error if no window exists at src-window. 

Вы можете привязать его к ключу:

 bind-key -n S-Left swap-window -t -1 bind-key -n S-Right swap-window -t +1 

Затем вы можете использовать Shift+Left и Shift+Right для изменения текущего положения окна.

Вот рабочее решение, завернутое в функцию bash.

 list=$(tmux lsw -F '#I'); # for shift left, could be moved inside function list=$(tmux lsw -F '#I'); list=$(echo $list|rev); # for shift right, list reversed shift_tmux_window_range() { # depend on `list` local started=0 beg=$1 end=$2 for i in $list; do if (($i == $beg)); then started=1; h=$beg; tmux linkw -s $beg && tmux unlinkw -t $beg; elif (($i == $end)); then tmux movew -d -s $i -t $h; tmux movew -d -t $end; break; elif [ $started = 1 ]; then tmux movew -d -s $i -t $h; h=$i; fi; done } shift_tmux_window_range 5 2 

Бонус: пребывание в том же окне, если текущее активное окно не затронуто.

Если tmux – версия 1.7 или выше

 move-window -r 

или

 set-option -g renumber-windows on 

в .tmux.conf для автоматического выполнения, в будущем.