"Memaksimalkan" panel di tmux

239

Kadang-kadang akan sangat berguna untuk memaksimalkan panel di tmux dan kemudian mengembalikannya ke ukuran sebelumnya.

Saya telah membaca manual dan saya tidak dapat menemukan cara. Yang saya hasilkan adalah bahwa saya dapat mengikat kunci untuk mengubah ukuran panel menjadi "max" lebar, dan kunci lain untuk mengembalikannya ke beberapa lebar yang telah ditentukan.

Tentu saja ini memiliki kekurangannya, jadi saya bertanya-tanya apakah ada yang punya ide yang lebih baik.

Ivan
sumber

Jawaban:

56

tmux 1.8 dan yang lebih baru

Sekarang didukung secara native, dari jawaban di bawah ini :

Versi 1.8 melihat penambahan flag -Z untuk mengubah ukuran-pane. Dari halaman manual:

Dengan -Z, panel aktif beralih antara diperbesar (menempati seluruh jendela) dan terbuka (posisi normalnya dalam tata letak).

tmux lama (jawaban asli)

Opsi lain bisa menggunakan break-panediikuti oleh join-pane. Dari halaman manual :

break-pane [-d] [-t target-pane]
                   (alias: breakp)
             Break target-pane off from its containing window to make it the
             only pane in a new window.  If -d is given, the new window does
             not become the current window.

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]
                   (alias: joinp)
             Like split-window, but instead of splitting dst-pane and creating
             a new pane, split it and move src-pane into the space.  This can
             be used to reverse break-pane.

Jadi Anda bisa memilih panel dan melakukan break-panedan kemudian setelah selesai dengan versi maksimal, Anda bisa bergabung kembali dengan join-pane- mungkin memerlukan beberapa argumen default untuk meletakkannya kembali, atau hanya mengatur ulang sesudahnya.

Perhatikan bahwa panel bergabung tampaknya berada di tmux 1.3 tetapi tidak 1.1. (Tidak yakin tentang 1.2, maaf).

Dan hanya untuk menyebutkan bahwa terminator (GUI (berbasis GTK) terminal multiplexer) dapat melakukan hal zoom. (Ctrl-Shift-X adalah pengikat kunci default). Tentu saja itu tidak melakukan banyak hal yang tmux tidak ...

Hamish Downer
sumber
32
Pada versi 1.8 ada solusi yang lebih baik (lihat jawaban Tyler Holien).
momeara
1
Bagi mereka yang mencoba ini sebelum jawaban yang lebih baik, untuk mendapatkan join-pane untuk bekerja lakukan: join-pane -t:{previous}untuk jendela sebelumnya atau join-pane -t:0untuk bergabung kembali ke jendela 0.
Realistis
488

Ini sekarang merupakan fitur tmux asli.

Versi 1.8 melihat penambahan -Zbendera ke resize-pane. Dari halaman manual:

Dengan -Z, panel aktif beralih antara diperbesar (menempati seluruh jendela) dan terbuka (posisi normalnya dalam tata letak).

Sudah pasti tmux-prefix- zsecara default pada instalasi saya (melalui Homebrew pada OS X).

Tyler Holien
sumber
4
ini hebat, baru saja ditambahkan ke .tmux.conf saya dan sekarang memiliki pengalaman yang jauh lebih lancar: bind-key z ukuran-pane -Z
St-Ste-Ste-Stephen
Apakah mungkin untuk membuat tepi panel yang terendam terlihat untuk indikasi kedalaman? Saya selalu lupa bahwa saya diperbesar dan "judul-Z" tidak cukup menonjol.
lkraav
Bekerja di BunsenLabs di luar kotak.
Mateusz Piotrowski
luar biasa. itu benar-benar berfungsi
sayem siam
49

Jadi saya tahu Anda menanyakan ini beberapa waktu yang lalu ... tapi saya tidak beralih dari layar sampai hari ini!

Saya mengalami masalah yang sama, di sini adalah bagaimana saya menyelesaikannya:

unbind +
bind + new-window -d -n tmux-zoom 'clear && echo TMUX ZOOM && read' \; swap-pane -s tmux-zoom.0 \; select-window -t tmux-zoom
unbind -
bind - last-window \; swap-pane -s tmux-zoom.0 \; kill-window -t tmux-zoom

Jika alur kerja Anda seperti milik saya (mis. Anda memaksimalkan jendela, lakukan beberapa pekerjaan, lalu segera unmaximize itu) ini akan bekerja sangat baik untuk Anda.

Ryan
sumber
(Kalau tidak jelas, ini mempertahankan tata letak di jendela asli Anda ... setelah memaksimalkan dan un-memaksimalkan, itu persis sama.)
Ryan
2
Adakah yang tahu bagaimana saya bisa memetakan penekanan tombol yang sama untuk keduanya? Sesuatu seperti bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Tapi sekarang saya ingin mendefinisikan fungsi ini di tempat lain, demi kebersihan, dan adil bind c-m :max_or_min. Apakah itu mungkin? Saya merasa sulit untuk mencari. (Saya menemukan saya sering menekan perintah yang salah dan akhirnya menciptakan jendela 'tmux-zoom' tambahan yang kosong.)
chadoh
7
Ini bekerja hanya untuk saya ketika saya menghapus 'clear && echo TMUX ZOOM && read' dari maksimal.
Epeli
Thw memaksimalkan bekerja untuk saya, tetapi tindakan meminimalkan hanya membunuh jendela asli, meninggalkan panel yang dimaksimalkan.
paradroid
Jenis ini berhasil, tapi saya kehilangan tata letak saya .. hampir!
John Hunt
25

Zoomer yang ditingkatkan. Sekarang seseorang dapat memperbesar beberapa panel, bahkan secara hierarkis. Setelah melakukan hal di bawah ini dan memuat kembali server tmux Anda (Ctrl-r dalam kasus saya), Anda akan memiliki xkunci terikat untuk memperbesar dan memperkecil tampilan panel. zoom-in dicapai dengan membuka panel di jendela baru, dan zoom-out dicapai dengan mengambil panel kembali ke jendela aslinya. Jika Anda akhirnya membagi jendela zoom-in, Anda akan dapat memperbesar ke panel-panel jendela zoom-in dan zoom-out kembali ke jendela zoom-in. zoom-out hanya terjadi jika Anda berada di jendela zoom-in yang berisi panel tunggal.

Tambahkan pengikut ke akhir ~/.tmux.conf

~$ grep "bind x" ~/.tmux.conf
unbind x
bind x run ". ~/.tmux/zoom"

Tambahkan file berikut

~$ cat ~/.tmux/zoom
#!/bin/bash -f
currentwindow=`tmux list-window | tr '\t' ' ' | sed -n -e '/(active)/s/^[^:]*: *\([^ ]*\) .*/\1/gp'`;
currentpane=`tmux list-panes | sed -n -e '/(active)/s/^\([^:]*\):.*/\1/gp'`;
panecount=`tmux list-panes | wc | sed -e 's/^ *//g' -e 's/ .*$//g'`;
inzoom=`echo $currentwindow | sed -n -e '/^zoom/p'`;
if [ $panecount -ne 1 ]; then
    inzoom="";
fi
if [ $inzoom ]; then
    lastpane=`echo $currentwindow | rev | cut -f 1 -d '@' | rev`;
    lastwindow=`echo $currentwindow | cut -f 2- -d '@' | rev | cut -f 2- -d '@' | rev`;
    tmux select-window -t $lastwindow;
    tmux select-pane -t $lastpane;
    tmux swap-pane -s $currentwindow;
    tmux kill-window -t $currentwindow;
else
    newwindowname=zoom@$currentwindow@$currentpane;
    tmux new-window -d -n $newwindowname;
    tmux swap-pane -s $newwindowname;
    tmux select-window -t $newwindowname;
fi
akshay
sumber
4
Hanya satu suara positif ?! Jawaban ini luar biasa! Bekerja sangat baik, memperkenalkan fungsionalitas baru yang bagus yang sekarang sepenuhnya menggantikan program 'terminator' yang dulu saya gunakan.
sillyMunky
+1 Ini benar-benar bagus! Sejauh ini solusi kerja terbaik yang pernah saya temui sejauh ini! Terima kasih!!
armandino
Saya setuju. Ini berfungsi, dan lebih dari mengagumkan. Ini layar ++
Brad Parks
+1. Ini berfungsi dengan baik tetapi sebagian kecil (~ 0,8 detik) lebih lambat dari jawaban @ Ryan di atas, setidaknya pada sistem saya. Bukan masalah besar, tapi saya ingin tahu apakah ada cara untuk membuatnya lebih cepat
Amelio Vazquez-Reina
Memang cantik. Saya suka nama panel khusus (zoom @ ...), yang merupakan pengingat yang berguna, dan perintah "x" zoom in / out tunggal.
Eric O Lebigot
16

Ctrl+ b(awalan) + zberfungsi untuk memperbesar panel tertentu tmux 2.1. Jika Anda menekan Ctrl+ b+ zlagi, tampilannya kembali ke ukuran semula. Itu tidak membuat panel baru.

Dibandingkan dengan solusi yang diposting di atas oleh aksay, jika Anda mencoba untuk membagi panel yang diperbesar, itu tidak akan memungkinkan untuk membelah, dan akan kembali ke panel yang asli dan membagi panel itu sebagai gantinya.

Opsi jendela zoom mungkin lebih fleksibel ...

alpha_989
sumber
2

Saya melakukan ini untuk memaksimalkan / meminimalkan dengan keystroke yang sama:

bind C-k run "if [[ $(tmux list-window) =~ ZOOM ]]; then tmux last-window; tmux swap-pane -s ZOOM.1; tmux kill-window -t ZOOM; else tmux new-window -d -n ZOOM; tmux swap-pane -s ZOOM.1; tmux select-window -t ZOOM;fi"
Juan Ignacio Pumarino
sumber
1

Juga bagi saya bekerja tanpa 'clear && echo TMUX ZOOM && read'. Dengan cuplikan ini setiap kali saya meminimalkan satu panel dari jendela pertama menghilang.

Ramping
sumber
1

Masalah dengan resize-pane -Zmenjadi toggle adalah kadang-kadang akan melakukan operasi zoom terbalik dari yang diinginkan, terutama ketika dipanggil dari skrip atau di dalam tmux.conf.

Inilah cara mengatasi:

tmux-zoom-in.sh

#!/bin/bash

# Zoom in the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z || tmux resize-pane -Z

tmux-zoom-out.sh

#!/bin/bash

# Zoom out the current pane ONLY if it is not currently zoomed.
# Requires tmux version >= 1.8

tmux list-panes -F '#F' | grep -q Z && tmux resize-pane -Z
Tom Hale
sumber
1

Sekarang, ada jalan pintas default untuk itu:

tmux-prefix+z

yang umumnya:

Ctrlb+z

Youcef4k
sumber
0

Bagi mereka yang tidak bisa menggunakan tmux 1.8 atau lebih suka keadaan yang dimaksimalkan lagi, saya menerbitkan skrip tmux yang bekerja dengan tmux 1.6+ .

Semoga itu bisa membantu.

Gregory Pakosz
sumber
0

Saya menggunakan Ubuntu 12.04 dan juga membutuhkan fitur ini. Karena tmux 1.8 ada dukungan asli untuk zoom toggling menggunakan tmux-prefix z. Karena kita mungkin tidak akan melihat tmux 1.8 di 12.04 saya mengkompilasi tmux 1.8 dari sumber di komputer dev lain, menamainya menjadi _tmux-1.8 dan hanya menyalin 1,8 biner ke /usr/bin/_tmux-1.8 dan mengedit .bash_aliases -> alias tmux = '_ tmux-1.8'.

Saya belum melihat adanya masalah dalam menggunakan metode cepat dan kotor ini dan ketika / jika tmux 1.8 sampai 12.04 saya tidak merusak apa pun.

oblivian
sumber