ある tmux セッションを終了し、別の tmux セッションを選択します。

ある tmux セッションを終了し、別の tmux セッションを選択します。

X以下を行うためにバインドしようとしています。

  • セッションを終了する必要があるかどうかをユーザーに尋ねます。
  • y入場するとセッションを終了します
  • セッションが終了したら、別のセッション(最後、前、または次のセッション)を選択します。

いくつかの同様のコマンドが正しくありません。

  1. セッションを終了し、端末を閉じます。

    bind X confirm-before -p "Kill #S (y/n)?" kill-session
    
  2. 終了するセッション名を入力し、終了後に次のセッションを選択するようにユーザーに指示します。

    bind X command-prompt -p "kill:"  "switch-client -n \; kill-session -t '%%'"
    
  3. 同様のコマンドの例が見つかりませんでした。動作しない解決策は次のとおりです。

    bind X confirm-before -p "Kill #S (y/n)?" "SESSION='#S' \; \
    switch-client -n \; kill-session -t \"$SESSION\""
    

ベストアンサー1

私はこれがあなたが望むものに近いと思います。

bind-key X confirm-before -p "Kill #S (y/n)?" "run-shell 'tmux switch-client -n \\\; kill-session -t \"#S\"'"

#3のアプローチは正確ですが、問題は、コマンド文字列に-style置換(例)がconfirm-beforeないことです。status-left#S

上記のバインディングに関する1つの注意点は、すべての操作がfrom内で実行されるため、run-shellコマンドが特定のクライアントまたはセッションのコンテキスト外で実行されることです。 「プライマリ」クライアント(用switch-client)と「プライマリ」セッション(用#S)が最新のアクティブクライアントであるために機能します。アクティブなクライアントが1つしかない限り(たとえば、他のユーザーに入力しない単一のユーザーなど)、これは期待どおりに機能します。マルチプレクサクライアントは、シェルコマンドの実行が完了するまで(たとえば)バインドをトリガーすると、大幅に失敗する可能性があります。マルチプレクサクライアントA、新しい入力が受信されましたマルチプレクサクライアントBは、run-shellシェルが起動する前にコマンドを実行できます。

run-shellこの特定の競合状態は、コマンドにクライアント/セッション/ウィンドウ/ウィンドウ情報を提供する良い動機になるようです。インポートif-shellrun-shellサポート(オプション?)status_replace()(スタイルの交換など)のTODOエントリがありますが、status-leftおそらくより良いオプションは、format_expand()これが新しい親セットstatus_replace(offers#{client_tty}など)です。

おすすめ記事