Мое текущее приложение командной строки ruby использует STDIN.ready?
.Это позволяет мне захватывать сложные клавиши, такие как мета-клавиши, функциональные клавиши, сдвинутые функциональные клавиши и т. Д. Я не нахожу ничего похожего в Crystal.
При поиске я обнаружил STDIN.raw &.read_char
.Согласно документации, это должно вернуть ноль, когда нечего читать.Тем не менее, я не получаю ноль.Кажется, ждать следующего ключа.У кода ruby было $stdin.getc
.
Моя логика в основном продолжает читать STDIN, пока он готов и накапливает коды клавиш.Момент ready?
возвращает ложь, ключ оценивается.
Логика ТЕПЕРЬ:
c = STDIN.raw &.read_char
if c == '\e' # escape char
loop do
k = STDIN.raw &.read_char
if k
# accumulate k into a string
else
# evaluate string and return
end
end #loop
end
# rest of code if not escape.
В настоящее время условие else
не выполняется, поэтому я застрял в if
часть.Я не знаю, когда прекратить чтение ключей.
Ранее в ruby у меня был второй getc
внутри if STDIN.ready?
.
Ранее в ruby:
if c == '\e'
loop
if STDIN.ready?
k = STDIN.getc
accumulate in string
else
evaluation string and return code
end
end
end
РЕДАКТИРОВАТЬ: для меня правильный ответ заключается в ссылке на 2048.cr, предложенной ниже в комментарии.