Bu sizin aradığınız şey olup olmadığını bilmiyorum ama belki benim fikrimi kullanabilirsiniz.
Neyi başarmaya çalıştığınıza dair daha fazla bilgiye sahip olmadığımdan, girişiniz nedir ve bu örnek çok basit olacaktır.
# 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"
]
Ve devam edin ve bir nesne yapmak:
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
bazı şarkılar hazırlayın:
en biz müzik parçalarından bir liste yaratacağı denilen PlaylistDemo çalışmak için bir sınıf var diyelim
pd = PlaylistDemo.new(songs)
Şimdi benim düşüncem, pozisyonu değiştirmek için dispel kullanmaktır. tam olarak nerede olduğunuzu (ve buna göre "UI" güncelleyin). kod
def show_ui playlist_obj
["\n", playlist_obj.show_playlist, "\nCurrent position: #{playlist_obj.position + 1} "].join("\n")
end
Final süsü: Ben senin CLI uygulama için UI yapacak bir fonksiyon hazırladım Bunun için
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
Ayrıca colorize kullanabilirsiniz ama bunun için Bir yerde puts
'a ihtiyacım var.
Lütfen bu bir örnek olduğundan, konum için bir limit belirlemedim.
burada örneğe bakın:
Tam kodu: http://paste.debian.net/139651/
awesome_print? – daremkd