Как я могу справиться с прокруткой события в терминале 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"
1 ответ
Это особенность терминала. Я не вижу соответствующей настройки в диалоге настроек для Terminal.app
Возможно, вам удастся сделать это с помощью надстройки (поскольку люди обычно рекомендовали, когда их спрашивали, как заставить Terminal.app передавать события мыши в приложение).
Для справки: Terminal.app (медленно) добавил функции для совместимости с xterm. Это не было функцией изначально в xterm. iTerm2 получил его, скопировав либо / или gnome-терминал, либо xterm (трудно сказать, поскольку, кроме xterm, никто не удосужился документировать, когда были добавлены функции).
Например, если бы iTerm2 или Terminal.app скопировали эту функцию из xterm, это сделало бы эту функцию необязательной, как это было сделано xterm в патче № 282 (но обратите внимание на последующую работу для завершения этой функции). xterm предоставляет как настройку ресурса X, так и последовательность управления (частный режим 1007) для его настройки. Напротив, поведение VTE (библиотека, предоставляющая все функциональные возможности "оболочке" терминала gnome) жестко запрограммировано.
Я прокомментировал эту функцию здесь: