KDE gør det selv: Byg dine egne værktøjer

DCOP

Desktop COmmunication Protocol, DCOP, er en letvægts mekanisme for kommunikation mellem processer. DCOP tillader at brugeren kommunikerer med programmer som for øjeblikket kører. KDE sørger for to programmer til at udnytte DCOP: dcop, et kommandolinjeprogram, og kdcop, et program med grafisk grænseflade.

Nogle bemærkninger om at bruge dcop:

  • dcop [vælgare] [program [objekt [funktion [arg1] [arg2] ... ] ] ]

  • Programmer som kan åbne mere end et vindue samtidigt gang listes som <program>-processid.

  • Alle flag er versalfølsomme. setFullScreen og setfullscreen er to forskellige funktioner.

  • Tegnet * fra regulære udtryk kan bruges i program- og objektargumenter.

    % dcop kon*
    konqueror-16006
    konsole-8954
    

Nogle eksempler på kommandoer og deres uddata er nedenfor:

% dcop konsole*
konsole-8954

En Konsole kører med proces-id 8954.

% dcop konsole-8954
KBookmarkManager-.../share/apps/kfile/bookmarks.xml
KBookmarkManager-.../share/apps/konqueror/bookmarks.xml
KBookmarkNotifier
KDebug
MainApplication-Interface
konsole (default)
konsole-mainwindow#1
ksycoca
session-1
session-2
session-3
session-4

Her ser du at fire sessioner kører.

% dcop konsole-8954 konsole
QCStringList interfaces()
QCStringList functions()
int sessionCount()
QString currentSession()
QString newSession()
QString newSession(QString type)
QString sessionId(int position)
void activateSession(QString sessionId)
void nextSession()
void prevSession()
void moveSessionLeft()
void moveSessionRight()
bool fullScreen()
void setFullScreen(bool on)
ASYNC reparseConfiguration()

Her er valgmulighederne for Konsoles hovedprogram.

% dcop konsole-8954 session-1
QCStringList interfaces()
QCStringList functions()
bool closeSession()
bool sendSignal(int signal)
void clearHistory()
void renameSession(QString name)
QString sessionName()
int sessionPID()
QString schema()
void setSchema(QString schema)
QString encoding()
void setEncoding(QString encoding)
QString keytab()
void setKeytab(QString keyboard)
QSize size()
void setSize(QSize size)

Her er valgmulighederne for den første session, session-1.

% dcop konsole-8954 konsole setFullScreen true

Dette stiller Konsole til fuldskærmstilstand.

Når der er mere end et program eller objekt, hvilket skal man bruge? Findes en reference?

% echo $KONSOLE_DCOP
DCOPRef(konsole-7547,konsole)

% dcop $KONSOLE_DCOP newSession
session-6

% dcopstart konsole
konsole-9058


#!/bin/sh
konsole=$(dcopstart konsole-script)
session=$(dcop $konsole konsole currentSession)
dcop $konsole $session renameSession Local

session=$(dcop $konsole konsole newSession)
dcop $konsole $session renameSession Remote

session=$(dcop $konsole konsole newSession)
dcop $konsole $session renameSession Code
dcop $konsole $session sendSession 'cd /my/work/directory'

KDialog

KDE gør det selv: At bygge egne værktøjer

Du kan bruge KDE's dialoger fra dine egne scripter, til at kombinere de kraftfulde skalscripter i UNIX® med den enkle brug af KDE.

kdialog --msgbox 'Du har et nyt brev!'
kdialog --title 'Nyt brev' --msgbox 'Du har et nyt brev!'

Delen Kdialog kan erstattes via flaget --caption

kdialog --title 'Nyt brev' --msgbox 'Du har et nyt brev!' --dontagain minfil:minnøgle

Gemmer om den skal vises igen i $KDEHOME/share/config/minfil ved at indtaste følgende linjer i filen:

[Notification Messages]
mykey=false

I stedet for --msgbox kan du også bruge --sorry og --error hvis det er passende. Du kan for eksempel bruge kdialog --sorry 'Netværket kan ikke nås' eller kdialog --error 'Postkassen kan ikke åbnes'.

Det er også muligt at oprette meddelelsesfelter som accepterer svaret ja eller nej.

kdialog --yesno 'Vil du forbinde
til internettet?' echo $?
ReturværdiBetydning
0Ja, o.k., Fortsæt
1Nej
2Annullér

Sørg for at gemme resultatet i en variabel hvis du ikke bruger det direkte. Næste kommando fylder $? med en ny værdi. Du kan også bruge --dontagain her, husker det brugerens valg og returnerer det næste gang uden at vis dialogen igen.

Yderligere varianter er:

--warningyesno

som --yesno men med en anden ikon

--warningcontinuecancel

Med knapperne Fortsæt og Annullér.

--warningyesnocancel

Med knapperne Ja, Nej og Annullér. For eksempel:

kdialog --warningyesnocancel 'Vil du
gemme ændringerne?'
kdialog --inputbox "Indtast dit navn:" "Dit navn"

Resultatet skrives ud på standardudskriften. For at lægge det ind i en variabel kan du bruge name=$(kdialog --inputbox "Indtast dit navn:" "Dit navn"). Det sidste argument er valgfrit. Det bruges for at udfylde dialogen i forvejen.

password=$(kdialog --password "Indtast dit kodeord:")

Tilvalget --dontagain virker ikke med --inputbox eller --password

Der er to dialoger som lader brugeren gøre et valg i en liste:

--menu

Lader brugeren vælge et objekt i en liste.

--checklist

Lader brugeren vælge et eller flere objekter i en liste.

city=$(kdialog --menu "Vælg en by" a London b Madrid c Paris d Berlin)

$city blir a, b, c eller d.

city=$(kdialog --checklist "Vælg byer" a London off b Madrid on c Paris on d Berlin off)

Madrid og Paris er standard. Resultatet med Madrid og Paris valgte bliver "b" "c".

Hvis du tilføjer flaget --separate-output, placerer den b og c på hver sin linje, hvilket gør det enklere at behandle resultatet.

file=$(kdialog --getopenfilename $HOME)
file=$(kdialog --getopenfilename $HOME "*.png *.jpg|Image Files")
file=$(kdialog --getsavefilename $HOME/SaveMe.png)
file=$(kdialog --getexistingdirectory $HOME)