5

現在実行中のコマンド、またはコマンドがない場合は現在のシェルの名前で tmux ペインタイトルを更新したいと思います。私がこれまでに思いついたのは、bashrcでこれです:

case ${TERM} in

  screen*)       
    PROMPT_COMMAND='printf "\033]2;bash\033\\"'
    set -o functrace
    trap 'echo -ne "\033]2;$BASH_COMMAND\033\\"' DEBUG
    ;;

   ...

esac

メソッドはここから派生しました: http://www.davidpashley.com/articles/xterm-titles-with-bash.html

これは部分的に機能します - 必要なことは行いますが、他の問題を引き起こします: 新しいシェルの最初のプロンプトには接頭辞が付きます

"'"' DEBUG"

および残りのすべてのコマンド

"

また、コマンドラインで指定された一部のコマンドが失敗するのを防ぎます。次に例を示します。

$ ps -h $$
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html

したがって、上記では現在のコマンドを tmux ペインのタイトルに表示できますが、機能しません。他の誰かがこれに対するより良い解決策、または上記の何が問題なのかについての提案を持っていますか?

ありがとう。

4

3 に答える 3

6

これは、BASHでコマンドを実行するたびにtmuxペインのタイトルを更新する1つの方法です。以下のようなコードを入れてください~/.bashrc

case ${TERM} in

    screen*)

        # user command to change default pane title on demand
        function title { TMUX_PANE_TITLE="$*"; }

        # function that performs the title update (invoked as PROMPT_COMMAND)
        function update_title { printf "\033]2;%s\033\\" "${1:-$TMUX_PANE_TITLE}"; }

        # default pane title is the name of the current process (i.e. 'bash')
        TMUX_PANE_TITLE=$(ps -o comm $$ | tail -1)

        # Reset title to the default before displaying the command prompt
        PROMPT_COMMAND=${PROMPT_COMMAND:+$PROMPT_COMMAND; }'update_title'   

        # Update title before executing a command: set it to the command
        trap 'update_title "$BASH_COMMAND"' DEBUG

        ;;

        ... other cases for different terminals ...

esac

}

この関数update_titleは、tmuxペインのタイトルを変更するエスケープシーケンスを出力します。ペインのタイトルをデフォルト(の値$TMUX_PANE_TITLE)または引数として指定されたものに設定します。

この関数titleはエンドユーザーの便宜のためのものです。デフォルトのタイトルの値を変更します$TMUX_PANE_TITLE。エンドユーザーは、次のようにして、いつでもタイトルを好きなように変更できます。

$ title my new pane title

最初のタイトルは、実行中のシェルの名前(つまり、「bash」)に設定されます。

Bashは$PROMPT_COMMAND、プロンプトを表示する前に何かを実行します。これはupdate_title、プロンプトをデフォルトのタイトルに設定するために、すべてのプロンプトの前に関数が実行されるように設定されています。

トラップにより$BASH_COMMAND、コマンドを実行する前にBashが実行されます。すべてのコマンドの前にupdate_title関数が実行され、プロンプトがそのコマンドのテキストに設定されるように設定されています。

その他の注意事項

  • set -o functraceこれを解決しているときに、またはset -T(質問にリンクされている人が説明しているように)RVMが壊れることを発見しました。提案された理由は、サブシェルでプロンプトを変更できるようにするためでしたが、これがないことは私にとって問題ではありませんでした。

  • 最初のタイトルを取得するために、より簡潔なものを使用したかったのですps -ho comm $$が、これは上記を使用したtmux内では機能しないようでした。なぜそんなにうまくいったものを選んだのかわかりません。

于 2013-01-18T10:00:50.980 に答える
2

まだペインのタイトルとして設定されていない場合、それをペインのタイトルとして設定できるかどうかはわかりません (私の tmux 1.8 では、コマンドがペインのタイトルとして既に示されているようです) #{pane_current_command}。コマンドを含むステータスバー文字列で使用できます。

于 2013-05-30T19:16:25.213 に答える