Tôi không biết đây có phải là điều bạn đang tìm kiếm hay không nhưng có thể bạn có thể sử dụng ý tưởng của mình.
Vì tôi không có thêm thông tin về những gì bạn đang cố gắng hoàn thành, đầu vào của bạn là gì và như vậy, ví dụ này sẽ rất đơn giản.
Hãy nói rằng chúng tôi có một lớp học để làm việc với gọi PlaylistDemo rằng sẽ tạo ra một danh sách nhạc với những bài hát:
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
Chuẩn bị một số bài hát:
# 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"
]
Và đi trước và làm cho một đối tượng:
pd = PlaylistDemo.new(songs)
Bây giờ ý tưởng của tôi là sử dụng dispel để thao tác vị trí và se e chính xác bạn đang ở đâu (và cập nhật "giao diện người dùng" tương ứng).
Đối với điều này tôi đã chuẩn bị một chức năng mà sẽ làm cho giao diện người dùng cho các ứng dụng CLI của bạn:
def show_ui playlist_obj
["\n", playlist_obj.show_playlist, "\nCurrent position: #{playlist_obj.position + 1} "].join("\n")
end
cuối cùng đoạn mã:
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
Bạn cũng có thể sử dụng colorize nhưng đối với bạn sẽ cần puts
ở đâu đó.
Xin lưu ý rằng tôi không đặt giới hạn vị trí vì đây chỉ là ví dụ.
Xem ví dụ của tôi ở đây:
Full mã: http://paste.debian.net/139651/
awesome_print? – daremkd