Alespoň pro xterm , můžete změnit aktuální písmo vytištěním sekvence escape. Syntaxe je ESCAPE ] 50 ; FONTNAME BEL .
Zde je (zkrácená verze) skript, který k tomu používám; Říkám tomu xfont (skutečný má více kontroly chyb):
#!/usr/bin/perl
use strict;
use warnings;
print "\e]50;@ARGV\a";
Nevím, které další emulátory terminálu tuto sekvenci rozpoznávají. Zejména jsem zjistil, že to nefunguje pod screen , i když screen relace je v xterm okno.
Všimněte si, že musíte zadat jméno písma ("10x20" , "9x15" ), nikoli jeho velikost.
EDIT:Měl bych věnovat větší pozornost tagům. V C++ by to bylo něco jako:
std::cout << "\x1b]50;" << font_name << "\a" << std::flush;
AKTUALIZACE:S xterm , nebude to fungovat, pokud používáte písma TrueType. Dúthomhas také v komentáři navrhuje:
Vím, že je to staré, ale všechny řetězce terminfo by měly být vytištěny pomocí
putp()[nebotputs()], a to i v C++.
putp( (std::string{ "\33]50;" } + font_name + "\a").c_str() );
Nejlepší, co můžete udělat, je použít tučné písmo. Terminál emuluje skutečný textový terminál, takže nepodporuje různé fonty najednou.