vorfee's Tech Blog

Just another tech blog

zshでプロンプトの右端に文字を出力する

標準出力で文字列を右寄せする方法を調べたからメモ。別にzshに限った話ではないのでbashでも使える。

ウィンドウの幅

右端というキーワードを考えるにあたってポイントとなるのはターミナルウインドウの幅である。ウィンドウ幅は $COLUMNSという変数に格納されている。 $COLUMNS はウィンドウの幅に変化があると、自動で書き換わる。

例: 現在のウィンドウ幅を表示する

echo $COLUMNS

ターミナルの右端に文字を出力する方法

printf コマンドと $COLUMNS を使用し、文字列をフォーマット(装飾)して出力する。

例: ターミナルの右端に Sucks so much(そびえたつクソ)と表示する

printf "%${COLUMNS}s\n" "Sucks so much"

どうやって装飾するのかは Man page of PRINTF を参照。C言語のマニュアルだがやっていることに変わりはない。

zshのどんな場面で使えるのか?

たとえばzshのプロンプトに情報をかっこよく表示することができる。何も考えずに、zshに下記をコピペして実行する。

precmd() {
    prompt_l="$(date '+%F %T')"
    prompt_r="${USER}@$(uname -n)"
    printf "%s%$((${COLUMNS} - ${#prompt_l}))s\n" "${prompt_l}" "${prompt_r}"
}

すると毎回のプロンプト表示に下記のような行が追加されるようになる。

2015-03-14 20:49:35                                          vorfee@vorfeeMacBookPro.local

もし、味気ないと感じるなら以下の記事の知識を組み合わせることでカラフルにできる。

vorfee.hatenablog.jp

追記

今回行っているのはprecmd()を使った行の追加で、プロンプトの変更ではない。プロンプトの右端に文字を出力するにはRPROMPTというパラメータを使用する。

http://zsh.sourceforge.net/Doc/Release/Parameters.html#Parameters-Used-By-The-Shell

参照

http://stackoverflow.com/questions/4239010/right-text-align-bash

更新履歴

2017/01/16 文脈が意味不明だったので文構成を変更。 2017/02/17 追記