2013-06-02 18 views
7

Ich möchte in der Lage sein, einen sekundären Größenparameter für einen bestimmten Bereich anzugeben, so dass er beim Fokussieren des Bereichs die neue Größe zuweist und beim Beenden zurückgibt. So z.B.tmux resize on focus

(Anmerkung [] fokussierte Terminal Cursor steht)

________________ 
|$ ls |  | 
|a's |  | 
|dir |  | 
|$  |$ [] | 
|______|_______| 

Swap Scheibe Fokus

_______________ 
|  | | 
|$ ls | | 
|a's dir | | 
|$ [] |$ | 
|________|____| 

Und so weiter. Besonders cool wird es, da die Größenänderung in den letzten tmux-Versionen es sehr gut macht, den Inhalt neu zu verteilen, anstatt ihn abzuschneiden.

Im Beispiel wurde die Breite des linken Bereichs so eingestellt, dass er automatisch auf 8 Spalten umschaltet, wenn er fokussiert ist, und er wurde dünner, wenn er den Fokus verlor. Beachten Sie, wie der Inhalt immer noch sichtbar ist (das ist schließlich, warum wir tmux lieben), aber wir können unseren Kuchen auch noch essen, indem wir den aktuell fokussierten Bereich automatisch erweitern lassen, so dass er immer groß genug ist, um darin zu arbeiten!

Ich kann wahrscheinlich mit einigen aufwendigen Bindungen kommen, um die Anwendung von resize-pane Befehle zu automatisieren, um dies zu tun, und es genau die richtige Menge an aufwendigen nach meinen Wünschen zu machen. Aber ich hatte gehofft, dass es dafür eine Art eingebautes Feature gibt.

Es wäre praktisch, ein Hilfs-4-Tupel von ganzen Zahlen für jede Scheibe zu verfolgen und zuzulassen. Diese geben die Anzahl der resize-pane -L/D/U/R Vorgänge an, die bei der Fokusierung dieses Bereichs auszuführen sind, und die umgekehrte Richtung bei der Defokussierung dieses Bereichs.

Es kann andere, vernünftigere Formulierungen davon geben.

+0

Haben Sie schon einen Weg gefunden? – golfadas

+0

leider nicht, ich habe mehr Bindungen gemacht, um noch schneller zu skalieren, aber jetzt gibt es 8 Bindungen zum Anpassen der Fenstergrößen und es gibt kein "zurückkehrendes" Verhalten, also ist es immer noch eine Menge Handarbeit. Und ich habe mir noch nicht angewöhnt, die neuen Bindungen zu verwenden. Also nein. –

Antwort

1

Eine Teillösung gefunden ... Ich habe meine Fensterumschaltung mit vim synchronisiert, also ändere ich auch die Größe von tmux, wenn ich die Schalterfenster umschalte.

Dies ist nicht optimal, da tmux die aktuelle Fenstergröße nicht überprüft und sie nicht entsprechend skaliert. Wie auch immer, es funktioniert ziemlich gut, da Sie zweimal ctr-h oder ctrl-k tun können, um die Größe der Fenster zu ändern.

Die entsprechende Konfiguration ist die folgende:

# Sync panes with vi 
bind -n C-h run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-h) || tmux select-pane -L && tmux resize-pane -R 30" 
bind -n C-l run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-l) || tmux select-pane -R && tmux resize-pane -L 30" 
bind -n C-j run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-j) || tmux select-pane -D" 
# Move panes up and down, wont resize 
bind -n C-k run "(tmux display-message -p '#{pane_current_command}' | grep -iqE '(^|\/)vim(diff)?$' && tmux send-keys C-k) || tmux select-pane -U" 
1

Sorry, das nur beläuft sich auf Spekulation so weit, aber ich dachte darüber einigen, und ich denke, es Funktionalität, die eingebaut ist, dass tmux unterstützen Dies erfordert aber einige/viele Skripte.

Siehe diese Frage, die ich gepostet habe.

http://sourceforge.net/p/tmux/mailman/message/31221459/

Im Wesentlichen sieht es aus wie der select-layout Befehl kann (vielleicht! ??!) Eine willkürliche Mutation auf das Layout anzuwenden verwendet werden. Ich habe nicht getestet, ob es funktioniert.

Thomas Adam schlug vor, in der layout-custom.c-Quelle nachzuschauen, um mehr über das, was vor sich geht, herauszufinden. Das ist ungefähr soweit ich gekommen bin. Aber wenn es tatsächlich möglich ist, das Layout programmatisch zu verändern und funktionierende Strings zu generieren, die an select-layout übergeben werden, dann wäre dies ein sehr guter Ansatz.

Update: Jetzt habe ich direkt gefragt (ob nur eine geeignete Zeichenfolge generieren kann in der Tat die Größenänderung zu beliebigen Layouts zu erreichen), aber noch nicht eine Antwort von Herrn Adam selbst erhalten, aber der Grund, warum ich das vermute Das kann funktionieren, wenn wir eine Zeichenfolge erzeugen können, die die Prüfsumme passiert, dass ich meine Fenster in der gleichen Weise verändern kann und sie wieder verberge, sobald ich die Zeichenfolge aufzeichne (durch den Befehl list-windows) und anschließend wieder auf die aufgezeichnete Datei zurückstelle Layout mit der Zeichenfolge. Dies bedeutet, dass keine explizite Aktion ausgeführt werden muss, um das Layout oder irgendetwas "zu speichern". Es scheint, als ob die Prüfsumme nur eine Art cleverer Weg ist, um zu verhindern, dass fehlerhafte/pathologische Strings die Zeichenfolge verwüsten Interpreter, der die Umordnung des Fensterlayouts vornimmt.

Sie müssen auf jeden Fall eine Zeichenfolge übergeben, die nicht trivial zu konstruieren ist, damit dies funktioniert. Der Code zum Berechnen der Prüfsumme und des Rests ist jedoch klar in layout-custom.c zu sehen. Eines Tages werde ich wahrscheinlich mit einem Shell-Skript zurückkommen (oder nur mit einem C-Programm, wenn es möglich ist, den Code herauszunehmen), das geeignete Transformationen implementiert. Sollte lustig sein.

Ja würde es für mich fantastisch sein, dies heraus zu kurbeln und diese nette kleine Prämie aufzunehmen, aber ich habe echte Arbeit TM, die heute Nacht auf mich wartet.

+0

Es war immer noch eine tolle Antwort, die Prämie ist deine und danke für die Info! – golfadas