#cpp #linux #консоль
Здравствуйте. Захотел написать консольную игрушку на С++. Первым делом решил установить размеры окна консоли. Google сразу пришел на помощь, но проблема в том что все рецепты используют библиотеку windows.h, а на моей машине стоит Ubuntu 16.04. Буду признателен за помощь.
Ответы
Ответ 1
Редкая задачка. К счастью, еще разработчики xterm, наряду с реализацией огромного количества управляющих последовательностей (Control Sequences) типичных для распространенных текстовых терминалов (управление курсором, цветом, набором символов, вставкой, удалением и сдвигом текста и т.д. и т.п.), подумали об аналогичных последовательностях для перемещения окна эмулятора и изменении его размера на экране оконной системы X-windows (в приведенной выше ссылке их можно найти поиском по тексту Window manipulation). Для изменения размера окна в символах используется последовательность: ESC [ 8; height; width; t Где ESC -- это символ с кодом 033 (восьмеричный) 27 (десятичный) или "\e" в строке. Вообще, в том же документе для последовательность символов ESC [ используется термин CSI (Control Sequince Introducer) (другие часто встречающиеся в управлении терминалом последовательности -- DCS ESC P (Device Control String), OSC ESC ] (Operating System Command) и ST ESC \ (String Terminator)). Маленькая демо программа на C/C++ #include#include #define COLS 24 #define ROWS 80 int main (int ac, char *av[]) { int cols = av[1] ? atoi(av[1]) : COLS, rows = av[1] && av[2] ? atoi(av[2]) : ROWS; if (cols < 0) cols = COLS; if (rows < 0) rows = ROWS; printf("\e[8;%d;%d;t", cols, rows); return fflush(stdout) == EOF; } Хотя в документе написано, что если width или height (ширина и высота (количество строк)) опущены, то используется их текущее значение, а если равны нулю, то берутся некоторые значения по умолчанию (display's height or width), но в моих экспериментах с bash-скриптом resize.sh #!/bin/bash printf "\e[8;$1;$2;t" в обеих случаях окно менялось на стандартный размер 24 х 80 символов. В Ubuntu 16.04.1 LTS изменение размера окна работает по крайней мере в терминалах gnome-terminal и xfce4-terminal (а вот в xterm версии XTerm(322) ничего не меняется(!!!)).
Комментариев нет:
Отправить комментарий