tmux: inserta una ventana en una posición especificada

13

tmux tiene el comando "mover ventana" con el que puede mover una ventana a un índice vacío especificado de la siguiente manera:

move-window -t 3

Sin embargo, si el índice 3 ya está en uso, no podrá mover su ventana actual a la posición 3.

Estoy buscando una opción que me permita mover (insertar) mi ventana en la posición 3 incluso si ya está ocupada y luego aumentar los números de ventana para las otras ventanas posteriores (por ejemplo, la que originalmente estaba en 3 ahora ser 4, lo siguiente será 5 etc.)


fuente

Respuestas:

2

El siguiente script le permitirá hacer lo que quiera. Puede ejecutarlo desde un indicador de comandos de shell o puede hacer:

:run "ins-move 2 5"

Ese ejemplo mueve la ventana dos a la posición anterior a la ventana cinco.

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done
Dennis Williamson
fuente
¡Gracias! Funciona muy bien, aunque tendré que adaptarlo para que funcione incluso para casos como "5 2". Al menos ahora sé cómo se hace.
@Andrei: Me alegra haber podido ayudarte a comenzar. No olvide marcar las respuestas aceptadas y votar cuando considere que es apropiado.
Dennis Williamson
Voté tu respuesta justo ahora. No podía hacerlo antes porque ahora tengo suficientes puntos de reputación.
25

Tratar: new-window -a

usando la opción -a cuando se crea una nueva ventana puede insertar la nueva justo en el siguiente índice, mientras que el índice de todas las demás ventanas posteriores aumentará automáticamente.

rwxrwxrwx
fuente
Parece una mejor solución que @DennisWilliamson, lo siento Dennis :-) Estoy ejecutando tmux 1.9a, tal vez esta función no estaba disponible en versiones anteriores.
Sonia Hamilton
Increíble. No estoy seguro de cómo me perdí eso. ¡Me salvaste de 4 años en el pasado, viajero en el tiempo! ¡Gracias!
rld.
1

Tengo una solución sin la necesidad de scripts externos. Ponga lo siguiente en su .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;"'

Presione [PREFIX] -i y proporcione la ubicación de inserción deseada. Los últimos 2 comandos de ventana de selección se aseguran de que la ventana 'anterior' esté configurada como se espera y que vaya a la ventana insertada.

EDITAR: ok, hablé demasiado pronto. Tuve que cambiar #Ia #{window_id}porque el índice de la ventana cambia para algunas ventanas en la inserción. La nueva función (con nuevas líneas agregadas para facilitar la lectura):

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

Comencé a usar una versión simplificada, a través de los siguientes 2 comandos en .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'

Prefijo-i inserta una nueva ventana en la posición x cuando existe la ventana x , y mueve las ventanas por encima de esa. Prefijo-I crea una nueva ventana en la posición x cuando la ventana x no existe.

gospes
fuente