screen の caption に期日までの残り時間を表示する

仕事の期日やイベントまであと何日みたいなのが表示されてたら便利かなと思い立って、なんとなく出来たのでメモ。
このままだとだいぶ使いにくい状態ですが、スクリプト呼んで結果を表示してるのでいかようにも出来ますね。

呼ばれるスクリプト ~/bin/screen-remain.pl

#!/usr/bin/perl

# screen-remain.pl - remain time for screen
# $Id$

use strict;
use Time::Local;

my ($year,$month,$day) = (2012,1,1);
our $target = timelocal(0,0,0,$day,$month-1,$year-1900);

$| = 1;

while($target > time){
    my $r = $target - time + 59;
    my $d = int($r/86400);
    my $h = int(($r - $d*86400)/3600);
    my $m = int(($r - ($d*86400 + $h*3600))/60);
    my $s = 1 == $d ? "day" : "days";
    printf("[%d%s %02d:%02d]\n", $d, $s, $h, $m); 
    sleep(1);
}
print "\n";

あまりを引く方がスマートだった気がしてきた。
そして .screenrc の設定

# caption         always "%w %=%y/%m/%d %c"
caption         always "%w %=%0` %y/%m/%d %c"
backtick        0 0 0 ${HOME}/bin/screen-remain.pl

man 1 screen に詳しく載っていますが、%0` がこの後に出てくる backtick の結果になります。
backtick 行の1つめの 0 が id で、%0` の 0 と対応しています。

UNIX

Posted by yokky