Kletby

Curses je název softwarové knihovny umožňující v Unixu vývoj prostředí na celou obrazovku v textovém režimu bez ohledu na použitý počítačový terminál a pro všechny typy aplikací.

Pochází z distribuce BSD systému Unix, ve které byl použit pro textový editor vi a hru Rogue .

Pomocí kleteb mohou programátoři navrhovat aplikace založené na textovém režimu, bez ohledu na specifika každého terminálu. Knihovna nadávek se stará o odesílání příslušných řídicích znaků na monitor, zatímco je program spuštěn, a snaží se optimalizovat, co může, když je to možné.

Pokud zůstanete v textovém režimu, ale použijete jej k přímému adresování na jakékoli místo na obrazovce, odpadá vám také potřeba starat se o správce grafiky, který používá mnoho z Linuxu nebo Unixu.

Několik instalátorů Linuxu v 90. letech používalo textový režim na celou obrazovku, počínaje slavným Slackwarem .

Výhody

S kletbami je možné psát kdykoli v libovolné poloze na obrazovce, což usnadňuje sledování průběhu programu za méně únavných podmínek než v režimu toku typu psacího stroje. Tímto způsobem můžete také provádět zadávání, například vytvářet jednoduché formuláře v textovém režimu nebo dokonce úplně simulovat terminál na celou obrazovku, například 3270 . Varianty dokonce existují pro simulaci Minitelu .

Úkon

Hlavní funkce jsou velmi jednoduché:

initscr() inicializuje režim celé obrazovky.

move(ligne, colonne) prakticky posuňte kurzor

addstr(chaîne) napište řetězec, kde je kurzor

refresh() zarovná skutečnou obrazovku a virtuální zobrazení

endwin() ukončí režim celé obrazovky a obnoví obrazovku do stavu, ve kterém byla před zadáním.

Curses / ncurses je v některých distribucích nainstalován standardně. Na jiných, jako je Ubuntu Studio nebo Mint , je třeba nainstalovat takhle pro gcc 5 z konzoly sudo apt install libncurses5-dev.

Jednoduchý příklad

Následující velmi jednoduchý program počítá se slova francouzského slovníku / usr / share / dict / francouzský z GNU / Linux podélným .

// Se compile par exemple avec gcc cursef.c -lcurses && ./a.out #include <curses.h> #include <string.h> int c; // colonne ((0,0) en haut à gauche) int count[128], total; // à 0; comptage des mots de chaque longueur int main() { WINDOW* win; FILE* infile; char d, xxx[128], out[128]; infile = fopen("/usr/share/dict/french", "r"); // Dictionnaire win = initscr(); // Initialisation cbreak(); // Ne pas exiger ENTER noecho(); // Pas d'écho demandé clear(); // Fenêtre à blanc refresh(); // Exécution de ce qui a été préparé dans la fenêtre int octets, glyphes; // En unicode, quelques glyphes sont multi-octets while (!feof(infile)) { fgets(xxx, 100,infile); // Bidouillage pour unicode (car glyphes multioctets) octets=0; glyphes=0; while (xxx[octets]) { if ((xxx[octets] & 0xC0) != 0x80 ) ++glyphes; ++octets; } --glyphes; ++count[glyphes]; // négliger retour ligne // Fin du bidouillage sprintf(out, "%7d %s", count[glyphes], xxx); move(glyphes-1,0); addstr(out); // préparer la ligne dans la fenêtre refresh(); // afficher la fenêtre ++total; } sprintf(out, "%7d mots au total", total); move (26,0); addstr(out); refresh(); d=getch(); // Attente d'un caractère pour effacer fenêtre et sortir endwin(); // curses call to restore the original window and leave }

Přenosnost

Využití funkcí knihovny curses ve Windows je možné díky použití knihovny PDcurses, která je založena na ncurses . To není identické, ale umožňuje vám používat většinu funkcí. Například s jazykem Python a od jeho verze 3.7 to lze provést jednoduše instalací balíčku windows-curses.

Alternativní

Přímé odesílání příkazů pro pohyb kurzoru do terminálu (stejně jako změna barvy a pozadí znaků) je také možné na většině obrazovek znaků, které obecně respektují sekvence ANSI zvané CSI ( Control Sequence Introducer). ), Kompatibilní s VT100 . V praxi používání kurzů usnadňuje údržbu programu (použití CSI zůstává ve skriptech nevyhnutelné). Navíc skutečnost, že nový displej probíhá s prokletími pokaždé refresh()a ne pokaždé, když je na terminálu proveden nový záznam, může uživateli poskytnout lepší vizuální zážitek tím, že se jednou zobrazí celá obrazovka. to.

Poznámky a odkazy

  1. Simulace terminálu 3270 s kletbami .
  2. Minicurses: simulace Minitelu „à la curses“ .
  3. V Kletby a ncurses knihovny neliší funkčně zde
  4. zvláště pokud není potřeba rozlišovat mezi počtem bytů a počtem znaků v unicode . To by bylo snadné převedením souboru z kódování UTF-8 na kódování ISO-8859-15, kde se každý francouzský znak vejde na jeden bajt ( iconv -f UTF-8 -t ISO8859-15 /usr/share/dict/french >xxx). Soubor ve verzi z dubna 2016 poté přechází z 1 542 061 znaků na 1 480 824 znaků se striktně stejným obsahem. Relativně nízká pokuta Unicode (4%) za svobodu, kterou přináší, přispěla k jeho rychlému přijetí.
  5. „  Podpora standardního modulu nadávek v systému Windows  “ na adrese https://pypi.org ,16. října 2019

Podívejte se také

Související články

  • ncurses , nástupce kletby.
  • PDcurses , proklíná verzi ve veřejné doméně.

Bibliografie

  • (en) John Strang, Programming with curses , O'Reilly ( ISBN  0-937175-02-1 ) .

externí odkazy