루아의 터미널에서 입력을 읽을 수있는 제한 시간을 설정할 수 있습니다.LUA. 제한 시간이있는 io.read
예를 들어 편지를 쓰려면 1 초 밖에 걸리지 않습니다.이 프로그램을 건너 뛰십시오. 어떤 팁을위한
감사, 루아) 루아 라이브러리)
루아의 터미널에서 입력을 읽을 수있는 제한 시간을 설정할 수 있습니다.LUA. 제한 시간이있는 io.read
예를 들어 편지를 쓰려면 1 초 밖에 걸리지 않습니다.이 프로그램을 건너 뛰십시오. 어떤 팁을위한
감사, 루아) 루아 라이브러리)
당신은 luaposix (POSIX 기계 만, 분명히)를 사용하여 (man termios
참조) 터미널 설정을 변경하여이 작업을 수행 할 수 있습니다
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)
lcurses (ncurses를이를 제공 할 수 있습니다. 다운로드하고 설치해야합니다. Create a function to check for key press in unix using ncurses에서만 키 누르기를 확인하는 방법의 예가 있지만, C에 있지만 ncurses API는 Lua에서 동일합니다.
그렇지 않으면 C/C++ API를 사용하여 Lua 확장 모듈을 만들어야합니다. Lua에서 호출하는 C 함수를 만들면이 C 함수는 getch, select, etc (Windows 또는 Linux를 사용하는 경우에 따라 다름).