Для общения через UART с железками (avr, stm32 и прочими) в основном использую GNU screen:
$ screen /dev/tty.ubserial 9600 |
А вот что-то дернуло, раскрасить вывод микроконтроллера и раскрасил (не мудрено, печатаем что-то вроде \033[31m
и вперед, ну только цвета меняем). А потом поехало: захотелось печатать в разных местах экрана (\033[y;xH
), а вот как напечатать в центре? Надо же знать размер экрана, а он у меня (да и у всех) каждый раз разный.
Долго возился, выяснил, что screen отдавать размер окна (\033[18t
) не умеет. Зато DCS
передает напрямую терминалу из которого запущен: вот и нашелся грязный хак: оборачиваем запрос размера в ESC-P последовательность, и вот уже знаем размер экрана.
Печатаем хитрую строку:
\033P\033[18t033\ |
и получаем ответ:
\[8;31;163t |
31 строка, 163 колонки, а 8 — это номер CSI-репорта. Он всегда такой.
вот тут большой список похоже что вообще всех ESC-последовательностей которые терминалы поддерживают: ttssh2.osdn.jp
P.S.
Ну а бонусом — таким же способом можно поставить заголовок окна который screen ставить умеет только через жопу.
\033P\033]0;New Window Title\a\033\\ |