Я играю с кодом ANSI (последовательность ESC), используя Swift в качестве консольного приложения.Отправка команды ESC тривиальна, например, установка цвета текста.Однако чтение значения ответа из команды ESC является сложной задачей.Вот простая тестовая программа:
print("Get cursor position:", "\u{1b}[6n", terminator: "")
let s = readLine()!
print(s)
Программа отправляет <ESC>[6n
, чтобы получить текущую позицию курсора, и консоль возвращает строку <ESC>[<line>;<column>R
.Вот проблемы:
readLine()
продолжает ждать ввода, пока пользователь не нажмет клавишу Return или Enter.Я думал, что он автоматически прекратит чтение, как только входной буфер опустеет. readLine()
странно, кажется, не читает значение ответа из консоли, хотя это ясно напечатано на экране.Что происходит? - Значение ответа печатается на консоли.Я бы хотел, чтобы это было тихо, например, как
print()
печатает команду ESC.Есть ли способ временно перенаправить стандартный ввод в переменную?
Система:
• MacOS Mojave
• XCode 10
• Swift 4.2
• запуск в терминальном приложении
Я искал ответы на GitHub и Google, но мне не повезло.Итак, кто-нибудь здесь подскажет, с чего начать решение этой проблемы?Спасибо.
С уважением,
~ Пчела