我想在Ruby中使用Curses:
getch()
无法阻止/暂停该计划。q
时,退出程序立即。Ctrl-C
的陷阱,以避免中断。但是,我只能做到第一点:
q
时,它会在退出前等待一段时间(<1秒)。Curses
使Ctrl-C
的陷阱根本不起作用...... # -*- coding: utf-8 -*-
require "curses"
Curses.init_screen
Curses.noecho()
Curses.curs_set(0) #invisible cursor
Curses.timeout = 0
Curses.addstr("Press [q] to abort")
sec=0
while true
# if place this outside the while loop, q key will be unable to work
# at all...
if Curses.getch == 'q'
Curses.close_screen #seems unnecessary
exit
end
sec += 1
hello = "Hello World #{sec}"
Curses.setpos(Curses.lines / 2, Curses.cols / 2 - (hello.length / 2))
Curses.addstr(hello)
Curses.refresh
sleep 1
end
# Avoid C-c interruption, but Curses seems to ignore it.
Signal.trap(:INT){
return nil
}
答案 0 :(得分:1)
按q时,它会在退出前等待一段时间(<1秒)。
您应该将无响应的睡眠与阻止输入结合起来:
设置timeout = 1000
并移除sleep 1
。
如果这不是您想要的,那么您需要多线程。
Ctrl-C的陷阱,以避免中断。
您可以使用Curses.raw()
切换到原始模式,所有输入都将直接转移给您,而无需自动处理Ctrl + C等。