tmux - Insère une fenêtre à une position spécifiée

14

tmux a la commande "move-window" avec laquelle vous pouvez déplacer une fenêtre vers un index vide spécifié comme ceci:

move-window -t 3

Cependant, si l'index 3 est déjà pris, vous ne pourrez pas déplacer votre fenêtre actuelle en position 3.

Je cherche une option qui me permettra de déplacer (insérer) ma fenêtre en position 3 même si elle est déjà prise et d'augmenter ensuite le nombre de fenêtres pour les autres fenêtres suivantes (par exemple celle qui était à l'origine à 3 va maintenant être 4, ce qui suit sera 5 etc.)


la source

Réponses:

2

Le script ci-dessous vous permettra de faire ce que vous voulez. Vous pouvez l'exécuter à partir d'une invite du shell ou vous pouvez faire:

:run "ins-move 2 5"

Cet exemple déplace la fenêtre deux à la position avant la fenêtre cinq.

#!/bin/bash
for ((i=$1; i<$2-1; i++))
do
    tmux swap-window -s :$i -t :$((i+1))
done
En pause jusqu'à nouvel ordre.
la source
Merci! Fonctionne très bien - même si je devrai l'adapter pour fonctionner même pour des cas comme "5 2". Au moins maintenant, je sais comment c'est fait.
@Andrei: Je suis content d'avoir pu vous aider à démarrer. N'oubliez pas de marquer les réponses comme acceptées et de voter en cas de besoin.
pause jusqu'à nouvel ordre.
J'ai voté votre réponse tout à l'heure. Je ne pouvais pas le faire avant parce que je viens de recevoir suffisamment de points de réputation.
25

Essayer: new-window -a

L'utilisation de l'option -a lors de la création d'une nouvelle fenêtre peut insérer la nouvelle juste à l'index suivant, tandis que l'index de toutes les autres fenêtres suivantes augmentera automatiquement.

rwxrwxrwx
la source
On dirait une meilleure solution que @DennisWilliamson, désolé Dennis :-) Je cours tmux 1.9a, peut-être que cette fonctionnalité n'était pas disponible dans les versions précédentes.
Sonia Hamilton
Impressionnant. Je ne sais pas comment j'ai raté ça. Tu m'as sauvé de 4 ans dans le passé, voyageur du temps! Merci!
rld.
Ne fonctionne pas si vous voulez une nouvelle fenêtre à l'index 0.
nccc
1

J'ai une solution sans avoir besoin de scripts externes. Mettez ce qui suit dans votre .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;"'

Appuyez sur [PREFIX] -i et indiquez l'emplacement d'insertion souhaité. Les 2 dernières commandes de sélection de fenêtre garantissent que la fenêtre «précédente» est définie comme prévu et vous accédez à la fenêtre insérée.

EDIT: ok, j'ai parlé trop tôt. Je devais changer #Ipour #{window_id}que l'index de la fenêtre change pour certaines fenêtres lors de l' insertion. La nouvelle fonction (avec de nouvelles lignes pour plus de lisibilité):

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

J'ai commencé à utiliser une version simplifiée, via les 2 commandes suivantes dans .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 insère une nouvelle fenêtre à la position x lorsque la fenêtre x existe et déplace les fenêtres au-dessus de celle-ci. Le préfixe-I crée une nouvelle fenêtre à la position x lorsque la fenêtre x n'existe pas.

gospes
la source