tmux - Insere uma janela em uma posição especificada


13

O tmux possui o comando "move-window" com o qual você pode mover uma janela para um índice vazio especificado da seguinte forma:

move-window -t 3

No entanto, se o índice 3 já estiver em uso, você não poderá mover sua janela atual para a posição 3.

Estou procurando uma opção que me permita mover (inserir) minha janela na posição 3, mesmo que já esteja ocupada, e depois aumentar o número de janelas para as outras janelas subseqüentes (por exemplo, a que estava originalmente com 3) agora ser 4, o seguinte será 5 etc.)

tmux 

Respostas:


2

O script abaixo permitirá que você faça o que quiser. Você pode executá-lo em um prompt de shell ou pode:

:run "ins-move 2 5"

Esse exemplo move a janela dois para a posição anterior à janela cinco.

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

Obrigado! Funciona muito bem - embora eu tenha que adaptá-lo para funcionar mesmo em casos como "5 2". Pelo menos agora eu sei como é feito.

@Andrei: Estou feliz por ter sido capaz de começar. Não se esqueça de marcar as respostas aceitas e de votar quando achar apropriado.
Pausado até novo aviso.

Votei sua resposta agora mesmo. Não podia fazer isso antes porque agora eu tenho pontos de reputação suficientes.

25

Experimentar: new-window -a

usar -a opção ao criar nova janela pode inserir a nova apenas no próximo índice, enquanto o índice de todas as outras janelas subseqüentes aumentará automaticamente.


Parece uma solução melhor do que @DennisWilliamson, desculpe Dennis :-) Estou executando tmux 1.9a, talvez esse recurso não estivesse disponível nas versões anteriores.
Sonia Hamilton

Impressionante. Não tenho certeza de como eu perdi isso. Você me salvou de 4 anos no passado, viajante do tempo! Obrigado!
rld.

Não funciona se você deseja uma nova janela no índice 0.
nccc 7/01

1

Eu tenho uma solução sem a necessidade de scripts externos. Coloque o seguinte em seu arquivo .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;"'

Pressione [PREFIX] -i e forneça o local desejado para a inserção. Os últimos 2 comandos da janela de seleção garantem que a janela 'anterior' esteja definida conforme o esperado e você vá para a janela inserida.

EDIT: ok, eu falei muito cedo. Eu tive que mudar #Ipara #{window_id}porque o índice da janela muda para algumas janelas na inserção. A nova função (com novas linhas adicionadas para facilitar a leitura):

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

Comecei a usar uma versão simplificada, através dos 2 comandos a seguir em .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'

O prefixo-i insere uma nova janela na posição x quando a janela x existe e move as janelas acima dessa para cima. O prefixo-I cria uma nova janela na posição x quando a janela x não existe.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.