tmux: consente di inserire una finestra in una posizione specificata


13

tmux ha il comando "move-window" con il quale puoi spostare una finestra su un indice vuoto specificato in questo modo:

move-window -t 3

Tuttavia, se l'indice 3 è già in uso, non sarà possibile spostare la finestra corrente in posizione 3.

Sto cercando un'opzione che mi permetta di spostare (inserire) la mia finestra in posizione 3 anche se è già stata presa e quindi aumentare i numeri di finestra per le altre finestre successive (ad esempio quella che era originariamente in 3 ora sarà essere 4, il seguente sarà 5 ecc.)

tmux 

Risposte:


2

Lo script seguente ti consentirà di fare ciò che desideri. Puoi eseguirlo da un prompt della shell oppure puoi fare:

:run "ins-move 2 5"

Quell'esempio sposta la finestra due nella posizione precedente alla finestra cinque.

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

Grazie! Funziona alla grande, anche se dovrò adattarlo per funzionare anche per casi come "5 2". Almeno ora so come è fatto.

@Andrei: sono contento di essere riuscito a iniziare. Non dimenticare di contrassegnare le risposte accettate e di votare quando lo ritieni opportuno.
Dennis Williamson,

Ho votato la tua risposta proprio ora. Non potevo farlo prima perché ora ho ottenuto abbastanza punti reputazione.

24

Provare: new-window -a

usando l'opzione -a quando si crea una nuova finestra è possibile inserire quella nuova proprio nell'indice successivo, mentre l'indice di tutte le altre finestre successive aumenterà automaticamente.


Sembra una soluzione migliore di @DennisWilliamson, scusa Dennis :-) Sto correndo tmux 1.9a, forse questa funzione non era disponibile nelle versioni precedenti.
Sonia Hamilton,

Eccezionale. Non sono sicuro di come mi sia perso. Mi hai salvato da 4 anni in passato, viaggiatore nel tempo! Grazie!
rld.

1

Ho una soluzione senza la necessità di script esterni. Inserisci quanto segue nel tuo .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;"'

Premere [PREFIX] -i e fornire la posizione di inserimento desiderata. Gli ultimi 2 comandi di selezione della finestra assicurano che la finestra "precedente" sia impostata come previsto e si passa alla finestra inserita.

EDIT: ok, ho parlato troppo presto. Ho dovuto cambiare #Ial #{window_id}perché l'indice finestra cambia per alcune finestre sulla inserimento. La nuova funzione (con nuove righe aggiunte per la leggibilità):

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

Ho iniziato a utilizzare una versione semplificata, tramite i seguenti 2 comandi in .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'

Il prefisso-i inserisce una nuova finestra nella posizione x quando esiste la finestra x e sposta le finestre sopra quella in alto. Il prefisso-I crea una nuova finestra nella posizione x quando la finestra x non esiste.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.