我想创建一个控制台应用程序,它需要从控制台
接收键输入当我在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"
答案 0 :(得分:1)
这是特定于终端的功能。我没有在Terminal.app的偏好设置对话框中看到相关设置
您可以通过附加组件实现此目的(正如人们在被问及如何让Terminal.app将鼠标事件传递给应用程序时所建议的那样)。
对于后台:Terminal.app已经(慢慢)添加了与xterm兼容的功能。这不是xterm中最初的功能。 iTerm2通过复制/或gnome-terminal或xterm来获得它(除了xterm之外很难说,没有人记得添加功能时的文件)。
例如,如果iTerm2或Terminal.app从xterm复制了该功能,那么这些功能可选就像patch #282中的xterm一样(但需要注意后续工作才能完成)特色)。 xterm提供X资源设置和用于配置它的控制序列(私有模式1007)。相比之下,VTE的行为(向gnome-terminal&#34; skin&#34;提供所有功能的库)是硬编码的。
我在这里评论了这个功能: