tmux - Wstaw okno w określonej pozycji


14

tmux ma polecenie „move-window”, za pomocą którego możesz przenieść okno do określonego pustego indeksu w następujący sposób:

move-window -t 3

Jeśli jednak indeks 3 jest już zajęty, nie będzie można przenieść bieżącego okna do pozycji 3.

Szukam opcji, która pozwoli mi przenieść (wstawić) moje okno w pozycji 3, nawet jeśli jest już zajęte, a następnie zwiększyć numery okien w kolejnych kolejnych oknach (na przykład ta, która była pierwotnie w 3, teraz będzie być 4, następujące będzie 5 itd.)

tmux 

Odpowiedzi:


2

Poniższy skrypt pozwoli ci robić, co chcesz. Możesz uruchomić go z wiersza poleceń powłoki lub możesz:

:run "ins-move 2 5"

Ten przykład przenosi okno dwa do położenia przed oknem piątym.

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done

Dzięki! Działa świetnie - ale będę musiał dostosować go do pracy, nawet w przypadkach takich jak „5 2”. Przynajmniej teraz wiem, jak to się robi.

@Andrei: Cieszę się, że udało mi się zacząć. Nie zapomnij zaznaczyć odpowiedzi zaakceptowanych i głosować, gdy uważasz, że jest to właściwe.
Wstrzymano do odwołania.

Właśnie głosowałem twoją odpowiedź. Nie mogłem tego zrobić wcześniej, ponieważ właśnie dostałem wystarczającą liczbę punktów reputacji.

25

Próbować: new-window -a

użycie opcji -a podczas tworzenia nowego okna może wstawić nowy tylko przy następnym indeksie, podczas gdy indeks wszystkich pozostałych kolejnych okien automatycznie wzrośnie.


Wygląda na lepsze rozwiązanie niż @DennisWilliamson, przepraszam Dennis :-) Używam tmux 1.9a, może ta funkcja nie była dostępna w poprzednich wersjach.
Sonia Hamilton,

Niesamowite. Nie jestem pewien, jak mi tego brakowało. Uratowałeś mnie od 4 lat w przeszłości, podróżniku w czasie! Dzięki!
rld.

Nie działa, jeśli chcesz mieć nowe okno o indeksie 0
nccc

1

Mam rozwiązanie bez potrzeby używania zewnętrznych skryptów. Umieść następujące dane w pliku .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;"'

Naciśnij [PREFIKS] -i i podaj żądaną lokalizację wstawiania. Ostatnie 2 polecenia wyboru okna upewniają się, że „poprzednie” okno jest ustawione zgodnie z oczekiwaniami i przechodzi się do wstawionego okna.

EDYCJA: ok, mówiłem za wcześnie. Musiałem zmienić #Ina, #{window_id}ponieważ indeks okna zmienia się dla niektórych okien podczas wstawiania. Nowa funkcja (z dodanymi nowymi wierszami dla czytelności):

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;                   \
    "'                                               

Zacząłem używać wersji uproszczonej, używając następujących 2 poleceń w .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'

Prefiks-i wstawia nowe okno w pozycji x, gdy istnieje okno x , i przenosi okna powyżej tego okna w górę. Prefiks-I tworzy nowe okno w pozycji x, gdy okno x nie istnieje.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.