コンソールで動くキッチンタイマー

2006-01-02 - 趣味的にっきをみて数字の表示が非常にかっこよかったので、少し改良して作ってみました。

#!/usr/bin/ruby -Ke
# -*- ruby -*-
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2, or (at
# your option) any later version.

require 'curses'

class CursesKitchenTimer
  def initialize
    @data = DATA.read.split(/[\|\r\n]/).delete_if {|x| x == '' }
    Curses.init_screen
  end

  def close
    Curses.close_screen
  end

  def display_time(m,s)
    Curses.clear
    8.times do |i|
      str =
        @data[i * 11 + m / 10] + @data[i * 11 + m % 10] +
        @data[i * 11 + 10] +
        @data[i * 11 + s / 10] + @data[i * 11 + s % 10]
      Curses.setpos(i,0)
      Curses.addstr(str)
    end
    Curses.refresh
  end
  
end

panel = CursesKitchenTimer.new
timer = ARGV.shift.to_i * 60 + Time.now.to_i

begin
  while ((remain = timer - Time.now.to_i) >= 0)
    panel.display_time(remain / 60 , remain % 60)
    sleep 1
  end
ensure
  panel.close
end

__END__
┏━━━┓ ┏━━━┓ ┏━━━┓ ┓ ┓ ┏━━━┓ ┏━━━┓ ┏━━━┓ ┏━━━┓ ┏━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
┃ ┃ ┏━━━┛ ┣━━━┫ ┃ ┃ ┗━━━┓ ┣━━━┓ ┣━━━┫ ┃ ┃
┃ ┃ ┗━━━┫ ┃ ┃ ┃ ┃ ┗━━━┫
┃ ┃ ┃ ┃ ┃ ┃
┃ ┃ ┃ ┃ ┃ ┃
┗━━━┛ ┗━━━┛ ┗━━━┛ ┗━━━┛ ┗━━━┛ ┗━━━┛ ┗━━━┛

問題点は

  • 終了時のイベントがない
  • 100分以上無理

二番目に関してはあくまでもキッチンタイマーなのでそんなに長い時間計ることはないため改良する気はありません。

元のコードGPL2ライセンスだったので自分なりに調べたのですが、ライセンス的にまずかったら連絡ください。尚、ソースコードの大部分を2006-01-02 - 趣味的にっきから流用しています。このソースコードのライセンスに関しては右に書いてあることは適用しません。

cursesの使いかたや罫線の読みこみかたなど知らなかったことがたくさんあり大変勉強になりました。