これはあなたが探しているものかどうかわかりませんが、私の考えを使うことができます。
私はあなたが達成しようとしていること、入力されたことなどは何もないので、この例は非常に簡単です。
のは、私たちが歌とのプレイリストを作成しますPlaylistDemo呼ばで動作するようにクラスを持っているとしましょう:
class PlaylistDemo
attr_accessor :position
def initialize songs
@playlist = Array.new
songs.each { |song| @playlist << song }
@position = 0
end
def show_playlist
@playlist.each_with_index.map do |song, index|
position == index ? "[#{song}]" : " #{song} "
end
end
end
は、いくつかの曲を準備します
# From billboard.com
songs = [
"Taylor Swift - Blank Space",
"Mark Ronson Featuring Bruno Mars - Uptown Funk!",
"Hozier - Take Me To Church",
"Meghan Trainor - Lips Are Movin",
"Meghan Trainor - All About That Bass"
]
そして、先に行くと、オブジェクトを作る:
pd = PlaylistDemo.new(songs)
ここで私の考えはdispelを使用して位置とseを操作することですあなたがいる場所に正確に(そしてそれに応じて "UI"を更新してください)。
私はあなたのCLIアプリケーションのUIを作成する関数を用意しました。このため
:あなたはまた、colorizeを使用することができます
Dispel::Screen.open do |screen|
screen.draw show_ui(pd)
Dispel::Keyboard.output do |key|
case key
when :up then pd.position -= 1
when :down then pd.position += 1
when "q" then break
end
screen.draw show_ui(pd)
end
end
が、そのために:コードの
def show_ui playlist_obj
["\n", playlist_obj.show_playlist, "\nCurrent position: #{playlist_obj.position + 1} "].join("\n")
end
最後のピースどこかでputs
が必要です。
これは単なる例であるため、私は位置の制限を設定していません。
はここに私の例を参照してください:
全コード:http://paste.debian.net/139651/
awesome_printを? – daremkd