&kommander;i põhitõed

Tamara King

     tik@acm.org

Eric Laffoon

     sequitur@kde.org

Marek Laane

    bald@smail.ee

Tõlge eesti keelde

# &kommander;i põhitõed

## Kontseptsioonid

&kommander; sai alguse visuaalse disaini tööriistade maailmas mõneti revolutsiooniliseks osutunud lihtsat kontseptsioonist. Tavaliselt võimaldavad need tööriistad luua dialooge, vahel ka peaakna liidest. Peaakna liides on aga juba koht, kus reeglina esinevad menüüd, tööriistaribad, olekuriba ja rakendus ise ka muidugi. Dialoogid on alamaknad, millel tavaliselt ei ole ei menüüd, tööriistariba, olekuriba ega ka mingit 'rakenduseala', ning kannavad sellist nime seepärast, et nende eesmärk on pidada dialoogi või vahendada sulle mingit mingit põhirakenduse edastatavat infot. Dialoogi elemente nimetatakse vidinateks ja sul tuleb oma programm nende vidinatega siduda. &kommander; läheneb asjale aga hoopis teisest küljest. Me kasutame siin dialoogis vidinatega seostatud teksti põhimõtet. Algselt kandiski see nimetust seostatud tekst, nüüd nimetame seda lihtsalt &kommander;i tekstiks. Vidinad &kommander;i dialoogides võivad sisaldada viidetena teiste vidinate sisu, samuti võivad vidinad lasta oma sisu viidata spetsiaalsete eride abil, mille näiteks võib olla @widgetText. Erid on &kommander;i spetsiaalse tähendusega käsud. Kui oled näiteks loonud dialoogi kahe tekstikastiga ning andnud neist esimesele nimeks Eesnimi ja teisele Perekonnanimi, võid luua nupu ja määrata selle &kommander;i tekstiks Minu nimi on @Eesnimi @Perekonnanimi. Sul tuleb eesnime- ja perekonnanimevidinas määrata @widgetText. Oli ju arusaadav? Me peame andma &kommander;ile korralduse viidata neis olevale tekstile. Siis võid selle käivitada näiteks Konsoolis ja peaksid nägema väljundina just seda stringi. Eesnime viitame siis nii: @Eesnimi -> hangib vidina nimega Eesnimi(@Eesnimi) -> @widgetText -> hangib tekstikasti vidina sisu. Nii et kui @Eesnimi tagastab Marek, siis @Eesnimi -> @widgetText -> Marek.

See on &kommander; lihtne ja selge tuum. Aga huvitavaks läheb asi siis, kui sa sellega midagi ette võtad. Kõigepealt tasuks märkida, et tavalistest programmeerimiskeeltepõhistest tööriistadest erinevalt ei vaja &kommander; nende operatsioonide defineerimiseks programmeerimislauseid. See muudab &kommander;i arendajatele väga mugavaks vahendiks. Lõppkasutajale on see märksa lihtsam kui programmeerimiskeele reegleid pähe tampida. Ja kõigile tähendab see seda, et saab keskenduda oma ülesandele, ilma et peaks kogu aeg käsiraamatust järele vaatama, kas asi ikka sai õigesti kirja. Tavaliselt küsivad inimesed &kommander;it või mõnda muud taolist töövahendit nähes: Milleks seda kasutada saab? Nagu selgub, on stringide käsitlemisega tegemist tegelikult sisuliselt kõikjal.

Mida &kommander; suudab siis teha? Toome siin ära vaid põhilised operatsioonid. &kommander; suudab:

1. Edastada stringid väljakutsutavale programmile standardväljundi (stdout) kaudu.

2. Kutsuda välja käivitatava programmi.

3. Suhelda &DCOP;-i vahendusel &kde; programmidega.

Kui sa ei ole just programmeerija, soovid vahest asja ka nii-öelda inimlikus keeles teada saada. Esiteks: kui käivitad &kommander;i konsoolist, on konsool väljakutset esitav programm. Siin tekib ema-lapse ehk siis eellase-järglase suhe. Konsooli saadetakse sõnum järglasprogrammi standardväljundi (stdout) vahendusel, mida nimetatakse nii sellepärast, et on olemas ka veaväljund. See pakub huvi seepärast. et mitmed programmid, näiteks &quantaplus;, kasutavad standardväljundit info hankimiseks programmidelt, mis nende seest on käivitatud. Seega võivad &kommander;i dialoogid saata oma tekstistringid otse &quantaplus; redaktorisse, kui neid on välja kutsutud &quantaplus;-ist. See tähendab, et &kommander;i dialoogid sobivad väga hästi programmide laienditeks.

Teine juhtum on käivitatava faili väljakutsumine. Kõik sinu süsteemis töötavad programmid on iseenesest käivitatavad failid. Isegi skripti paneb käima skripti interpretaator, nii et tehniliselt võttes ka see käivitatakse. &kommander; võib käske käivitada sama edukalt, kui seda saab teha konsoolilt, kuigi siin võid sa seda teha lausa menüüst. Kui näiteks soovid avada &GIMP;-i, peab sul olema nupp, sellel string gimp ning see tuleb asetada erisse, näiteks @exec(gimp). Ja seda kasutades &GIMP; ka tõepoolest avaneb. Kasutada võib ka exec ls -l, aga väljundit näed ainult siis, kui töötad konsoolil.

Kolmas juhtum on veelgi huvitavam. &DCOP; tähendab lühendatult &kde; töölaua kommunikatsiooniprotokolli (Desktop COmmunication Protocol) ja on üks äraütlemata võimas vahend. Käivita programm dcop ja tee sellega veidi tutuvust. Saad peagi selgeks, et kõik &kde; standardite kohaselt loodud rakendused kasutavad vähemalt mingil määral &DCOP;-i ja mis on eriti hästi loodud, need kohe päris palju. &DCOP; lubab esitada mis tahes infopäringuid, määrata vidinate väärtusi ja nii edasi ja nii edasi. Käesolevas käsiraamatus on ka omaette &DCOP;-ile pühendatud osa. &kommander; võib saata &DCOP; väljakutse igale &kde; programmile ning vastupidi - &DCOP;-i abil saab seda juhtida teistest programmidest. Õigupoolest saab käsurealt &DCOP; väljakutse saata suvalisele &kde; programmile. Mis siis meie juhtumi puhul eriline on? Eriline on see, et kui soovid anda terve hulga käske, siis käsurida kasutades näed peagi, et &DCOP; sobib palju paremini lühikeste käskude jaoks, võib aga tükk aega viivitada, kui peab näiteks sadu kordi mingit silmust läbima. Seepärast kasutab &kommander; eri @dcop, mis on ligikaudu 1000 korda kiirem! Et &kommander; võib &DCOP; väljakutseid nii saata kui saada, võib &DCOP;-i kasutada &kommander;i skriptideks. Seepärast on meil ka kohalik &DCOP; eri @ldcop, mis võimaldab käsku anda päris vähese kirjutamisvaevaga.

Siinräägitu ei ole kaugeltki veel kõik isegi mitte &kommander;i põhiomaduste kohta, aga juba sellest peaks piisama mõistmaks, kuidas asi töötab, et edaspidine jutt ei tunduks täiesti arusaamatuna. Rakendus pakub mõistagi palju enam. Signaalide ja pesadega käsitleb &kommander; sündmusi. Sündmus tähendab programmis põhimõtteliselt seda, et midagi juhtus - näiteks loodi vidin või muutus tekst. Need muudatused väljastavad signaali, sina aga võid signaalid ühendada pesadega, mis võtavad omakorda midagi ette, kui toimub sündmus. Üks selle kasutamisviise &kommander;is on &kommander;i teksti järglane populatsioonitekst. Populatsioonitekst populeerib ehk asustab väljakutse peale vidina. Nagu &kommander;i tekst, võib ka populatsioonitekst sisaldada tekstistringe või skripte.

See peaks andma nüüd küll mingi esialgse aimu &kommander;ist. Me oleme püüdnud hoida eride arvu vähesena ja kasutada ohtralt ära &DCOP;-i võimalusi. Nii on meil võimalik hoida &kommander; võimalikult ühtse ja kompaktsena. Sa avastad kindlasti, et &kommander;is saab tegelikult kasutada mis tahes skriptikeelt ja ühes dialoogis võib neid isegi mitu korraga kasutusele olla. Edaspidi oletame, et sa oled siintoodud konptseptsioonide ja mõisteteta juba tutvunud. Lisaks sellele aitavad ka näited ja õppematerjalid mõista täielikumalt &kommander;i võimalusi.

&editor;

## Executor

Executor ehk kmdr-executor käivitab &kommander;i skriptid. See laeb `.kmdr`-failid ning tekitab dünaamiliselt täisfunktsionaalse dialoogi.

Alates versioonist 1.3 hoiatab Executor, kui skript ei ole käivitatav. See on täiendav turvaomadus, mille eesmärk on panna kasutaja mõtlema võimalikele pahadele tagajärgedele, kui käivitatakse mitteusaldusväärsest allikast pärit skript. Kasutaja kinnitusel käivitatakse dialoog või, kui ta usaldab allikat, saab muuta skripti käivitatavaks ning vabaneda täielikult hoiatusest.

Versioon 1.3 toetab -kmdr-skriptifailide alguses süntaksit #!/asukoht/kmdr-executor (asukoht võib siin olla selline, nagu seda näeb ette sinu süsteem). Kui muuta sellised failid käivitatavaks, saab neid käsurealt käivitada nagu iga muud käivitatavat rakendust, ilma et oleks vaja anda skriptile argumenti kmdr-executor.

Pane tähele, et kui oled lisanud sellise lause faili algusse, ei saa dialoogi enam käivitada ega muuta &kommander;i vanemate vesioonidega.

Soovitatav kasutamine on järgmine:

    #!/usr/bin/kommander

; sel juhul tuleb luua nimeviit kmdr-executor'ilt asukohale /usr/bin/kommander.

Mainitud lause võib lisada dialoogi otse redaktoris, muutes peadialoogi omadusi useShebang ja shebang.

### Executor programmeerijatele

C++ arendajad võivad klassi Instance kasutada ära oma C++ programmides, mis lubab põimida käivitamisfunktsiooni otse rakendusse ilma vajaduseta käivitada välist käivitamisprogrammi. Standardse dialoogi korral on dialoogi loomise kulu minimaalne, kuid näiteks &kde; rakenduse loomisega võib muidugi lausa sekund aega minna.

Teine võimalus on võtta kasutusele kommander_part KReadOnlyPart. Seda KParti saab laadida ja käivitada suvalises &kommander;i dialoogis mõne muu KDE rakenduse sees.

## Dialoogi loomine

Kui soovid teada, kuidas luua dialoogi, lisada vidinaid, kasutada paigutusi ja muuta vidinate omadusi, uuri &Qt; disaineri (versioon 3.x) käsiraamatut. Selle võib avada käsurealt käsuga `designer` või ka peamenüüst.

&kommander;i üks lisavõimalus on Kommanderi teksti seostamine iga vidinaga. Need tekstid on dialoogi käivitatav osa (skript), mis on kirjutatud kas skriptikeeles (vana &kommander;i süntaks) või kasutades &kommander;i sisemist keelt, niinimetatud uut parserit.

Kui soovid täpsemalt teada keele süntaksit, käske ja seda, kuidas kasutada tekstiredaktorit, uuri järgnevaid peatükke ning tutvu näidistega, mis on kaasa pandud &kommander;i lähtekoodiga.

## Käivitusbitt - uus asi versioonis 1.3

Turvakaalutlustel võtsime versioonis 1.3 kasutusele käivitusbiti nõude. Mõned peavad seda kindlasti pikaajalise puudujäägi likvideerimiseks, teised kohutavaks tüliks või isegi hirmutavaks teguriks. Paraku ei ole olemas ideaalset lahendust. Probleem peitub selles, et Kommanderi dialooge võib alla laadida mitmelt poolt ning neid võib saada ka e-kirjaga, nii et sa võid selle eksliku klõpsuga käivitada. Et Kommander võib käivitada shelliskripte, on ta omamoodi eriseisundis. Teised rakendused selliseid takistusi ei sea, kuid nende puhul on vaja nad kõigepealt paigaldada, et neid saaks turvaliselt kasutada. Üksainus skriptirida võib kustutada jäädavalt kogu sinu kodukataloogi. Meie eesmärk on vältida juhuslikku klõpsamist mitteusaldusväärsel dialoogil. Me vabandame ebameeldivuste pärast, aga kahjuks ei ole sellist võimalust, mis rahuldaks isegi arendajaid ning tagaks kasutajale turvalisuse ilma teda häirimata.

See ei takista dialoogi käivitamist, vaid ongi mõeldud häirivaks teguriks. Sellest pääseb mööda, kui failihalduri või shelli abiga määrata failile käivitusbitt. Tee dialoogil Konqueroris paremklõps, vali menüüst Omadused, ilmuvas dialoogis õigustekaart ning märgi ära kastike käivitatav. Nüüd ei takista enam miski dialoogi käivitamist. Kasuta meie veebileheküljel tööriista, mis otsib &kommander;i dialooge, võimaldab neid lähemalt uurida ning valida, kas mõnel või kõigil peaks olema käivitusbitt. Kui soovid kasutada shelli, et muuta kõik kataloogis asuvad &kommander; i dialoogid käivitatavaks, kasuta järgmist käsku:

    chmod u+x *.kmdr

Ära muuda dialooge käivitatavaks, kui sa ei usalda nende päritolu.