Кастомизация консольного приложения в Linux

171
14 июля 2018, 08:50

Пишу консольное приложение в Linux, вот и возникло два вопроса.

Во-первых, как программно развернуть эмулятор терминала на весь экран? Да, в Windows это делается с помощью Win API, но что делать, к примеру, в Ubuntu?

Во-вторых, как мне поменять фон в терминале во время исполнения программы? Чтобы у меня стояла не пользовательская тема, а предусмотренная мною?

Заранее спасибо.

Answer 1

В Linux нет понятия консольного приложения в смысле Windows.

Приложение может иметь управляющий терминал, с которым у него связаны дескрипторы стандартного ввода, вывода и вывода ошибок, и от которого могут приходить сигналы. Терминал может быть физическим или виртуальным, в последнем случае он может поддерживать или не поддерживать изменение количества строк и управление положением своего окна в графической среде (если оно вообще есть). И это зависит от программы эмулятора терминала, которых в Linux великое множество и укаждого свои возможности, однако те из них которые запускаются из X-Window, например xterm, обычно поддерживают набор команд VT102, в котором предусмотрено некоторое управление окном через escape-последовательности (ищите dtterm), но обычно оно сокращено или отключено по-умолчанию или вовсе не реализовано. Включить у xterm его можно через X-ресурсы например при запуске эмулятора терминала:

xterm -xrm 'xterm*allowWindowOps: true'

Далее в открывшемся окне попробуйте:

$ printf '\033[3;0;0t' # переместить окно в верхний левый угол
$ printf '\033[9;1t' # во весь экран

Если определена переменная окружения DISPLAY, значит программа запущенна из X-Window, и вы можете запустить свой эмулятор терминала, указав в аргументах нужную конфигурацию и вашу программу в нём. По аргументам см. man xterm, man gnome-terminal, man konsole и т.п.

READ ALSO
с++ и виртуальное наследование

с++ и виртуальное наследование

Необходимо создать базовый класс который будет иметь 4 наследникаВся проблема в том, что мне нужен базовый класс в одном экземпляре, так как...

283
MemoryPuzzle — простая игра в консоли [требует правки]

MemoryPuzzle — простая игра в консоли [требует правки]

Я тут сделал свою первую нормальную консольную игру на С++Это простая игра

184
Как работает sync?

Как работает sync?

Не могу понять как он работаетЕсть пример:

187
Потомок от std::set с лямбда функцией сравнения

Потомок от std::set с лямбда функцией сравнения

Подскажите где прописать код лямбда функции сравнения, например, такой:

197