Apakah ada cara untuk menggambar ulang jendela tmux saat mengganti monitor yang lebih kecil ke yang lebih besar?

400

Katakanlah Anda terhubung ke server jauh melalui ssh dengan Terminal.app. Ketika Anda "tmux attach" dengan monitor resolusi yang lebih besar dari yang lebih kecil yang sebelumnya Anda mulai tmux, ia menarik titik-titik di sekitar konsol. Itu tidak sesuai dengan ukuran jendela baru. Apakah ada cara untuk menggambar ulang dan membersihkan jendela? CTRL+ Latau CTRL- B+ Rtidak membantu. Saya tidak dapat menemukan perintah yang tepat pada manusia.

% tmux -V
tmux 1.5
Nobu
sumber
7
Saya ingin tahu cara menggambar ulang semua sesi tanpa melepaskannya.
PJ Brunet
3
semua orang melepaskan ... apakah kamu menemukan jalan?
Patoshi パ ト シ
Untuk referensi cepat: learnbatta.com/blog/tmux-working-with-split-terminal-95
anjaneyulubatta505
ya, saya masih ingin tahu jawaban atas pertanyaan: "Apakah ada cara untuk menggambar ulang dan membersihkan jendela?"
jaydel

Jawaban:

580

tmux membatasi dimensi jendela hingga yang terkecil dari setiap dimensi di semua sesi yang dilampirkan jendela. Jika tidak melakukan ini tidak akan ada cara yang masuk akal untuk menampilkan seluruh area jendela untuk semua klien yang dilampirkan.

Hal termudah untuk dilakukan adalah melepaskan klien lain dari sesi saat Anda melampirkan:

tmux attach -d

Sebagai alternatif, Anda dapat memindahkan klien lain ke sesi yang berbeda sebelum melampirkan ke sesi:

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

Layar akan menyusut lagi jika klien yang lebih kecil beralih ke sesi.

Ada juga variasi di mana Anda hanya "mengambil alih" jendela (menautkan jendela ke sesi baru, mengatur aggressive-resize, dan mengganti sesi lain yang memiliki jendela itu aktif ke jendela lain), tetapi lebih sulit untuk skrip pada umumnya huruf besar-kecil (dan berbeda dengan “keluar” karena Anda ingin membatalkan tautan jendela atau membunuh sesi alih-alih hanya melepaskan dari sesi).

Chris Johnsen
sumber
Perhatikan bahwa Anda bisa mendapatkan sesi saat ini dengan $(tmux display-message -p '#S'), lihat: superuser.com/questions/410017/… .
GManNickG
3
Jawaban ini mendapat alat peraga untuk detail dan basis pengetahuan. Tetapi lihat jawaban Shi B. Ctrl-b + Duntuk kemudahan penggunaan (dan mengingat).
fbicknel
"tmux detach -a" bekerja untukku; "tmux attach -d" tidak.
mahemoff
(1) kesalahan tmux baru aktif set-option... set-remain-on-exit on. Lihat tmux # 787 . Sekarang, gunakan: tmux set-hook -t "$tmp" window-linked 'set remain-on-exit on.
user1902689
1
(2) pada tmux yang lebih baru, harus menggunakan new-windowargumen terakhir dari sesuatu seperti 'echo "Use Prefix + L (i.e. ^B L) to return to session.'; while(true); do read; done"atau Anda tidak akan melihat pesannya. (Dalam beberapa keadaan, Anda akan melihatnya jika Anda menggulir ke atas, atau jika terminal lebih tinggi.) Jika Anda menggunakan ini, Anda mungkin lebih baik tanpa komentar saya "(1)" atau pengaturan apa pun remain-on-exit.
user1902689
462

Anda selalu dapat menekan CTRL- B+ SHIFT- Duntuk memilih klien mana yang ingin Anda lepaskan dari sesi.

tmux akan mencantumkan semua sesi dengan dimensi mereka saat ini. Maka Anda cukup melepaskan diri dari semua sesi berukuran lebih kecil.

Shi B.
sumber
6
Klarifikasi. Ini adalah modal D. Kecil akan melepaskan klien.
Raghuram Murthy P
2
CTRL-Bjika itu awalan Anda. Milik CTRL-Asaya sejak saya beralih dari layar.
Blaskovicz
1
Sebenarnya Anda perlu melepaskan diri dari semua sesi berukuran lebih kecil dari kelompok sesi yang sama. Namun CTRL-B + SHIFT-D tidak menunjukkan setiap sesi milik kelompok mana. Saya lebih suka menjalankan tmux list-sessionsyang menampilkan nama sesi, ukuran dan info grup, kemudian tmux kill-session -t <session_name>untuk membunuh sesi dari grup yang sama.
Zhichang Yu
180

Solusi yang lebih sederhana pada versi terbaru tmux (diuji pada 1.9) sekarang dapat Anda lakukan:

tmux detach -a

-a untuk semua klien lain pada sesi ini kecuali yang sekarang

Anda dapat menambahkannya di rc. [Bash | zsh] Anda

alias takeover="tmux detach -a"

Alur Kerja: Anda dapat terhubung ke sesi Anda secara normal, dan jika Anda terganggu oleh sesi lain yang memaksa turun ukuran jendela tmux Anda, Anda dapat menelepon takeover.

gbin
sumber
13
Terimakasih banyak! bekerja. Jika Anda melakukannya dalam sesi tmux aktif, cukup tekan CTRL + B (atau perintah tmux khusus Anda) lalu:detach -a
Iacchus
Atau jalankan tmux detach -adi baris perintah shell di dalam Tmux.
jdhao
4

Jawaban lain tidak membantu saya karena saya hanya punya klien terlampir (yang sebelumnya memulai sesi sudah terlepas).

Untuk memperbaikinya saya mengikuti jawabannya di sini (saya tidak menggunakan xterm).

Yang hanya mengatakan:

  1. Lepaskan dari sesi tmux
  2. Jalankan resizeperintah linux
  3. Pasang kembali ke sesi tmux
aula
sumber
3

Saya hanya mengalami masalah ini dan menemukan situasi yang berbeda. Meskipun itu mungkin hanya unicorn, saya pikir saya akan mengeluarkannya.

Saya memiliki satu sesi yang lebih kecil, dan saya perhatikan bahwa ukuran font berbeda: sesi yang lebih kecil memiliki font yang lebih kecil. Rupanya, saya telah mengubah ukuran font jendela untuk beberapa alasan.

Jadi di OS X, saya hanya melakukan Cmd-+pada sesi berukuran lebih kecil, dan itu kembali ke tempatnya.

JESii
sumber
Ini penempatan aneh status bar tmux di terminal macOS. Ketika saya memiliki tab terminal terbuka, itu mengacaukan posisi bar status tmux. Bermain dengan zoom melalui cmd-+atau -memperbaikinya.
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

bunuh yang lain.

Balamadras
sumber
8
Sepertinya jawaban yang valid untuk pertanyaan judul, meskipun ada jawaban yang lebih baik. Saya tidak mengerti mengapa itu diputuskan untuk dilupakan.
JoL
ya, ini adalah satu-satunya jawaban yang berhasil untuk saya
Yasir Hantoush
0

Saya menggunakan Ctrl- b+ qyang membuatnya nomor flash untuk setiap panel, menggambar ulang mereka di jalan.

auselen
sumber