Existe-t-il un moyen de redessiner la fenêtre tmux lors du passage d'un petit moniteur à un plus grand?

400

Disons que vous vous connectez à un serveur distant via ssh avec Terminal.app. Lorsque vous "attachez tmux" avec un moniteur de plus grande résolution à partir d'un plus petit, vous avez précédemment démarré tmux, il dessine des points autour de la console. Il ne correspond pas à la nouvelle taille de fenêtre. Existe-t-il un moyen de redessiner et de nettoyer la fenêtre? CTRL+ Lou CTRL- B+ Rn'aide pas. Je n'ai trouvé aucune commande appropriée sur l'homme.

% tmux -V
tmux 1.5
Nobu
la source
7
Je voudrais savoir comment redessiner toutes les sessions sans en détacher aucune.
PJ Brunet
3
tout le monde se détache juste ... as-tu trouvé un moyen?
Patoshi パ ト シ
Pour référence rapide: learnbatta.com/blog/tmux-working-with-split-terminal-95
anjaneyulubatta505
oui, j'aimerais toujours connaître la réponse à la question: "Existe-t-il un moyen de redessiner et nettoyer la fenêtre?"
Jaydel

Réponses:

580

tmux limite les dimensions d'une fenêtre au plus petit de chaque dimension sur toutes les sessions auxquelles la fenêtre est attachée. S'il ne le faisait pas, il n'y aurait aucun moyen raisonnable d'afficher toute la zone de la fenêtre pour tous les clients attachés.

La chose la plus simple à faire est de détacher tout autre client des sessions lorsque vous attachez:

tmux attach -d

Vous pouvez également déplacer tous les autres clients vers une session différente avant de les attacher à la session:

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

L'écran rétrécira à nouveau si un client plus petit bascule vers la session.

Il existe également une variante où vous ne "prenez en charge" que la fenêtre (liez la fenêtre dans une nouvelle session, définissez aggressive-resizeet basculez toutes les autres sessions qui ont cette fenêtre active vers une autre fenêtre), mais il est plus difficile de créer un script en général (et différent de "exit" car vous voudriez dissocier la fenêtre ou tuer la session au lieu de simplement vous détacher de la session).

Chris Johnsen
la source
Notez que vous pouvez obtenir la session en cours avec $(tmux display-message -p '#S'), voir: superuser.com/questions/410017/… .
GManNickG
3
Cette réponse obtient des accessoires pour les détails et la base de connaissances. Mais voir la réponse de Shi B. Ctrl-b + Dpour la facilité d'utilisation (et la mémorisation).
fbicknel
"tmux detach -a" a fonctionné pour moi; "tmux attach -d" ne l'a pas fait.
mahemoff
(1) Erreurs tmux plus récentes sur set-option... set-remain-on-exit on. Voir tmux # 787 . Maintenant, utilisez: tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
user1902689
1
(2) sur les nouveaux tmux, vous devez utiliser le new-windowdernier argument de quelque chose comme ça 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"ou vous ne verrez pas le message. (Dans certaines circonstances, vous le verrez si vous faites défiler vers le haut ou si le terminal est plus grand.) Si vous utilisez cela, vous êtes probablement mieux sans mon commentaire "(1)" ou tout autre paramètre remain-on-exit.
user1902689
462

Vous pouvez toujours appuyer sur CTRL- B+ SHIFT- Dpour choisir le client que vous souhaitez détacher de la session.

tmux répertorie toutes les sessions avec leur dimension actuelle. Ensuite, vous vous détachez simplement de toutes les sessions de plus petite taille.

Shi B.
la source
6
Clarification. C'est le capital D. Le petit «d» détache le client.
Raghuram Murthy P
2
CTRL-Bsi c'est votre préfixe. Le mien est CTRL-Adepuis que je suis passé de l'écran.
Blaskovicz
1
En fait, vous devez vous détacher de toutes les sessions de plus petite taille du même groupe de sessions. Cependant, CTRL-B + SHIFT-D ne montre pas que chaque session appartient à quel groupe. Je préfère exécuter tmux list-sessionsqui affiche le nom de la session, la taille et les informations sur le groupe, puis tmux kill-session -t <session_name>tuer les sessions du même groupe.
Zhichang Yu
180

Une solution plus simple sur les versions récentes de tmux (testée sur 1.9) vous permet désormais:

tmux detach -a

-a est pour tous les autres clients de cette session, sauf celui en cours

Vous pouvez l'aliaser dans votre. [Bash | zsh] rc

alias takeover="tmux detach -a"

Flux de travail: vous pouvez vous connecter normalement à votre session, et si vous êtes gêné par une autre session qui a forcé la taille de votre fenêtre tmux, vous pouvez simplement l'appeler takeover.

gbin
la source
13
Merci beaucoup! travaillé. Si vous le faites dans une session tmux active, appuyez simplement sur CTRL + B (ou selon votre commande tmux personnalisée) puis:detach -a
Iacchus
Ou exécutez simplement tmux detach -asur la ligne de commande du shell à l'intérieur de Tmux.
jdhao
4

Les autres réponses ne m'ont pas aidé car je n'avais qu'un client attaché (la précédente qui avait démarré la session était déjà détachée).

Pour y remédier, j'ai suivi la réponse ici (je n'utilisais pas xterm).

Ce qui disait simplement:

  1. Détacher de la session tmux
  2. Exécuter la resizecommande linux
  3. Rattacher à la session tmux
pev.hall
la source
3

Je suis juste tombé sur ce problème et suis tombé sur une situation différente. Bien que ce ne soit probablement qu'une licorne, j'ai pensé que je l'étalais.

J'ai eu une session plus petite et j'ai remarqué que les tailles de police étaient différentes: la session plus petite avait les polices plus petites. Apparemment, j'avais changé la taille des polices des fenêtres pour une raison quelconque.

Donc, dans OS X, je viens de le faire Cmd-+sur la session de plus petite taille, et elle s'est remise en place.

JESii
la source
Ce placement bizarre fixe de la barre d'état tmux dans le terminal macOS. Lorsque j'ai des onglets de terminal ouverts, cela gâche la position de la barre d'état tmux. Jouer avec le zoom via cmd-+ou le -corriger.
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

tuez l'autre.

Balamadras
la source
8
Cela semble être une réponse valide à la question du titre, malgré de meilleures réponses. Je ne comprends pas pourquoi elle a été rejetée à l'oubli.
JoL
yessss, c'est la seule réponse qui a fonctionné pour moi
Yasir Hantoush
0

J'utilise Ctrl- b+ qce qui en fait un numéro flash pour chaque volet, les redessinant en cours de route.

auselen
la source