tmux - вставить окно в указанной позиции

14

В tmux есть команда «move-window», с помощью которой вы можете переместить окно к указанному пустому индексу следующим образом:

move-window -t 3

Однако, если индекс 3 уже занят, вы не сможете переместить текущее окно в позицию 3.

Я ищу вариант, который позволит мне переместить (вставить) мое окно в положение 3, даже если оно уже занято, а затем увеличить номера окон для других последующих окон (например, то, которое было первоначально в 3, теперь будет будет 4, далее будет 5 и т. д.)


источник

Ответы:

2

Сценарий ниже позволит вам делать то, что вы хотите. Вы можете запустить его из командной строки или сделать:

:run "ins-move 2 5"

Этот пример перемещает окно два в положение перед окном пять.

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done
Приостановлено до дальнейшего уведомления.
источник
Благодарность! Прекрасно работает - хотя мне придется адаптировать его для работы даже для таких случаев, как "5 2". По крайней мере, теперь я знаю, как это делается.
@ Андрей: Я рад, что смог начать вас. Пожалуйста, не забывайте отмечать принятые ответы и ставить отзыв, когда считаете, что это уместно.
Приостановлено до дальнейшего уведомления.
Я только что проголосовал за ваш ответ. Не мог сделать это раньше, потому что я только что получил достаточно очков репутации.
25

Пытаться: new-window -a

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

rwxrwxrwx
источник
Выглядит как лучшее решение, чем @DennisWilliamson, извините, Деннис :-) Я работаю tmux 1.9a, возможно, эта функция не была доступна в предыдущих версиях.
Соня Гамильтон
Потрясающие. Не уверен, как я это пропустил. Вы спасли меня от 4 лет в прошлом, путешественник во времени! Благодарность!
сл.
Не работает, если вы хотите новое окно с индексом 0.
NCCC
1

У меня есть решение без необходимости использования внешних скриптов. Поместите следующее в ваш .tmux.conf:

bind i command-prompt -p 'Insert window at:' 'run-shell "if tmux select-window -t %1; then tmux new-window -a; tmux swap-window -s %1 -t \$((%1+1)); else tmux new-window; tmux move-window -t %1; fi; tmux select-window -t #I; tmux select-window -t %1;"'

Нажмите [PREFIX] -i и укажите желаемое место вставки. Последние 2 команды выбора окна гарантируют, что «предыдущее» окно установлено в соответствии с ожиданиями, и вы переходите к вставленному окну.

РЕДАКТИРОВАТЬ: хорошо, я говорил слишком рано. Мне пришлось изменить , #Iчтобы , #{window_id}так как индекс окна изменяется для некоторых окон при вставке. Новая функция (с добавлением новых строк для удобства чтения):

bind i command-prompt -p 'Insert window at:' '      \
    run-shell "                                     \
        if tmux select-window -t %1; then           \
            tmux new-window -a;                     \
            tmux swap-window -s %1 -t \$((%1+1));   \
        else                                        \
            tmux new-window;                        \
            tmux move-window -t %1;                 \
        fi;                                         \
        tmux select-window -t #{window_id};         \
        tmux select-window -t %1;                   \
    "'                                               

Я начал использовать упрощенную версию с помощью следующих 2 команд в .tmux.conf:

 bind i command-prompt -p 'Insert window at:' 'new-window -a -t %1; swap-window -t -1'
 bind I command-prompt -p 'New window at:'    'new-window -t %1'

Prefix-i вставляет новое окно в положение x, когда окно x существует, и перемещает окна выше этого. Prefix-I создает новое окно в позиции x, когда окно x не существует.

gospes
источник