tmux - Fügt ein Fenster an einer bestimmten Position ein


13

tmux hat den Befehl "move-window", mit dem Sie ein Fenster wie folgt in einen angegebenen leeren Index verschieben können:

move-window -t 3

Wenn jedoch Index 3 bereits vergeben ist, können Sie Ihr aktuelles Fenster nicht auf Position 3 verschieben.

Ich suche nach einer Option, mit der ich mein Fenster an Position 3 verschieben (einfügen) kann, auch wenn es bereits vergeben ist, und dann die Fensternummern für die anderen nachfolgenden Fenster erhöhen kann (zum Beispiel das Fenster, das ursprünglich bei 3 war) sei 4, das Folgende ist 5 usw.)

tmux 

Antworten:


2

Mit dem folgenden Skript können Sie tun, was Sie wollen. Sie können es über eine Shell-Eingabeaufforderung ausführen oder Folgendes tun:

:run "ins-move 2 5"

In diesem Beispiel wird Fenster zwei an die Position vor Fenster fünf verschoben.

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

Vielen Dank! Funktioniert hervorragend - obwohl ich es anpassen muss, um auch in Fällen wie "5 2" zu funktionieren. Zumindest weiß ich jetzt, wie es gemacht wird.

@Andrei: Ich bin froh, dass ich dich zum Laufen bringen konnte. Bitte vergessen Sie nicht, akzeptierte Antworten zu markieren und zu bewerten, wenn Sie dies für angemessen halten.
— Bis auf weiteres angehalten.

Ich habe Ihre Antwort gerade positiv bewertet. Konnte es vorher nicht tun, weil ich gerade genug Reputationspunkte bekommen habe.

25

Versuchen: new-window -a

Wenn Sie beim Erstellen eines neuen Fensters die Option -a verwenden, wird das neue Fenster direkt beim nächsten Index eingefügt, während der Index aller anderen nachfolgenden Fenster automatisch erhöht wird.


Sieht nach einer besseren Lösung aus als @DennisWilliamson, sorry Dennis :-) Ich laufe, tmux 1.9avielleicht war diese Funktion in früheren Versionen nicht verfügbar.
— Sonia Hamilton

Genial. Ich bin mir nicht sicher, wie ich das verpasst habe. Du hast mich vor 4 Jahren in der Vergangenheit gerettet, Zeitreisender! Vielen Dank!
— rld.

Funktioniert nicht, wenn Sie ein neues Fenster bei Index 0
— möchten

1

Ich habe eine Lösung ohne externe Skripte. Fügen Sie Folgendes in Ihre .tmux.conf ein:

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

Drücken Sie [PREFIX] -i und geben Sie die gewünschte Einfügeposition an. Die letzten beiden Auswahlfensterbefehle stellen sicher, dass das 'vorherige' Fenster wie erwartet eingestellt ist und Sie zum eingefügten Fenster gehen.

EDIT: ok, ich habe zu früh gesprochen. Ich musste zu wechseln #I, #{window_id}da sich der Fensterindex für einige Fenster beim Einfügen ändert. Die neue Funktion (mit zusätzlichen Zeilenumbrüchen zur besseren Lesbarkeit):

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

Ich habe mit der Verwendung einer vereinfachten Version über die folgenden 2 Befehle in .tmux.conf begonnen:

 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'

Präfix-i fügt ein neues Fenster an Position x ein, wenn Fenster x vorhanden ist, und verschiebt Fenster darüber. Präfix I erstellt ein neues Fenster an Position x, wenn Fenster x nicht vorhanden ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.