Ich weiß nicht, ob das ist, was Sie suchen, aber vielleicht können Sie meine Idee verwenden.
Da ich nicht mehr Informationen über das, was Sie erreichen möchten, was ist Ihre Eingabe und so weiter, wird dieses Beispiel sehr einfach sein.
Lassen Sie uns sagen, dass wir eine Klasse mit genannt PlaylistDemo zu arbeiten, die eine Playlist mit Songs erstellen wird:
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
einige Lieder vorbereiten:
# 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"
]
Und gehen Sie vor und ein Objekt machen:
pd = PlaylistDemo.new(songs)
Jetzt ist meine Idee, dispel zu verwenden, um Position und se zu manipulieren Genau wo du bist (und aktualisiere die "UI" entsprechend).
Dafür ich eine Funktion vorbereitet haben, die die Benutzeroberfläche für Ihre CLI-Anwendung machen:
def show_ui playlist_obj
["\n", playlist_obj.show_playlist, "\nCurrent position: #{playlist_obj.position + 1} "].join("\n")
end
Schluss Stück Code:
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
Sie auch colorize aber dafür verwenden, können Sie werde irgendwo puts
brauchen.
Bitte nicht, dass ich kein Limit für die Position gesetzt habe, da dies nur ein Beispiel ist.
Siehe mein Beispiel hier:
Voll Code: http://paste.debian.net/139651/
awesome_print? – daremkd