Как я могу справиться с событием прокрутки в терминале Apple

Я хочу сделать консольное приложение, и ему нужно получать ввод с консоли.

Я обнаружил, что он хорошо работает на альтернативном экране, но есть вопрос. Терминал Apple

Когда я прокручиваю в Apple Terminal, код не может поймать операцию прокрутки, но печатает ^[OA на терминале. Этого не произойдет в iTerm.app

И этого также не произойдет при использовании less или vim в Terminal.app

Я надеюсь, что смогу прочитать операцию прокрутки и не показывать ^[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"

person Li Hanyuan    schedule 05.03.2017    source источник


Ответы (1)


Это особенность терминала. Я не вижу соответствующей настройки в диалоговом окне Настройки для Terminal.app

Возможно, вы сможете сделать это с помощью надстройки (как люди рекомендовали, когда их спрашивали, как заставить Terminal.app передавать события мыши в приложение).

Для фона: Terminal.app (постепенно) добавил функции для совместимости с xterm. Это не было функцией изначально в xterm. iTerm2 получил его, скопировав либо/или gnome-terminal, либо xterm (трудно сказать, поскольку, кроме xterm, никто не удосужился документировать, когда были добавлены функции).

Например, если бы iTerm2 или Terminal.app скопировали функцию из xterm, они сделали бы эту функцию необязательной, как это сделано xterm в исправление № 282 (но обратите внимание на дальнейшую работу по завершению этой функции). xterm предоставляет как параметр ресурса X, так и управляющую последовательность (приватный режим 1007) для его настройки. Напротив, поведение VTE (библиотека, предоставляющая все функциональные возможности «оболочке» gnome-терминала) жестко закодировано.

Я прокомментировал эту функцию здесь:

person Thomas Dickey    schedule 05.03.2017