Jo, to je fakt výlet do Unixové prehistorie. Terminálové sekvence mělo dávno nahradit API, jak je tomu například ve Windows. "Skvělým" výsledkem přežívání terminálových sekvencí a stovek typů terminálů na Unixech je stav, kdy po připojení na systém jiného typu terminál prakticky nikdy nefunguje. Nejvtipnější je, že i backspace a delete se kóduje na různých terminálech různě. To je fakt prehistorie.
BTW když je tu seriál o technickém muzeu terminálů, nechce autor rovnou pokračovat u X11?
nepřeskakuj, o terminálech se toho dá napsat tolik, že se X11 nedostaneme :).
Nějaký úvod o X11 by být mohl, ale X11 trpí backward kompatibilitou ještě výrazně víc. I když třeba díky ICCCM můžu používat tiling window manager, který oknu vnutí velikost, a většina aplikací s tím nemá problém. Výrazně mi to zpřehledňuje plochu a nenašel jsem ještě nic podobného pro windows. (Dokonce ani autor toho mého winowmanageru, který se naštval na linuxovou komunitu s tím, že přejde na windows, nenapsal windowsí variantu tak skvělého windowmanageru (ion3)).
Jestli ti to vadí, můžeš změnit používaný systém, nikdo ti přeci nebrání. Myslim, že mnoho lidí, stejně jako já, jsou rádi za terminál a nevidí důvod, proč by se to mělo měnit, když to funguje skvěle.
Pokud se ti libí, jak je to u widlí, tak je používej. Pro ostatní jsou tu UNIX like systémy. Díky této diverzitě si každý může vybrat, co se mu používá nejlíp a nemusí řešit různý obezličky.
Což znamená, že musíte požadavek přeložit pomocí API na sekvenci, a tu sekvenci pak zase dekódovat. Navíc to neřeší problém pro uživatele, který musí sladit nastavení terminálu na svém a vzdáleném stroji. K tomu některé aplikace používají vlastní nastavení terminálu, a některé i vlastní databáze sekvencí (pokud se nemýlím, tak to byl svého času třeba mc).
Jenže to jede přes popisy terminálů v termcap nebo terminfo (jak kde a někdy dokonce a jak která aplikace) a já ještě neviděl termcap nebo terminfo, kde by byla dobře popsaná i třeba 30 let stará vt100 (kromě těch, co jsem si napsal sám). Spousta věcí, které umí, podle těch popisů neumí a je tam i dost chyb. takže nakonec podle toho fungují jen ty nezbytné základy.
Navíc spousta aplikací si dělá do nich vlastní sekvence (například Informix) a pak je sranda, že s těmi aplikacemi dostanete termcap nebo terminfo, které přeplácne ty systémové, ale přitom tam jsou jen ty sekvence, co potřebuje ta aplikace. A pak hledáte, proč to, co chodilo, najednou nechodí, protože takovouhle prasárnu od dodavatelů SW nečekáte.
Jasně využívá to termcap nebo terminfo, ale stále to API je a původní stížnost na to, že si musí někdo hrát s escape sekvencemi tím padá. Že jsou v databázi chyby asi nejde vyloučit a ani to nikdo netvrdil, ale v normálním použití (pokud člověk nepožaduje grafiku a to dnes asi už nikdo nechce) se na chyby moz nenaráží - resp. viděl jsem špatně nastavené terminálové klienty, ale to je již jiná věc.
Větší problém je v neefektivitě vlastního přenosového protokolu, ale s tím asi nikdo nic neudělá, pokud se tedy nepřenese část logiky na klienta.
Jo. Před pár lety (jaká je situace dnes, nevím, ale když to zůstalo stejný třicet let, tak se to asi moc nezměnilo) jsem dělal triviální věc - zapsat do lišty okna běžný adresář. Samozřejmě jsem zkusil tput, jenže ani pro jeden terminál, který umělo putty, nebyla v terminfu sekvence pro psaní do stavové řádky. Takže to nakonec skončilo hraním s ESC sekvencemi (nemaje práva administrátora nemohl jsem terminfo opravit). Prostě bez správné terminfo databáze je vám tput nanic. A dobře udělanou terminfo databázi jsem ještě neviděl.
Vždycky jsem měl pocit, že trpíte nějakou psychickou poruchou. Ale jak už tu někdo napsal, poslední dobou se tento pocit mění v jistotu. A zdá se, že porucha nad vámi pomalu přebírá kontrolu. Snad by bylo vhodnější navštívit nějakého specialistu místo kompenzace v podobě trapných příspěvků do veřejných diskusí.
Jasně, takže všichni přejdeme na nestandardní CP1250 s nestandardním CRLF na konci řádku a na používání API, který se teď bude měnit co půl roku. A zaručený pád systému 2x týdně. Juch! To bude skvělý...
Přiznej si pravdu. Nový věci nejsou automaticky skvělý. A pokud jsou nějakou náhodou někdy nový věci skvělý, ne vždycky jsou technicky nebo ekonomicky aplikovatelný. Představ si, že by co půl roku někdo stáhl na update meziplanetární sondu nebo se automaticky týden co týden updatovala a hodinu restartovala telemetrie jadernýho reaktoru...
Byla řeč o terminálech. V čem konkrétně je podle vás je Unixový přístup k terminálům výhodný?
Ad CP1250 - to je sice historie, ale rozhodně lepší, než 8859-2, kde v dokumentu ani nenapíšete české uvozovky, protože nejsou v kódové stránce.
Ad "nestandardní" CRLF - HTTP, SMTP, FTP, IRC a další používají CRLF. A ty dálnopisy také používají dva znaky - CR pro návrat vozíku na začátek řádky, LF pro posun papíru.
Ad API, který se teď bude měnit co půl roku - které konkrétně? :)
Souhlas, nový věci nejsou automaticky skvělý. Totéž platí o starých věcech.
Možná jede ve zkripleném UTF-16, do kterého se nevejde celé Unicode, ale programy pro konzoli musí být v IBM-852, což samozřejmě způsobí nefunkčnost v jiné jazykové verzi.
Zatímco na Linuxu je wchar dvaatřicetibitový, a převede se to automaticky podle locales na libovolném počítači kdekoliv na planetě. Binárka bez kompilace zdrojáku!
To je samozřejmě nesmysl. V PC 852 jsou programy pro DOS. Do konzole je možné psát v UTF-16, ANSI CP (1250) a OEM CP (v češtině 852). API jsem linkoval.
Ukázka:
static void Main(string[] args)
{
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine("ěšččřžДЕЖЗИΓΕΘΛΝ");
Console.ReadLine();
}
Běžte si to zkusit. Pokud vám to nezobrazí azbuku a řecká písmena, změňte si ve vlastnostech konzole font.