【问题标题】:How can I deal with scrolling event in Apple terminal如何处理 Apple 终端中的滚动事件
【发布时间】:2017-03-05 09:24:39
【问题描述】:

我想做一个控制台应用,它需要从控制台接收按键输入

我发现它在备用屏幕上运行良好,但有一个问题。

当我在 Apple Terminal 中滚动时,代码无法捕捉到滚动操作,而是在终端上打印 ^[OA。 这不会在 iTerm.app 中发生

在 Terminal.app 中使用lessvim 时也不会出现这种情况

我希望能得到一种可以阅读滚动操作并且不显示^[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"

【问题讨论】:

    标签: ruby terminal xterm


    【解决方案1】:

    这是终端特有的功能。我在 Terminal.app 的 Preferences 对话框中没有看到相关设置

    您也许可以通过附加组件来完成此操作(正如人们在被问及如何让 Terminal.app 将鼠标事件传递给应用程序时所建议的那样)。

    对于背景:Terminal.app (缓慢地)添加了与 xterm 兼容的功能。这原本不是 xterm 中的一个特性。 iTerm2 通过复制 gnome-terminal 或 xterm 得到它(这很难说,因为除了 xterm,没有人会费心去记录何时添加了功能)。

    例如,如果 iTerm2 或 Terminal.app 从 xterm 复制了该功能,那么这些将使该功能 可选 就像 xterm 在 patch #282 中所做的那样(但请注意完成该功能的后续工作)。 xterm 提供 X 资源设置和配置它的控制序列(私有模式 1007)。相比之下,VTE 的行为(为 gnome 终端“皮肤”提供所有功能的库)是硬编码的。

    我在这里评论了这个功能:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多