複数のtmuxコマンドを1つのキーストロークにバインドするにはどうすればよいですか?


13

具体的には、何らかのコマンドが完了した後に通知を送信しようとしています。したがって、たとえば、構成ファイルをリロードする場合、それが機能したことを確認したいと思います。

bind R source-file "$HOME/.tmux.conf" && display-message "Configuration reloaded."

ただし、それは機能しません。コマンドをつなぎ合わせる方法として試した他のこともしません。


1
私にとっては(Debian squeezeのtmux 1.3)\;セパレータとして機能します。
ジル 'SO-悪であるのをやめる'

1
わかった、\; 動作し、それは私が下で選んだ答えの本質です。どういうわけか私は\;をテストしました 速すぎて機能しないと判断しました。しかし、これを行う方法の質問に答えるためにまだ役立つので、私はこの質問をここに残しています。
iconoclast

回答:


12

run-shellオプションを使用できますが、重要なことは、コマンドを\;

この場合、次のようなものです。

bind R source-file ~/.tmux.conf \; run-shell "echo 'Reload'"

run-shell shell-command
(別名:run)
ウィンドウを作成せずにバックグラウンドでシェルコマンドを実行します。終了後、stdoutへの出力はコピーモードで表示されます。コマンドが成功を返さない場合、終了ステータスも表示されます。


ねえ、答えてくれてありがとう。私はそれを具体的にテストしていませんが、問題のコードを\でテストしたので、動作するとは思わない そして、最初のコマンドではなく、2番目のコマンドを実行しただけです。そして、なぜrun-shellが機能するのかわかりませんが、display-messageは機能しません。
iconoclast

1
さて、私はあなたのソリューションをテストしてみましたが、tmuxは明らかに(絶対確実ではありませんが)そのコマンドからロックし続けます。私は挑戦し続けますが、うまくいかないと確信しています
...-iconoclast

tmux 1.4で動作します。「ロックアップ」とは「コピーモード」を意味しますか?これは仕様によるものです
...-jasonwryan

わかりました、tmuxをロックせずに動作しました。私が最初に\を使用しようとした理由に関する疑問が残りました。動作しませんでした:
iconoclast

1
答えの中心は\を使用することです。-run-shellについての部分はあまり重要ではなく、display-messageを与えた例の方がずっと良いと思います。だから私はあなたよりもあなたの答えを選んでいるが、他の人を誤解させたり混乱させたりしないように答えを編集してくれないか。ありがとう!
iconoclast

4

私の質問を作成した直後、私はうまくいくかもしれない何かを考えました。私はそれを試してみましたが、動作します。tmux構成用に複数のファイルを用意するだけです。

ここに解決策があります。具体的には、構成の再読み込みに関連しています。.tmux.confファイルに、次のようなものを入れます。

bind R source-file "$HOME/.tmux/reload.tmux"

ファイル〜/ .tmux / reload.tmuxに次のようなものを追加します。

source-file "$HOME/.tmux.conf" 
display-message "Configuration reloaded."

完璧に機能します。


1
これは実際に機能する唯一の方法です。ここの他のすべては機能していません。
lzap

本当に?...私が他のアプローチをテストしてからしばらく経ちましたが、tmuxがそれを破ったとしても驚かれることでしょう。機能しないことが確実な場合は、再度テストし、代わりにこの回答を受け入れます。
iconoclast

申し訳ありませんが、上記の答えは本当に機能します:
lzap

1

run-shellメソッドを使用すると、出力がコピーバッファーに格納されるため、手動でクリアする必要があります。中間構成ファイルを使用すると、2番目の構成ファイルを維持するオーバーヘッドが追加されます。私の場合、両方の答えを組み合わせるとうまくいきます。GUIのポップアップダイアログボックスのように、短い間隔でメッセージが消えるようにしたかったのですが、すべてを1つのファイルに入れたままにしておきました。

bind R source-file ~/.tmux.conf \; display-message "Configuration reloaded"

0

tmux内で本格的なスクリプティングを可能にし、tcl言語を内部にアタッチするパッチがあります。

http://ershov.github.io/tmux/

また、「モード」キーストロークに必要な数のアクションを指定できます。

それを使用すると、コードは次のようになります。

bind R tcl { source-file "$HOME/.tmux.conf" ; display-message "Configuration reloaded." }

またはさらに読みやすい:

bind R tcl {
  source-file "$HOME/.tmux.conf"
  display-message "Configuration reloaded."
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.