Как установить Cols и Lines для подпроцесса

У меня есть скрипт, который запускает серию сценариев с номером 001,002,003,004 … и т. Д. До 041 прямо сейчас, будет больше в будущем – и эти скрипты сами используют некоторый элемент управления курсором для печати индикатора выполнения и другой информации о статусе и получения ширины и высоты терминала от tput cols и tput lines соответственно.

Не переписывая суб-скрипты, я хотел бы зарезервировать одну строку внизу для общей информации о статусе внешнего скрипта. Мне было любопытно, есть ли способ установить, какие ответы tput для строк и столбцов.

Должен быть способ, потому что tmux достигает его. Я думал, что может быть переменная окружения, но единственное изменение, которое я вижу, что tmux делает при запуске env, задает значение $ TERM для отображения.

Любая помощь будет принята с благодарностью

Ниже вы можете настроить количество строк и столбцов.

 export LINES=1000 export COLUMNS=1000 

Чтение источника было бы окончательным, но для малодушного, руководство – это место, куда нужно идти. Если параметр командной строки отсутствует, база данных терминала в сочетании с переменными среды предоставит сценарию все, что может потребоваться:

  • На странице руководства tput не упоминаются переменные среды.
  • Но в разделе « См. Раздел» он ссылается на curs_termcap (3x) , руководство для интерфейса termcap (функции).
  • На этой странице важны функции форматирования , указывающие на tputs на curs_terminfo(3x) .
  • Опять же (см. Функции вывода ) нет явного упоминания переменных среды.

В поисках просветления вы можете попробовать страницу руководства ncurses .

  • В разделе « Окружающая среда» перечислены LINES и COLUMNS .
  • В LINES он просто говорит, чтобы видеть COLUMNS .
  • COLUMNS дает дополнительную информацию:

Укажите ширину экрана в символах. Приложения, запущенные в среде окон, обычно имеют возможность получить ширину окна, в котором они выполняются. Если ни значение COLUMNS ни размер экрана терминала не доступны, ncurses использует размер, который может быть указан в базе данных terminfo (то есть, возможности cols ).

Теперь, по этому вопросу, было бы неплохо, если бы страница руководства была более прямой, говоря, что tput использует tput для вывода, а также использует setupterm для инициализации. Иногда (когда эта информация легко доступна в журнале изменений) никто не замечает, что это не указано в руководстве. Например, этот элемент с 2002 года :

  + modify setupterm() to ensure that it initializes the baudrate, for applications such as tput (report by Frank Henigman). 

Вернуться к теме:

  • Раздел инициализации curs_terminfo(3x) описывает setupterm , отмечая
  • в нормальном случае, когда use_env не был вызван, setupterm позволяет переменным LINES и COLUMNS переопределять значения базы данных терминала.
  • use_env руководства use_env повторяет это, а также комментируя, что значения могут быть получены из операционной системы.
  • Опять же, в changelog упоминается, что tput делает это (получает значения из операционной системы), например, это с 2007 года :

     + restore a call to obtain screen-size in _nc_setupterm(), which is used in tput and other non-screen applications via setupterm() (Debian #433357, reported by Florent Bayle, Christian Ohm, cf: 20070310). 

Таким образом, существующая документация дает ответы на почти все вопросы о поведении ncurses, но вы должны сделать некоторое чтение.