最新版GNU Screenで縦分割(その3〜captionとhardstatusについて〜)


これはその1〜導入編〜その2〜設定ファイルについて〜の続きです。

defbce on
attrcolor b ".I"
term xterm-256color
termcapinfo xterm-256color 'is=^[r^[m^[2J^[H^[?7h^[?1;4;6l'
defscrollback 1000
altscreen on
escape ^Zz
vbell off
bell_msg "Bell in window %^G"
autodetach on
shell $SHELL
startup_message off
logfile "$HOME/.screen/screen-%Y%m%d-%n.log"
deflog on
shelltitle '$ |bash'
caption always "%{= Rk} %?%F%{b kr}%? %?%h%:%t (screen #%n)%? %{-}"
hardstatus alwayslastline "%{= Gk} %-Lw%40L>%{b kg} %n %t %{-}%+Lw%-040=%{b km} %l %{.b} %Y/%m/%d %C:%s %A "
sorendition "= Rk"

では一番難解なcaptionhardstatusの解説だ。そもそもcaptionhardstatusの違いは何か。

いろいろ理屈はあるが、これだけ覚えておけばいい1

caption     => 各ウィンドウに一つずつ
hardstatus  => 全体で一つだけ

まずはcaptionから説明しよう。

Captionについて

caption always "%{= Rk} %?%F%{b kr}%? %?%h%:%t (screen #%n)%? %{-}"

最初のcaption alwaysは見たまんま。キャプションを常に(例えウィンドウが一つの時でも)表示する。

captionhardstatusでは”%”に続く文字列が特別な意味を持っている。まず最初の、

%{= Rk}

これは”%”に続いて中括弧”{}”があるので色指定を表す。色指定は各色を表すアルファベット+何かによって表されており、この文の意味はこうだ。

    =    => 今までの色指定をリセット
スペース => 区切り文字
    R    => 背景は明るい赤
    k    => 文字の色は黒

ここはまだ簡単。次が難解である。

%?%F%{b kr}%?

これは所謂IF文だ。”%? ~ %?”で、”IF ~ END IF”となる。上の形式で説明すると、

    %?          => IF
        %F      => ウィンドウがアクティブなら真
        %{      => 色指定開始
        b kr    => 太字、背景は黒、文字の色は赤
        }       => 色指定終了
    %?          => END IF

もしそのウィンドウがアクティブなら次の文字列を「太字、背景は黒、文字の色は赤」に設定する

となるわけだ。次はもっと難関。”IF ~ ELSE ~ END IF”だ。

%?%h%:%t (screen #%n)%?

    %?      => IF
        %h  => ハードステータスがあればそれ
    %:      => ELSE
        %t (screen #%n) => なければこっち
            %t  => ウィンドウタイトル
            %n  => ウィンドウの番号
    %?      => END IF

もしそのウィンドウにハードステータスがあればそれを表示する。無ければ、ウィンドウのタイトルと番号を所定の書式で表示する。

普通はウィンドウのハードステータス(”%h”)は必要ないのでこのIF文は削ってもいい気もする。Screenの中でScreenを起動したりするときには”%h”も必要なんだろうか?

最後は簡単だ。

    %{-}    => 一つ前の色に戻す

少し前のIF文、”%?%F%{b kr}%?”で色が変わっていたら元に戻す。変わってなかったら(この場合は)何もしない。

次はさらに長い。hardstatusに行こう。

hardstatusについて

hardstatus alwayslastline "%{= Gk} %-Lw%40L>%{b kg} %n %t %{-}%+Lw%-040=%{b km} %l %{.b} %Y/%m/%d %C:%s %A "

順に見ていこう。

hardstatus alwayslastline

captionと同じく最初は見たまんま、ハードステータスを常に一番下に表示する。次もいつものように色指定だ。

%{= Gk} %-Lw

    %{= Gk} => 色指定を初期化し、背景を明るい緑、文字の色を黒にする
    %-Lw
        %-w => 現在のウィンドウより前のもののタイトル
        L   => フラグを付ける

現在のウィンドウより前のもののフラグ付きタイトルを「背景は明るい緑、文字の色は黒」で表示する。

となる。実はフラグってのが何なのかよくわかってません。一つ前にいたウィンドウのタイトルに”-“が付くのはわかったけれども……。

%40L>%{b kg} %n %t

    %40L>
        %40>    => 次の文字列を全体の40%の位置に置く
        L       => 省略された部分を"..."に置き換える
    %{b kg} => 「太字、背景は黒、文字の色は緑」
    %n      => ウィンドウの番号
    %t      => ウィンドウのタイトル

左から40%の位置に次の文字列を置き、表示しきれなかった分は”…”と表示する。ウィンドウの番号とタイトルを「太字、背景は黒、文字の色は緑」で表示する。

“L”なんて使い場所によって意味が変わるのだからめんどくさい。また、「文字の色は緑」と書いたが、前回説明した「attrcolor b “.I”」が効いているので、実際には文字の色は明るい緑となる。

%{-}%+Lw

    %{-}    => 一つ前の色に戻す
    %+Lw
        %+w => 現在のウィンドウより後のもののタイトル
        L   => フラグを付ける

一つ前の色、つまり「背景は明るい緑、文字の色は黒」に戻し、現在のウィンドウより後のもののフラグ付きタイトルを表示する。

ここはもう説明不要か。読んだまんまだね。

%-040=%{b km} %l

    %-040=
        -       => 画面右から
        040     => 40文字
        =       => 位置指定
    %{b km} => 「太字、背景は黒、文字の色はマゼンダ」
    %l      => システム負荷

画面右から40文字の位置に、「太字、背景は黒、文字の色はマゼンダ」に設定する。次にシステム負荷を表示する。

040“は絶対文字位置指定。頭に”0“が付くと絶対位置、付かないとパーセント表示になる。”システム負荷”とは所謂ロードアベレージ……って何だっけ。ちゃんと調べたことなかったのでググってみた。

CPU使用率とロードアベレージ – 教えて!goo
http://oshiete1.goo.ne.jp/qa1480201.html

Linuxのtopコマンドで表示されるload averageについて教えてください。… – 人力検索はてな
http://q.hatena.ne.jp/1135926670

うちの鯖だと1.00行くか行かないか位だから、大丈夫なのかな。

%{.b} %Y/%m/%d %C:%s %A

    %{.b}   => 背景色はそのまま、文字の色は青
    %Y/%m/%d %C:%s %A
        %Y  => 年
        %m  => 月
        %d  => 日
        %C  => 時:分(12時間表記)
        %s  => 秒
        %A  => AM/PM

「太字、背景は黒、文字の色は青」で、日付と時刻を表示する。

最後は日付及び時刻の表示だ。色指定の時、”.“を使うと前の指定をそのまま継承する。又、”=“が付いてない場合はその他の属性(この場合は「太字」)も継承する。

長かったがこれでやっと終了だ。後はsorenditionとその他の情報について。

sorenditionについて+その他

sorendition "= Rk"

これは「その他のメッセージ」に対する色指定である。「その他のメッセージ」とはScreenの出す様々な情報や警告のことだ2が、縦分割時の分割線もこれに含まれるのだ。因って、この色指定にはcaptionの時と同じものを使って統一性のあるものにしている。

ここまでの設定で以下のような表示が可能になる。他に効果と色の早見表と、リンク集を置いておく。

2010-02-04_120544.png

色指定は大文字だと明るい色になります
記号 効果 記号
d 暗くなる k
u 下線 r
b 太字 g
r 反転 y
s 強調 b
B 点滅 m マゼンダ
c シアン
w
d 標準

Manpage of SCREEN
http://www.linux.or.jp/JM/html/GNU_screen/man1/screen.1.html

CreativeStyle » Gitリポジトリから取得したscreenをコンパイル & インストール
http://www.kadoppe.net/archives/2010/01/screen-git-install.html

卜部昌平のあまりreblogしないtumblr – 俺の .screenrc が火を吹くぜ
http://shyouhei.tumblr.com/post/313410522/screenrc


  1. 前回挙げたリンクにはhardstatusをたくさん使う荒技も解説されている。 
  2. 尤も、標準ではこれらの情報、警告は色指定が反映されない。初期設定では、これらを表示するときにハードステータス行全てを消して、白黒表示することになっているからだ。色指定を反映したいときは、”hardstatus off”という一文を入れておく。 

3 thoughts on “最新版GNU Screenで縦分割(その3〜captionとhardstatusについて〜)

  1. Pingback: .screenrc(captionとhardstatusの設定)にもがく | abendsundayのブログ

  2. Pingback: .screenrc(captionとhardstatusの設定)にもがく | callcc28

コメントを残す