GNU Screen/tmuxでウィンドウ名とプロンプト名を同じにする

bashでGNU Screen/tmuxを用いた場合です。

OSXとDebian系で確認しています。

RedHat系はパス名をbasenameで短くすると良いでしょう。

 

1 GNU Screenで画面下部にウィンドウ一覧を表示する

tmuxはデフォルトで画面下部にウィンドウ一覧が表示されますが、GNU Screenは${HOME}/.screenrcの設定が必要です。

hardstatus on
hardstatus alwayslastline "screen | %w"

hardstatus alwayslastlineで画面下部にウィンドウ名の一覧を表示します。

%wにはPROMPT_COMMAND変数の実行結果が設定されます。

以下はDebian 8でのGNU Screenの実行結果です。

0001_no-PROMPT_COMMAND.png

2 PROMPT_COMMAND変数

プロンプトの文字列を生成するコマンドを保持する変数です。以下はRedHat系での実行結果です。

$ echo ${PROMPT_COMMAND}
printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"

RedHat系はPS1との兼ね合いができていますがOSXとDebian系はできてません。GNU Screenを起動していない状態だと以下のようになってしまいました。

hiroom2@lenovo:hiroom2hiroom2@lenovo:~$

このままだと${HOME}以降のパスがすべて表示されて長くなるので、basenameコマンドを使うと良いかもしれません。

printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" `basename "${PWD/#$HOME/~}"`

3 .bashrcでTERM判定とPROMPT_COMMAND変数を設定

TERM変数がscreenとかscreen.xterm-256colorの場合はPROMPT_COMMAND変数を設定するようにします。

case "${TERM}" in
  screen*)
    export PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" `basename "${PWD/#$HOME/~}"`'
    ;;
esac

以下はDebian 8でのGNU Screenの実行結果です。

Ubuntu 14.04だとウィンドウ名が長すぎると省略されるのでユーザ名はなくても良いかもしれません。

0002_PROMPT_COMMAND.png