docs.kde.org
KDE DIY - Construisez vos propres outils
Précédent
Suivant

KDE DIY - Construisez vos propres outils

DCOP

Desktop COmmunication Protocol, DCOP (protocole de communication du bureau) est un mécanisme léger permettant la communication inter-processus. DCOP permet à l'utilisateur d'interagir avec les applications qui s'exécutent actuellement. KDE fournit deux programmes pour tirer parti de DCOP : dcop, un programme en ligne de commande et kdcop, un programme d'interface graphique (GUI).

Voici quelques remarques sur l'utilisation de dcop :

  • dcop [options] [application [object [function [arg1] [arg2] ... ] ] ]

  • Les applications qui peuvent ouvrir plusieurs fenêtres à la fois seront répertoriées sous la forme d'un PID d'<application>

  • Tous les arguments sont sensibles à la casse. 'setFullScreen' et 'setfullscreen' sont deux fonctions différentes.

  • Le jeton (token) de l'expression rationnelle * peut être utilisé dans l'application et les arguments de l'objet.

    % dcop kon*
    konqueror-16006
    konsole-8954
    

Voici quelques exemples de commandes et leur sortie :

% dcop konsole*
konsole-8954

Une Konsole s'exécute avec un PID de 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

Vous voyez ici qu'il y a quatre sessions actives.

% 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()

Voici les options du programme Konsole principal.

% 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)

Voici les options de la première session, session-1.

% dcop konsole-8954 konsole setFullScreen true

Cette commande place Konsole en mode plein écran.

Quand il y a plusieurs applications/objets, lequel devrez-vous utiliser ? Avez-vous une référence ?

% 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 DIY - Construisez vos propres outils

Vous pouvez utiliser les boîtes de dialogue KDE depuis vos propres scripts pour combiner la puissance du scriptage shell d'UNIX® à la facilité d'utilisation de KDE.

kdialog --msgbox 'Vous avez de nouveaux messages !'
kdialog --title 'Nouveaux messages' --msgbox 'Vous avez de nouveaux messages !'

Le composant KDialog peut être remplacé par l'option --caption

kdialog --title 'Nouveaux messages' --msgbox 'Vous avez de nouveaux messages !' --dontagain myfile:mykey

Enregistre ce qu'il faut ou non afficher à nouveau dans $KDEHOME/share/config/myfile (en insérant dans ce fichier les lignes suivantes :

[Notification Messages]
mykey=false

À la place de --msgbox, vous pouvez également faire appel à --sorry et --error, comme approprié. Par exemple, vous pourriez utiliser kdialog --sorry 'Le réseau est inaccessible' ou kdialog --error 'Impossible d'ouvrir la boîte aux lettres'.

Il est également possible de créer des boîtes de messages qui acceptent une réponse oui ou non.

kdialog --yesno 'Voulez-vous vous connecter
à l'Internet ?' echo $?
Valeur de retourSignification
0Oui, OK, Continuer
1Non
2Annuler

Veillez à enregistrer le résultat dans une variable si vous ne l'utilisez pas directement, la prochaine commande complète $? avec une nouvelle valeur. Vous pouvez faire appel à --dontagain ici également, car elle retient le choix de l'utilisateur et le retourne les fois suivantes sans jamais plus afficher la boîte de dialogue.

Les autres variations sont :

--warningyesno

comme --yesno, mais avec une icône différente

--warningcontinuecancel

Avec les boutons Continuer et Annuler.

--warningyesnocancel

Avec les boutons Oui, Non et Annuler. Par exemple :

kdialog --warningyesnocancel 'Voulez-vous
enregistrer les changements ?'
kdialog --inputbox "Saisissez votre nom :" "VotreNom"

Le résultat s'affiche sur la sortie standard. Pour le placer dans une variable, vous pouvez utiliser name=$(kdialog --inputbox "Saisissez votre nom :" "VotreNom"). Le dernier argument est optionnel, il sert à préremplir la boîte de dialogue.

mot_de_passe=$(kdialog --password "Saisissez votre mot de passe :")

L'option --dontagain ne fonctionne pas avec --inputbox ou --password

Il y a deux boîtes de dialogue qui permettent à l'utilisateur de faire un choix dans une liste :

--menu

Permet à l'utilisateur de sélectionner un seul élément dans une liste.

--checklist

Permet à l'utilisateur de sélectionner un ou plusieurs éléments dans une liste.

ville=$(kdialog --menu "Sélectionnez une ville" a Londres b Madrid c Paris d Berlin)

$ville sera a, b, c ou d.

ville=$(kdialog --checklist "Sélectionnez des villes" a Londres off b Madrid on c Paris on d Berlin off)

Madrid et Paris seront présélectionnées. Le résultat avec Madrid et Paris sélectionnées sera "b" "c".

Si vous ajoutez l'option --separate-output, elle placera b etc chacune sur une ligne propre, ce qui rend le résultat plus facile à traiter.

file=$(kdialog --getopenfilename $HOME)
file=$(kdialog --getopenfilename $HOME "*.png *.jpg|Image Files")
file=$(kdialog --getsavefilename $HOME/SaveMe.png)
file=$(kdialog --getexistingdirectory $HOME)
Précédent
Suivant
Sommaire


docs.kde.org