Newer
Older
Ruby / final.rb
#!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