úplně klasický canvas ve stylu "line_to" to sice nemá, ale je možné si vytvořit vlastní Renderer (resp. ho odvodit z existujícího) a hrát si s celou plochou terminálu nebo plochou widgetu po svém. K dispozici jsou i pomocné funkce, jako například zobrazení rozdílu mezi dvěma obrazovkami (dost užitečné pro ladění); zkusím to příště popsat.
Jestli tohle nakonec už není není verze 2, viz Instalace knihovny prompt_toolkit...
Jj měl jsem to explicitně zmínit už na začátku - popisovaná je verze 2.0.3 (nejsem puntičkář, ale tady ta setinka hraje roli, bylo kupodivu pár změn v API). Jinak dokumentace linkovaná v článku popisuje některé neexistující parametry (on_exit pro Application, ...) a jiná jména tříd (Radiolist); to se v článku snažím uvádět, aby lidi zbytečně nezkoumali, proč to nejede (příklady jsou samozřejmě všechny otestované a funkční)
Tak jsem to dnes zkusil nainstalovat (nainstalovala se verze 2.0.9) a ty ukazky nejsou kompatibilni, hází to třeba tohle:
Traceback (most recent call last):
File "test1.py", line 12, in <module>
message1 = HTML("<ansired>Hello</ansired>")
File "/home/xxx/.local/lib/python2.7/site-packages/prompt_toolkit/formatted_text/html.py", line 31, in __init__
assert isinstance(value, six.text_type)
AssertionError
Takže nestabilní api je opravdu těžká vada na kráse.
Škoda že nelze zobrazovat nějakou grafiku. Vím, že je to TUI, ale černobílá by stačila.
Jediné bloky na "grafiku", co jsem našel jsou "čtvrtiny" bloku:
graph = (' ', '▗', '▖', '▄', '▝', '▐', '▞', '▟', '▘', '▚', '▌', '▙', '▀', '▜', '▛', '█')
Problém je, že pixely nejsou čtverec, ale obdedlník, takže mi výsledná grafika vylezla deformovaná a roztáhlá nahoru a samozřejmě, příliš velká. Unicode raději řeší transexuální emoji, než aby vznikla sada znaků, kterou by šla nějaká jednodušší grafika (výrobní štítky s qr kodem apod.) zobrazit bez GUI.
hah, to mi připomíná grafiku na starem dobrem ZX-81 https://www.root.cz/clanky/grafika-na-osmibitovych-pocitacich-firmy-sinclair/#k02
Ale unicode toho má ve skutečnosti víc, například různé obdélníky (rohy), trojúhelníky, šikmé úsečky, takže by se to teoreticky dalo ještě vylepšit. Nezapomeň ani na vystínované bloky:
U+2591 ░ Light shade
U+2592 ▒ Medium shade
U+2593 ▓ Dark shade
a obdélníky různé šířky nebo výšky:
U+2581 ▁ Lower one eighth block
U+2582 ▂ Lower one quarter block
U+2583 ▃ Lower three eighths block
U+2584 ▄ Lower half block
U+2585 ▅ Lower five eighths block
U+2586 ▆ Lower three quarters block
U+2587 ▇ Lower seven eighths block
U+2588 █ Full block
U+2589 ▉ Left seven eighths block
U+258A ▊ Left three quarters block
U+258B ▋ Left five eighths block
U+258C ▌ Left half block
U+258D ▍ Left three eighths block
U+258E ▎ Left one quarter block
U+258F ▏ Left one eighth block
Ad černobílá - dnešní terminály umí minimálně 256 barev, některé i truecolor, takže zbývá fakt jen ten font.
To mi ale nepomůže, když už pixelovou grafiku (viz ten štítek) mám a chci ji (proto ten požadavek na černobílou, že toho nechci moc) jen zobrazit nějak "co se bude tisknout".
Naposledy jsem tenhle trik použil, když jsem chtěl makrem do libreoffice dokumentů vkládat QR kod pro snadné strojové zpracováni, až se ten dokument bude skenovat. Jelikož vkládat grafiku je opruz, vybrusili jsem tím právě bločkama a hodně malým fontem, ale pokud si člověk font nemůže vybrat, je na tom zle.
Pořád je to vůči terminálům, a běžné terminály grafiku nedávají - výjimkou je snad starý xterm s podporou protokolů Sixel a ReGIS i když možná se hnou ledy https://bugzilla.gnome.org/show_bug.cgi?id=729204
Hodně zqjímavé vlastnosti má terminology, viz https://www.tecmint.com/linux-terminal-emulators/ doporučuji shlédnout video.
Aha a na xterm stačí tahle kouzelná formule:
echo 'XTerm*allowWindowOps: true' >> ~/.Xresources
echo 'XTerm*decTerminalID: vt340' >> ~/.Xresources
echo 'XTerm*sixelScrolling: true' >> ~/.Xresources
echo 'XTerm*regisScreenSize: 1920x1080' >> ~/.Xresources
echo 'XTerm*numColorRegisters: 256' >> ~/.Xresources
xrdb ~/.Xresources
to mě zase napadá Midnight Commander, Mutt, menuconfig, různý kecátka, cgdb (je hnusnej, ale teď ho musím překousnout), MUDy, RL hry, i ten Links někdy přijde vhod. Vlastně když tak přemýšlím, tak v práci jedu jen FF (tedy appky s GUI - zcela nekonzistentní) a potom terminály s CLI nebo TUI, nic jiného.
Já si bez Midnighta Commanderu neumím představit život. Dvoupanelový, výborně konfiurovatelný, funguje na všem (třeba na rpi zero které jedu bez gui, disk station synology, v termuxu na androidu) a přes ssh. Pěkné je, že třeba i v tom termuxu na androidu jde nastavit tak, aby medialni soubory zobrazoval/přehrával v gui aplikacích androidu. Takže vim, mc a tmux jsou pro mě nepřekonané tui aplikace.
Mám rád TUI - ale dělat v surovém ncurses asi bych nikomu nedoporučil - je to 30 let staré API, kde jakmile se člověk trochu odchýlí od doporučených postupů, tak to začne dělat paseku. Některé komponenty nefungují jsou líné při větších obsahu, jiné jsou zase beznadějně zastaralé.
Dají se v tom udělat hezké věci - https://github.com/okbob/ncurses-st-menu https://github.com/okbob/pspg ale dá to dost práce. Na druhou stranu, když už se to podaří, tak pak aplikace běží všude - od macu, Linux, a teoreticky by měla být spustitelná i na windows.
Pár knihoven by určitě pomohlo. Jelikož jsem Cčkař, tak mi prompt toolkit nepomůže, ale vzhledem k rozšíření Pythonu, tak to má ohromný smyl. Vznikají i hezké aplikace - https://github.com/dbcli
Jinak zajímavý framework pro C++ https://github.com/gansm/finalcut
Všechno to jsou ale dost masivní frameworky - což jde trochu i proti původnímu konceptu ncurses. Bohužel na něm je vidět, že na některé věci, které by hodně pomohly (podpora menu, podpora formulářů) nikdo desetiletí nesáhl. Asi se čekalo, že přijdou další nadstavby jako CDK, ale to se neujalo, a nic dalšího nepřišlo. Ne nepřekvapivě - pozornost se soustředila na XWindows GUI a investovalo se d o Qt a GTK.
Na druhou stranu díky za to, co máme. Když člověk vidí apky na AS400 a podobných vykopávkách, tak Linux je zlatej.
Kdysi vznikaly pro Linux pěkné aplikace s TUI, například editory a IDE s menu, dialogy, nezávislými okny apod. Ty byly inspirovány (předpokládám) Borlandími IDEčky, asi i VisualBasicem:
eFTE , JED, RHIDE, SETEDIT:
http://fte.sourceforge.net/shots.html
https://mojefedora.cz/textove-editory-ve-fedore-2-cast/#2.-efte
https://mojefedora.cz/textove-editory-ve-fedore-1-cast/#jed
http://www.rhide.com/pics/menues.gif
http://setedit.sourceforge.net/#scrnsht
Jsou založeny na různých TUI knihovnách (asi nejdůležitější je z toho S-lang s návazností na curses, pro RHIDE a SETEDIT přepsali TurboVision), ale zdá, se, že se vývoj nějak zaseknul. Možná by se ty knihovny daly "resuscitovat" a třeba vytvořit něco zajímavého a užitečného.
Třeba i oprášít TurboVision a udělat ho moderněji?
http://tvision.sourceforge.net/
(netuším kolik je to práce, protože kdysi se mi TV líbílo, ale od té doby uběhla spousta času, máme jiné jazyky i způsob programování)
Díval jsem se klony TV a vypadá to, že to umřelo. Tenhle framework pro Rust vypadá živě
https://github.com/gyscos/Cursive
TUI scéna trochu žije, ale skoro nic není univerzální - vše je spojené s jedním jazykem - a tudíž penetrace je a bude malá. A jak už jsem zmínil - všechno jsou to frameworky. Proč, když potřebuji zobrazit menu nebo jeden dialog musím používat framework?
Ncurses má knihovnu menu (která se ale hodí jen na autocomplete) a forms. Obě se dají relativně jednoduše používat, ale ani jedna nepodporuje myš. Náhradu za menu z ncurses jsem napsal - https://github.com/okbob/ncurses-st-menu . Během let bych chtěl napsat alternativu forms. Je to čisté neobjektové C, takže by se to mělo jednoduše používat z libovolného jazyka, který má binding na C.
Určitě by se dalo TV oživit - to terminálové IDE pro fast pascal fp
vypadá hezky a zdrojáků to má pár tisíc řádků. C++ klony které jedou z Borlandích zdrojáků - to už je asi historie.
neni k Tvym potrebam nejbliz https://pagure.io/newt ? Popr. se podivat na dialog a nespoustet ho pres exec, ale primo z cecka?
Rhide, to mi něco připomíná, v tom jsem kdysi programoval v DOSu v DJGPP, mělo to extender a pamatuji si na ten úžas a nadšení, že jsem najednou mohl alokovat víc než 64 kB paměti :-). Ale brzy na to jsem přestoupil do Linuxu a s tím jsem Rhide, Far a spol opustil. Jen toho Vimu se stále držím.
Slang používá (nebo používal) i MC.