Wie balanciere ich tmux-Fenster automatisch aus, wenn ein Fenster hinzugefügt / entfernt wird?

2

Um die Fenster im aktuellen Fenster auszugleichen, können Sie Ctrl- b Meta- 1.. 5( 1 , 2 ) verwenden. Gibt es jedoch eine Möglichkeit, einen solchen Ausgleich automatisch durchzuführen, wenn ein Bereich hinzugefügt oder entfernt wird?

Angenommen, ich habe zwei gleich hohe Fenster im even-verticalLayout. Wenn ich jetzt den aktuellen Bereich in zwei Bereiche aufspalte (oben und unten), möchte ich, dass tmux alle Bereiche automatisch ausbalanciert, sodass ich drei gleich hohe Bereiche im even-verticalLayout habe.

s3rvac
quelle

Antworten:

3

Sie können Ihre eigenen Bindungen bereitstellen, die aus Befehlen bestehen, die durch verknüpft sind \;. Zum Beispiel in Ihrem ~/.tmux.confhinzufügen

bind-key '"' split-window \; select-layout -n \; select-layout -p

Dadurch wird Ctrl-b "das Fenster geteilt, und das Layout wird auf das nächste Layout und dann wieder auf das vorherige Layout geändert. Sie müssten dies für andere Befehle tun, die Fenster hinzufügen oder entfernen.


Wenn Sie mehr automatische Steuerung wünschen, können Sie einen Hintergrundprozess für den tmux-Steuerungsmodus schreiben, um einen echten tmux-Prozess anzuhören. Es erhält Benachrichtigungen über alles, was im echten tmux passiert, und Sie können dann select-layoutBefehle senden , wenn Sie eine Benachrichtigung über ein neues Fenster oder ein gelöschtes Fenster sehen. Ich habe nicht viel damit experimentiert, aber wenn Sie 2 Terminals verwenden und eine normale Sitzung in einem ausführen

tmux new -s mysession

und in der anderen

tmux -C attach -t mysession

Wenn Sie dann Fenster teilen, neue hinzufügen oder sie im normalen tmux schließen, erhalten Sie Linien wie

%layout-change @2 91a8,80x23,0,0[80x11,0,0,5,80x11,0,12,7]
%window-add @3
%window-close @1

in der steuerung tmux. Wenn Sie diese sehen, können Sie select-layout -nim Steuermodus schreiben , was sich auf den ersten auswirkt. Es gibt eine Python-Bibliothek , die diesen Mechanismus verwendet, auf den ich nicht weiter eingegangen bin.

meuh
quelle
Was aber, wenn sich das aktuelle Layout von unterscheidet even-vertical? Ich möchte das aktuell verwendete Layout beibehalten.
S3RVAC
Das aktuelle Layout zu finden ist schwierig. Sie können stattdessen vorwärts und dann rückwärts fahren. Ich habe die Antwort aktualisiert.
Meuh
Vielen Dank. Ich dachte, dass es einen besseren Weg geben könnte, als alle Schlüssel neu zu binden. Zum Beispiel töte ich regelmäßig eine Scheibe, indem ich die Shell verlasse, was in tmux so gut wie unmöglich "neu zu binden" ist.
S3RVAC
Ich habe einen möglichen Mechanismus hinzugefügt, der Sie interessieren könnte, den Steuermodus von tmux. Ich habe es nicht benutzt, aber es sieht machbar aus, wenn ein bisschen übertrieben.
Meuh