我尝试过$.each(JSON.parse(data), function(key, value) {}
仅在按下Enter键后,它才会从键盘读取字符,但不会在每次按下/释放键时读取。
请在按键或释放键时指导我阅读键盘输入!
更新1:
c::Char = read(stdin, Char);
抛出错误:
function quit()
print("Press q to quit!");
opt = getc1();
while true
if opt = 'q'
break;
else
continue;
end
end
end
请帮助我!
答案 0 :(得分:3)
这不是那么简单。
您可以尝试以下更底层的解决方案:
function getc1()
ret = ccall(:jl_tty_set_mode, Int32, (Ptr{Cvoid},Int32), stdin.handle, true)
ret == 0 || error("unable to switch to raw mode")
c = read(stdin, Char)
ccall(:jl_tty_set_mode, Int32, (Ptr{Cvoid},Int32), stdin.handle, false)
c
end
或更高级的一个:
function getc2()
t = REPL.TerminalMenus.terminal
REPL.TerminalMenus.enableRawMode(t) || error("unable to switch to raw mode")
c = Char(REPL.TerminalMenus.readKey(t.in_stream))
REPL.TerminalMenus.disableRawMode(t)
c
end
根据您的需要(或使用此处的思想编写另一个实现)。关键的挑战是始终正确处理“普通键”(如ASCII)。但是,解决方案的不同之处在于它们处理诸如'ą'
之类的字符(某些字符的UNICODE较大)或UP_ARROW(当您按键盘上的向上键时)的方式-您必须在这里进行实验并确定所需的内容(还是足以一一读取UInt8
值并手动重建您想要的值?)。
编辑
问题出在您的quit
函数上。这是应如何定义:
function quit()
print("Press q to quit!");
while true
opt = getc1();
if opt == 'q'
break
else
continue
end
end
end
答案 1 :(得分:0)
以下示例可能会有所帮助:
import REPL
function wait_for_key( ;
io_in::IO = stdin,
io_out::IO = stdout,
prompt::String = "press any key [d]raw [n]odraw [q]uit : ",
)
print(io_out, prompt)
t = REPL.TerminalMenus.terminal
REPL.Terminals.raw!(t, true)
char = read(io_in, Char)
REPL.Terminals.raw!(t, false)
write(io_out, char)
write(io_out, "\n")
return char
end