Escape-последовательности VT100 ANSI: получение размера экрана, условный ANSI
Когда я изменяю размеры на терминале, он держит полный экран. Я думаю, есть какой-то способ узнать, какой размер экрана у терминала. Как я могу сделать это в VT100?
С, когда я перечисляю папку, она показывает папку в синем цвете. (или, скажем, другого цвета) Но, если вы сохраните вывод в текстовый файл ( ls > out.txt), вы не увидите никакого кода ANSI, а просто текст. Однако, если вы попытаетесь ( vi > out.txt), вы увидите код ANSI. Как узнать это?
Спасибо
1 ответ
Программы (такие как vi
), которые автоматически приспосабливаются к изменению размера экрана, реагируют на SIGWINCH
сигнал и использование системного вызова для получения системной информации о размере экрана. Смотрите, например, Получить ширину / высоту окна терминала в C++?, Кстати, хотя и широко реализованный, он, похоже, не документирован в POSIX signal.h
,
Без принятия SIGWINCH
Учтите, что программа может спросить терминал о его размере экрана. resize
программа делает это, посылая последовательности управления терминалом
- переместите курсор в правый нижний угол (на самом деле, в строку / столбец 999/999, что достаточно хорошо), и
- спрашивая терминал, где курсор находится на самом деле.
Поведение ls
а также vi
(и другие программы) относительно последовательностей управления ANSI, которые будут встроены в их выходные данные, зависит от дизайна программы. Вероятно, они обнаруживают перенаправление своего вывода в файл, используя isatty
функции, и сделать что-то другое в зависимости от того, является ли вывод на терминал, или в файл.