592 votes

Comment réorganiser les fenêtres tmux?

Dans screen, je peux simplement taper C-a :number 0 pour déplacer une fenêtre en haut de la liste des fenêtres et pousser toutes les autres fenêtres vers le bas. Quelle est la séquence de commandes équivalente pour tmux? J'ai regardé la page de manuel, mais je trouve cela confus sur ce point.

149 votes

C-b, . vous permet de renuméroter une fenêtre.

9 votes

En lisant toutes les nombreuses réponses, je ne vois toujours pas de solution facile à la question de l'OP: comment déplacer une fenêtre donnée à la position 0 et décaler toutes les autres vers la droite. Dois-je vraiment déplacer manuellement chacune d'entre elles pour faire cela? Je veux juste annuler un déplacement que j'ai fait par erreur (et je ne suis pas sûr de quoi exactement) qui je pense a déplacé la fenêtre 0 vers la fenêtre 8 et déplacé toutes les autres vers la gauche.

1 votes

@nealmcb la solution la plus simple que j'ai pu trouver est de régler l'index de base à 1, renuméroter, puis déplacer votre fenêtre dans l'emplacement vide 0 : superuser.com/a/1155999/674549

1voto

IvarsK Points 71

Aucune des réponses ici ne m'a satisfait, donc j'ai écrit un script qui (en quelque sorte) imite le comportement de déplacement de fenêtre de l'écran pour tmux.

Il détecte si le numéro de la fenêtre de destination est plus petit que le plus petit numéro de fenêtre ou plus grand que le plus grand numéro de fenêtre, et si c'est le cas, pousse toutes les autres fenêtres vers la droite ou la gauche (respectivement) et les renumérote de 1 à N de manière incrémentielle. Cela se fait avec la commande move-window.

Si le numéro de fenêtre est entre les numéros les plus petits/grands (c'est-à-dire, correspond apparemment à un numéro de fenêtre existant), il les échange simplement avec la commande swap-window.

Voici le script:

#!/usr/bin/env bash
# Nom du fichier: ~/tmux-windowswap
# Fonction qui fournit une fonctionnalité améliorée d'échange de fenêtres pour tmux
maxwin=$(tmux list-windows | cut -d: -f1 | sort -nr | head -n1)
minwin=$(tmux list-windows | cut -d: -f1 | sort -n | head -n1)

# Vérification des erreurs
if [[ -z $2 ]]; then
    echo "Erreur: Aucune fenêtre spécifiée."
elif ! [[ $2 =~ ^-?[0-9]+$ ]]; then
    echo "Erreur: Mauvais numéro de fenêtre spécifié."

# Plus grand que tout; glissez-le complètement à droite, puis renumérotez
elif [[ $2 -gt $maxwin ]]; then
    i=0
    tmux move-window -t:$((maxwin + 1))
    winlist=($(tmux list-windows | cut -d: -f1 | xargs))
    for n in ${winlist[@]}; do
      i=$((i + 1))
      tmux move-window -s:$n -t:$i
    done

# Plus petit que tout; glissez-le complètement à gauche, puis renumérotez
elif [[ $2 -lt $minwin ]]; then
    tmux move-window -t:0
    winlist=($(tmux list-windows | cut -d: -f1 | xargs | rev))
    i=${#winlist[@]}  # commencer à la fenêtre indexée la plus élevée
    for n in ${winlist[@]}; do
      tmux move-window -s:$n -t:$i
      i=$((i - 1))
    done

# Entre les deux; juste un simple échange
else
    tmux swap-window -t:$2
fi

Ensuite, ajoutez simplement ce simple raccourci clavier à votre fichier .tmux.conf:

bind m command -p "Envoyer la fenêtre à:"  "run -b '~/tmux-windowswap #I %1'"

Remarque: Pour imiter parfaitement le comportement d'échange de fenêtres de l'écran avec tmux, je crois que lorsque vous déplacez une fenêtre vers un numéro de fenêtre existant, elle devrait prendre la place de cette fenêtre et toutes les autres fenêtres sont poussées vers la droite. Il serait assez simple de modifier ce script pour le faire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X