L'approche que j'utilise combine un peu de la réponse d'Ashish à celle de morceaux; Les flèches alt gauche et droite sont liées à une petite légende de shell rapide qui déplace la fenêtre vers la gauche ou la droite, à moins que ce ne soit la première ou la dernière fenêtre, avec respect. Je l'ai fait parce que, lorsque vous émettez un échange +1 à la dernière fenêtre (ou -1 à la première fenêtre), il sera toujours échangé au lieu de revenir en boucle comme vous le souhaitiez:
0:one 1:two 2:three 3:zero*
Devient
0:zero* 1:two 2:three 3:one
Au lieu de
0:zero* 1:one 2:two 3:three
Ainsi, les commandes que j'utilise cessent de fonctionner lorsque la fenêtre a atteint le bord de la liste:
bind-key -n M-Left run-shell 'tmux list-windows | head -n 1 | grep -q active || tmux swap-window -t -1'
bind-key -n M-Right run-shell 'tmux list-windows | tail -n 1 | grep -q active || tmux swap-window -t +1'
Cela peut facilement être combiné avec windows -index et renumber-windows pour obtenir une liste de fenêtres qui commencent à un nombre arbitraire et qui ne présentent jamais de lacunes.
Si vous utilisez l' indice de base 1 comme moi et que vous ne pensez pas aller au-delà de 999 fenêtres, vous pouvez utiliser un petit truc pour le faire rouler correctement, même si les commandes sont un peu trop lourdes:
set -g base-index 1
set -g renumber-windows on
bind-key -n M-Left run-shell 'if tmux list-windows | head -n 1 | grep -q active ; then tmux move-window -t 999 \; move-window -r \; refresh-client -S ; else tmux swap-window -t -1 ; fi'
bind-key -n M-Right run-shell 'if tmux list-windows | tail -n 1 | grep -q active ; then tmux move-window -t 0 \; move-window -r \; refresh-client -S ; else tmux swap-window -t +1 ; fi'
Cela fonctionne en déplaçant temporairement la dernière fenêtre vers l'index-0 non utilisé, puis en appelant move-window -r pour les renuméroter à partir de 1. Cela fonctionne de la même manière lorsque vous déplacez la première fenêtre à la fin. en choisissant un nombre énorme que vous n'utiliserez jamais, cela garantira que lorsque move-window -r se déclenchera à nouveau, tout sera numéroté comme vous le souhaitiez. Si vous vous interrogez sur refresh-client -S , cela est nécessaire car, parfois, même si la réorganisation à partir de la fenêtre de déplacement fonctionne correctement, la barre d'état ne se met pas à jour tant que d'autres modifications ne sont pas apportées. En évitant d'actualiser uniquement la barre d'état (-S), vous évitez cela.
Le seul problème que je puisse trouver avec cette approche est que swap-window modifiera implicitement la dernière fenêtre utilisée par celle avec laquelle vous avez échangé. Ainsi, si vous êtes sur la fenêtre n ° 1, passez à la fenêtre quatre et déplacez-la d'une seconde, vous constaterez que votre dernière fenêtre utilisée est la nouvelle n ° 4 (anciennement n ° 3) au lieu de la n ° 1. Il ne semble pas y avoir de solution.
C-b
,.
vous permet de renuméroter une fenêtre.