web-dev-qa-db-fra.com

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

Disons que vous vous connectez à un serveur distant via SSH avec Terminal.app. Lorsque vous "attachez tmux" avec un moniteur de résolution supérieure à celui que vous avez précédemment lancé, tmux dessine des points autour de la console. Cela ne correspond pas à la nouvelle taille de la fenêtre. Est-il possible de redessiner et de nettoyer la fenêtre? CTRL+L ou CTRL-B + R n'aide pas. Je ne pouvais trouver aucune commande appropriée sur l'homme.

% tmux -V
tmux 1.5
361
Nobu

tmux limite les dimensions d'une fenêtre au plus petit de chaque dimension pour toutes les sessions auxquelles la fenêtre est attachée. Sinon, il n'y aurait aucun moyen judicieux 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 tout autre client vers une session différente avant de l’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 sera de nouveau réduit si un client plus petit bascule vers la session.

Il existe également une variante dans laquelle vous "ne prenez" que la fenêtre (liez la fenêtre à une nouvelle session, définissez aggressive-resize et changez les autres sessions pour lesquelles cette fenêtre est active), mais c'est plus difficile. script dans le cas général (et différent de "quitter" puisque vous voudriez dissocier la fenêtre ou tuer la session au lieu de simplement se détacher de la session).

522
Chris Johnsen

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

tmux listera toutes les sessions avec leur dimension actuelle. Ensuite, il vous suffit de vous détacher de toutes les sessions plus petites.

415
Shi B.

Une solution plus simple sur les versions récentes de tmux (testée sur 1.9), vous pouvez maintenant faire:

tmux detach -a

-a est pour tous les autres clients de cette session, sauf le client actuel

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

alias takeover="tmux detach -a"

Flux de travail: vous pouvez vous connecter à votre session normalement et si vous êtes dérangé par une autre session qui vous oblige à réduire la taille de votre fenêtre tmux, vous pouvez simplement appeler takeover.

169
gbin

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 résoudre ce problème, j'ai suivi la réponse ici (je n'utilisais pas xterm).

Ce qui a simplement dit:

  1. Détacher de la session tmux
  2. Exécuter la commande resize linux
  3. Rattacher à la session tmux
4
pev.hall

Je viens de rencontrer ce problème et suis tombé sur une situation différente. Bien que ce ne soit probablement qu'une Licorne, je pensais l'exposer.

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

Donc, sous OS X, je viens de faire Cmd-+ sur une session de plus petite taille, qui est revenue à sa place.

3
JESii