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


Table of Contents

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

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

hardstatus onhardstatus 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 “33k%s@%s:%s33\” “${USER}” “${HOSTNAME%%.*}” “${PWD/#$HOME/~}”

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

hiroom2@lenovo:hiroom2hiroom2@lenovo:~$

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

printf “33k%s@%s:%s33\” “${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 “33k%s@%s:%s33\” “${USER}” “${HOSTNAME%%.*}” `basename “${PWD/#$HOME/~}”`’ ;;esac

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

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

0002_PROMPT_COMMAND.png

Android | Linux | SDL - Narrow Escape