Я пытаюсь создать скрипт, который обрабатывает клавиши со стрелками в очень ограниченной системе с занятым пеплом и совсем немного другим.Нет, например.У меня есть кое-что, что в основном работает, но иногда некоторые экранирующие последовательности ANSI появляются на экране.Похоже, это происходит чаще всего, когда срабатывает автоматическое повторение клавиш, но также и тогда, когда необходимо выполнить более сложную обработку, прежде чем читать следующую клавишу.Это в основном хорошо на моем ноутбуке, который работает быстрее, чем моя целевая система, но если я иногда удерживаю клавиши со стрелками, такие как ^ [[B появляется на экране.Как это проходит безмолвные чтения?
Я явно не обращался с HOME и END, поэтому ^ [OH и ^ [OF проходили чаще.Это заставляет меня думать, что, может быть, они просачиваются во время тайм-аута, но я действительно не знаю.
В любом случае, есть какой-то трюк с трубкой или подоболочкой, которая может содержать побег?
E=$(printf "\033")
NL='
'
# Works in bash, ash without stty but takes a sec for ESC key (not ESC sequence)
# But even with nothing but q key checks in the loop it still occasionally
# spams the screen with ^[[B etc if I hold arrow keys down for auto-repeat.
while true; do
IFSBAK=$IFS ; IFS=
read -rsn1 _KEY
case "${_KEY}" in
"${E}") _K=""; read -sn2 -t1 _K; _KEY="${E}${_K}";
case "${_K}" in
"[A"|"[B"|"[C"|"[D"|"") ;;
"OP"|"OQ"|"OR"|"OS") ;;
*) _K=""; read -n1 -t1 _K; _KEY="${_KEY}${_K}" ;;
esac
;; "") _KEY="NL"
;;
esac
IFS=$IFSBAK ; IFSBAK=
case "$_KEY" in
"${E}" | q )
break;;
esac
done