2017-11-16 17 views
0

からクライアント呼び出しをリフレッシュ私はhtop開始直後にリフレッシュするためにtmuxペインのタイトルをしたいので、私は私のconfig.fishにエイリアスを追加しました: tmuxのは、魚のシェルエイリアス

alias h "htop;tmux refresh-client -S" 
しかし、それは何もしません。 tmuxまだ私だけのために長すぎるデフォルトの間隔、後に更新され、あなただけの1秒と以下にそれを減らすことができます - も何もしなかった

alias h "htop;sleep 0.1;tmux refresh-client -S" 

は:私も遅延してみました。

私は何が間違っていましたか、私は何をしたいのですか?

答えて

1

多分これは私たちが式からaliasを削除すると見ることが少し簡単です:

echo banana; sleep 5s; echo sausage 

は、「バナナ」をエコー5秒間待つだけにして「ソーセージ」を出力しますので、

htop; tmux refresh-client -S 

はhtopを実行し、終了するまで待ってからを入力し、次にを実行してtmux refresh-client -Sを実行します。この時点で、魚は再びフォアグラウンドプロセスになります。


代わりに、シェルをtmuxと統合する必要があります。今、明らかにtmuxははNames and titlesのエスケープシーケンスを持っているので、

printf '\ekhtop\e\\' # \e is \033 - the escape character 

は「ホテルトップ」に、ウィンドウのタイトルを変更します。

魚は、関数が結合することができるイベントを持っているので、

function tmux_name --on-event fish_preexec 
    printf '\ek%s\e\\' "$argv" # the argument for preexec is the commandline about to be executed 
end 

のようなものは、コマンドラインに常にtmuxのウィンドウ名を設定します。 「、それをそれはまださえ非常に短期実行コマンドのタイトルを設定します - コマンドが終了したとき、これはそれをリセットしませんので、我々は、これが完璧か何かであることを

function tmux_reset_name --on-event fish_postexec 
    # $argv for postexec is also the commandline 
    # so we can't use it. Just hardcode "fish". 
    printf '\ek%s\e\\' fish 
end 

第2の機能を必要はありません長いコマンドでも完全なコマンドラインを使用します(多分$ argv [1]を使う方が良いでしょう)。

これらの関数は、config.fishまたはそれが明示的に指定するファイル(または〜/ .config/fish/conf.d /)に定義する必要があることに注意してください。これは、関数ファイルがオートロードされるためです。イベントについて知っている。

+0

これはまさに私が探していたものです!どうもありがとう!ところで、それはデフォルトとしてtmuxの魚のソースに追加する必要がありますか? – sandric

+0

tmuxの魚源は? AFAIKは魚に特化したものを何もしていないtmuxプロジェクトがあります。そして、tmuxをターミナルとして扱う魚がありますが、このようなものはありません。 – faho

関連する問題