可以设置时间限制来读取Lua中终端的输入。
例如,你只需要1秒钟来写一封信,否则程序会跳过这个动作。
感谢任何提示;)
答案 0 :(得分:2)
您可以使用man termios
更改终端设置(请参阅luaposix)(仅在POSIX计算机上):
local p = require( "posix" )
local function table_copy( t )
local copy = {}
for k,v in pairs( t ) do
if type( v ) == "table" then
copy[ k ] = table_copy( v )
else
copy[ k ] = v
end
end
return copy
end
assert( p.isatty( p.STDIN_FILENO ), "stdin not a terminal" )
-- derive modified terminal settings from current settings
local saved_tcattr = assert( p.tcgetattr( p.STDIN_FILENO ) )
local raw_tcattr = table_copy( saved_tcattr )
raw_tcattr.lflag = bit32.band( raw_tcattr.lflag, bit32.bnot( p.ICANON ) )
raw_tcattr.cc[ p.VMIN ] = 0
raw_tcattr.cc[ p.VTIME ] = 10 -- in tenth of a second
-- restore terminal settings in case of unexpected error
local guard = setmetatable( {}, { __gc = function()
p.tcsetattr( p.STDIN_FILENO, p.TCSANOW, saved_tcattr )
end } )
local function read1sec()
assert( p.tcsetattr( p.STDIN_FILENO, p.TCSANOW, raw_tcattr ) )
local c = io.read( 1 )
assert( p.tcsetattr( p.STDIN_FILENO, p.TCSANOW, saved_tcattr ) )
return c
end
local c = read1sec()
print( "key pressed:", c )
答案 1 :(得分:0)
larses(Lua的ncurses)Lua库可能提供这个。您必须下载并安装它。有一个例子说明如何仅在Create a function to check for key press in unix using ncurses检查按键,它在C中,但是在Lua中ncurses API是相同的。
否则,您将不得不使用C / C ++ API创建一个Lua扩展模块:您将创建从Lua调用的C函数,然后此C函数可以访问操作系统的常用功能,如getch,select等(取决于您是在Windows还是Linux上)。