2015-01-05 5 views
5

Rubyで特定の配列をとり、矢印キーでブラウズできるリストとして表示するcliアプリケーションを作成しようとしています。RubyのキーボードでCurses配列ブラウジング

既にこれを行うライブラリをRubyで見たような気がしますが、その名前は覚えていません。

私はコードをsoundcloud2000からリバースエンジニアリングして同様のことをしようとしていますが、彼のコードはSoundcloud APIの使用に密接に関連しています。

私はもっとabstraction.Ad

で何かを考えている、呪いの宝石の承知しているが、誰がそれやこれを行うことがコンセプトRubyコードのいくつかの証明を行うライブラリを見ていますか?

+0

awesome_printを? – daremkd

答えて

6

これはあなたが探しているものかどうかわかりませんが、私の考えを使うことができます。

私はあなたが達成しようとしていること、入力されたことなどは何もないので、この例は非常に簡単です。

のは、私たちが歌とのプレイリストを作成します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/

+0

バム、これは私が思うのです! Dispelは私が考えていた* and *と完全なサンプルコードのライブラリでした! 私は今夜これを試してみようと、あなたに賞金をあげてください:) –

+0

私はそれを助けてうれしいです:)私の最初の賞金 – radubogdan

2

あなたはcursesルビーの宝石を探しています。

Example @phoetで作成されたメニューです。

require "curses" 
include Curses 

init_screen 
start_color 
noecho 

def draw_menu(menu, active_index=nil) 
    4.times do |i| 
    menu.setpos(i + 1, 1) 
    menu.attrset(i == active_index ? A_STANDOUT : A_NORMAL) 
    menu.addstr "item_#{i}" 
    end 
end 

def draw_info(menu, text) 
    menu.setpos(1, 10) 
    menu.attrset(A_NORMAL) 
    menu.addstr text 
end 

position = 0 

menu = Window.new(7,40,7,2) 
menu.box('|', '-') 
draw_menu(menu, position) 
while ch = menu.getch 
    case ch 
    when 'w' 
    draw_info menu, 'move up' 
    position -= 1 
    when 's' 
    draw_info menu, 'move down' 
    position += 1 
    when 'x' 
    exit 
    end 
    position = 3 if position < 0 
    position = 0 if position > 3 
    draw_menu(menu, position) 
end 
+0

私は呪いの宝石について知っています。私はより抽象度の高い図書館について話しています –

+1

次回は他の人があなたの質問にもっと正確に答えることができるように、 – eabraham

+0

心配しないで、ちょうど私の答えにそれを追加しました。 –