Чтение символа экрана с терминала
Насколько я исследовал, terminfo
/termcap
а также ioctl
не разрешать запрашивать символ в (x,y) позиции на экране терминала. Это довольно неожиданно, потому что:
- например, с терминала можно прочитать размеры экрана (например,
tput co
,tput li
), - можно читать ввод с терминала
- два означают, что связь с терминалом является двунаправленной. Неужели нет способа запросить символ в заданной позиции, как с *inch*
, *in_wch*
функции curses (которые работают только для окон curses)?
1 ответ
Это ожидается (не "неожиданно"):
tput
дает значения из комбинации базы данных терминала (фиксированной) и операционной системы (изменяемой), но не запрашивает терминал.- чтение из терминала осуществляется потоком ввода с устройства (для чего предназначены терминалы).
Некоторые (не все) терминалы поддерживают escape-последовательность, которая запрашивает терминал, где находится курсор. resize
Программа использует это, чтобы получить размер экрана. Но имейте в виду, что он, как известно, зависит от терминала, как упомянуто на странице руководства:
-s
[строки столбцов]
Этот параметр указывает, что вместо управляющих кодов xterm в стиле VT100 будут использоваться escape-последовательности консоли Sun.
Очень немногие терминалы поддерживают escape-последовательность, которая будет просто читать символы с экрана. Не всем нравится понятие программы, которая может читать их экран - возможно, без их ведома.