#!usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'io/console'
Funcs = ["忘れ物確認!", "メモ", "終了"]
Statuses = [:items, :memo, :end]
Items = [File.readlines('items_to_pack.txt'), File.readlines('items_to_pack2.txt')]
def lineup(arr, num, sep = " ・ ")
puts arr.map.with_index { |item, i| "\e[#{num == i ? 7 : 4}m" + sep + item.to_s + "\e[m" }
end
ArrowKeys = {'A'=>-1, 'D'=>-1, 'B'=>1, 'C'=>1}
def select(arrow = false, num = 0, max = nil)
loop do
case STDIN.getch
when "\e"
if arrow
if STDIN.getch == "["
char = STDIN.getch
val = /[A-D]/.match?(char) ? num + ArrowKeys[char] : 0
return $input = max ? val % max : val
end
end
when "\r", " "
return $input = nil
end
end
end
num = nil
status = :menu # menu, items, schedules, memo, end
begin
until status == :end
num ||= 0
lines = `tput lines`.chomp.to_i
cols = `tput cols`.chomp.to_i
system "clear"
system "tput civis"
puts "\e[1;3m 忘れ物防止プログラム・改\e[m", "これで忘れ物対策はバッチリ!", "-" * cols, nil
case status
when :menu
puts "機能を選択してください...(矢印キー・Enter/Return)"; lineup(Funcs, num, "\n ")
select(true, num, Funcs.length)
status = Statuses[num] unless $input
num = $input
# when :items
else
puts "Oops!", "なにか問題が発生したみたいです。", nil, "\e[5m(Enter/Return)\e[m"
select
status = :menu
end
end
ensure
system "clear"
system "tput cnorm"
end
puts nil, " \e[1m準備バッチリ! さぁ出発だ!\e[m", nil