【发布时间】:2017-03-05 09:24:39
【问题描述】:
我想做一个控制台应用,它需要从控制台接收按键输入
当我在 Apple Terminal 中滚动时,代码无法捕捉到滚动操作,而是在终端上打印 ^[OA。
这不会在 iTerm.app 中发生
在 Terminal.app 中使用less 或vim 时也不会出现这种情况
我希望能得到一种可以阅读滚动操作并且不显示^[OA的方法
这是我的 Ruby 示例代码:
#!/usr/bin/env ruby
require 'io/console'
def rc
STDIN.echo = false
STDIN.raw!
input = STDIN.getc.chr
if input == "\e" then
input << STDIN.read_nonblock(3) rescue nil
input << STDIN.read_nonblock(2) rescue nil
end
ensure
STDIN.echo = true
STDIN.cooked!
return input
STDIN.getch
end
print "\e[?1049h"
print "\e[?1h"
print "\e="
print "\e[1;24r"
loop do
c = rc
break if c == "\u0003"
p c
print c
end
print "\e[?1049l"
【问题讨论】: