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.