バッテリーのこり60秒で通知の話

僕のトークでなんか気になった人がいるとのことなので僕の使っているスクリプトを置いておきますね。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;

use Cocoa::BatteryInfo;
use Cocoa::EventLoop;
use Cocoa::Growl ':all';

growl_register(
    app           => 'Battery Notifier',
    notifications => ['NotifyLastOneMinite', 'NotifyTimeRemaining'],
);

Cocoa::BatteryInfo::time_remaining_handler {
    my $sec = Cocoa::BatteryInfo->time_remaining_estimate;

    return unless $sec =~ /\d/;

    if ($sec <= 60) {
        growl_notify(
            name        => 'NotifyLastOneMinite',
            title       => 'バッテリー切れまで',
            description => sprintf '残り %d 秒', $sec,
        );
    }
    else {
        my $time;

        if ($sec >= 60*60) {
            $time = sprintf '%d 時間 %d%d 秒',
                int($sec / (60*60)), int(($sec % (60*60)) / 60), $sec % 60;
        }
        elsif ($sec > 60) {
            $time = sprintf '%d%d 秒',
                int($sec / 60), $sec % 60;
        }
        else {
            $time = sprintf '%d 秒', $sec;
        }

        growl_notify(
            name        => 'NotifyTimeRemaining',
            title       => 'バッテリー切れまで',
            description => sprintf '残り %s', $time,
        );
    }
};

Cocoa::EventLoop->run;

これを LaunchAgent でログイン時に自動で立ち上がるようにしております。

で、これをうごかしているとバッテリー残り時間が変化したタイミングで Growl 通知が来るのですが、 普通は NotifyTimeRemaining という通知が来ます。もしそのときに残りが60秒いないだったらその代わりに NotifyLastOneMinite という通知が来ます。

毎回通知されるのはうざいので僕は NotifyTimeRemaining というほうは Growl の設定でオフにしています。

で、だいたい使っている感覚としては60秒でまず通知が来て、 その後もういちど、残り0秒という通知がきて、その直後にハイバネートする、というような感じのようです。

by typester / at 2012-09-30T13:14:00 / perl · osx / Comments(0)