2011-10-18 6 views
277

Supponiamo che ci si connetta a un server remoto su ssh con Terminal.app. Quando "tmux attach" con un monitor a risoluzione maggiore da quello più piccolo che hai precedentemente avviato tmux, disegna punti attorno alla console. Non si adatta alle dimensioni della nuova finestra. C'è un modo per ridisegnare e pulire la finestra? CTRL +L o CTRL - B + R non aiuta. Non sono riuscito a trovare alcun comando adeguato sull'uomo.C'è un modo per ridisegnare la finestra di tmux quando si passa da un monitor più piccolo a uno più grande?

% tmux -V 
tmux 1.5 
+5

Mi piacerebbe sapere come ridisegnare tutte le sessioni, senza staccando qualcuno di loro. –

+3

tutti si staccano ... hai trovato un modo? –

risposta

405

tmux limita le dimensioni di una finestra al più piccolo di ogni dimensione attraverso tutte le sessioni a cui è attaccato alla finestra. Se non lo facesse, non ci sarebbe alcun modo ragionevole per visualizzare l'intera area della finestra per tutti i client collegati.

La cosa più semplice da fare è quello di staccare qualsiasi altro client dalle sessioni quando si collega:

tmux attach -d 

In alternativa, è possibile spostare qualsiasi altro client per una sessione diversa prima di collegare alla sessione:

takeover() { 
    # create a temporary session that displays the "how to go back" message 
    tmp='takeover temp session' 
    if ! tmux has-session -t "$tmp"; then 
     tmux new-session -d -s "$tmp" 
     tmux set-option -t "$tmp" set-remain-on-exit on 
     tmux new-window -kt "$tmp":0 \ 
      'echo "Use Prefix + L (i.e. ^B L) to return to session."' 
    fi 

    # switch any clients attached to the target session to the temp session 
    session="$1" 
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do 
     tmux switch-client -c "$client" -t "$tmp" 
    done 

    # attach to the target session 
    tmux attach -t "$session" 
} 
takeover 'original session' # or the session number if you do not name sessions 

Lo schermo si ridurrà di nuovo se un client più piccolo passa alla sessione.

C'è anche una variante in cui si "prende il controllo" della finestra (collega la finestra in una nuova sessione, imposta aggressive-resize e passa a qualsiasi altra sessione che ha quella finestra attiva in un'altra finestra), ma è più difficile per lo script nel caso generale (e diverso da "exit" poiché si vorrebbe scollegare la finestra o terminare la sessione invece di staccare semplicemente dalla sessione).

+0

Nota che puoi ottenere la sessione corrente con '$ (tmux display-message -p '#S')', vedi: http://superuser.com/questions/410017/how-do-i-know-corrent- tmux-session-name-by-running-tmux-comando. – GManNickG

+0

Questa risposta ottiene puntelli per i dettagli e la base di conoscenza. Ma vedi la risposta di Shi B. 'Ctrl-b + D' per facilità d'uso (e memorizzazione). – fbicknel

+0

"tmux detach -a" ha funzionato per me; "tmux attach -d" no. – mahemoff

143

Una soluzione più semplice sulle recenti versioni di tmux (testato su 1.9) è ora possibile fare:

tmux detach -a 

-a è per tutti gli altri client in questa sessione, tranne quella corrente

È possibile alias esso nella vostra [bash | zsh] rc

alias takeover="tmux detach -a" 

flusso di lavoro:. È possibile collegare alla sessione normalmente, e se siete infastiditi da un'altra sessione che ha costretto verso il basso si Nella dimensione della finestra di tmux puoi semplicemente chiamare takeover.

+8

Grazie mille! lavorato. Se lo stai facendo in una sessione tmux attiva, premi CTRL + B (o qualsiasi comando tmux personalizzato) e poi:: detach -a' – Iacchus

268

È sempre possibile premere CTRL - B + SHIFT - D di scegliere quale client che si desidera staccare dalla sessione.

tmux elencherà tutte le sessioni con la loro dimensione attuale. Quindi ti basta staccare da tutte le sessioni di dimensioni più piccole.

+31

La risposta più semplice. –

+8

+1 da poco più in là per una risposta meravigliosa che dovrebbe essere spostata nella lista. – merlin2011

+5

Questa dovrebbe essere la risposta accettata. – Chaos

-5
ps ax | grep tmux 
17685 pts/22 S+  0:00 tmux a -t 13g2 
17920 pts/11 S+  0:00 tmux a -t 13g2 
18065 pts/19 S+  0:00 grep tmux 

uccidere l'altro.

+5

Sembra una risposta valida alla domanda del titolo, nonostante ci siano risposte migliori. Non capisco perché sia ​​stato downvoted all'oblio. – JoL

1

Mi sono imbattuto in questo problema e sono incappato in una situazione diversa. Anche se probabilmente è solo un unicorno, ho pensato di stenderlo.

Ho avuto una sessione più piccola e ho notato che le dimensioni dei caratteri erano diverse: la sessione più piccola aveva i caratteri più piccoli. Apparentemente, avevo cambiato le dimensioni dei font della finestra per qualche motivo.

Così in OS X, ho appena fatto Cmd-+ nella sessione di dimensioni più piccole, e si è riattaccato al suo posto.

1

Le altre risposte non mi sono state d'aiuto poiché avevo solo un client collegato (il precedente che aveva avviato la sessione era già stato rimosso).

Per risolvere il problema ho seguito la risposta here (non stavo usando xterm).

Quali semplicemente detto:

  1. Stacca dal tmux sessione
  2. Run resize di comando di Linux
  3. ricollegare tmux sessione
Problemi correlati