Как удалить escape-последовательности при чтении из байта stdin / pipe - PullRequest
0 голосов
/ 24 декабря 2018

При чтении из stdin существует нормальный ASCII, может быть, какой-то utf-8, но есть и escape-последовательности.например, когда кто-то нажал клавишу «Стрелка вверх» на клавиатуре.

Как я реагирую на букву «А», но только когда она не является частью escape-последовательности, такой как «Esc [AD;»?Сначала удалив все escape-последовательности!Как мне это сделать?


Может быть, есть правило о том, как долго выполняются escape-последовательности?Может быть, какой-нибудь вывод / файл terminfo имеет все известные escape-последовательности?Никогда не находил ни одного из них?

Один из многих примеров, которые не работают:

#/bin/sh

while :; do
   #this part is an made up example, case i do more complex stuff with $key
     if test x"$key" = xA; then echo 'The Key A was pressed.'; fi
   #end of made up example

    key="$(/bin/bash -c 'read -s -n1 -t10 key; echo "$key"')"

    if [[ "$key" == "q" ]]; then exit; fi
    if [[ "$key" == "1" ]]; then sort="fin"; fi
    if [[ "$key" == "2" ]]; then sort="size"; fi
    if [[ "$key" == "3" ]]; then sort="percent"; fi

done;

Это работает как заклинание, но:

Если я нажму любую клавишу, котораявызывает escape-последовательность:

  • Arrow Up - это некоторая последовательность, включающая 'A', поэтому она печатает 'A eas нажимается'

Я всегда использую скрипт илипрограмма, поэтому я могу реализовать правила, основанные на предыдущих байтах, но я не могу просто использовать какую-то "команду по конвейеру".

Если вы нашли этот вопрос, но просто ищете то же самое во время записи в файл или в любом другом случае, когда вы читаете более одного символа за раз, тогда возьмитепосмотрите на этот ответ

Как удалить escape-последовательности из входных данных, чтобы обычные символы внутри escape-последовательности можно было игнорировать?

...