Чтение символа экрана с терминала

Насколько я исследовал, terminfo/termcap а также ioctl не разрешать запрашивать символ в (x,y) позиции на экране терминала. Это довольно неожиданно, потому что:

  • например, с терминала можно прочитать размеры экрана (например, tput co, tput li),
  • можно читать ввод с терминала

- два означают, что связь с терминалом является двунаправленной. Неужели нет способа запросить символ в заданной позиции, как с *inch*, *in_wch* функции curses (которые работают только для окон curses)?

1 ответ

Решение

Это ожидается (не "неожиданно"):

  • tput дает значения из комбинации базы данных терминала (фиксированной) и операционной системы (изменяемой), но не запрашивает терминал.
  • чтение из терминала осуществляется потоком ввода с устройства (для чего предназначены терминалы).

Некоторые (не все) терминалы поддерживают escape-последовательность, которая запрашивает терминал, где находится курсор. resize Программа использует это, чтобы получить размер экрана. Но имейте в виду, что он, как известно, зависит от терминала, как упомянуто на странице руководства:

-s [строки столбцов]
Этот параметр указывает, что вместо управляющих кодов xterm в стиле VT100 будут использоваться escape-последовательности консоли Sun.

Очень немногие терминалы поддерживают escape-последовательность, которая будет просто читать символы с экрана. Не всем нравится понятие программы, которая может читать их экран - возможно, без их ведома.

Другие вопросы по тегам