Starten Sie die tmux-Sitzung und stellen Sie sicher, dass alle untergeordneten Elemente beendet werden.

Starten Sie die tmux-Sitzung und stellen Sie sicher, dass alle untergeordneten Elemente beendet werden.

Ich verwende tmux für die Entwicklung. Ich habe eine Aufgabe in einem Fenster laufen und eine andere in einem eigenen. Ich habe die Konvention festgelegt, dass der Basisname des Projektverzeichnisses der Name der tmux-Sitzung ist.

export SESSION_NAME="my-project-name"
tmux kill-session -t "$SESSION_NAME"
tmux new-session -s "$SESSION_NAME" \
                "api.start --monitored" \; \
                split-window "ui.start --monitored" \; \
                select-layout tiled \; \
                set-option -w remain-on-exit on \; \
                set-option -w mouse on \; \
                set-option -g mouse on \; \
                bind-key -n C-c kill-session -t "$SESSION_NAME"

Alles scheint ordnungsgemäß zu funktionieren, außer dass beim Starten eines anderen Projekts mit derselben Konvention die Tastenkombination STRG+C in der ersten Sitzung aus irgendeinem Grund denkt, dass SESSION_NAME die letzte von Tmux gestartete Sitzung sei, was nicht meinen Erwartungen entsprach.

Antwort1

In dem von Ihnen geposteten Snippet $SESSION_NAMEwird jedes Vorkommen von durch die Shell erweitert und jedes tmuxerhält den erweiterten Wert als Befehlszeilenargument.

$SESSION_NAME(Selbst wenn dies nicht der Fall ist und Sie dies später in tmux oder in einer Shell in tmux erweitern möchten , ist dies export SESSION_NAME="my-project-name"möglicherweise vergeblich, daWie tmuxbaut die Umwelt. Die update-environmentOption oder new-session -e …der Befehl könnte hilfreich sein.)

Dies schließt ein $SESSION_NAMEin bind-key -n C-c kill-session -t "$SESSION_NAME". Ihr tmuxführt aus:

bind-key -n C-c kill-session -t my-project-name

Für ein anderes Projekt sieht der tmux-Befehl dann wie folgt aus:

bind-key -n C-c kill-session -t different-name

Wichtig ist, dass bind-keyes sich nicht auf eine einzelne Sitzung bezieht. bind-key -n C-c …ändert das Verhalten von Ctrl+ cfür den gesamten tmux-Server. In Ihrem Fall bind-keyüberschreibt das Letzte die vorherige Zuweisung und dann wird Ctrl+ cin jeder Sitzung verwendet kill-session -t different-name.

Ich denke, Sie könnten die Option verwenden key-table, die Standardschlüsseltabelle rootfür jede Sitzung separat auf etwas anderes als einzustellen. In jeder neuen Schlüsseltabelle könnten Sie eine andere Bindung für festlegen C-c. Ich habe das nicht getestet, ichdenkenes könnte möglich sein.

Wenn ich Sie wäre, würde ich es einfacher machen. Ich würde Folgendes tun:

tmux bind-key -n C-c kill-session

kill-sessionohne -tZiele dieaktuellSitzung, daher sollte diese Bindung das tun, was Sie für my-project-nameoder different-namejede andere Sitzung möchten.

Ehrlich gesagt ist "jede andere Sitzung" zu viel für mich. Ich möchte nicht Ctrlalles cin meinemallgemeiner ZweckSitzung(en). Ich würde das lösen:

  • entweder indem man C-ces so lässt und einen anderen Tastendruck als „globales SIGINT“ auswählt und dann absichtlich das eine oder das andere verwendet;

  • oder indem Sie Sitzungen, die Ctrl+ verwenden sollen, explizit cals „globales SIGINT“ „markieren“. Das kann etwa so aussehen:

    tmux new-session -e 'TMUX_GLOBAL_SIGINT=1' \; \
          bind-key -n C-c if-shell '[ -n "$TMUX_GLOBAL_SIGINT" ]' kill-session 'send-keys C-c'
    

    Jetzt wird in jeder Sitzung, die eine nicht leere TMUX_GLOBAL_SIGINTVariable in ihrer Umgebung hat Ctrl, cdie Sitzung beendet. In jeder Sitzung, in der die Variable TMUX_GLOBAL_SIGINTleer oder nicht gesetzt ist, funktioniert Ctrl+ wie üblich.c

    Anmerkungen:

    • Für eine bereits gestartete Sitzung können Sie die Einstellung mit tmux set-environment -u TMUX_GLOBAL_SIGINToder ändern tmux set-environment TMUX_GLOBAL_SIGINT 1(verwenden Sie es -t, um auf eine bestimmte Sitzung abzuzielen, nicht notwendigerweise auf die aktuelle).

    • Eine Shell (oder ein anderes Programm), die in tmux gestartet wird, kann erben TMUX_GLOBAL_SIGINT. Wenn sie ausgeführt wird, kann tmux new-session …(je nach update-environmentund dergleichen) die neue Sitzung auch die Variable erben, sogar ohne explizites -e 'TMUX_GLOBAL_SIGINT=1'. Lesen man 1 tmuxund erfahren Sie, wie tmux die Umgebung verwaltet.

verwandte Informationen