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

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

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

Когда я прокручиваю в 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"

1 ответ

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

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

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

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

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

Другие вопросы по тегам