Grundlæggende &kommander;

Tamara King

     tik@acm.org

Eric Laffoon

     sequitur@kde.org

&rune.laursen.role;

# Grundlæggende &kommander;

## Koncepter

&kommander; blev oprindeligt designet omkring et simpelt koncept der har vist sig næsten revolutionerende blandt visuelle designværktøjer. Typisk tillader disse værktøjer at man kan oprette dialoger og måske endda hovedvindue-grænseflader. Hovedvindue-grænseflader er naturligvis et programs hovedgrænseflade der typisk indeholder menuer, værktøjslinjer, statuslinje og programarealet. Dialoger er børnevinduerne som typisk ikke har menuer og således navngivet fordi deres formål er at have en dialog eller udveksle information mellem dig og hovedprogrammet. Elementerne i en dialog kaldes kontroller og du kobler dit program til disse kontroller. &kommander; er anderledes pga. sin non-programmatiske natur i denne henseende. Det bruger konceptet om at associere tekst med kontrollerne på dialogen. Til at begynde med kaldtes dette Associeret tekst men kaldes nu &kommander; tekst. Kontroller i &kommander;-dialoger kan indeholde indholdet af andre kontroller gennem en reference og en kontrol kan referere sit eget indhold vha. en Speciel som ser således ud: @kontrolTekst. Specielle er kommandoer med specielle betydning i &kommander;. Så hvis du har oprettet en dialog med to linjeEditorkontroller og navngivet den første Fornavn og den anden Efternavn, kan du oprette en knap og sætte dens &kommander;tekst til Mit navn er @Fornavn @Efternavn. Du vil være nødt til at sætte @kontrolTekst i for- og efternavnskontrollerne, husker du? Vi må fortælle &kommander; at referere til teksten i dem. Du kan køre dette fra en Konsol og den vil så udskrive strengen for dig. Så den vil referere fornavnet sådan her: @Fornavn -> hent kontrollen med navnet Fornavn(@Fornavn) -> @kontrolTekst -> hent indholdet af linjeEditorkontrollen. Så i dette tilfælde returnerer @Fornavn Eric: @fornavn -> @kontrolTekst -> Eric.

Dette er kernen af &kommander;. Det er hvad du kan gøre med disse funktionaliteter der gør det interessant. For det første er det værd at bide mærke i, at sammenlignet med den almindelige fremgangsmåde i et sprogbaseret værktøj, er der ikke behov for programmeringsudtryk i &kommander;, for at definere disse operationer. Dette gør &kommander; hurtig for udviklere. For slutbrugere er det meget simplere end at lære sprogkontruktioner. For alle betyder det at man kan fokusere på opgaven og ikke hele tiden sidde med referencedokumentationen i hånden. I starten, når folk introduceres for et værktøj som &kommander;, er det første spørgsmål altid Hvad kan jeg bruge sådan et lækkert værktøj til? Det viser sig at strengmanipulation bruges sådan ca. overalt.

Så hvad kan &kommander;? Her er en liste kogt ned til de mest grundlæggende funktioner. &kommander; kan:

1. Videregive strenge til et kaldende program gennem stdout.

2. Kald eksekverbare programmer.

3. Brug &DCOP; for at kommunikere med &kde;-programmer.

Hvis du ikke er programmør, vil du måske gerne have en forklaring for lægmand. I den første, hvis du starter &kommander; fra en konsol, så er konsol det kaldende program. Det er et forældre barn forhold der. At sende en besked til en konsol gøre med barnets standardudskrift (sdtout), det hedder sådan fordi der også er fejludskrift. Dette er interessant fordi nogle programmer som &quantaplus; beruger stdout for at modtage information fra programmer de starter. Så &kommander; dialoger kan udskrive deres tekststrenge direkte i &quantaplus;' editor hvis de kaldes fra &quantaplus; Det betyder at &kommander;-dialoger kan være brugbare udvidelser til programmer.

Det andet tilfælde er når man kalder en eksekverbar. Et hvilket som helst program der kører på dit system er eksekverbart. Selv et scriptprogram køres af scriptets fortolker, så teknisk set eksekveres det også. &kommander; kan køre kommandoer ligesom konsollen, selv hvis du kører det fra menuen. Hvis du f.eks. ville åbne &GIMP; ville du have en knap der afleder strengen gimp og putte den i en speciel på denne måde: @exec(gimp). På ingen tid vil du se &GIMP; åbnes når du bruger dette. Du kan også exec ls -l, men du ville kun kunne se uddata når du kører det i en konsol.

Det tredje tilfælde er meget interessant. &DCOP; er kort for &kde;'s DesktopCommunicationProtocol og det er meget kraftigt.Prøv at køre kdcop-programmet og kig lidt på det. Du finder hurtigt ud af at i alle &kde;programmer der er opbygget efter standarderne, har ting der sker med &DCOP; og i de veldesignede sker der rigtig meget. Med &DCOP; kan du sspørge efter al mulig information såvel som at sætte værdier for kontroller og meget andet. Der er et afsnit om at bruge &DCOP; i denne manual. &kommander; kan sende &DCOP; til et hvilket som helst &kde;-program, såvel som at blive kontrolleret af &DCOP;. Faktisk kan du sende &DCOP; fra kommandolinjen til et hvilket som helst &kde;-program. Så hvad er al den snak til for? Sagen er at hvis du vil udføre mange kommandoer, finder du hurtigt ud af at kommandolinjen og &DCOP; er fine til korte kommandoer, men kan give forsinkelser når det f.eks. kaldes fra en løkke et par hundrede gange. Det er derfor &kommander; har en @dcop speciel, fordi den er ca. 1000 gange hurtigere. Fordi &kommander; kan sende og modtage &DCOP;, kan &DCOP; bruges til at scripte &kommander;. Det er også derfor vi har en lokal &DCOP;-speciel @ldcop, som tillader dig at skrive meget mindre for at bruge en kommando.

Er dette er alle kernekoncepterne i &kommander;? Nej men det burde være en hjælp til dig for at finde ud af hvordan det virker, så det som vi har beskrevet ikke lyder som rent volapyk. Der er et par koncepter mere. &kommander; bruger signaler og slot til at håndtere begivenheder. En begivenhed i et program betyder sådan set bare der skete noget som oprettelsen af en kontrol eller en ændring af noget tekst. Disse ændringer udsender signaler og du kan forbinde disse signaler til en modtagende slot som så gør et eller andet når begivenheden sker.En måde at bruge &kommander; er søsteren til &kommander;s Tekst, BefolkningsTekst BefolkningsTekst, befolker en kontrol når den kaldes. Ligesom &kommander;Tekst, kan BefolkningsTekst indeholde tekststrenge eller scripter.

Nu har du fået lært de simple ting i &kommander; så du kn komme i gang. Vi forsøger at holdet antallet af specielle på et lavt niveau og vi bruger &DCOP; rigtig meget. Idéen er at vi vil holde &kommander;s fordele så konsistente og strømlinede som muligt. Du vil opdage at du kan indarbejde et hvilket som helst scriptsprog i &kommander; når behovet opstår og endda flere scriptsprog i en dialog. Resten af informtionen i dette dokument antager at du er bekendt med de her præsenterede koncepter og udtryk. Eksemplerne og gennemgangene er også meget brugbare når man skal forstå hvad &kommander; kan.

&editor;

## Eksekutoren

Eksekutoren der hedder kmdr-executor, kører &kommander; scripter. Den indlæser `kmdr`-filer og producerer dynamisk en fuldt funktionel dialog.

### Eksekutor for programmører

C++-udviklere kan nemt bruge KmdrDialogInstance-klassen i deres C++-programmer, så eksekveringsfunktionaliteten er indlejret i deres program. Dette gør det overflødigt at køre et eksternt eksekveringsprogram. For almindelige dialoger, er omkostningerne ved dialogoprettelsen minimal, men oprettelsen af &kde;-applikationen kan medføre at dialogen forsinkes en smule.

## At oprette en dialog