Tmux: Aufforderung zur Auswahl des Fensters für den Join-Bereich, während weiterhin Fensternummern und -titel angezeigt werden?


7

Ich verbinde routinemäßig Fenster in tmux und möchte eine Bindung erstellen, die mich zum Beitritt des Fensters auffordert, während ich weiterhin die Fensternummern und -titel sehen kann. Mein erster Ansatz basierte auf einer der Antworten auf diese Frage :

bind-key < command-prompt -p "create pane from #(tmux list-windows|awk -vORS='  ' '/^[0-9]/{print $1 $2}'):"  "join-pane -s ':%%'"

Aber tmux führt die Interpolation nicht mit anderen Befehlen wie "display-message" durch, und die Eingabeaufforderung selbst nimmt die Statuszeile ein, sodass ich die Fensternummern und -titel nicht sehen kann.

Mein zweiter Ansatz bestand darin, das Auswahlfenster zu nutzen, das eine interaktive Liste von Fenstern anzeigt:

bind <wähle-Fenster "Join-Bereich -hs %%"

Dies funktioniert meistens, nimmt aber das gesamte aktuelle Fenster ein, während ich wähle. Ich möchte etwas tun, wie es bufexplore in vim tut, wo das Fenster zuerst geteilt wird. Dann wird im neuen Bereich eine Eingabeaufforderung angezeigt, in der ich das Fenster auswähle, in das ich es ziehen möchte. Das Folgende scheint ziemlich nah an dem zu sein, was ich will, aber ich habe nur noch den Bereich, in dem die Eingabeaufforderung angezeigt wurde:

bind < split-window -h \; choose-window 'join-pane -hs %%'

Ich würde stattdessen das Fenster verschieben, aber soweit ich das beurteilen kann, können Sie ein Fenster nicht in ein Fenster verschieben (oder überhaupt ein Fenster verschieben, ohne sich anzuschließen), und Folgendes funktioniert nicht:

bind < split-window -h ; choose-window 'move-window -s %%'

Ich vermute, dass der Ansatz so etwas wie die folgende Abfolge von Operationen beinhaltet:

  1. Fenster teilen
  2. Auswahlfenster (Bereich)
  3. Join-Bereich
  4. Beenden Sie das vorherige Fenster (das die Eingabeaufforderung für das Auswahlfenster enthielt).

Aber wenn ich versuche, so etwas wie das Folgende zu tun:

split-window -h ; choose-window 'join-pane -hs %%' ; kill-pane -t.-1

Das getötete Fenster ist das, von dem ich angefangen habe, NICHT das, mit dem die Eingabeaufforderung angezeigt wurde. In der Tat scheint es keinen Unterschied zu machen, den Wert für das Kill-Fenster zu ändern oder zuerst ein Auswahlfenster auszugeben.

Vielleicht kann das nicht gemacht werden, vielleicht gibt es eine Möglichkeit, ein Fenster / 0-Fenster in ein neues Fenster zu verschieben, aber ich kann es nicht herausfinden. Vielleicht gibt es eine Kombination aus interaktiven Befehlen und Aufrufen von

run "tmux <command> etc etc %%"

Das wird es beheben, aber ich kann es nicht herausfinden. Ideen?


Diese Frage kann helfen. Es zeigt eine schöne Möglichkeit, ein Fenster in ein vollständiges Fenster zu "zoomen" und es dann über ein temporäres Fenster an seiner ursprünglichen Position wiederherzustellen. Es ist eine Art Umkehrung dessen, was Sie versuchen, aber Sie können möglicherweise einige Ideen anpassen.
Chepper

Wenn ich diese Methode umkehre (dh Join-Bereich und dann Break-Bereich), indem ich Folgendes versuche: split-window -h ; choose-window 'join-pane -hs %%' ; break-pane -t.-1 Das aktuelle Fenster wird sofort um eins nach oben verschoben und ein neues Fenster hinter dem aktuellen Fenster erstellt, das das Vollbild-Auswahlfenster enthält Prompt. Bei der Auswahl funktioniert es identisch mit der ersten Methode, die ich oben besprochen habe.
Alaska

Dies war eine großartige Frage, ich hatte noch nie daran gedacht, eine Eingabeaufforderung für Befehle hinzuzufügen, die sie noch nicht hatten. Als Ergebnis habe ich meinem tmux zwei neue Bindungen hinzugefügt, eine für horizontal und eine für vertikal. Danke, dass Sie dies gefragt haben und danke @ chris-johnsen
Neg_EV

Antworten:


4

Sie können den anfänglichen temporären Bereich beenden, bevor Sie join-panedas Fenster erneut aufteilen:

bind < split-window -h \; choose-window 'kill-pane ; join-pane -hs %%'

AHA! Das tut es! Das ist die magische Sauce der Befehlsbestellung, nach der ich gesucht habe. Gut gemacht!
Alaska

Nur zum Abschluss habe ich auch: bind > break-pane -d Was ich in einem Split ausführe, um es dorthin zurückzusenden, wo es herkommt (ohne das aktuelle Fenster zu verlassen)
Alaska
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.