コンソールで動くキッチンタイマー
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の使いかたや罫線の読みこみかたなど知らなかったことがたくさんあり大変勉強になりました。