Escape-последовательности VT100 ANSI: получение размера экрана, условный ANSI

  1. Когда я изменяю размеры на терминале, он держит полный экран. Я думаю, есть какой-то способ узнать, какой размер экрана у терминала. Как я могу сделать это в VT100?

  2. С, когда я перечисляю папку, она показывает папку в синем цвете. (или, скажем, другого цвета) Но, если вы сохраните вывод в текстовый файл ( ls > out.txt), вы не увидите никакого кода ANSI, а просто текст. Однако, если вы попытаетесь ( vi > out.txt), вы увидите код ANSI. Как узнать это?

Спасибо

1 ответ

Решение

Программы (такие как vi), которые автоматически приспосабливаются к изменению размера экрана, реагируют на SIGWINCH сигнал и использование системного вызова для получения системной информации о размере экрана. Смотрите, например, Получить ширину / высоту окна терминала в C++?, Кстати, хотя и широко реализованный, он, похоже, не документирован в POSIX signal.h,

Без принятия SIGWINCH Учтите, что программа может спросить терминал о его размере экрана. resize программа делает это, посылая последовательности управления терминалом

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

Поведение ls а также vi (и другие программы) относительно последовательностей управления ANSI, которые будут встроены в их выходные данные, зависит от дизайна программы. Вероятно, они обнаруживают перенаправление своего вывода в файл, используя isatty функции, и сделать что-то другое в зависимости от того, является ли вывод на терминал, или в файл.

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