C'è un modo per ridisegnare la finestra di tmux quando si passa da un monitor più piccolo a uno più grande?


400

Diciamo che ti stai connettendo a un server remoto su ssh con Terminal.app. Quando "tmux si attacca" con un monitor a risoluzione maggiore da quello più piccolo che hai avviato in precedenza, disegna punti intorno alla console. Non si adatta alle nuove dimensioni della finestra. C'è un modo per ridisegnare e pulire la finestra? CTRL+ Lo CTRL- B+ Rnon aiuta. Non sono riuscito a trovare alcun comando adeguato sull'uomo.

% tmux -V
tmux 1.5

7
Mi piacerebbe sapere come ridisegnare tutte le sessioni senza staccarle.
PJ Brunet,

3
tutti si staccano ... hai trovato un modo?
Patoshi パ ト シ,


sì, mi piacerebbe comunque conoscere la risposta alla domanda: "Esiste un modo per ridisegnare e pulire la finestra?"
Jaydel,

Risposte:


580

tmux limita le dimensioni di una finestra alla più piccola di ogni dimensione in tutte le sessioni a cui è collegata la finestra. In caso contrario, non sarebbe possibile visualizzare l'intera area della finestra per tutti i client collegati.

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

tmux attach -d

In alternativa, è possibile spostare qualsiasi altro client in una sessione diversa prima di collegarsi 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.

Esiste anche una variante in cui "acquisisci" solo la finestra (collega la finestra in una nuova sessione, imposta aggressive-resizee cambia tutte le altre sessioni che hanno quella finestra attiva in un'altra finestra), ma è più difficile eseguire lo script in generale case (e diverso da "exit" poiché vorresti scollegare la finestra o uccidere la sessione invece di staccarti dalla sessione).


Si noti che è possibile ottenere la sessione corrente con $(tmux display-message -p '#S'), vedere: superuser.com/questions/410017/… .
GManNickG

3
Questa risposta ottiene spunti per dettagli e conoscenza di base. Ma vedi la risposta di Shi B. Ctrl-b + Dper facilità d'uso (e ricordare).
fbicknel,

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

(1) nuovi errori tmux su set-option... set-remain-on-exit on. Vedi tmux # 787 . Ora, utilizzare: tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
user1902689,

1
(2) su tmux più recenti, devi usare l' new-windowultimo argomento di qualcosa di simile 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"o non vedrai il messaggio. (In alcune circostanze, lo vedrai se scorri verso l'alto o se il terminale è più alto.) Se lo usi, probabilmente starai meglio senza il mio commento "(1)" o qualsiasi impostazione remain-on-exit.
user1902689,

462

Puoi sempre premere CTRL- B+ SHIFT- Dper scegliere quale client vuoi staccare dalla sessione.

tmux elencherà tutte le sessioni con la loro dimensione corrente. Quindi ti stacchi semplicemente da tutte le sessioni di dimensioni minori.


6
Una precisazione. È la D. maiuscola che distacca il cliente.
Raghuram Murthy P,

2
CTRL-Bse questo è il tuo prefisso. Il mio è stato da CTRL-Aquando sono passato dallo schermo.
Blaskovicz,

1
In realtà è necessario staccare da tutte le sessioni di dimensioni inferiori dallo stesso gruppo di sessioni. Tuttavia CTRL-B + MAIUSC-D non mostra che ogni sessione appartiene a quale gruppo. Preferirei eseguire tmux list-sessionsche mostra il nome della sessione, le dimensioni e le informazioni sul gruppo, quindi tmux kill-session -t <session_name>uccidere le sessioni dello stesso gruppo.
Zhichang Yu,

180

Una soluzione più semplice sulle recenti versioni di tmux (testata su 1.9) ora puoi fare:

tmux detach -a

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

Puoi alias nel tuo. [Bash | zsh] rc

alias takeover="tmux detach -a"

Flusso di lavoro: puoi collegarti normalmente alla tua sessione e se sei disturbato da un'altra sessione che ha costretto a ridurre le dimensioni della finestra di tmux puoi semplicemente chiamare takeover.


13
Grazie mille! lavorato. Se lo stai facendo in una sessione di tmux attiva, premi CTRL + B (o qualunque sia il tuo comando di tmux personalizzato), quindi:detach -a
Iacchus

Oppure esegui semplicemente tmux detach -adalla riga di comando della shell all'interno di Tmux.
jdhao,

4

Le altre risposte non mi hanno aiutato poiché avevo solo un cliente collegato (quello precedente che aveva avviato la sessione era già stato rimosso).

Per risolverlo ho seguito la risposta qui (non stavo usando xterm).

Che ha semplicemente detto:

  1. Staccare dalla sessione di tmux
  2. Esegui il resizecomando linux
  3. Ricollegare alla sessione tmux

3

Ho appena incontrato questo problema e mi sono imbattuto in una situazione diversa. Anche se probabilmente è solo un unicorno, ho pensato di disporlo.

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 modificato le dimensioni del carattere della finestra per qualche motivo.

Quindi in OS X, ho fatto solo una Cmd-+sessione di dimensioni più ridotte, che è tornata al suo posto.


Questo risolto posizionamento strano della barra di stato di tmux nel terminale macOS. Quando ho le linguette dei terminali aperte, confonde la posizione della barra di stato di tmux. Giocare con lo zoom tramite cmd-+o lo -risolve.
Paul,

0
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

uccidi l'altro.


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

sì, questa è l'unica risposta che ha funzionato per me
Yasir Hantoush,


0

Io uso Ctrl- b+ qche lo rende flash numero per ogni riquadro, ridisegnandoli lungo la strada.

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.