我正在尝试按照本教程: http://www.tldp.org/HOWTO/NCURSES-Programming-HOWTO/keys.html
但我担心我一点也不好。
这不是世界上最好的代码,但它说明了我想要做的事情:
require "curses"
include Curses
init_screen #initialize first screen
start_color #
noecho
close = false
t1 = Thread.new{
four = Window.new(5,60,2,2)
four.box('|', '-')
t2 = Thread.new{
menu = Window.new(7,40,7,2)
menu.box('|', '-')
menu.setpos 1,1
menu.addstr "item_one"
menu.setpos 2,1
menu.attrset(A_STANDOUT)
menu.addstr "item_two"
menu.setpos 3,1
menu.attrset(A_NORMAL)
menu.addstr "item_three"
menu.setpos 4,1
menu.addstr "item_four"
menu.getch
}
t2.join
while close == false
ch = four.getch
case ch
when 'w'
four.setpos 2,1
four.addstr 'move up'
four.refresh
when 's'
four.setpos 2,1
four.addstr 'move down'
four.refresh
when 'x'
close = true
end
end
}
t1.join
按W和D键,我想在菜单窗口中向上和向下移动菜单项。字面上不知道我怎么能移动那个亮点。这意味着在代码中移动属性设置器。我真的不知道。诅咒的资源并不多。
答案 0 :(得分:5)
您的示例中不需要线程。
你可以在这里看到如何做到这一点:https://gist.github.com/phoet/6988038
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