Tối đa hóa một cửa sổ trong tmux


239

Đôi khi nó sẽ rất hữu ích để tối đa hóa một khung trong tmux và sau đó khôi phục nó về kích thước trước đó.

Tôi đã đọc hướng dẫn và tôi không thể tìm ra cách. Những gì tôi nghĩ ra là tôi có thể liên kết một khóa để thay đổi kích thước khung thành chiều rộng "tối đa" và một phím khác để khôi phục nó về chiều rộng được xác định trước.

Tất nhiên điều này cũng có nhược điểm của nó, vì vậy tôi tự hỏi liệu có ai có ý tưởng tốt hơn không.

Câu trả lời:


56

tmux 1.8 trở lên

Bây giờ được hỗ trợ, từ câu trả lời dưới đây :

Phiên bản 1.8 đã thấy việc bổ sung cờ -Z vào khung thay đổi kích thước. Từ trang người đàn ông:

Với -Z, khung hoạt động được chuyển đổi giữa thu phóng (chiếm toàn bộ cửa sổ) và không bị che khuất (vị trí bình thường của nó trong bố cục).

tmux cũ hơn (câu trả lời gốc)

Một lựa chọn khác có thể được sử dụng break-panetheo sau join-pane. Từ trang người đàn ông :

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.

Vì vậy, bạn có thể chọn ngăn của mình và thực hiện break-panevà sau đó khi bạn hoàn thành với phiên bản tối đa hóa, bạn có thể tham gia lại với join-pane- có thể cần một số đối số mặc định để đặt lại vị trí hoặc chỉ cần sắp xếp lại sau đó.

Lưu ý rằng khung tham gia dường như nằm trong tmux 1.3 nhưng không phải 1.1. (Không chắc chắn về 1,2, xin lỗi).

Và chỉ cần đề cập rằng bộ kết nối đầu cuối (bộ ghép kênh GUI (dựa trên GTK)) có thể thực hiện điều thu phóng. (Ctrl-Shift-X là liên kết phím mặc định). Tất nhiên nó không làm được nhiều thứ mà tmux làm ...


32
Kể từ phiên bản 1.8, có một giải pháp tốt hơn (xem câu trả lời của Tyler Holien).
momeara

1
Đối với những người thử điều này trước câu trả lời tốt hơn, để làm join-pane -t:{previous}cho cửa sổ join-pane -t:0tham gia hoạt động: làm cho cửa sổ trước hoặc tham gia trở lại cửa sổ 0.
Thực tế

488

Đây là một tính năng tmux bản địa.

Phiên bản 1.8 đã thấy sự bổ sung của -Zcờ resize-pane. Từ trang người đàn ông:

Với -Z, khung hoạt động được chuyển đổi giữa thu phóng (chiếm toàn bộ cửa sổ) và không bị che khuất (vị trí bình thường của nó trong bố cục).

Nó bị ràng buộc tmux-prefix- ztheo mặc định trong cài đặt của tôi (thông qua Homebrew trên OS X).


4
này thật tuyệt vời, chỉ cần thêm vào .tmux.conf của tôi và bây giờ có một kinh nghiệm xa hơn chất lỏng: bind-key z resize-pane -Z
St-Ste-Ste-Stephen

Có thể bằng cách nào đó có thể nhìn thấy các cạnh của tấm chìm dưới nước để chỉ ra độ sâu? Tôi tiếp tục quên rằng tôi đã phóng to và "tiêu đề Z" không thực sự đủ nổi bật.
lkraav

Hoạt động trong BunsenLabs ra khỏi hộp.
Mateusz Piotrowski

tuyệt vời. nó thực sự hoạt động
sayem siam


49

Vì vậy, tôi biết bạn đã hỏi điều này một thời gian trước đây ... nhưng tôi đã không chuyển từ màn hình cho đến ngày hôm nay!

Tôi gặp vấn đề tương tự, đây là cách tôi giải quyết nó:

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

Nếu quy trình làm việc của bạn giống như của tôi (tức là bạn tối đa hóa một cửa sổ, thực hiện một số công việc, sau đó ngay lập tức tối đa hóa nó) thì điều này sẽ rất tốt cho bạn.


(Trong trường hợp không rõ ràng, điều này sẽ duy trì bố cục trong cửa sổ ban đầu của bạn ... sau khi tối đa hóa và không tối đa hóa, nó hoàn toàn giống nhau.)
Ryan

2
Bất cứ ý tưởng làm thế nào tôi có thể ánh xạ cùng một tổ hợp phím cho cả hai? Một cái gì đó như bind c-m select-window -t tmux-zoom ? <minimize> : <maximize>. Nhưng bây giờ tôi muốn xác định chức năng này ở một nơi khác, vì mục đích sạch sẽ, và công bằng bind c-m :max_or_min. Điều đó có thể không? Tôi đang tìm kiếm nó khó khăn để tìm kiếm. (Tôi thấy rằng tôi thường nhấn nhầm lệnh và cuối cùng tạo ra các cửa sổ 'tmux-zoom' bổ sung, trống rỗng.)
chadoh

7
Điều này chỉ hiệu quả với tôi khi tôi xóa 'xóa && echo TMUX ZOOM && read' khỏi tối đa hóa.
Epeli

Thw tối đa hóa hoạt động cho tôi, nhưng hành động thu nhỏ chỉ giết chết cửa sổ ban đầu, để lại khung tối đa hóa.
paradroid

Cách này hiệu quả, nhưng tôi mất bố cục .. gần như vậy!
John Hunt

25

Cải thiện zoomer. Bây giờ người ta có thể phóng to nhiều tấm, thậm chí theo thứ bậc. Sau khi thực hiện bên dưới và tải lại máy chủ tmux của bạn (Ctrl-r trong trường hợp của tôi), bạn sẽ có xkhóa của mình bị ràng buộc để phóng to và thu nhỏ một khung. thu phóng được thực hiện bằng cách mở cửa sổ trong một cửa sổ mới và thu nhỏ bằng cách đưa một cửa sổ trở lại cửa sổ ban đầu. Nếu bạn kết thúc việc chia cửa sổ phóng to, bạn sẽ có thể phóng to vào các ô của cửa sổ phóng to và thu nhỏ lại cho cửa sổ phóng to. thu nhỏ chỉ xảy ra nếu bạn đang ở trong cửa sổ phóng to có chứa một khung duy nhất.

Thêm sau vào cuối của bạn ~/.tmux.conf

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

Thêm tập tin sau

~$ 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

4
Chỉ một upvote duy nhất?! Câu trả lời này thật tuyệt vời! Hoạt động rất tốt, giới thiệu chức năng mới tuyệt vời mà giờ đây thay thế hoàn toàn chương trình 'kẻ hủy diệt' bloaty mà tôi từng sử dụng.
sillyMunky

+1 Điều này thực sự tốt! Cho đến nay, giải pháp làm việc tốt nhất mà tôi đã đi qua cho đến nay! Cảm ơn!!
armandino

Tôi đồng tình. Điều này hoạt động, và là nhiều hơn tuyệt vời. Đó là màn hình ++
Brad park

+1. Điều này hoạt động rất tốt nhưng nó chậm hơn một phần giây (~ 0,8 giây) so với câu trả lời của @ Ryan ở trên, ít nhất là trên hệ thống của tôi. Không phải là một vấn đề lớn, nhưng tôi tự hỏi liệu có cách nào để làm cho nó nhanh hơn
Amelio Vazquez-Reina

Đẹp thật đấy. Tôi yêu các tên khung đặc biệt (zoom @,), đó là các lời nhắc hữu ích và lệnh phóng to / thu nhỏ "x".
Eric O Lebigot

16

Ctrl+ b(tiền tố) + zhoạt động để phóng to vào một khung cụ thể trong tmux 2.1. Khi bạn nhấn Ctrl+ b+ zlần nữa, nó sẽ phóng to khung hình về kích thước ban đầu. Nó không tạo ra một khung mới.

So với giải pháp được đăng ở trên bởi aksay, nếu bạn cố gắng tách khung được phóng to, nó sẽ không cho phép tách và sẽ quay lại khung ban đầu và thay vào đó sẽ tách khung đó.

Tùy chọn cửa sổ thu phóng có thể linh hoạt hơn ...


2

Tôi đã làm điều này để tối đa hóa / thu nhỏ với cùng một tổ hợp phím:

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"

1

Ngoài ra, đối với tôi, công việc không có 'xóa && echo TMUX ZOOM && read'. Với đoạn mã này mỗi khi tôi thu nhỏ một khung từ cửa sổ đầu tiên biến mất.


1

Vấn đề với resize-pane -Zviệc chuyển đổi là đôi khi nó sẽ thực hiện thao tác thu phóng ngược hơn mong muốn, đặc biệt khi được gọi từ tập lệnh hoặc bên trong tmux.conf.

Đây là cách giải quyết:

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

1

Bây giờ, có một phím tắt mặc định cho điều đó:

tmux-prefix+z

nói chung là:

Ctrlb+z



0

Tôi đang dùng Ubuntu 12.04 và cũng cần tính năng này. Vì tmux 1.8 có hỗ trợ riêng để thu phóng chuyển đổi bằng cách sử dụng tmux-prefix z. Vì có thể chúng ta sẽ không thấy tmux 1.8 trong 12.04. Tôi đã biên dịch tmux 1.8 từ nguồn trên một máy tính dev khác, đổi tên thành _tmux-1.8 và chỉ sao chép nhị phân 1.8 sang /usr/bin/_tmux-1.8 và chỉnh sửa .bash_aliases -> bí danh tmux = '_ tmux-1.8'.

Tôi đã không nhận thấy bất kỳ vấn đề nào khi sử dụng phương pháp nhanh và bẩn này và khi / nếu tmux 1.8 đến 12.04 tôi đã không làm hỏng bất cứ điều gì.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.