tmux.confのシェルコマンドにtmux変数を渡す

tmux.confのシェルコマンドにtmux変数を渡す

tmuxの左下のステータスセクションを編集しようとしています。見せたい

セッション: #{session_name}

この設定を使用して、この文字列の現在の最大長を20に設定します。

ステータス左の長さ20

これはうまくいきますが、20を超えるセッション名(「Session:」を含む)を入力するとすぐに、tmuxはテキストを切り捨てます。 20文字を超える文字列が次のように表示されるように、文字列全体を処理したいと思います。

セッション: mysessio...

つまり。文字列は20文字に切り捨てられ、最後の3文字はドットに置き換えられます。私が望むことをするbashスクリプトが実行されています。

string="verylongstringfortesting"
lengthLimit=10

if [ ${#string} -gt $lengthLimit ]
then
  echo ${string:0:$(($lengthLimit-3))}"..."
fi

これをtmux.confにどのように含めますか? #(シェルコマンド)を知っていて#(echo#{session_name})を試しましたが、セッション名を返さないようです。

答え1

解決策を見つけるのに役立ついくつかの情報を収集してください。

  • #(echo #{session_name})何も出力せずに#(echo \"#{session_name}\")セッション名を表示します。有望に見えますが…

  • 引用時に機能する理由は、echoコマンドがテキストを文字通り受け入れ#{session_name}、引用符なしではシェルがこれをコメントとして処理し、引用符を使用するとそのままtmuxにエコーするためです。コマンド終了後のtmux拡張シーケンス

  • これは、シェルで拡張文字列を操作できないことを意味します。

代替方法

  • セッション名を7文字に制限するなどの制限を設定しようとすると、制限は常に適用されますが、#7Sテストできない#7...ため、必要なくても省略記号が常に表示されるため、この機能は機能しません。働く

  • tmuxコマンドで直接アクセスしようとすると、合理的な結果が出ないようです。たとえば、tmux list-sessions -F "#{client_session}"何も表示されず、tmux list-clients -F "#{client_session}"各クライアントのセッションが表示されますが、複数のクライアントがある場合、どのクライアントがコマンドを実行しているかを知るための明確な方法はありません。

私はまだソースコードを掘り下げていませんが、tmuxがどのセッションであるかを知る前にコマンドを実行したようです。

この機能を得るための最良の方法は、おそらくソースコードを修正することです。

バージョン1.8では、status.cの79行の周りの長さを計算し、status_redraw_get_left(322行の周りの長さを記録します。status_redraw(

答え2

この問題はtmux Git HEADで修正されました。https://github.com/tmux/tmux/issues/11

関連情報