Vi editor WYSIWYG?

Noi folosim vi ca să edităm pagini Web.

Péter Csaba

În cele ce urmează, încerc să vă prezint modul în care putem transforma editorul vi într-un editor WYSIWYG, de HTML. Pentru cei care nu sunt familiari cu editoarele de texte, WYSIWYG este prescurtarea de la „what you see is what you get“.

De multe ori, am fost nevoit să schimb câte ceva într-o pagină HTML, o adresă, un număr de telefon, sau să introduc o imagine, după care, de fiecare dată, trebuia să reîncarc pagina ca să văd schimbările efectuate. Mult mai elegant ar fi fost ca după modificarea fișierului HTML, schimbările să se producă automat și în browser.

Ideea care mi-a venit pentru rezolvarea problemei era să scriu un program care verifică permanent un fișier iar când aceasta se schimbă, programul numit atchange lansează o comandă. Trebuie să menționez că programul rulează doar sub UNIX și a fost testat cu RedHat 4.2.

Atchange foo date

Programul este scris în limbajul Perl și apelat cu parametri foo și date. Acesta verifică momentul când se schimbă fișierul foo, și de fiecare dată când acest eveniment se produce afișează data. În listingul 1 se află sursa programului, care după cum vedeți este foarte scurt. În prima linie comunicăm sistemului interpretorul folosit pentru lansarea acestui program, iar în liniile 5 și 6 citim parametri utilizați de program. În linia 12 putem observa funcția stat care returnează toate datele disponibile despre fișierul primit ca parametru. Rezultatul va fi un tablou cu următoarele date: numărul device-ului din sistemul de fișiere, numărul I-nodului, modul de acces (rwx), numărul hard linkurilor la fișier, numărul ID al proprietarului fișierului, GID, identificatorul de device (numai pentru fișiere speciale), dimensiunea fișierului în bytes, timpul până la ultima accesare a fișierului (se socotește de la 00:00 Ianuarie 1, 1970 GMT), timpul până la ultima modificare, timpul de la schimbarea inodului, dimensiunea blocului folosit de sistemul de fișier, numărul de blocuri alocate.

Trucuri cu Netscape

Navigând pe Internet, am aflat că se pot da instucțiuni din linia de comandă browserului Netscape care a fost deja pornit. O comandă de genul netscape-remote 'openURL(http://www.netsoft.ro)' ar cauza ca Netscape-ul, care era deja pornit, să ne afișeze pagina Netsoft-ului. (Dacă în momentul lansării acestei comenzi nu rulează programul Netscape, atunci această comandă va afișa un mesaj de eroare.) Putem afla mai multe comenzi ce se pot da Netscape-ului navigând la adresa http://home .netscape.com/newsref/std/x-remote.html.

Până acum totul pare perfect. Spunem programului atchange să urmărească un fișier HTML editat cu vi, de fiecare dată când fișierul se schimbă, atchange putea să spună Netscape-ului să-l reafișeze. Listingul 2 conține exact codul care face acest lucru.

Comentariu de text

Să parcurgem listingul 2 linie cu linie. În linia 1, specificăm sistemului ce program să folosească ca să interpreteze programul nostru. Eu am folosit „bash“, dar și cu alte shell -uri ca ksh, sh ar trebui să funcționeze corect.

Liniile 3 până la 8 sunt comentarii, inclusiv o descriere despre cum să instalăm programul, dacă o punem pe un sistem nou.

Linia 9 era scrisă din reflex, este prezentă din cauze de securitate. Prin teorie această linie se află acolo ca să ne protejeze împotriva cailor Troiani. De exemplu, să considerăm că PATH -ul este setat la PATH= /tmp:/bin:/usr/bin:/usr/local/bin și Johny lucrează și el la un proiect și face un program numit „atchange“, care șterge toate fișierele dintr-un director și îl pune în directorul /tmp. Când scriptul nostru este apelat, în loc să lanseze programul nostru aflat în /bin, se va lansa programul lui Johny și spre surprinderea noastră, se va întâmpla un lucru inexplicabil la prima vedere, adică ni se vor șterge toate fișierele. Dacă setăm corect PATH -ul, această problemă nu mai apare.

Liniile de la 10 până la 32 sunt funcții shell care afișează o descriere despre modul de folosire a programului. Acest mesaj poate fi unul scurt, o descriere sumară tipic UNIX sau unul mai lung.

Linia 12 pare puțin ciudată la prima vedere. $0 conține calea absolută a scriptului care poate fi de forma ./edit.sh sau /home/cpeter/edit.sh iar expresia ${0##*} returnează in $ARGV0 cuvântul care se află după ultimul „/“ adică numele scriptului.

Notați de asemenea că în liniile 13 și 16 mesajul afișat este redirecționat către „standard error“, ca să devină un mesaj de eroare. Mulți programatori fac acest lucru în programele de C, dar neglijează acest lucru când este vorba de scripturi shell.

Liniile 34 până la 63 încapsulează o pagină HTML inițială, care ne va apare în cazul în care edităm un fișier inexistent.

Linia 65 ne aduce partea principală a programului. Începem prin a verifica dacă programul a fost apelat corect de la linia 65 până la linia 68, după care facem o expansiune de parametru ca numele fișierului să fie intr-o formă standard. După liniile 70 până la 75, $html va conține calea absolută a fișierului al cărui nume se termină cu .html.

Pentru simplificare sau pentru a scrie mai puțin liniile 72 până la 75 puteau fi scrise și ca o simplă comandă test "${html#/}" ="$html" && html=$PWD/$html dar ar fi fost mult mai greu de înțeles.

Linia 77 verifică dacă fișierul există sau nu. In cazul în care fișierul nu există, creează un fișier HTML inițial folosind funcția descrisă mai înainte.

Linia 79 spune Netscape -ului, care deja rulează să afișeze versiunea curentă a fișierului $html. În linia imediat următoare specificăm programului atchange să urmărească fișierul $html, și când acesta se schimbă să dea de știre Netscape -ului că fișierul trebuie recitit.

La sfârșit, pornim editorul, folosind încă o dată expansiunea de parametru. De data aceasta pornim vi -ul, doar în cazul în care nu am specificat un alt editor în variabila $EDITOR. Aceasta vă dă posibilitatea să folosiți și programul joe pentru a edita fișiere HTML, dacă chiar doriți.

Liniile 84 și 85 ne asigură o ieșire curată din program. Kill 0 va opri programul atchange și wait va aștepta până când acesta se oprește înainte de a ieși din script, eliminând astfel apariția unor procese numite zombie.

În final, dar nu în ultimul rând, linia 26 ilustrează un mic, dar folositor, principiu de design: întotdeauna comentariile negative, plângerile trebuie direcționate la altcineva.

La ce folosește?

Bine, acum avem ceva care ne lasă să folosim vi -ul ca un editor HTML WYSIWYG: Și ce dacă? Desigur, cei care folosesc FrontPage -ul pentru crearea unor pagini HTML, nu vor folosi de acum încolo vi -ul.

În primul rând, am vrut să vă prezint câteva idei și sfaturi folositoare, să creez ceva folositor și să o fac din plăcere.

Cei care doresc să vadă cum funcționează aceste programe le pot găsi la adresa http://www.uttgm.ro/~cpeter/atchange.


BYTE România - ianuarie 1998


(C) Copyright Computer Press Agora