0
A
回答
2
您可以通過更改終端設置做到這一點使用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)
0
的lcurses(ncurses的爲lua)的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上)。
相關問題
- 1. io.read被跳過Lua
- 2. 有時間限制
- 3. 使用io.read()引用表。 Lua 5.1
- 4. node.js:具有時間間隔的貨幣限制並行執行(速率限制)
- 5. read()和io.read()之間有什麼區別?
- 6. 終止具有處理時間限制的SQL查詢
- 7. 從具有時間限制的程序執行程序(Java)
- 8. 實現具有時間限制代碼的類很難(C++)
- 9. 具有惰性傳播的分段樹時間限制問題
- 10. 帶有時間限制的HTML文本
- 11. JSpinner時間限制
- 12. SpeechRecognizer - 時間限制
- 13. PHP:製作時間限制
- 14. 數限制的時間內
- 15. Ffmpeg的時間限制
- 16. IBAction的時間限制?
- 17. 具有Lua的基本CGI
- 18. 如何在lua中中斷io.read(),充當「等待」功能
- 19. 如果聲明不工作在Lua for io.read
- 20. 有時間限制共享軟件
- 21. 具有多個限制
- 22. AppleScript具有行數限制。
- 23. 更新具有有限生存時間(TTL)的列
- 24. newQuad函數限制爲5? Lua的
- 25. 限制時間間隔的比例
- 26. ruby IO.read()鎖嗎?
- 27. 具有響應時間限制的異步請求 - 響應算法
- 28. Google Calendar API - 具有最長時間限制的週期性事件
- 29. nginx auth_basic時間限制
- 30. 命令限制時間