Zajímalo by mě, jak nějaký terminál kouzlí funguje interně.
Zatímco si hrajete s kontejnery dockerů, proměnná prostředí $TERM
nebyla nastavena. To vedlo k podivně vyhlížejícím konzolovým aplikacím jako vim a tmux, ale také k ignorování CTRL+l (vymazat obrazovku).
Jsem si docela jistý, že všechny funkce jako částečné aktualizace obrazovky, barvy, příkazy jako reset obrazovky atd. jsou realizovány pomocí únikových kódů, že?
Kde je tedy tato proměnná interpretována a umožňuje například resetování obrazovky terminálu pomocí CTRL+l, pokud tam nastavím správnou hodnotu? Kdo kontroluje například jaké barvy jsou podporovány (xterm vs xterm-256color)? Skořápka? Aplikace nebo knihovna jako ncurses? A kde jsou definovány možné hodnoty / typy terminálů?
Přijatá odpověď:
$TERM
je čtena a interpretována systémem terminfo. terminfo také odkazuje na databázi popisů terminálů, kterou můžete najít na většině systémů v /usr/share/terminfo
. $TERM
musí odpovídat jedné z položek v této databázi. Existovala také starší knihovna s názvem termcap, která měla méně možností, ale terminfo ji nahradilo. V moderních systémech je terminfo součástí knihovny ncurses.
Aplikace obvykle buď načítají schopnosti terminálu přímo pomocí funkcí knihovny, jako je tigetstr()
nebo ke správě rozvržení obrazovky používají rozhraní kleteb vyšší úrovně. V každém případě $TERM
a databáze terminfo bude konzultována.